The token is used for basic auth only. It never appears in the lockfile, the
manifest, logs or error messages.
### Notifications
On Windows, a toast fires when (and only when) a sync kept local
modifications or discovered unmanaged items — never for routine syncs. The
same warnings are appended to the sync log
(`~/.local/state/agent-lib/sync.log` on Linux, `%LocalAppData%\agent-lib`
on Windows) and surfaced by `status`. Linux/macOS notification is a no-op.
`status --json` is machine-readable: deployed revision, repository revision,
pending changes, skipped and unrecognized items, and a `problematic_drift`
flag that drives the non-zero exit code — suitable for headless drift checks.
## Security / trust model
- External sources are **untrusted**. Discovery and vendoring never execute
upstream code; only file contents are read.
- The shared read-only token limits blast radius; rotation is a single fleet
run (see the handoff doc).
- MCP fragments from vendored sources are **never activated** by the binary;
merging and vault substitution remain an explicit fleet-controller decision.
- Binary updates happen exclusively via pinned fleet rollouts — there is no
self-update path to abuse.
## Troubleshooting
| Symptom | Cause / fix |
|---|---|
| `error: … include entry "x" not found upstream` | Typo, or the item was renamed/removed upstream. Fix the lockfile include list, or re-add with a corrected `--include`. |
| `error: … collides with own skills "x"` | Deployed-name collision. Add `--rename <upstream>=<deployed>` (add) or fix the rename map (update). |
| `validate` reports tree/lockfile divergence | Someone edited `external/` by hand. Re-run `vendor update <source>` to restore the pinned state. |
| Skill didn't update, `skipped (local modifications kept): 1` | Working as designed — you edited the deployed item. Restore the company version by deleting the local copy and re-syncing. |
| `status` exits 1 | Local modifications block repository updates (or occupy names the repo needs). See `status` output for the item list. |
| Sync fails with clone/fetch error | Work repository unreachable, or token expired. Previous local state remains intact; fix config/network and re-run. |
| No toast on Windows | Toasts need an interactive user session — the scheduled task must run as the logged-in user, not SYSTEM. |
## Development
```sh
make build # build with version ldflags
make test# unit + black-box e2e (fully offline, local fixture git repos)
make lint # go vet + gofmt check
./scripts/e2e-acceptance.sh # full spec walk: 60+ assertions, offline
```
Release: `goreleaser release` on a tagged commit builds all five targets with
checksums and publishes to GitHub releases. Verify with
`goreleaser release --snapshot --clean` or a tagged `--skip=publish` dry run.
## Scope and non-goals (v2)
In scope: vendoring with selection/renames into any git work repository;
OpenCode-only deployment with three-state protection; toast notifications;
goreleaser/GitHub release pipeline.
Not in scope: client-side selection or profiles, additional targets (Pi,