diff --git a/CHANGELOG.md b/CHANGELOG.md index cd9135f..cc416e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Documentation + +- Website no longer scrolls horizontally on phones and tablets: code grids use `minmax(0, 1fr)` tracks, and wide commands and the link map scroll inside keyboard-focusable regions. +- Website hero and feature copy distinguish shared file contents from when each tool rereads them. +- README states that `sync` rejects a symlinked `source` by default, and what `--force` does instead. + ## [0.6.0] - 2026-09-05 ### Fixed diff --git a/README.md b/README.md index 7e3f23b..881b318 100644 --- a/README.md +++ b/README.md @@ -367,7 +367,7 @@ links: ``` Notes: -- **`source` must be a real file**, not a symlink (Agentlink warns if it is). +- **`source` must be a real file**, not a symlink. By default `agentlink sync` refuses a symlinked source, exits with an error, and changes nothing. `--force` links to it anyway, creating a chain that `agentlink check` still reports as a problem; point `source` at the real file instead. - Paths in `links` are relative to the project root. - To layer tool-specific guidance, omit that tool's path from `links` and keep its wrapper as a real committed file. diff --git a/docs/index.html b/docs/index.html index 1f3c802..bdda39c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -31,7 +31,7 @@ - + @@ -69,7 +69,7 @@ "operatingSystem": "macOS, Linux", "softwareVersion": "0.6.0", "datePublished": "2026-04-14", - "dateModified": "2026-09-05", + "dateModified": "2026-09-23", "license": "https://opensource.org/licenses/MIT", "image": "https://agentlink.run/imgs/og.png", "author": { @@ -103,7 +103,7 @@ "url": "https://agentlink.run/", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://agentlink.run/" }, "datePublished": "2026-04-14", - "dateModified": "2026-09-05", + "dateModified": "2026-09-23", "author": { "@type": "Person", "name": "Sam Rogers", @@ -397,12 +397,12 @@ /* Code blocks */ .code-grid { display: grid; - grid-template-columns: 1fr 1fr; + grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.5rem; margin-top: 1.5rem; } - .code-grid.single { grid-template-columns: 1fr; } - .code-block { text-align: left; } + .code-grid.single { grid-template-columns: minmax(0, 1fr); } + .code-block { text-align: left; min-width: 0; } .code-block h3 { font-size: 0.95rem; margin-bottom: 0.75rem; } .code-block .annotation { font-size: 0.85rem; @@ -441,6 +441,7 @@ .support-table code { white-space: normal; } .support-table th[scope="row"] { text-transform: none; letter-spacing: normal; font-size: 0.9rem; } .support-table:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; } + pre:focus-visible, .linkmap:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* Footer */ footer { @@ -466,7 +467,7 @@ @media (max-width: 768px) { h1 { font-size: 2rem; } .hero { padding: 3rem 0 2.5rem; } - .code-grid { grid-template-columns: 1fr; } + .code-grid { grid-template-columns: minmax(0, 1fr); } .pillars { grid-template-columns: 1fr; } nav .links { display: none; } nav .links.mobile-compact { display: flex; gap: 0.75rem; } @@ -526,15 +527,15 @@
Different tools want different files at project root: AGENTS.md, CLAUDE.md, GEMINI.md, .cursorrules. There’s no standard, and waiting for one is expensive. Agentlink keeps them in sync through symlinks. Edit one, every tool sees the change.
Different tools want different files at project root: AGENTS.md, CLAUDE.md, GEMINI.md, .cursorrules. There’s no standard, and waiting for one is expensive. Agentlink keeps them in sync through symlinks. Edit one file and every linked path holds the same text; each tool still decides when it rereads it.
No templates, no transforms, no surprise diffs. Symlinks are a 50-year-old OS feature. Edit the source, every tool sees it instantly.
+No templates, no transforms, no surprise diffs. Symlinks are a 50-year-old OS feature. Edit the source and every alias changes with it, byte for byte.
brew install snapsynapse/tap/agentlink +brew install snapsynapse/tap/agentlink # Verify agentlink --version@@ -673,7 +674,7 @@Homebrew (macOS and Linux)
Go install
-go install github.com/snapsynapse/agentlink/cmd/agentlink@latest +go install github.com/snapsynapse/agentlink/cmd/agentlink@latest # Verify agentlink --help@@ -682,7 +683,7 @@Go install
Pre-built binary
-# macOS (Apple Silicon) +# macOS (Apple Silicon) curl -L -o agentlink https://github.com/snapsynapse/agentlink/releases/download/v0.6.0/agentlink-darwin-arm64 curl -L -o SHA256SUMS.txt https://github.com/snapsynapse/agentlink/releases/download/v0.6.0/SHA256SUMS.txt grep ' agentlink-darwin-arm64$' SHA256SUMS.txt | sed 's/agentlink-darwin-arm64/agentlink/' | shasum -a 256 -c - @@ -696,7 +697,7 @@Pre-built binary
AI-assisted (GuideCheck)
Ask Claude, ChatGPT, or another tool-using assistant to install Agentlink by following the published assistant guide — a GuideCheck Human-Verifiable Assistant Guide with approval-gated, checksum-verified install actions.
-Verify https://agentlink.run/.well-known/assistant-guide.txt with +Verify https://agentlink.run/.well-known/assistant-guide.txt with https://guidecheck.org/verify, then follow its install actions. Show me each action block before running it.Verify the guide, read it in full, and approve each action. Install places one binary only; it creates no symlinks until you separately direct a sync.
@@ -713,7 +714,7 @@Usage
Project config
-# .agentlink.yaml (in project root) +# .agentlink.yaml (in project root) source: AGENTS.md links: - CLAUDE.md @@ -721,13 +722,13 @@Project config
- .cursorrules - .github/copilot-instructions.mdFrom the project directory:
-agentlink sync --dry-run +agentlink sync --dry-run agentlink syncGlobal config
-# ~/.config/agentlink/config.yaml +# ~/.config/agentlink/config.yaml source: ~/AGENTS.md links: - ~/.claude/CLAUDE.md @@ -735,13 +736,13 @@Global config
- ~/.gemini/GEMINI.md - ~/.config/opencode/AGENTS.mdFrom a directory without a project config, run
-agentlink sync. Use explicit global selection from any directory:agentlink sync --global --dry-run +agentlink sync --global --dry-run agentlink sync --globalLayered Claude wrapper
-# Keep CLAUDE.md out of .agentlink.yaml. +# Keep CLAUDE.md out of .agentlink.yaml. # CLAUDE.md remains a real committed file. @AGENTS.md @@ -752,7 +753,7 @@Layered Claude wrapper
Detect installed tools
-# Scan the system for AI tool installs +# Scan the system for AI tool installs # and report what's found. agentlink detect @@ -771,7 +772,7 @@Detect installed tools
Automatic triggers
-# Install git/zsh hooks (plus launchd on macOS) so +# Install git/zsh hooks (plus launchd on macOS) so # sync runs without you thinking about it. agentlink hooks install --all @@ -783,7 +784,7 @@Automatic triggers
diff --git a/docs/sitemap.xml b/docs/sitemap.xml index f8c998f..34f7bb6 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -2,7 +2,7 @@Safe replacement
-# Preview without creating, removing, +# Preview without creating, removing, # or backing up files. agentlink sync --dry-run @@ -814,7 +815,7 @@Safe replacement
Agentlink began as martinmose/agentlink by Martin Mose Facondini (MIT); Snap Synapse maintains this continuation withdetect,scan,hooks, automatic backup, global-config support, integration tests, and release distribution. - Last substantive revision: . + Last substantive revision: . Revision history →diff --git a/docs_contract_test.go b/docs_contract_test.go index af85804..cca3cc8 100644 --- a/docs_contract_test.go +++ b/docs_contract_test.go @@ -114,7 +114,7 @@ func TestLandingPageBylineIncludesLastUpdatedDate(t *testing.T) { if err != nil { t.Fatal(err) } - const want = "Last updated " + const want = "Last updated " if !strings.Contains(string(data), want) { t.Errorf("landing page byline missing %q", want) } @@ -192,7 +192,7 @@ func TestWebsiteConfigurationExamplesAreValidYAML(t *testing.T) { t.Fatal(err) } paths = append(paths, "docs/index.html") - blocks := regexp.MustCompile(`(?s) https://agentlink.run/ -2026-09-05 +2026-09-23 monthly 1.0 (?:`) + blocks := regexp.MustCompile(`(?s))?(.*?)(?:)?]*)?>(?:`) count := 0 for _, path := range paths { data, err := os.ReadFile(path))?(.*?)(?:)?