{"id":50787111,"url":"https://github.com/snapsynapse/agentlink","last_synced_at":"2026-06-12T08:33:11.195Z","repository":{"id":363764069,"uuid":"1264784154","full_name":"snapsynapse/agentlink","owner":"snapsynapse","description":"Sync one AGENTS.md to every AI coding tool — symlinks, no codegen","archived":false,"fork":false,"pushed_at":"2026-06-10T07:58:59.000Z","size":1253,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T09:23:25.211Z","etag":null,"topics":["agents-md","agents-md-sync","ai-coding-agents","claude-code","claude-md","cli","codex","developer-tools","dotfiles","gemini-cli","go","symlinks"],"latest_commit_sha":null,"homepage":"https://agentlink.run/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snapsynapse.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"snapsynapse"}},"created_at":"2026-06-10T07:15:06.000Z","updated_at":"2026-06-10T07:59:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/snapsynapse/agentlink","commit_stats":null,"previous_names":["snapsynapse/agentlink"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/snapsynapse/agentlink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snapsynapse%2Fagentlink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snapsynapse%2Fagentlink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snapsynapse%2Fagentlink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snapsynapse%2Fagentlink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snapsynapse","download_url":"https://codeload.github.com/snapsynapse/agentlink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snapsynapse%2Fagentlink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34236551,"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-06-12T02:00:06.859Z","response_time":109,"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":["agents-md","agents-md-sync","ai-coding-agents","claude-code","claude-md","cli","codex","developer-tools","dotfiles","gemini-cli","go","symlinks"],"created_at":"2026-06-12T08:33:09.275Z","updated_at":"2026-06-12T08:33:11.188Z","avatar_url":"https://github.com/snapsynapse.png","language":"Go","funding_links":["https://github.com/sponsors/snapsynapse"],"categories":[],"sub_categories":[],"readme":"# Agentlink\n\n[![Checks](https://github.com/snapsynapse/agentlink/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/snapsynapse/agentlink/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n\u003e **Origin.** Agentlink began as [martinmose/agentlink](https://github.com/martinmose/agentlink) by Martin Mose Facondini (MIT). This repository is the Snap Synapse-maintained standalone continuation, extended with `detect`, `scan`, `hooks`, automatic backup, global-config support, and integration tests. See [NOTICE](NOTICE) for full attribution and lineage.\n\nSync one AGENTS.md to every AI coding tool on your machine, with **zero magic**, just symlinks.\n\nDifferent tools want different files at project root: `AGENTS.md` (OpenAI/Codex, OpenCode), `CLAUDE.md` (Claude Code), `GEMINI.md`, etc. There's no standard, and I'm not waiting for one. **Agentlink** solves the basic need: keep your **personal** instruction files (in `~`) and your **project** instruction files in sync **without generators**. Edit one, they all reflect it.\n\nCreating instruction files is easy with `/init` commands, but keeping them up to date is the hard part -- and expensive too. Good instruction files are often crucial and make a huge difference when using agentic tools. Since they're so important, these files are typically generated with expensive models. Why pay repeatedly to regenerate similar content across different tools?\n\n**Future-proof by design:** We don't know what tomorrow brings in the AI tooling space, but agentlink is ready. New tool expects `.newtool/ai-config.md`? Just add it to your config. Complex nested structure like `workspace/ai/tools/newframework/instructions.md`? No problem. Agentlink automatically creates the directories and symlinks without any code changes needed.\n\n\u003e Scope: **instruction files only**. No MCP `.mcp.json` or chain configs. Simple on purpose.\n\n## GuideCheck\n\nAgentlink publishes a GuideCheck Human-Verifiable Assistant Guide for bounded local review, build, and test work:\n\n- Assistant guide: https://agentlink.run/.well-known/assistant-guide.txt\n- Manifest: https://agentlink.run/.well-known/assistant-guide-manifest.txt\n- Target conformance: GuideCheck Level 4, the highest guide-file level. Level 5 requires a conformant assistant runtime and is not claimed by this repository.\n\nThe guide is also stored at `docs/.well-known/assistant-guide.txt` so the public repository copy can serve as an independent Level 4 hash anchor.\nBefore asking an assistant to perform local Agentlink setup or verification work, verify the guide, read it in full, and approve proceeding under the reported level.\n\n---\n\n## Why Agentlink?\n\n- **One real file, many aliases**: pick a *source* (`CLAUDE.md` or `AGENTS.md` or whatever), symlink the rest.\n- **No codegen**: no templates, no transforms, no surprise diffs.\n- **Project + global**: works in repos *and* under `~/.config/...`.\n- **Auto-detect**: scans your system for installed AI tools and reports what it finds.\n- **Repo scanning**: walks a directory tree and wires up symlinks in every git repo that has an AGENTS.md.\n- **Automatic triggers**: git hooks, shell hooks, and launchd keep things synced without manual runs.\n- **Idempotent**: re-run safely; it fixes broken/misdirected links.\n- **Portable**: works on macOS and Linux.\n- **Future-ready**: handles any directory structure, automatically creates paths. Tomorrow's AI tool? Just add its path.\n\n---\n\n## How it works\n\nYou tell Agentlink which file is the **source**, and which other files should **link** to it. Agentlink creates/fixes symlinks accordingly.\n\n```yaml\n# .agentlink.yaml (in project root)\nsource: AGENTS.md\nlinks:\n  - CLAUDE.md                             # Claude Code\n  - .github/copilot-instructions.md       # GitHub Copilot\n  - .cursorrules                           # Cursor AI\n  - GEMINI.md                              # Gemini CLI\n```\n\nResult:\n```\n./AGENTS.md                              # real file you edit\n./CLAUDE.md                           -\u003e AGENTS.md  (symlink)\n./.github/copilot-instructions.md     -\u003e ../AGENTS.md  (symlink)\n./.cursorrules                        -\u003e AGENTS.md  (symlink)\n./GEMINI.md                           -\u003e AGENTS.md  (symlink)\n```\n\nGlobal mode (in HOME) is the same idea:\n\n```yaml\n# ~/.config/agentlink/config.yaml\nsource: ~/AGENTS.md\nlinks:\n  - ~/.claude/CLAUDE.md\n  - ~/.codex/AGENTS.md\n  - ~/.gemini/GEMINI.md\n  - ~/.config/AGENTS.md\n  - ~/.factory/AGENTS.md\n  - ~/.config/opencode/AGENTS.md\n```\n\n---\n\n## Install\n\n### Homebrew (macOS and Linux)\n\n```bash\nbrew install snapsynapse/tap/agentlink\n```\n\nThe formula lives in [snapsynapse/homebrew-tap](https://github.com/snapsynapse/homebrew-tap) and installs the same checksummed binaries as the release page.\n\n### Pre-built binary\n\nDownload the binary for your platform from the [latest release](https://github.com/snapsynapse/agentlink/releases/latest), verify it against `SHA256SUMS.txt`, then:\n\n```bash\nchmod +x agentlink-darwin-arm64 \u0026\u0026 mv agentlink-darwin-arm64 /usr/local/bin/agentlink\n```\n\nBinaries: `darwin-arm64`, `darwin-amd64`, `linux-amd64`, `linux-arm64`.\n\n### From source (requires Go 1.23+)\n\n```bash\ngit clone https://github.com/snapsynapse/agentlink.git\ncd agentlink\ngo install ./cmd/agentlink/\n```\n\nThis puts the binary in your Go bin directory (usually `~/go/bin/`). Make sure it's in your PATH:\n\n```bash\n# Check if it worked\nwhich agentlink\n\n# If \"command not found\", add Go's bin to your PATH.\n# Add this line to your ~/.zshrc or ~/.bashrc:\nexport PATH=\"$HOME/go/bin:$PATH\"\n```\n\n### Planned distribution\n\n- **AUR**: `yay -S agentlink-bin`\n\n---\n\n## Quick Start: Global Setup\n\nIf you maintain one set of AI instructions for all your tools, this is the fastest path.\n\n**1. Create your source file** (skip if you already have one):\n\n```bash\n# ~/AGENTS.md is the recommended global location.\n# Put your instructions, conventions, and preferences here.\nvim ~/AGENTS.md\n```\n\n**2. Detect your installed tools:**\n\n```bash\nagentlink detect -v\n```\n\nThis shows which tools are installed and their expected config paths.\n\n**3. Create the global config:**\n\n```bash\nmkdir -p ~/.config/agentlink\ncat \u003e ~/.config/agentlink/config.yaml \u003c\u003c 'EOF'\nsource: ~/AGENTS.md\nlinks:\n  - ~/.claude/CLAUDE.md\n  - ~/.codex/AGENTS.md\n  - ~/.gemini/GEMINI.md\n  # Add paths from 'agentlink detect' for tools you use\nEOF\n```\n\n**4. Sync:**\n\n```bash\nagentlink sync\n```\n\nIf any target path already has a real file, agentlink will refuse to overwrite it and tell you the file size and modification date. Your options:\n\n```bash\ncat ~/.codex/AGENTS.md         # inspect the existing file\nagentlink sync --backup        # back up existing regular files to .bak, then replace\nagentlink sync --force         # replace without backup (destructive)\nagentlink sync --dry-run       # preview only, with no filesystem changes\n```\n\n**5. Install automatic triggers** (optional but recommended):\n\n```bash\nagentlink hooks install --all\n```\n\nThis installs git hooks, a zsh directory-change hook, and a 60-minute launchd heartbeat so syncs happen automatically. Generated hook scripts safely quote the installed binary path, so installs under directories with spaces still work. If your global Git `core.hooksPath` is relative, agentlink refuses to guess where to install hooks; unset it or change it to an absolute path first.\n\n**6. Scan your repos** (optional):\n\n```bash\nagentlink scan ~/Git\n```\n\nFinds git repos with AGENTS.md and creates tool-specific symlinks (CLAUDE.md, GEMINI.md, etc.) in each, including git worktrees and submodule-style checkouts where `.git` is a file rather than a directory.\n\n---\n\n## Quick Start: Per-Project Setup\n\n```bash\n# Initialize in your project\nagentlink init\n\n# Edit the created .agentlink.yaml to match your needs\n# Create your source file (e.g., AGENTS.md)\n\n# Sync to create symlinks\nagentlink sync\n```\n\n### Commands\n\n```bash\nagentlink init               # create .agentlink.yaml in current directory\nagentlink sync               # create/fix symlinks based on config\nagentlink check              # print status and problems\nagentlink clean              # remove managed symlinks (non-destructive)\nagentlink doctor             # environment + permissions sanity checks for project and global config\nagentlink detect             # auto-detect installed AI coding tools\nagentlink scan [dir]         # scan git repos and manage symlinks\nagentlink hooks install      # install automatic sync triggers\nagentlink hooks remove       # remove sync triggers\nagentlink hooks status       # show installed trigger status\n```\n\n### Helpful flags\n\n```bash\nagentlink sync --dry-run     # show what would change without filesystem changes\nagentlink sync --backup      # back up existing regular files to .bak before replacing\nagentlink sync --force       # replace existing regular files without backup (or -f)\nagentlink sync --quiet       # suppress non-error output (or -q)\nagentlink --verbose          # detailed output for any command (or -v)\n```\n\n### Handling existing files\n\nWhen a target path already contains a real file (not a symlink), agentlink stops and reports the conflict with the file size and last-modified date. It never silently overwrites your files. Options:\n\n- `--backup` backs up the existing file to `\u003cname\u003e.bak` (or `\u003cname\u003e.\u003ctimestamp\u003e.bak` if `.bak` already exists), then creates the symlink.\n- `--force` replaces a regular file without backup. Use when you've already inspected or don't care about the existing content.\n- `--dry-run` is a hard preview mode. It does not create symlinks, remove files, fix broken links, or write backups, even when combined with `--backup` or `--force`.\n- Neither flag: agentlink reports the conflict and skips the file.\n\nAgentlink refuses to recursively replace directories or special files. If a configured link path is a directory, move or rename it yourself before running `sync`.\n\n---\n\n## Tool Detection\n\nAgentlink maintains a registry of known AI coding tools and their configuration paths. Run `detect` to see what's installed:\n\n```bash\nagentlink detect             # list installed tools\nagentlink detect --generate  # generate .agentlink.yaml from detected tools\nagentlink detect -v          # show global config paths and AGENTS.md support\n```\n\n### Supported tools\n\n| Tool | Global Config | Repo File | Reads AGENTS.md |\n|------|--------------|-----------|-----------------|\n| Aider | -- | AGENTS.md | Yes |\n| Amp | ~/.config/AGENTS.md | AGENTS.md | Yes |\n| Antigravity | -- | AGENTS.md | Yes |\n| Autohand | -- | AGENTS.md | Yes |\n| Claude Code | ~/.claude/CLAUDE.md | CLAUDE.md | No (CLAUDE.md) |\n| Cline | -- | -- | No |\n| Continue | ~/.continue/config.yaml | -- | No |\n| Crush | -- | AGENTS.md | Yes |\n| Cursor | -- | AGENTS.md | Yes |\n| Factory (Droid) | ~/.factory/AGENTS.md | AGENTS.md | Yes |\n| Gemini CLI | ~/.gemini/GEMINI.md | GEMINI.md | No (GEMINI.md) |\n| GitHub Copilot | -- | .github/copilot-instructions.md | No |\n| Goose | ~/.config/goose/.goosehints | .goosehints | No |\n| Junie | -- | .junie/AGENTS.md | Yes |\n| Kilo Code | -- | AGENTS.md | Yes |\n| Kiro | -- | AGENTS.md | Yes |\n| Codex CLI | ~/.codex/AGENTS.md | AGENTS.md | Yes |\n| OpenClaw | ~/.openclaw/workspace/AGENTS.md | -- | Yes |\n| OpenCode | ~/.config/opencode/AGENTS.md | AGENTS.md | Yes |\n| Qwen Code | ~/.qwen/QWEN.md | QWEN.md | No (QWEN.md) |\n| RooCode | -- | .roo/rules/rules.md | No |\n| Windsurf | -- | AGENTS.md | Yes |\n| Zed | -- | AGENTS.md | Yes |\n\nTo add a new tool, edit `internal/registry/tools.go` and add an entry to the `All()` function.\n\n---\n\n## Repo Scanning\n\nScan a directory tree to find git repos and wire up symlinks:\n\n```bash\nagentlink scan                    # scan ~/Git (default)\nagentlink scan ~/Projects         # scan a different directory\nagentlink scan --dir ~/Work       # alternative syntax\nagentlink scan --dry-run          # preview without changes\n```\n\nThe scanner finds repos containing `AGENTS.md` and creates symlinks for tool-specific filenames (`CLAUDE.md`, `GEMINI.md`, etc.). It recognizes standard repos, git worktrees, and submodule-style checkouts where `.git` is a file. It does **not** inject `AGENTS.md` into repos that lack one.\n\nThe default scan directory is `~/Git`. Override it per-invocation with the `--dir` flag or positional argument. To change the compiled default, build with:\n\n```bash\ngo build -ldflags \"-X github.com/martinmose/agentlink/internal/cli.DefaultScanDir=/your/path\" ./cmd/agentlink/\n```\n\n---\n\n## Automatic Triggers\n\nKeep symlinks current without manual runs:\n\n```bash\nagentlink hooks install --all      # install all triggers\nagentlink hooks install --git      # git post-checkout + post-merge hooks\nagentlink hooks install --zsh      # zsh chpwd hook (sync on cd)\nagentlink hooks install --launchd  # macOS LaunchAgent (60-minute heartbeat)\nagentlink hooks status             # check what's installed\nagentlink hooks remove --all       # clean up all triggers\n```\n\n**Git hooks** use `core.hooksPath` for global hooks. After any checkout or merge, agentlink syncs the current repo's symlinks. Agentlink only installs into absolute global hook paths. If `git config --global core.hooksPath` returns a relative path, either unset it so agentlink can create `~/.config/git/hooks`, or set it to an absolute directory before running `agentlink hooks install --git`.\n\n**Zsh hook** fires on every `cd` into a directory that contains both a git checkout and `.agentlink.yaml`. Runs in the background so it never slows your shell.\n\n**LaunchAgent** runs `agentlink sync` every 60 minutes and at login. Logs to `/tmp/agentlink-sync.log`.\n\nAll injected content is wrapped in markers (`# \u003e\u003e\u003e agentlink \u003e\u003e\u003e` / `# \u003c\u003c\u003c agentlink \u003c\u003c\u003c`) for clean removal. Removing those sections preserves the hook file's existing permissions. Generated hook commands shell-quote the binary path so installs under paths with spaces remain valid.\n\n---\n\n## Config\n\n### Project config (recommended)\n\nPlace a single file at repo root:\n\n`.agentlink.yaml`\n```yaml\nsource: AGENTS.md\nlinks:\n  - CLAUDE.md\n  - GEMINI.md\n```\n\nNotes:\n- **`source` must be a real file**, not a symlink (Agentlink warns if it is).\n- Paths in `links` are relative to the project root.\n\n### Global config\n\n`~/.config/agentlink/config.yaml`\n```yaml\nsource: ~/AGENTS.md\nlinks:\n  - ~/.claude/CLAUDE.md\n  - ~/.codex/AGENTS.md\n  - ~/.gemini/GEMINI.md\n```\n\n### Doctor behavior\n\n`agentlink doctor` checks project and global configuration separately. In particular, the \"Global Configuration\" section always inspects `~/.config/agentlink/config.yaml` directly, even when `.agentlink.yaml` exists in the current repo.\n\n---\n\n## Platform notes\n\n- **macOS + Linux**: standard POSIX symlinks (`ln -s`), same behavior on both.\n- **Git**: symlinks are stored as links (not file copies). That's fine; teams who dislike that can add them to `.gitignore`.\n\n### Gitignore patterns\n\nSince agentlink creates multiple instruction files but only one is the real source, you can gitignore all AI instruction files except your chosen source:\n\n```gitignore\n# Ignore all AI instruction files\nAGENTS.md\nCLAUDE.md\nGEMINI.md\nOPENCODE.md\n.cursorrules\n.github/copilot-instructions.md\n\n# But track your chosen source file (example: tracking AGENTS.md)\n!AGENTS.md\n```\n\nThis keeps your repository clean while ensuring your source file is version controlled.\n\n- **Editors/IDEs**: most follow symlinks transparently.\n\n---\n\n## Prior Art\n\nAgentlink is not the first tool to tackle this problem. The ecosystem is young and fragmented; many people have built solutions independently. Here's what exists as of April 2026:\n\n| Tool | Language | Approach | Scope |\n|------|----------|----------|-------|\n| [agentsync](https://github.com/dallay/agentsync) | Rust | Symlinks + MCP config generation | Per-project .agents/ directory |\n| [agents](https://github.com/amtiYo/agents) | TypeScript | Config-file generation + watch mode | MCP servers + skills + instructions |\n| [AI Rules Sync](https://github.com/lbb00/ai-rules-sync) | Node | Git-repo-sourced rules + adapters | Multi-repo rule federation |\n| [Rulesync](https://github.com/dyoshikawa/rulesync) | Node | Bidirectional format conversion | Rules + commands + MCP + skills |\n| [Vibe Rules](https://github.com/sky1core/viberules) | Node | Hard links/symlinks + VS Code ext | 15+ tools, skill management |\n| [agent-sync](https://github.com/ZacheryGlass/agent-sync) | Python | Format conversion, hub-and-spoke | Claude + Copilot + Gemini |\n| [agent-sync](https://github.com/GowayLee/agent-sync) | OCaml | Symlinks, AGENT_GUIDE.md canonical | Early stage |\n| [claude-agents-sync](https://github.com/alexandrbasis/claude-agents-sync) | Python | PostToolUse hook, bidirectional | Claude Code only |\n| [AgentLoom](https://github.com/Alpha-Coders/agent-loom) | Rust/Svelte | Desktop GUI for skill symlinks | Skills only (12+ tools) |\n| [DevKit](https://github.com/ngxtm/devkit) | Node | Skill marketplace + auto-detect | Skill discovery + install |\n| [AGR](https://pypi.org/project/agr/) | Python | Package manager for agent resources | Team skill distribution |\n\nAgentlink differentiates by staying minimal (symlinks only, no codegen), supporting both global and project-level configs, and adding automation (detect, scan, hooks) without requiring Node/Python runtimes. The compiled Go binary has zero runtime dependencies.\n\nFor the emerging AGENTS.md standard, see [agents.md](https://agents.md/) (now under the Agentic AI Foundation / Linux Foundation).\n\n---\n\n## FAQ\n\n**Why not templates or generators?**\nBecause 90% of the time the files **should be identical**. When they're not, this tool isn't the right fit (or add a second source and stop linking that one).\n\n**What if my source differs per project?**\nPerfect -- put a `.agentlink.yaml` in each repo and choose the source you actually edit there.\n\n**Can the source be `AGENTS.md` instead of `CLAUDE.md`?**\nYes. The source is *whatever you want to edit*. The others link to it.\n\n**What happens when a new AI tool comes out?**\nJust add its expected path to your config. If \"SuperCoder AI\" expects `.supercoder/prompts/main.md`, add that path and run `agentlink sync`. Directories are created automatically, symlink points to your source file. Zero code changes, zero updates needed. Or submit a PR to add it to the tool registry.\n\n**MCP / `.mcp.json`?**\nOut of scope. Formats differ between tools; symlinking a single JSON to multiple consumers usually doesn't make sense.\n\n**What about local models (Ollama, LM Studio, etc.)?**\nLocal model runners don't read AGENTS.md or any instruction file convention. The model itself has no filesystem protocol -- it depends on the harness. If a tool built on top of local models adds AGENTS.md support, we'll add it to the registry.\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). To add a tool to the registry, open an issue using the \"New tool\" template.\n\n## About\n\nMaintained as a [Snap Synapse](https://snapsynapse.com/) project. Agentlink began as [martinmose/agentlink](https://github.com/martinmose/agentlink) by Martin Mose Facondini (MIT); upstream credit remains intact in [NOTICE](NOTICE). This repository is the canonical home for current project direction, issues, releases, and documentation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnapsynapse%2Fagentlink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnapsynapse%2Fagentlink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnapsynapse%2Fagentlink/lists"}