# ALWAYS READ THIS FIRST This is the mandatory entrypoint for AI agents and operators working on Ferryman or updating an attached project. ## Current standard - Ferryman project standard revision: **2** - Updated: **2026-07-24** - Portable marker: `/.ferryman/ferryman/STANDARD.toml` - Outer marker: `/.ferryman/standard.toml` Revision 2 adds crash-safe live communications, inbound private-Git synchronization, acknowledgement delivery/retry, actor-scoped inbox/claim/ack tokens, queue/quarantine status, safe unregister, and framework-neutral unmanaged/single-agent/multi-agent adoption. If either marker is missing or its `revision` is lower than 2, the attached project needs a standard update. A higher revision means this checkout is older: stop and update Ferryman before touching the project. ## Before any update: scan, then ask the user to review Never begin with `git pull`, attachment apply, Syncthing registration, or a remote change. First run the read-only directory safety scan and show the result to the user: ```powershell & C:\ferryman\scripts\scan-project-safety.ps1 -Workspace C:\example ``` ```bash scripts/scan-project-safety.sh --workspace /path/to/example ``` The scan reads paths, Git metadata, ignore state, and Ferryman-owned standard markers. It checks for reparse points/symlinks, dirty portable files, suspicious portable filenames, a misplaced token/runtime directory, and unexpected remotes. It never reads `.ferryman/token` or other secret contents. Stop if the scan reports `FAIL`. Do not update through an unexplained symlink, dirty managed file, unexpected inner remote, or possible secret in the portable repository. ## Determine whether Ferryman itself changed From `C:\ferryman`, preserve the working tree and inspect: ```powershell git status --short --branch git log -1 --oneline --decorate git fetch --prune origin git rev-list --left-right --count HEAD...origin/main git log --oneline HEAD..origin/main ``` `git fetch` updates remote-tracking metadata only. Do not merge or pull over a dirty tree. The final two commands state whether local Ferryman is ahead/behind and list exactly which upstream commits are new. Review `README.md`, `docs/COMMUNICATIONS_READINESS.md`, and this file after an update. ## Update an attached local project Keep the project's existing integration model. Supply the same project ID, paths, private repository, and participant mappings used during attachment. Always dry-run first. PowerShell: ```powershell & C:\ferryman\scripts\attach-project.ps1 ` -Workspace C:\example ` -Project example ` -SharedRemote /wisp-bridges/example ` -GitRemote https://github.com/estejosh/example-bridge.git ` -IntegrationMode unmanaged ` -UpdateStandard ` -DryRun ``` WSL/Linux: ```bash scripts/attach-project.sh \ --workspace /path/to/example \ --project example \ --shared-remote /wisp-bridges/example \ --git-remote https://github.com/estejosh/example-bridge.git \ --integration-mode unmanaged \ --update-standard \ --dry-run ``` Review every reported action, remove only the dry-run flag, then scan again. The update refuses dirty Ferryman-managed portable files, validates and enriches a compatible legacy outer `bridge.toml`, updates revision markers and portable instructions, and commits only managed portable metadata. It never stages the outer token/runtime or changes the main project remote. For a single- or multi-agent project, retain its existing `-Participant` or `--participant` entries. Do not convert a project to multiple agents merely to adopt the standard; `project-inbox` supports humans, scripts, CI, and unmanaged projects. ## What must never be automatic - Never inspect, print, copy, rewrite, or commit token/credential contents. Only the attachment helper may load an existing token directly into an authorization header; it must not display or persist the value elsewhere. - Never change the main project Git remote. - Never weaken the channel's `.stignore`; it is what stops Syncthing replicating `.git`. - Never make a GitHub repository public. - Never delete an old communications checkout during attachment/update. - Never unregister communications while either outbox is non-empty. - Never migrate a real project solely because its name appears in this file. NATV is the first designated real migration target. Its apply step still requires review of the current read-only scan and dry run before any filesystem, Syncthing, hub, or GitHub mutation.