Command-line
The anchorify CLI is a small Bun/Node program that wraps the REST API. Every share is one HTTP request; the CLI mostly exists so you can pipe a file path on the command line and get a URL on stdout.
This page is the reference. For an overview, see Getting started.
Install
npm install -g anchorify-cli
# or
bun install -g anchorify-cli
The npm package is anchorify-cli (suffixed because anchorify was
already taken on the registry by an unrelated utility); the binary it
ships is anchorify. A justforwarded alias keeps working through the
rebrand transition. Run anchorify help to see the top-level usage.
Log in
anchorify login
login prompts on the TTY for a token (no echo). The token comes from your dashboard at https://anchorify.io/dashboard — see CLI tokens. After verifying the token against /api/me, the CLI writes host and token to ~/.config/anchorify/auth.json (mode 600).
Flags:
--host <url>— server URL. Default:https://anchorify.io.--token <token>— pass the token non-interactively.
Examples:
anchorify login
anchorify login --host https://anchorify.io --token jf_...
Log out
anchorify logout
Removes ~/.config/anchorify/auth.json. Does not invalidate the token on the server. Idempotent: prints not logged in if there's nothing to remove.
Publish or update a file
The bare invocation is the primary entry point:
anchorify path/to/report.md
Behaviour:
- If the file's absolute path is in
~/.config/anchorify/published.json, the CLI updates the existing share at the recorded id. - Otherwise the CLI inserts a new share at a random 8-character base36 id.
- Prints the share URL on stdout. Nothing else. (Errors go to stderr.)
Flags on the bare invocation:
--slug <slug>— publish at a chosen slug. Returns409if taken; the CLI surfaces the error and you pick another.--id <id>— explicit update at this id (works for both random ids and chosen slugs).--new— force a new random id, ignoring the local mapping.--type <type>— override content type. One ofmarkdown,code,json,yaml,csv,tsv,html. Default is detected server-side from the file extension.--public/--unlisted/--members— set visibility. Default for new shares isunlisted. The legacy--secretflag is accepted and treated as--unlisted.--force— required when switching from password-protected to public. Clears the password.--project <slug>— publish into a specific project in your home org. Defaults to the project the file's mapping entry already points at, oruntitledfor new shares.
Examples:
anchorify path/to/report.md
anchorify path/to/report.md --slug q1-report
anchorify path/to/report.md --type code
anchorify path/to/report.md --public
anchorify path/to/report.md --members
anchorify path/to/report.md --project q1-acme
anchorify path/to/report.md --new
anchorify update
anchorify update <file> [flags]
Strict, explicit form of the bare invocation. Errors out if the file is not already in the local mapping, instead of silently inserting a new share. Identity-changing flags (--slug, --id, --new) are rejected — use rename for that.
Flags:
--password <pw>— set a password.--no-password— remove an existing password.--public/--unlisted/--members— change visibility tier. Legacy--secretis accepted as--unlisted.--type <type>— override content type.
Examples:
anchorify update path/to/report.md
anchorify update path/to/report.md --password sekret
anchorify update path/to/report.md --no-password --public
anchorify update path/to/report.md --members
anchorify list
anchorify list
# aliases: anchorify --list, anchorify -l
Lists every share owned by the authenticated user. Output is tab-separated: <url>\t<filename>\t<source-path-or-em-dash>. Sorted by most recently updated.
The source path comes from the local mapping. Items published from another machine show as —.
anchorify list | grep deliverable
anchorify view
anchorify view <slug-or-id> [--user <username>]
Prints a share's raw source content to stdout. Auth required (your own shares). With --user <username>, fetches a public share owned by another user — no auth needed.
anchorify view my-share
anchorify view some-slug --user alice
anchorify view abc12345 > /tmp/share.md
anchorify delete
anchorify delete <file-path>
anchorify delete --slug <slug>
anchorify delete --id <id>
Identify the share by file path (resolved via the local mapping), explicit slug, or explicit id. On success, removes the matching mapping entry. Auth required.
anchorify delete path/to/report.md
anchorify delete --slug old-deliverable
anchorify delete --id abc12345
anchorify rename
anchorify rename <slug-or-id> <new-slug>
Changes a share's slug — the id stays the same; only the URL changes. The CLI updates the local mapping so re-publishing the same path shows the new URL in list.
anchorify rename old-slug new-slug
anchorify rename abc12345 new-slug
anchorify visibility
anchorify visibility <slug-or-id> public|unlisted|members [--force]
Set the visibility tier:
public— listed on the owner's profile; indexable; URL is enough.unlisted—noindex; URL is enough. The V2secretsemantics, renamed. The legacy valuesecretis accepted as an alias.members— only signed-in org admins + project viewers can read; anonymous viewers get404. No password (membership IS the gate).
Switching from password-protected to public requires --force, which clears the password. Switching to members clears any password automatically.
anchorify visibility my-share unlisted
anchorify visibility my-share public
anchorify visibility my-share members
anchorify visibility my-share public --force
anchorify --version
anchorify --version
Prints the CLI version on stdout (e.g. 0.2.2) and exits. Stamped at build time from package.json so it always reflects the binary you have installed. The Claude Code skill references this command to verify CLI compatibility (requires-cli: ">=0.2.2").
anchorify skill install
anchorify skill install [--force]
anchorify skill update [--force] # alias
Installs or refreshes the bundled Claude Code skill at ~/.claude/skills/anchorify/SKILL.md. Fetches the canonical version from https://anchorify.io/docs/anchorify-skill.md — no auth required.
Refuses to overwrite when the local file differs from the canonical version (assumes user edits); pass --force to overwrite. The skill version is pinned to the CLI version, so re-run whenever you upgrade the CLI.
npm install -g anchorify-cli@latest && anchorify skill install --force
anchorify lint
anchorify lint <file> [--type <type>]
Pre-publish format check. Calls POST /api/v1/lint with the file's content and (optionally) an explicit type override, then prints warnings to stderr.
- Exit 0 with
ok — <file> lints clean as <type>when there are no issues, or when the issues are onlyinfo/warn-severity. - Exit 1 when at least one
error-severity issue is present (file will look broken to recipients).
anchorify lint deck.md
anchorify lint data.txt --type csv
See Lint API for the warning catalog and the full HTTP shape.
anchorify type
anchorify type <slug-or-id> <type>
Changes how a share is rendered. <type> is one of markdown, code, json, yaml, csv, tsv, html. Content is untouched; only the renderer changes.
anchorify type my-share code
anchorify type my-share json
anchorify type my-share markdown
anchorify password
anchorify password set <slug-or-id> [--password <pw>]
anchorify password clear <slug-or-id>
set without --password prompts on the TTY (no echo) or reads the first line from stdin (non-TTY). clear removes any existing password.
anchorify password set my-share
anchorify password set my-share --password sekret
echo sekret | anchorify password set my-share
anchorify password clear my-share
anchorify move
anchorify move <slug-or-id> --to <project>
Move a share into a different project in your home org. The canonical URL changes; the old URL 301s to the new one (slug redirect history is preserved per project).
anchorify move my-share --to q1-acme
anchorify move abc12345 --to retainer
anchorify org
anchorify org show [--json]
anchorify org rename <new-slug> [--yes]
Inspect or rename your home org. show prints slug, name, plan, and member/project counts. rename changes the org slug — every existing share URL at the old slug 301s to the new slug, and the old slug is permanently retired (tombstoned). Type-to-confirm the old slug unless --yes is passed.
anchorify org show
anchorify org show --json
anchorify org rename my-new-slug
anchorify org rename my-new-slug --yes
anchorify project
anchorify project list
anchorify project create <slug> [--name "..."]
anchorify project rename <old-slug> <new-slug>
anchorify project delete <slug> [--yes]
Manage projects inside your home org.
list— every project in your home org with slug, name, and share count.create— new project.--namedefaults to the slug.rename— change a project slug. Old URLs301viaproject_redirects.delete— delete an empty project. Blocked if it still contains shares (move them first) or if it is the last project in the org. Type-to-confirm unless--yes.
anchorify project list
anchorify project create q1-acme --name "Q1 — Acme"
anchorify project rename q1-acme acme-q1
anchorify project delete old-project
anchorify upload-folder
anchorify upload-folder <local-dir> [--project <slug>] [--visibility <tier>] [--dry-run]
Recursively walk a local directory and publish every file as its own share. Slugs are derived from each file's relative path (subdir slashes become hyphens). One URL is printed per file to stdout. With --dry-run, the planned slugs/URLs are listed without hitting the server.
Flags:
--project <slug>— target project. Defaults tountitled.--visibility <tier>—public,unlisted, ormembers. Default isunlisted(legacysecretaccepted).--dry-run— list planned URLs without publishing.
anchorify upload-folder ./deliverables
anchorify upload-folder ./deliverables --project q1-acme
anchorify upload-folder ./deliverables --visibility members --dry-run
anchorify admin
anchorify admin upgrade-org <slug> --plan free|pro
Operator-only. Requires the legacy operator bearer token (REPO_SHARE_TOKEN), not a per-user CLI token. Flips an org's plan tier — pro unlocks custom-domain affordances; free is the default. There is no self-serve upgrade path during the validation cohort.
anchorify admin upgrade-org acme --plan pro
anchorify admin upgrade-org acme --plan free
anchorify notifications
anchorify notifications [--unread] [--limit N]
List your in-app notifications, newest first. Tab-separated output:
<id>\t<kind>\t<created_at_iso>\t<title>\t<link>
Use --unread to filter to unread rows only; --limit sets page size (default 50, max 200). See Notifications for the kinds.
anchorify link-perm
anchorify link-perm <slug-or-id> none|can_view|can_comment|can_suggest
Sets the share's link-permission tier — the additive grant for anyone with the URL. See Link permissions for the matrix. Prints ok on success.
anchorify versions
anchorify versions <slug-or-id>
anchorify versions restore <slug-or-id> <version-id>
versions <slug> lists every version of a share, newest first:
<version-id>\t<created_at_iso>\t<source>\t<author>\t<status>
versions restore <slug> <vid> rolls the share back to that version. The restore is itself versioned (a new rollback-source row is appended). Prints ok on success. See Version history.
anchorify audit
anchorify audit [--org <slug>] [--limit N] [--action <name>]
Lists audit events for an org, newest first. --org defaults to your home org. --action filters to a single event type (e.g. share.delete, share.visibility, org.member.add). Tab-separated output:
<created_at_iso>\t<action>\t<actor>\t<target_type>:<target_id>
See Audit log for the action catalog.
anchorify suggestions
anchorify suggestions <slug-or-id> # owner-only: open suggestions on a share
anchorify suggestions mine # your own submitted suggestions
mine output: <version-id>\t<share-url>\t<status>\t<created_at_iso>. Approve and reject from the web dashboard — the CLI only lists. See Suggest changes.
Environment variables
ANCHORIFY_CONFIG_DIR— override the config directory. Default:~/.config/anchorify. Redirects bothauth.jsonandpublished.json. Useful for sandboxed testing, so a logged-in session does not accidentally publish to prod. The legacyJF_CONFIG_DIRis still honored as a fallback.ANCHORIFY_HOST— server URL. When set together withANCHORIFY_TOKEN, these overrideauth.json. (A one-line stderr notice is printed ifauth.jsonexists and the env vars are taking precedence.) The legacyREPO_SHARE_HOSTis still honored as a fallback.ANCHORIFY_TOKEN— bearer token. Both env vars must be set for the override to fire; setting only one falls back toauth.json. The legacyREPO_SHARE_TOKENis still honored as a fallback.
Local mapping
The CLI stores a per-machine file-to-slug mapping at ~/.config/anchorify/published.json:
{
"/abs/path/to/file.md": {
"id": "chosen-or-random-slug",
"url": "https://anchorify.io/you/chosen-or-random-slug",
"filename": "file.md",
"last_published_at": "2026-05-06T07:19:38.781Z"
}
}
Plain JSON, mode 644. Rebuilt by re-publishing files; not yet auto-synced from the server. Items published from another machine or before the mapping existed show as — in anchorify list.
Next steps
- Web dashboard — the same actions in the browser.
- REST API — the underlying HTTP surface.
- Slug rules — the slug regex.