{"id":51397431,"url":"https://github.com/desertthunder/atproto-tools","last_synced_at":"2026-07-04T03:34:27.123Z","repository":{"id":357241458,"uuid":"1234838816","full_name":"desertthunder/atproto-tools","owner":"desertthunder","description":"a rust-y hammer for me to interact with my atproto repo","archived":false,"fork":false,"pushed_at":"2026-05-15T04:45:00.000Z","size":372,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T11:29:07.133Z","etag":null,"topics":["at-protocol","atproto","bluesky","cli","pds","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/desertthunder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-10T17:53:03.000Z","updated_at":"2026-05-15T04:45:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/desertthunder/atproto-tools","commit_stats":null,"previous_names":["desertthunder/atproto-tools"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/desertthunder/atproto-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fatproto-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fatproto-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fatproto-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fatproto-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/desertthunder","download_url":"https://codeload.github.com/desertthunder/atproto-tools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/desertthunder%2Fatproto-tools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35109210,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["at-protocol","atproto","bluesky","cli","pds","rust"],"created_at":"2026-07-04T03:34:25.882Z","updated_at":"2026-07-04T03:34:27.116Z","avatar_url":"https://github.com/desertthunder.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AT Protocol Tools\n\nA set of tools for working with ATmosphere/AT Protocol powered apps, all around a unified,\nclap + owo-colors, posix-compliant CLI, and some browser stuff.\n\n## Config\n\nIn a `config.toml`, set your handle or DID. If you set your handle, the tool will resolve it to a DID and use that for all operations. See `config.example.toml` for the full shape.\n\nBy default the CLI reads `~/.config/atproto-tools/config.toml`. You can pass another path with\n`--config`.\n\n## Commands\n\nSee `docs/*.txt` for manuals.\n\n### Project Structure\n\nSimple CLI + shared Core crate structure, plus a static web graph app.\n\n```sh\napps\n  └── web       # SvelteKit social graph visualizer\n\ncrates\n  ├── cli       # Binary entrypoint\n  ├── core      # Shared code (Client \u0026 Config Management)\n  ├── margin\n  ├── tngl\n  ├── semble\n  ├── bsky\n  └── leaflet\n```\n\n### Margin (at.margin.\\* NSID namespace)\n\nDownload highlights and notes, and construct a local graph of activity, as well, as build\na markdown file of all highlights and notes (for a specific page).\n\n### Semble (network.cosmik.\\* NSID namespace)\n\n### Leaflet (site.standard.\\* + pub.leaflet.\\* NSID namespaces)\n\n### Tangled\n\nGenerated models for the `sh.tangled.string`, `sh.tangled.repo`, and `sh.tangled.issue` lexicons to\nproduce markdown files for strings (TODO).\n\nFor repos and issues, we want to generate task lists (TODO).\n\n### BlueSky (app.bsky.\\* NSID namespace)\n\nFetches and analyzes data from the public Bluesky API (`public.api.bsky.app`).\n\n**`atp bsky follows`** resolves the actor's profile, then paginates through all follows\nvia `app.bsky.graph.getFollows`.\nFor each follow it fetches the latest original post (non-repost, authored by that account)\nvia `app.bsky.feed.getAuthorFeed`, up to 8 concurrent requests with a 50 ms stagger.\n\nResults include handle, DID, profile URL, last post timestamp, and last post URL.\n\nReports are cached as JSON under `~/.cache/atproto-tools/bsky-follows/`, keyed with a\nSHA-256 hash of the actor's DID, handle, follows count.\n\n### BlueSky Social Graph Visualizer\n\nThe web app in `apps/web` is a static SvelteKit social graph visualizer\nfor Bluesky accounts. Enter a handle to map followers, following, mutuals,\nrelationships between rendered nodes, and optional second-hop expansions while\nkeeping the graph shareable through normal routes and query params.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesertthunder%2Fatproto-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdesertthunder%2Fatproto-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdesertthunder%2Fatproto-tools/lists"}