chore(docs): regenerate manual, man page, and component registry
This commit is contained in:
+240
-11
@@ -2491,11 +2491,16 @@ field signals a structure change.
|
|||||||
|
|
||||||
With no flags, runs both --agents and --plugins setup; --agents re-runs
|
With no flags, runs both --agents and --plugins setup; --agents re-runs
|
||||||
only the AGENTS.md / symlink step and --plugins only the plans/specs/
|
only the AGENTS.md / symlink step and --plugins only the plans/specs/
|
||||||
devlogs wiring step. Managed paths are added to .gitignore. The sub-repo
|
devlogs wiring step. Managed paths are added to .gitignore. At the end
|
||||||
is pulled first when it has an upstream, and at the end of every
|
of every invocation any uncommitted changes inside the sub-repo are
|
||||||
invocation any uncommitted changes inside it are auto-committed so
|
auto-committed so agent-made edits are captured automatically. Fully
|
||||||
agent-made edits are captured automatically. Fully idempotent: a second
|
idempotent: a second run produces no output and no new commits.
|
||||||
run produces no output and no new commits.
|
|
||||||
|
The commit is local only. Nothing here fetches or pushes: the wrappers
|
||||||
|
call this synchronously before starting an agent, and a network round
|
||||||
|
trip there blocks the launch until an unreachable remote times out and
|
||||||
|
can prompt for credentials with nobody watching. A sub-repo that has an
|
||||||
|
upstream is pulled by hand, on the user\[aq]s own schedule.
|
||||||
|
|
||||||
Called automatically by the claude and agy wrappers on every invocation.
|
Called automatically by the claude and agy wrappers on every invocation.
|
||||||
|
|
||||||
@@ -2509,7 +2514,8 @@ Arguments:
|
|||||||
|
|
||||||
Exit Status:
|
Exit Status:
|
||||||
0 Setup completed successfully
|
0 Setup completed successfully
|
||||||
1 Fatal error (git init failed, move failed, etc.)
|
1 Fatal error (git init failed, move failed, the AGENTS/ commit was
|
||||||
|
rejected, or an unresolved rebase blocked it)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
agents-init
|
agents-init
|
||||||
@@ -2519,6 +2525,196 @@ agents-init --quiet
|
|||||||
\f[R]
|
\f[R]
|
||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
|
\f[B]Dependencies:\f[R] \f[V]_agents_repo_install_tools\f[R],
|
||||||
|
\f[V]_agents_repo_sync\f[R], \f[V]_agents_init_ensure_gitignore\f[R]
|
||||||
|
.PP
|
||||||
|
\f[B]Used by:\f[R] \f[V]agy\f[R], \f[V]claude\f[R]
|
||||||
|
.SS agents-vault
|
||||||
|
.IP
|
||||||
|
.nf
|
||||||
|
\f[C]
|
||||||
|
Synopsis: agents-vault [--link] [--push] [--restore] [--status]
|
||||||
|
[--adopt=SLUG] [--remote=URL]
|
||||||
|
[-v | --verbose] [-q | --quiet] [-s | --silent]
|
||||||
|
[-h | --help]
|
||||||
|
|
||||||
|
Tracks curated agent memory in a host-scoped git repository so it
|
||||||
|
survives losing a machine. Complements agents-init, which scaffolds the
|
||||||
|
per-project AGENTS/ repo: that holds the shareable agent specification,
|
||||||
|
while this holds the personal memory an agent accumulates.
|
||||||
|
|
||||||
|
Memory does not live in any project tree. Claude keeps it under
|
||||||
|
\[ti]/.claude/projects/<mangled-path>/memory/ and agy keeps its knowledge
|
||||||
|
store under \[ti]/.gemini/antigravity-cli/, both outside every repository.
|
||||||
|
|
||||||
|
Entries are keyed by normalized git remote URL rather than by path, so
|
||||||
|
the key survives a machine change or a directory rename. The live
|
||||||
|
memory directory becomes a symlink into the vault, which makes backup
|
||||||
|
and restore the same operation: on a new machine, clone the vault once
|
||||||
|
and the first agents-vault run in any project relinks its memory
|
||||||
|
automatically. No manifest and no batch restore step are involved.
|
||||||
|
|
||||||
|
Only curated memory is tracked. Session transcripts are excluded (tens
|
||||||
|
of megabytes per project, growing per session). Paths are allowlisted,
|
||||||
|
never denylisted, so nothing new upstream adds can leak in. The
|
||||||
|
allowlist runs all the way down, not just at the top: inside agy\[aq]s
|
||||||
|
knowledge store only *.md and *.json files are copied, so a credential
|
||||||
|
file or a conversation database appearing there is left behind by the
|
||||||
|
same rule rather than by being known about in advance. Symlinks found
|
||||||
|
inside the store are neither followed nor copied, so the allowlist
|
||||||
|
bounds whose files it collects and not merely what kind.
|
||||||
|
|
||||||
|
Global state that belongs to no project is tracked as well. Claude\[aq]s
|
||||||
|
global memory directory (\[ti]/.claude/memory) is symlinked into the vault
|
||||||
|
exactly like per-project memory, and is only linked when one side or
|
||||||
|
the other already holds something, since that path does not exist by
|
||||||
|
default. agy\[aq]s knowledge store and settings.json are copied rather
|
||||||
|
than symlinked: agy partitions by conversation UUID rather than by
|
||||||
|
workspace, so it has no per-project slice, and its store sits beside
|
||||||
|
SQLite databases whose WAL sidecars must never be live-tracked inside
|
||||||
|
a git worktree. A failed copy is reported but is not fatal, because an
|
||||||
|
incomplete backup still leaves the agent working.
|
||||||
|
|
||||||
|
Because the slug is derived from the remote, gaining, losing, or
|
||||||
|
rewriting a project\[aq]s origin changes it. Each run detects this by
|
||||||
|
reading the previous slug straight off the live memory symlink\[aq]s
|
||||||
|
target (no guessing) and migrates that entry to the new slug before
|
||||||
|
relinking, so memory accumulated under the old key is never orphaned.
|
||||||
|
If both the old and new entries already hold content the migration is
|
||||||
|
ambiguous and is refused; resolve it with --adopt=SLUG. An entry that
|
||||||
|
is already at the new key but holds no memory -- the shape a fresh
|
||||||
|
clone always produces, since git cannot track an empty directory -- is
|
||||||
|
moved aside, not deleted, and its origin log is folded into the
|
||||||
|
migrated entry, so a clone\[aq]s provenance survives the rename. The
|
||||||
|
rename is atomic: a failure at any point leaves the vault exactly as
|
||||||
|
it was and reports it.
|
||||||
|
|
||||||
|
Run with no flags, the command scaffolds the vault, syncs global state,
|
||||||
|
links the current project, and commits. The other modes are exclusive
|
||||||
|
and each returns as soon as it is done:
|
||||||
|
|
||||||
|
--status is a report and mutates nothing at all. It is answered before
|
||||||
|
the vault is even scaffolded, so asking what the vault looks like never
|
||||||
|
creates it, never copies agy state into it, and never claims
|
||||||
|
\[ti]/.claude/memory. A missing vault is reported rather than built.
|
||||||
|
|
||||||
|
--restore walks every vault entry and relinks the live memory directory
|
||||||
|
of each one whose recorded origin path still exists, naming the rest so
|
||||||
|
they can be rebound by hand. It is a convenience: the ordinary per-
|
||||||
|
project run restores a cloned vault\[aq]s memory on its own.
|
||||||
|
|
||||||
|
--adopt=SLUG rebinds the current project\[aq]s entry to SLUG, which is how
|
||||||
|
a machine-specific local-* key or an ambiguous migration is resolved.
|
||||||
|
SLUG must match [a-z0-9._-]+ and be neither \[dq].\[dq] nor \[dq]..\[dq] -- the charset
|
||||||
|
the slug formula itself emits -- since it is interpolated into a vault
|
||||||
|
path and handed to git mv. The rename and the relink are atomic: if the
|
||||||
|
live memory directory cannot be repinned onto the new entry the rename
|
||||||
|
is rolled back, so an ordinary run still finds the original entry.
|
||||||
|
|
||||||
|
--remote=URL points the vault at a remote; --push commits, pulls, and
|
||||||
|
then pushes there. The pull happens only on this path. Committing needs
|
||||||
|
no remote at all, and both wrappers run this command synchronously
|
||||||
|
before starting an agent, so a fetch on the ordinary run would block
|
||||||
|
every launch for as long as an unreachable remote takes to time out --
|
||||||
|
and would take the local commit down with it, leaving an offline
|
||||||
|
machine with no backup at all.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
--link Scaffold the vault and link this project\[aq]s memory; skip
|
||||||
|
the final commit
|
||||||
|
--push Commit, pull, then push to the vault remote
|
||||||
|
--restore Walk the vault, relink what is possible, report the rest
|
||||||
|
--status Show entries, link health, remote state, and orphans
|
||||||
|
--adopt=SLUG Bind the current project to an existing vault entry
|
||||||
|
--remote=URL Set the vault remote
|
||||||
|
-v, --verbose Print all per-step output (default)
|
||||||
|
-q, --quiet Print one summary line only if changes were made
|
||||||
|
-s, --silent Suppress all output; errors only
|
||||||
|
-h, --help Show this help message and exit
|
||||||
|
|
||||||
|
Exit Status:
|
||||||
|
0 Completed successfully
|
||||||
|
1 Fatal error (vault unavailable, git failure, ambiguous migration,
|
||||||
|
invalid --adopt slug, nothing committed, or a push that did not
|
||||||
|
reach the remote)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
--status prints its report on stdout: the vault path, the remote and
|
||||||
|
how far ahead of it the vault is, a warning for an unresolved rebase,
|
||||||
|
then one line per entry reading \[dq]linked\[dq] or \[dq]orphan\[dq], the slug, and the
|
||||||
|
file count. Every other mode prints only verbosity-gated progress
|
||||||
|
lines, and nothing at all when there was nothing to do.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
Set __fish_agent_vault_dir to relocate the vault. Set
|
||||||
|
__fish_agent_vault_autopush to 1 to also push on wrapper launch; it
|
||||||
|
defaults to off because that push is synchronous and so delays every
|
||||||
|
launch. With it on, the pull and the push are each capped at 20
|
||||||
|
seconds, since git has no connect timeout of its own and an
|
||||||
|
unreachable remote otherwise blocks for minutes. An explicit --push
|
||||||
|
is left uncapped: it is watched, and it must report what a real
|
||||||
|
transfer really did. The cap is timeout(1); on a system that somehow
|
||||||
|
lacks it, autopush says so on stderr and does not push at all, since
|
||||||
|
an unbounded network call in front of a launch is the one outcome the
|
||||||
|
cap exists to prevent. --push still works there.
|
||||||
|
|
||||||
|
Over ssh the cap is delivered by setting GIT_SSH_COMMAND, which would
|
||||||
|
silently outrank the user\[aq]s own configuration -- so it is not set at
|
||||||
|
all when GIT_SSH_COMMAND is already exported or git\[aq]s core.sshCommand
|
||||||
|
is configured. A vault remote reachable only through a particular
|
||||||
|
identity file or ssh wrapper therefore keeps it, uncapped, rather than
|
||||||
|
failing to authenticate for the sake of a timeout.
|
||||||
|
|
||||||
|
--adopt rebinds an entry; it does not pin its name. The slug is
|
||||||
|
re-derived from the project on every run, so the next ordinary run
|
||||||
|
migrates the adopted entry straight back to the canonical key, carrying
|
||||||
|
the memory and the live link with it. That is the point rather than a
|
||||||
|
wart: adopting is how a mismatched or ambiguous binding is repaired, not
|
||||||
|
how an entry is given a permanent name of its own.
|
||||||
|
|
||||||
|
An entry\[aq]s origin file records the project path once, when the entry is
|
||||||
|
created, and is never refreshed. A project that later moves on disk
|
||||||
|
therefore keeps a stale path there and --restore degrades to reporting
|
||||||
|
it as unplaceable rather than relinking the wrong directory. Rebind
|
||||||
|
such an entry from the project itself with --adopt=SLUG.
|
||||||
|
|
||||||
|
The agy knowledge copy is merge-only. Files are copied into the vault
|
||||||
|
but are never removed from it, so a fact deleted upstream from agy\[aq]s
|
||||||
|
knowledge store persists in the vault indefinitely, and a restore or a
|
||||||
|
fresh clone brings it back. Prune such an entry from the vault by hand
|
||||||
|
if it must really be gone.
|
||||||
|
|
||||||
|
Three further variables exist only so the test suite can run against
|
||||||
|
throwaway directories instead of the real home, and are not meant for
|
||||||
|
everyday use. __fish_agent_vault_claude_root overrides Claude\[aq]s
|
||||||
|
per-project directory (\[ti]/.claude/projects), which is where the
|
||||||
|
per-project memory directories live. __fish_agent_vault_claude_home
|
||||||
|
overrides Claude\[aq]s home directory (\[ti]/.claude), whose memory
|
||||||
|
subdirectory holds the global memory. Those two name different paths
|
||||||
|
and setting one has no effect on the other.
|
||||||
|
__fish_agent_vault_agy_root overrides agy\[aq]s state directory
|
||||||
|
(\[ti]/.gemini/antigravity-cli), which is only ever read from.
|
||||||
|
|
||||||
|
The last two are not optional niceties. Without them, a test run on a
|
||||||
|
machine that has a real global memory directory would move it into a
|
||||||
|
throwaway directory and leave a dangling symlink behind, which is
|
||||||
|
strictly worse than having had no backup at all.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
agents-vault
|
||||||
|
agents-vault --status
|
||||||
|
agents-vault --remote=https://git.rootiest.dev/rootiest/agent-vault.git
|
||||||
|
agents-vault --push
|
||||||
|
agents-vault --adopt=git.rootiest.dev-rootiest-fish-config
|
||||||
|
agents-vault --restore
|
||||||
|
\f[R]
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
\f[B]Dependencies:\f[R] \f[V]_agents_vault_dir\f[R],
|
||||||
|
\f[V]_agents_repo_slug\f[R], \f[V]_agents_repo_local_slug\f[R],
|
||||||
|
\f[V]_agents_repo_ensure_symlink\f[R], \f[V]_agents_repo_sync\f[R],
|
||||||
|
\f[V]_agents_repo_install_tools\f[R], \f[V]git\f[R], \f[V]hostname\f[R]
|
||||||
|
.PP
|
||||||
\f[B]Used by:\f[R] \f[V]agy\f[R], \f[V]claude\f[R]
|
\f[B]Used by:\f[R] \f[V]agy\f[R], \f[V]claude\f[R]
|
||||||
.SS agy
|
.SS agy
|
||||||
.IP
|
.IP
|
||||||
@@ -2530,9 +2726,14 @@ Wrapper for the agy Antigravity AI CLI that ensures the AGENTS/
|
|||||||
sub-repository is initialized and any agent-made changes are committed
|
sub-repository is initialized and any agent-made changes are committed
|
||||||
before launch. Delegates all scaffold and commit logic to agents-init
|
before launch. Delegates all scaffold and commit logic to agents-init
|
||||||
--quiet (full setup), which ensures AGENTS/ is scaffolded and CLAUDE.md
|
--quiet (full setup), which ensures AGENTS/ is scaffolded and CLAUDE.md
|
||||||
is symlinked to AGENTS/AGENTS.md in the current project. Arguments are
|
is symlinked to AGENTS/AGENTS.md in the current project.
|
||||||
forwarded verbatim to the real agy binary, except for -r/--resume which
|
|
||||||
are translated to -c/--continue.
|
Also syncs the host-scoped agent memory vault (agents-vault). agy has
|
||||||
|
no session-end hook, so its memory is captured on the next launch
|
||||||
|
rather than at session end.
|
||||||
|
|
||||||
|
Arguments are forwarded verbatim to the real agy binary, except for
|
||||||
|
-r/--resume which are translated to -c/--continue.
|
||||||
|
|
||||||
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
||||||
(or the __fish_config_opinionated master), the command is passed through
|
(or the __fish_config_opinionated master), the command is passed through
|
||||||
@@ -2552,7 +2753,7 @@ agy models
|
|||||||
\f[R]
|
\f[R]
|
||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
\f[B]Dependencies:\f[R] \f[V]agents-init\f[R]
|
\f[B]Dependencies:\f[R] \f[V]agents-init\f[R], \f[V]agents-vault\f[R]
|
||||||
.SS antigravity-ide
|
.SS antigravity-ide
|
||||||
.IP
|
.IP
|
||||||
.nf
|
.nf
|
||||||
@@ -2580,6 +2781,12 @@ initialized and any agent-made changes are committed before launch.
|
|||||||
Delegates all scaffold and commit logic to agents-init --quiet (full
|
Delegates all scaffold and commit logic to agents-init --quiet (full
|
||||||
setup), which ensures AGENTS/ is scaffolded and CLAUDE.md is symlinked
|
setup), which ensures AGENTS/ is scaffolded and CLAUDE.md is symlinked
|
||||||
to AGENTS/AGENTS.md in the current project.
|
to AGENTS/AGENTS.md in the current project.
|
||||||
|
|
||||||
|
Also syncs the host-scoped agent memory vault (agents-vault), which
|
||||||
|
tracks curated memory living outside the project tree. The vault
|
||||||
|
commits on launch but does not push; pushing happens from the Claude
|
||||||
|
Code SessionEnd hook or an explicit agents-vault --push.
|
||||||
|
|
||||||
All arguments are forwarded verbatim to the real claude binary.
|
All arguments are forwarded verbatim to the real claude binary.
|
||||||
|
|
||||||
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
||||||
@@ -2599,7 +2806,7 @@ claude \[dq]Explain the recent changes\[dq]
|
|||||||
\f[R]
|
\f[R]
|
||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
\f[B]Dependencies:\f[R] \f[V]agents-init\f[R]
|
\f[B]Dependencies:\f[R] \f[V]agents-init\f[R], \f[V]agents-vault\f[R]
|
||||||
.SS claude-docs
|
.SS claude-docs
|
||||||
.IP
|
.IP
|
||||||
.nf
|
.nf
|
||||||
@@ -3893,6 +4100,28 @@ Run \f[V]config-settings\f[R] and press Enter on a category row to
|
|||||||
browse and toggle its sub-categories interactively.
|
browse and toggle its sub-categories interactively.
|
||||||
See Components Reference for the full sub-category breakdown of every
|
See Components Reference for the full sub-category breakdown of every
|
||||||
category.
|
category.
|
||||||
|
.SS Agent Memory Vault
|
||||||
|
.IP
|
||||||
|
.nf
|
||||||
|
\f[C]
|
||||||
|
__fish_agent_vault_dir
|
||||||
|
|
||||||
|
Overrides the agent memory vault location. Defaults to
|
||||||
|
$XDG_DATA_HOME/agent-vault (or \[ti]/.local/share/agent-vault).
|
||||||
|
|
||||||
|
__fish_agent_vault_autopush
|
||||||
|
|
||||||
|
When set to 1, agents-vault also pushes on wrapper launch. Defaults to
|
||||||
|
off: the vault commits locally on every launch and pushes from the
|
||||||
|
Claude Code SessionEnd hook or an explicit agents-vault --push. That
|
||||||
|
push is synchronous, so with autopush on the pull and the push are
|
||||||
|
each capped at 20 seconds; an explicit --push is left uncapped.
|
||||||
|
\f[R]
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
NOTE: With autopush off and no SessionEnd hook installed, backups
|
||||||
|
accumulate locally and never reach the remote.
|
||||||
|
Run \f[V]agents-vault --status\f[R] to check how far ahead the vault is.
|
||||||
.SS Prompt and Theme
|
.SS Prompt and Theme
|
||||||
.SS Starship
|
.SS Starship
|
||||||
.PP
|
.PP
|
||||||
|
|||||||
+232
-11
@@ -1975,11 +1975,16 @@ functions). They are active in all interactive sessions.
|
|||||||
|
|
||||||
With no flags, runs both --agents and --plugins setup; --agents re-runs
|
With no flags, runs both --agents and --plugins setup; --agents re-runs
|
||||||
only the AGENTS.md / symlink step and --plugins only the plans/specs/
|
only the AGENTS.md / symlink step and --plugins only the plans/specs/
|
||||||
devlogs wiring step. Managed paths are added to .gitignore. The sub-repo
|
devlogs wiring step. Managed paths are added to .gitignore. At the end
|
||||||
is pulled first when it has an upstream, and at the end of every
|
of every invocation any uncommitted changes inside the sub-repo are
|
||||||
invocation any uncommitted changes inside it are auto-committed so
|
auto-committed so agent-made edits are captured automatically. Fully
|
||||||
agent-made edits are captured automatically. Fully idempotent: a second
|
idempotent: a second run produces no output and no new commits.
|
||||||
run produces no output and no new commits.
|
|
||||||
|
The commit is local only. Nothing here fetches or pushes: the wrappers
|
||||||
|
call this synchronously before starting an agent, and a network round
|
||||||
|
trip there blocks the launch until an unreachable remote times out and
|
||||||
|
can prompt for credentials with nobody watching. A sub-repo that has an
|
||||||
|
upstream is pulled by hand, on the user's own schedule.
|
||||||
|
|
||||||
Called automatically by the claude and agy wrappers on every invocation.
|
Called automatically by the claude and agy wrappers on every invocation.
|
||||||
|
|
||||||
@@ -1993,7 +1998,8 @@ functions). They are active in all interactive sessions.
|
|||||||
|
|
||||||
Exit Status:
|
Exit Status:
|
||||||
0 Setup completed successfully
|
0 Setup completed successfully
|
||||||
1 Fatal error (git init failed, move failed, etc.)
|
1 Fatal error (git init failed, move failed, the AGENTS/ commit was
|
||||||
|
rejected, or an unresolved rebase blocked it)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
agents-init
|
agents-init
|
||||||
@@ -2001,6 +2007,189 @@ functions). They are active in all interactive sessions.
|
|||||||
agents-init --plugins
|
agents-init --plugins
|
||||||
agents-init --quiet
|
agents-init --quiet
|
||||||
|
|
||||||
|
**Dependencies:** `_agents_repo_install_tools`, `_agents_repo_sync`, `_agents_init_ensure_gitignore`
|
||||||
|
|
||||||
|
**Used by:** `agy`, `claude`
|
||||||
|
|
||||||
|
### agents-vault
|
||||||
|
|
||||||
|
Synopsis: agents-vault [--link] [--push] [--restore] [--status]
|
||||||
|
[--adopt=SLUG] [--remote=URL]
|
||||||
|
[-v | --verbose] [-q | --quiet] [-s | --silent]
|
||||||
|
[-h | --help]
|
||||||
|
|
||||||
|
Tracks curated agent memory in a host-scoped git repository so it
|
||||||
|
survives losing a machine. Complements agents-init, which scaffolds the
|
||||||
|
per-project AGENTS/ repo: that holds the shareable agent specification,
|
||||||
|
while this holds the personal memory an agent accumulates.
|
||||||
|
|
||||||
|
Memory does not live in any project tree. Claude keeps it under
|
||||||
|
~/.claude/projects/<mangled-path>/memory/ and agy keeps its knowledge
|
||||||
|
store under ~/.gemini/antigravity-cli/, both outside every repository.
|
||||||
|
|
||||||
|
Entries are keyed by normalized git remote URL rather than by path, so
|
||||||
|
the key survives a machine change or a directory rename. The live
|
||||||
|
memory directory becomes a symlink into the vault, which makes backup
|
||||||
|
and restore the same operation: on a new machine, clone the vault once
|
||||||
|
and the first agents-vault run in any project relinks its memory
|
||||||
|
automatically. No manifest and no batch restore step are involved.
|
||||||
|
|
||||||
|
Only curated memory is tracked. Session transcripts are excluded (tens
|
||||||
|
of megabytes per project, growing per session). Paths are allowlisted,
|
||||||
|
never denylisted, so nothing new upstream adds can leak in. The
|
||||||
|
allowlist runs all the way down, not just at the top: inside agy's
|
||||||
|
knowledge store only *.md and *.json files are copied, so a credential
|
||||||
|
file or a conversation database appearing there is left behind by the
|
||||||
|
same rule rather than by being known about in advance. Symlinks found
|
||||||
|
inside the store are neither followed nor copied, so the allowlist
|
||||||
|
bounds whose files it collects and not merely what kind.
|
||||||
|
|
||||||
|
Global state that belongs to no project is tracked as well. Claude's
|
||||||
|
global memory directory (~/.claude/memory) is symlinked into the vault
|
||||||
|
exactly like per-project memory, and is only linked when one side or
|
||||||
|
the other already holds something, since that path does not exist by
|
||||||
|
default. agy's knowledge store and settings.json are copied rather
|
||||||
|
than symlinked: agy partitions by conversation UUID rather than by
|
||||||
|
workspace, so it has no per-project slice, and its store sits beside
|
||||||
|
SQLite databases whose WAL sidecars must never be live-tracked inside
|
||||||
|
a git worktree. A failed copy is reported but is not fatal, because an
|
||||||
|
incomplete backup still leaves the agent working.
|
||||||
|
|
||||||
|
Because the slug is derived from the remote, gaining, losing, or
|
||||||
|
rewriting a project's origin changes it. Each run detects this by
|
||||||
|
reading the previous slug straight off the live memory symlink's
|
||||||
|
target (no guessing) and migrates that entry to the new slug before
|
||||||
|
relinking, so memory accumulated under the old key is never orphaned.
|
||||||
|
If both the old and new entries already hold content the migration is
|
||||||
|
ambiguous and is refused; resolve it with --adopt=SLUG. An entry that
|
||||||
|
is already at the new key but holds no memory -- the shape a fresh
|
||||||
|
clone always produces, since git cannot track an empty directory -- is
|
||||||
|
moved aside, not deleted, and its origin log is folded into the
|
||||||
|
migrated entry, so a clone's provenance survives the rename. The
|
||||||
|
rename is atomic: a failure at any point leaves the vault exactly as
|
||||||
|
it was and reports it.
|
||||||
|
|
||||||
|
Run with no flags, the command scaffolds the vault, syncs global state,
|
||||||
|
links the current project, and commits. The other modes are exclusive
|
||||||
|
and each returns as soon as it is done:
|
||||||
|
|
||||||
|
--status is a report and mutates nothing at all. It is answered before
|
||||||
|
the vault is even scaffolded, so asking what the vault looks like never
|
||||||
|
creates it, never copies agy state into it, and never claims
|
||||||
|
~/.claude/memory. A missing vault is reported rather than built.
|
||||||
|
|
||||||
|
--restore walks every vault entry and relinks the live memory directory
|
||||||
|
of each one whose recorded origin path still exists, naming the rest so
|
||||||
|
they can be rebound by hand. It is a convenience: the ordinary per-
|
||||||
|
project run restores a cloned vault's memory on its own.
|
||||||
|
|
||||||
|
--adopt=SLUG rebinds the current project's entry to SLUG, which is how
|
||||||
|
a machine-specific local-* key or an ambiguous migration is resolved.
|
||||||
|
SLUG must match [a-z0-9._-]+ and be neither "." nor ".." -- the charset
|
||||||
|
the slug formula itself emits -- since it is interpolated into a vault
|
||||||
|
path and handed to git mv. The rename and the relink are atomic: if the
|
||||||
|
live memory directory cannot be repinned onto the new entry the rename
|
||||||
|
is rolled back, so an ordinary run still finds the original entry.
|
||||||
|
|
||||||
|
--remote=URL points the vault at a remote; --push commits, pulls, and
|
||||||
|
then pushes there. The pull happens only on this path. Committing needs
|
||||||
|
no remote at all, and both wrappers run this command synchronously
|
||||||
|
before starting an agent, so a fetch on the ordinary run would block
|
||||||
|
every launch for as long as an unreachable remote takes to time out --
|
||||||
|
and would take the local commit down with it, leaving an offline
|
||||||
|
machine with no backup at all.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
--link Scaffold the vault and link this project's memory; skip
|
||||||
|
the final commit
|
||||||
|
--push Commit, pull, then push to the vault remote
|
||||||
|
--restore Walk the vault, relink what is possible, report the rest
|
||||||
|
--status Show entries, link health, remote state, and orphans
|
||||||
|
--adopt=SLUG Bind the current project to an existing vault entry
|
||||||
|
--remote=URL Set the vault remote
|
||||||
|
-v, --verbose Print all per-step output (default)
|
||||||
|
-q, --quiet Print one summary line only if changes were made
|
||||||
|
-s, --silent Suppress all output; errors only
|
||||||
|
-h, --help Show this help message and exit
|
||||||
|
|
||||||
|
Exit Status:
|
||||||
|
0 Completed successfully
|
||||||
|
1 Fatal error (vault unavailable, git failure, ambiguous migration,
|
||||||
|
invalid --adopt slug, nothing committed, or a push that did not
|
||||||
|
reach the remote)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
--status prints its report on stdout: the vault path, the remote and
|
||||||
|
how far ahead of it the vault is, a warning for an unresolved rebase,
|
||||||
|
then one line per entry reading "linked" or "orphan", the slug, and the
|
||||||
|
file count. Every other mode prints only verbosity-gated progress
|
||||||
|
lines, and nothing at all when there was nothing to do.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
Set __fish_agent_vault_dir to relocate the vault. Set
|
||||||
|
__fish_agent_vault_autopush to 1 to also push on wrapper launch; it
|
||||||
|
defaults to off because that push is synchronous and so delays every
|
||||||
|
launch. With it on, the pull and the push are each capped at 20
|
||||||
|
seconds, since git has no connect timeout of its own and an
|
||||||
|
unreachable remote otherwise blocks for minutes. An explicit --push
|
||||||
|
is left uncapped: it is watched, and it must report what a real
|
||||||
|
transfer really did. The cap is timeout(1); on a system that somehow
|
||||||
|
lacks it, autopush says so on stderr and does not push at all, since
|
||||||
|
an unbounded network call in front of a launch is the one outcome the
|
||||||
|
cap exists to prevent. --push still works there.
|
||||||
|
|
||||||
|
Over ssh the cap is delivered by setting GIT_SSH_COMMAND, which would
|
||||||
|
silently outrank the user's own configuration -- so it is not set at
|
||||||
|
all when GIT_SSH_COMMAND is already exported or git's core.sshCommand
|
||||||
|
is configured. A vault remote reachable only through a particular
|
||||||
|
identity file or ssh wrapper therefore keeps it, uncapped, rather than
|
||||||
|
failing to authenticate for the sake of a timeout.
|
||||||
|
|
||||||
|
--adopt rebinds an entry; it does not pin its name. The slug is
|
||||||
|
re-derived from the project on every run, so the next ordinary run
|
||||||
|
migrates the adopted entry straight back to the canonical key, carrying
|
||||||
|
the memory and the live link with it. That is the point rather than a
|
||||||
|
wart: adopting is how a mismatched or ambiguous binding is repaired, not
|
||||||
|
how an entry is given a permanent name of its own.
|
||||||
|
|
||||||
|
An entry's origin file records the project path once, when the entry is
|
||||||
|
created, and is never refreshed. A project that later moves on disk
|
||||||
|
therefore keeps a stale path there and --restore degrades to reporting
|
||||||
|
it as unplaceable rather than relinking the wrong directory. Rebind
|
||||||
|
such an entry from the project itself with --adopt=SLUG.
|
||||||
|
|
||||||
|
The agy knowledge copy is merge-only. Files are copied into the vault
|
||||||
|
but are never removed from it, so a fact deleted upstream from agy's
|
||||||
|
knowledge store persists in the vault indefinitely, and a restore or a
|
||||||
|
fresh clone brings it back. Prune such an entry from the vault by hand
|
||||||
|
if it must really be gone.
|
||||||
|
|
||||||
|
Three further variables exist only so the test suite can run against
|
||||||
|
throwaway directories instead of the real home, and are not meant for
|
||||||
|
everyday use. __fish_agent_vault_claude_root overrides Claude's
|
||||||
|
per-project directory (~/.claude/projects), which is where the
|
||||||
|
per-project memory directories live. __fish_agent_vault_claude_home
|
||||||
|
overrides Claude's home directory (~/.claude), whose memory
|
||||||
|
subdirectory holds the global memory. Those two name different paths
|
||||||
|
and setting one has no effect on the other.
|
||||||
|
__fish_agent_vault_agy_root overrides agy's state directory
|
||||||
|
(~/.gemini/antigravity-cli), which is only ever read from.
|
||||||
|
|
||||||
|
The last two are not optional niceties. Without them, a test run on a
|
||||||
|
machine that has a real global memory directory would move it into a
|
||||||
|
throwaway directory and leave a dangling symlink behind, which is
|
||||||
|
strictly worse than having had no backup at all.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
agents-vault
|
||||||
|
agents-vault --status
|
||||||
|
agents-vault --remote=https://git.rootiest.dev/rootiest/agent-vault.git
|
||||||
|
agents-vault --push
|
||||||
|
agents-vault --adopt=git.rootiest.dev-rootiest-fish-config
|
||||||
|
agents-vault --restore
|
||||||
|
|
||||||
|
**Dependencies:** `_agents_vault_dir`, `_agents_repo_slug`, `_agents_repo_local_slug`, `_agents_repo_ensure_symlink`, `_agents_repo_sync`, `_agents_repo_install_tools`, `git`, `hostname`
|
||||||
|
|
||||||
**Used by:** `agy`, `claude`
|
**Used by:** `agy`, `claude`
|
||||||
|
|
||||||
### agy
|
### agy
|
||||||
@@ -2011,9 +2200,14 @@ functions). They are active in all interactive sessions.
|
|||||||
sub-repository is initialized and any agent-made changes are committed
|
sub-repository is initialized and any agent-made changes are committed
|
||||||
before launch. Delegates all scaffold and commit logic to agents-init
|
before launch. Delegates all scaffold and commit logic to agents-init
|
||||||
--quiet (full setup), which ensures AGENTS/ is scaffolded and CLAUDE.md
|
--quiet (full setup), which ensures AGENTS/ is scaffolded and CLAUDE.md
|
||||||
is symlinked to AGENTS/AGENTS.md in the current project. Arguments are
|
is symlinked to AGENTS/AGENTS.md in the current project.
|
||||||
forwarded verbatim to the real agy binary, except for -r/--resume which
|
|
||||||
are translated to -c/--continue.
|
Also syncs the host-scoped agent memory vault (agents-vault). agy has
|
||||||
|
no session-end hook, so its memory is captured on the next launch
|
||||||
|
rather than at session end.
|
||||||
|
|
||||||
|
Arguments are forwarded verbatim to the real agy binary, except for
|
||||||
|
-r/--resume which are translated to -c/--continue.
|
||||||
|
|
||||||
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
||||||
(or the __fish_config_opinionated master), the command is passed through
|
(or the __fish_config_opinionated master), the command is passed through
|
||||||
@@ -2031,7 +2225,7 @@ functions). They are active in all interactive sessions.
|
|||||||
agy -i "initial prompt"
|
agy -i "initial prompt"
|
||||||
agy models
|
agy models
|
||||||
|
|
||||||
**Dependencies:** `agents-init`
|
**Dependencies:** `agents-init`, `agents-vault`
|
||||||
|
|
||||||
### antigravity-ide
|
### antigravity-ide
|
||||||
|
|
||||||
@@ -2055,6 +2249,12 @@ functions). They are active in all interactive sessions.
|
|||||||
Delegates all scaffold and commit logic to agents-init --quiet (full
|
Delegates all scaffold and commit logic to agents-init --quiet (full
|
||||||
setup), which ensures AGENTS/ is scaffolded and CLAUDE.md is symlinked
|
setup), which ensures AGENTS/ is scaffolded and CLAUDE.md is symlinked
|
||||||
to AGENTS/AGENTS.md in the current project.
|
to AGENTS/AGENTS.md in the current project.
|
||||||
|
|
||||||
|
Also syncs the host-scoped agent memory vault (agents-vault), which
|
||||||
|
tracks curated memory living outside the project tree. The vault
|
||||||
|
commits on launch but does not push; pushing happens from the Claude
|
||||||
|
Code SessionEnd hook or an explicit agents-vault --push.
|
||||||
|
|
||||||
All arguments are forwarded verbatim to the real claude binary.
|
All arguments are forwarded verbatim to the real claude binary.
|
||||||
|
|
||||||
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
Opinionated component (C1): when disabled via __fish_config_op_aliases
|
||||||
@@ -2072,7 +2272,7 @@ functions). They are active in all interactive sessions.
|
|||||||
claude --resume
|
claude --resume
|
||||||
claude "Explain the recent changes"
|
claude "Explain the recent changes"
|
||||||
|
|
||||||
**Dependencies:** `agents-init`
|
**Dependencies:** `agents-init`, `agents-vault`
|
||||||
|
|
||||||
### claude-docs
|
### claude-docs
|
||||||
|
|
||||||
@@ -3017,6 +3217,27 @@ interactively. See Components Reference for the
|
|||||||
full sub-category breakdown of every category.
|
full sub-category breakdown of every category.
|
||||||
|
|
||||||
|
|
||||||
|
## Agent Memory Vault
|
||||||
|
|
||||||
|
__fish_agent_vault_dir
|
||||||
|
|
||||||
|
Overrides the agent memory vault location. Defaults to
|
||||||
|
$XDG_DATA_HOME/agent-vault (or ~/.local/share/agent-vault).
|
||||||
|
|
||||||
|
__fish_agent_vault_autopush
|
||||||
|
|
||||||
|
When set to 1, agents-vault also pushes on wrapper launch. Defaults to
|
||||||
|
off: the vault commits locally on every launch and pushes from the
|
||||||
|
Claude Code SessionEnd hook or an explicit agents-vault --push. That
|
||||||
|
push is synchronous, so with autopush on the pull and the push are
|
||||||
|
each capped at 20 seconds; an explicit --push is left uncapped.
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
With autopush off and no SessionEnd hook installed, backups accumulate
|
||||||
|
locally and never reach the remote. Run `agents-vault --status` to check
|
||||||
|
how far ahead the vault is.
|
||||||
|
|
||||||
|
|
||||||
## Prompt and Theme
|
## Prompt and Theme
|
||||||
|
|
||||||
### Starship
|
### Starship
|
||||||
|
|||||||
Reference in New Issue
Block a user