git-a2a 1.7.1-rc.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,476 +0,0 @@
|
|
|
1
|
-
# git-a2a command reference
|
|
2
|
-
|
|
3
|
-
Every command accepts the global `--timeout DURATION` option (default `120s`) and `--yes` as a
|
|
4
|
-
non-interactive default-selection flag. Only `init` may prompt, and only on a TTY without
|
|
5
|
-
`--yes` or `--answers`. Requested data is written to
|
|
6
|
-
stdout; verdicts and advisories go to stderr. Exit `0` means success, `1` means a
|
|
7
|
-
completed check found drift/failure, and `2` means invalid input or nothing resolved.
|
|
8
|
-
The repository's `.hint` sources and the commands used to read them are explained in
|
|
9
|
-
[Specification as source (HINT)](../README.md#specification-as-source-hint).
|
|
10
|
-
|
|
11
|
-
## init
|
|
12
|
-
|
|
13
|
-
`git-a2a init [--id ID] [--description TEXT] [--surface DIR] [--export ECOSYSTEM=NAME]
|
|
14
|
-
[--example lib|app] [--interview [--json] | --answers FILE|-] [--yes]`
|
|
15
|
-
creates canonical `a2amodule.yml` and adds `.git-a2a/` to `.gitignore`. Repeat `--export`.
|
|
16
|
-
On a TTY, plain `init` asks the ordered interview questions, prints defaults and a manifest
|
|
17
|
-
preview, and confirms the write; `?` prints a question's why-line. Non-TTY input accepts computed
|
|
18
|
-
defaults and names `--answers` instead of blocking. `--interview` is read-only and prints each
|
|
19
|
-
question's field path, prompt, why, computed default, confidence, and validation; `--json` makes
|
|
20
|
-
that briefing structured. `--answers <file>` accepts a JSON or YAML map keyed by those field
|
|
21
|
-
paths; use `--answers -` to read the map from stdin. Missing keys use defaults and unknown keys
|
|
22
|
-
exit `2` in sorted order. Given the same
|
|
23
|
-
repository state and answers, TTY and answers modes write byte-identical manifests.
|
|
24
|
-
`--example lib|app` writes a complete commented baseline and composes with `--answers`.
|
|
25
|
-
Exit `1` if a write would replace a manifest; invalid answers/combinations exit `2`.
|
|
26
|
-
|
|
27
|
-
```text
|
|
28
|
-
$ git-a2a init --id acme-app --yes
|
|
29
|
-
initialized module acme-app
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
```text
|
|
33
|
-
$ git-a2a init --example lib --id acme-lib
|
|
34
|
-
initialized lib example module acme-lib
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## validate
|
|
38
|
-
|
|
39
|
-
`git-a2a validate [FILE ...] [--json] [--schema-report]` validates manifests and locks; without
|
|
40
|
-
paths it checks the files in the current module. `--schema-report` adds the schema number and a
|
|
41
|
-
sorted list of optional schema paths that the file actually uses; sequence elements use `[]`.
|
|
42
|
-
With `--json`, those values are `schema` and `features` on each structured result. Invalid files
|
|
43
|
-
exit `1`; a schema newer than the tool is refused with an upgrade diagnostic and exits `2`; an
|
|
44
|
-
empty subject set also exits `2`.
|
|
45
|
-
|
|
46
|
-
```text
|
|
47
|
-
$ git-a2a validate
|
|
48
|
-
a2amodule.yml: valid
|
|
49
|
-
1 file(s): valid
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
```text
|
|
53
|
-
$ git-a2a validate a2amodule.yml --schema-report
|
|
54
|
-
a2amodule.yml: valid
|
|
55
|
-
schema: 1
|
|
56
|
-
feature: module.exports
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## add
|
|
60
|
-
|
|
61
|
-
`git-a2a add URL [--id ID] [--path DIR] [--track locked|floating] [--wire LIST|--no-wire]
|
|
62
|
-
[--vendor submodule|copy] [--vendor-path PATH] [--no-refresh] [--insecure-skip-signers]`
|
|
63
|
-
fetches the remote manifest, resolves one commit, wires detected ecosystems, writes the lock,
|
|
64
|
-
and snapshots cards. `--vendor` explicitly materialises the locked source as a submodule or copy;
|
|
65
|
-
its default path is `deps/<id>`, overridden by `--vendor-path`. `--no-refresh` edits project
|
|
66
|
-
manifests but skips package-manager Refresh.
|
|
67
|
-
Vendored native exports use local path forms (npm `file:`, Cargo `path`, Go `replace`, uv/Pub/Mix
|
|
68
|
-
`path`, Composer `type: path`); build-system adapters generate owned local integration files.
|
|
69
|
-
Meson requires `--vendor-path subprojects/<id>`.
|
|
70
|
-
Missing optional toolchains warn but do not prevent the manifest edit.
|
|
71
|
-
When a predeclared dependency requires signed commits, verification happens before any write;
|
|
72
|
-
`--insecure-skip-signers` is an explicit emergency override recorded as `verified: skipped`.
|
|
73
|
-
Exit `1` covers fetch/wiring failure and `2` invalid arguments.
|
|
74
|
-
|
|
75
|
-
```text
|
|
76
|
-
$ git-a2a add https://github.com/acme/lib.git --wire npm,golang
|
|
77
|
-
added acme-lib at ea1e8656ad1e6eaeef81759c10969e64defdd9ce
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## set
|
|
81
|
-
|
|
82
|
-
`git-a2a set ID [--git URL] [--ref REF] [--path DIR] [--track locked|floating] [--id NEW-ID]
|
|
83
|
-
[--vendor submodule|copy|--no-vendor] [--vendor-path PATH] [--force] [--dry-run] [--no-refresh]
|
|
84
|
-
[--insecure-skip-signers]`
|
|
85
|
-
transactionally changes a dependency source, identity, or vendoring choice and rewires it.
|
|
86
|
-
`--force` explicitly permits replacing dirty vendored content; `--no-refresh` skips
|
|
87
|
-
package-manager Refresh. Exit `1`
|
|
88
|
-
means the transaction failed and rolled back; exit `2` means the ID/options did not resolve.
|
|
89
|
-
|
|
90
|
-
```text
|
|
91
|
-
$ git-a2a set acme-lib --ref release/1.x --dry-run
|
|
92
|
-
would set acme-lib to ref release/1.x
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## pin
|
|
96
|
-
|
|
97
|
-
`git-a2a pin ID [COMMIT] [--no-refresh]` changes the dependency ref to a full 40-character
|
|
98
|
-
commit. Without `COMMIT`, the currently locked commit is used. `--no-refresh` skips
|
|
99
|
-
package-manager Refresh. Exit `1` means lock/rewiring failure; exit `2`
|
|
100
|
-
means an unknown ID or invalid SHA.
|
|
101
|
-
|
|
102
|
-
```text
|
|
103
|
-
$ git-a2a pin acme-lib
|
|
104
|
-
set acme-lib to https://github.com/acme/lib.git at ea1e8656ad1e6eaeef81759c10969e64defdd9ce
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## unpin
|
|
108
|
-
|
|
109
|
-
`git-a2a unpin ID --ref REF [--track locked|floating] [--no-refresh]` returns a pinned dependency
|
|
110
|
-
to a branch or tag and resolves it immediately. `--no-refresh` skips package-manager Refresh.
|
|
111
|
-
Exit `1` means the transaction failed; exit `2` means the arguments or dependency were invalid.
|
|
112
|
-
|
|
113
|
-
```text
|
|
114
|
-
$ git-a2a unpin acme-lib --ref main
|
|
115
|
-
set acme-lib to https://github.com/acme/lib.git at ea1e8656ad1e6eaeef81759c10969e64defdd9ce
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## wire
|
|
119
|
-
|
|
120
|
-
`git-a2a wire [ID] [--ecosystem NAME] [--no-refresh]` reapplies declared exports to detected
|
|
121
|
-
project files. With `--ecosystem`, that adapter is mandatory; `--no-refresh` skips its
|
|
122
|
-
package-manager Refresh. Invalid/missing subjects exit `2`; a required adapter failure exits `1`.
|
|
123
|
-
|
|
124
|
-
```text
|
|
125
|
-
$ git-a2a wire acme-lib --ecosystem npm
|
|
126
|
-
npm: wired acme-lib
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
## update
|
|
130
|
-
|
|
131
|
-
`git-a2a update [ID ...] [--check] [--review|--no-review] [--follow-moves] [--accept-keys]
|
|
132
|
-
[--force] [--no-refresh] [--insecure-skip-signers]`
|
|
133
|
-
resolves upstream refs and transactionally updates changed dependencies. `--check` only reports
|
|
134
|
-
availability; `--review` prints manifest/surface diffs; `--no-refresh` skips package-manager
|
|
135
|
-
Refresh; moves require explicit `--follow-moves`. Dirty or drifted vendored content refuses an
|
|
136
|
-
update unless `--force` makes replacement explicit. Exit `1`
|
|
137
|
-
means updates exist in check mode or an update failed; exit `2` means no dependency resolved.
|
|
138
|
-
|
|
139
|
-
```text
|
|
140
|
-
$ git-a2a update --check
|
|
141
|
-
acme-lib: ea1e8656ad1e -> 3ad806dc575c
|
|
142
|
-
1 dependency update(s) available
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## remove
|
|
146
|
-
|
|
147
|
-
`git-a2a remove ID [--keep-wiring] [--force]` removes the manifest/lock/cache entry, its vendored
|
|
148
|
-
tree, and normally unwires all owned package-manager entries. Dirty or drifted vendored content
|
|
149
|
-
is retained unless `--force` explicitly permits its deletion. Exit `1` means removal failed;
|
|
150
|
-
exit `2` means the ID/options did not resolve.
|
|
151
|
-
|
|
152
|
-
After any successful `add`, `update`, `set`, `pin`, `unpin`, `wire`, or `remove`, an existing
|
|
153
|
-
`AGENTS.md` managed block is rendered again as the final mutation. These commands never create a
|
|
154
|
-
new block; use `sync` once to opt in.
|
|
155
|
-
|
|
156
|
-
```text
|
|
157
|
-
$ git-a2a remove acme-lib
|
|
158
|
-
removed acme-lib (cache deleted; it can be recreated by add)
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## fetch
|
|
162
|
-
|
|
163
|
-
`git-a2a fetch [ID ...] [--surface] [--json] [--insecure-skip-signers]` restores disposable
|
|
164
|
-
`.git-a2a/cache` content from the exact commits and hashes in `a2amodule.lock`. Without IDs it
|
|
165
|
-
fetches every dependency; `--surface` also restores a declared surface whose tree hash is already
|
|
166
|
-
recorded in the lock. A declared vendored checkout is also restored and verified from the lock.
|
|
167
|
-
For submodule mode this is equivalent to an exact locked `git submodule update --init`; copy mode
|
|
168
|
-
is reconstructed from locked Git tree bytes.
|
|
169
|
-
It never resolves a moving ref and never changes the manifest, lock, or package-manager files.
|
|
170
|
-
Missing/incomplete lock entries and hash mismatches exit `1`; invalid
|
|
171
|
-
options or an empty dependency set exit `2`.
|
|
172
|
-
|
|
173
|
-
```text
|
|
174
|
-
$ git-a2a fetch --json
|
|
175
|
-
[{"id":"acme-lib","commit":"ea1e8656ad1e6eaeef81759c10969e64defdd9ce","manifest":"sha256:…","method":"sparse"}]
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## show
|
|
179
|
-
|
|
180
|
-
`git-a2a show [ID] [--json] [--surface]` prints the own or cached dependency manifest. With
|
|
181
|
-
`--surface`, it materialises and lists the published surface before showing it. Exit `2` means
|
|
182
|
-
the module or surface was not resolvable.
|
|
183
|
-
|
|
184
|
-
```text
|
|
185
|
-
$ git-a2a show acme-lib --surface
|
|
186
|
-
surface/API.md
|
|
187
|
-
schema: 1
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
## sync
|
|
191
|
-
|
|
192
|
-
`git-a2a sync [--check] [--brief] [--target FILE]` renders the dependency/owner roster into
|
|
193
|
-
`AGENTS.md` and repeated targets. `--check` exits `1` without writing when blocks are stale.
|
|
194
|
-
|
|
195
|
-
```text
|
|
196
|
-
$ git-a2a sync
|
|
197
|
-
AGENTS.md
|
|
198
|
-
updated 1 managed block(s)
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
## who
|
|
202
|
-
|
|
203
|
-
`git-a2a who [ID] [--intent INTENT] [--path FILE] [--json]` applies intent → role → scoped
|
|
204
|
-
agent → contact routing. No match exits `2`.
|
|
205
|
-
|
|
206
|
-
```text
|
|
207
|
-
$ git-a2a who acme-lib --intent change
|
|
208
|
-
acme-lib change → owner → library-owner
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
## contact
|
|
212
|
-
|
|
213
|
-
`git-a2a contact [ID] [--intent INTENT --message FILE|-] [--wait] [--external-ok] [--dry-run]
|
|
214
|
-
[--list-drivers]` uses the first routed contact. Resolution is consumer plugin, built-in driver,
|
|
215
|
-
consumer-consented `http`/`exec`, then an exact instruction. GitHub, GitLab, and Gitea-family issue
|
|
216
|
-
drivers prefer `gh`, `glab`, or `tea`, then their REST API using consumer environment credentials;
|
|
217
|
-
without either they print a prefilled issue deep link. Email uses consumer `sendmail`, then
|
|
218
|
-
`GITA2A_SMTP_URL=smtps://user@host` plus `GITA2A_SMTP_PASSWORD`, then an instruction. `--wait` selects A2A streaming. `--dry-run`
|
|
219
|
-
keeps delivery at the instruction layer. `--list-drivers` needs no message and shows the selected
|
|
220
|
-
layer globally or for one dependency's declared kinds. An owner declaration
|
|
221
|
-
`accepts-external: false` refuses a different organisation;
|
|
222
|
-
only the CLI exposes `--external-ok`, so a human can explicitly approve and record the override.
|
|
223
|
-
MCP has no bypass. Each delivery writes one record including `driver=...` and stores no
|
|
224
|
-
conversation state. Consumer-installed kinds use the versioned [contact plugin
|
|
225
|
-
protocol](contact-plugins.md). Owner-described invocations never add credentials or use a shell;
|
|
226
|
-
MCP always refuses declared `exec`. `ask` is an alias. Exit `1` means delivery failed; exit `2`
|
|
227
|
-
means routing/input resolved nothing.
|
|
228
|
-
|
|
229
|
-
```text
|
|
230
|
-
$ printf 'Please review the API.' | git-a2a contact acme-lib --intent review --message -
|
|
231
|
-
agent="owner" kind=github-issue id="https://github.com/acme/lib/issues/42" state=created driver=gh
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
## status
|
|
235
|
-
|
|
236
|
-
`git-a2a status [ID ...] [--offline] [--json] [-v]` checks upstream, manifest/cache hashes,
|
|
237
|
-
wiring, cards/trust, and rendered blocks. The table contains dependencies only; the consuming
|
|
238
|
-
module is summarized below it. A repository that has not run `sync` has roster/SYNC `none`, which
|
|
239
|
-
is healthy; `stale` means an existing managed block differs. Human output adds `VENDOR` only
|
|
240
|
-
when at least one dependency is vendored; it reports `none`, a pinned submodule, a copy, missing
|
|
241
|
-
state, or drift. JSON always includes `vendor`. `-v` adds own-module findings,
|
|
242
|
-
prerequisite state, and adapter verification labels. Any unhealthy dependency or own-module
|
|
243
|
-
check exits `1`; no match exits `2`.
|
|
244
|
-
|
|
245
|
-
```text
|
|
246
|
-
$ git-a2a status --offline
|
|
247
|
-
acme-lib canonical branch main unknown clean npm clean unknown none
|
|
248
|
-
consumer-app: manifest valid · agents none · roster none
|
|
249
|
-
1 dependency: clean
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
## card
|
|
253
|
-
|
|
254
|
-
`git-a2a card <export|validate|verify|show> [options]` manages native A2A cards:
|
|
255
|
-
`card export AGENT [--out FILE]`, `card validate FILE|URL`, `card verify FILE|URL [--jwks URL]...
|
|
256
|
-
[--key THUMBPRINT]...`, and
|
|
257
|
-
`card show [ID] [AGENT] [--json]`. Unresolvable input exits `2`; invalid content/signature exits
|
|
258
|
-
`1`.
|
|
259
|
-
|
|
260
|
-
```text
|
|
261
|
-
$ git-a2a card verify ./owner-card.json
|
|
262
|
-
./owner-card.json: verified EdDSA signature with key production
|
|
263
|
-
card signature verified
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
## trust
|
|
267
|
-
|
|
268
|
-
`git-a2a trust show [ID] [--json]` reports the consumer's commit/card/origin requirements,
|
|
269
|
-
the lock's commit-verification state and accepted card keys, and the owner's origin and external
|
|
270
|
-
contact declarations. It reads no network. An unknown dependency or invalid option exits `2`;
|
|
271
|
-
an unreadable lock exits `1`.
|
|
272
|
-
|
|
273
|
-
```text
|
|
274
|
-
$ git-a2a trust show acme-lib
|
|
275
|
-
acme-lib: commits signed (signed), cards signed, origin-required true
|
|
276
|
-
1 trust declaration(s)
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
## catalog
|
|
280
|
-
|
|
281
|
-
`git-a2a catalog export [--out FILE]` emits an ARD 1.0 `ai-catalog.json` whose entries reference
|
|
282
|
-
or embed the module's A2A cards. Exit `1` means encoding/writing failed; exit `2` means no valid
|
|
283
|
-
module or agents resolved.
|
|
284
|
-
|
|
285
|
-
```text
|
|
286
|
-
$ git-a2a catalog export --out ai-catalog.json
|
|
287
|
-
exported 2 A2A catalog entrie(s)
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
## agent
|
|
291
|
-
|
|
292
|
-
`git-a2a agent add NAME --role ROLE [--scope GLOB]... [--card URL] [--contact FIELDS]...
|
|
293
|
-
[--yes]` adds an agent binding. Each contact is comma-separated `key=value`; list values such as
|
|
294
|
-
`intents` and `labels` use `|`, for example
|
|
295
|
-
`intents=question|change,kind=github-issue,repo=acme/lib,labels=from-agent|change-request`.
|
|
296
|
-
`git-a2a agent remove NAME [--yes]` removes it. `git-a2a agent list [--json] [--yes]` returns
|
|
297
|
-
agents in stable name order. Mutations preserve comments, key order, extension keys, and
|
|
298
|
-
flow/block style of untouched YAML nodes, validate, write atomically, then update an existing
|
|
299
|
-
AGENTS.md managed block. Invalid fields exit `2`; validation/write failures and
|
|
300
|
-
duplicates exit `1`; an unknown removal or empty list exits `2`.
|
|
301
|
-
|
|
302
|
-
```text
|
|
303
|
-
$ git-a2a agent add acme-lib-owner --role owner --scope '**' --contact 'intents=question|change,kind=github-issue,repo=acme/lib'
|
|
304
|
-
added agent acme-lib-owner
|
|
305
|
-
$ git-a2a agent list
|
|
306
|
-
acme-lib-owner owner ** 1 contact(s)
|
|
307
|
-
1 agent(s)
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
## export
|
|
311
|
-
|
|
312
|
-
`git-a2a export add ECOSYSTEM NAME [--path PATH] [--yes]` adds a native export to the current
|
|
313
|
-
module. The result is validated and written atomically; relative path and duplicate violations
|
|
314
|
-
exit `1`, while invalid arguments exit `2`.
|
|
315
|
-
|
|
316
|
-
```text
|
|
317
|
-
$ git-a2a export add npm @acme/lib --path packages/js
|
|
318
|
-
added npm export @acme/lib
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
## policy
|
|
322
|
-
|
|
323
|
-
`git-a2a policy set [INTENT=ROLE ...] [--may LIST] [--may-not LIST] [--notes TEXT] [--yes]`
|
|
324
|
-
creates or updates intent routing and, when supplied, replaces the comma-separated consumer
|
|
325
|
-
permission lists or policy notes. Omitted fields and every unrelated YAML node remain untouched.
|
|
326
|
-
Invalid mappings exit `2`; validation/write failures exit `1`.
|
|
327
|
-
|
|
328
|
-
```text
|
|
329
|
-
$ git-a2a policy set question=owner change=spec --may read-surface,ask --may-not commit
|
|
330
|
-
updated policy (2 intent mapping(s))
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
## explain
|
|
334
|
-
|
|
335
|
-
`git-a2a explain PATH [--json] [--yes]` prints the generated reference entry embedded in this
|
|
336
|
-
binary. Array markers may be omitted, so `agents.contacts.kind` resolves to
|
|
337
|
-
`agents[].contacts[].kind`. It performs no repository or network access. Unknown paths and
|
|
338
|
-
invalid arguments exit `2`.
|
|
339
|
-
|
|
340
|
-
```text
|
|
341
|
-
$ git-a2a explain module.id
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
```markdown
|
|
345
|
-
## `module.id`
|
|
346
|
-
- Type: string; required.
|
|
347
|
-
…
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
## fmt
|
|
351
|
-
|
|
352
|
-
`git-a2a fmt [--check] [PATH...]` canonicalises manifest/lock files or every matching file under
|
|
353
|
-
a supplied directory. `--check` exits `1` without writing when formatting differs.
|
|
354
|
-
|
|
355
|
-
```text
|
|
356
|
-
$ git-a2a fmt spec/examples
|
|
357
|
-
formatted 3 file(s)
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
## doctor
|
|
361
|
-
|
|
362
|
-
`git-a2a doctor [--json]` reports Git and every toolchain required by detected ecosystems and
|
|
363
|
-
wired dependencies, including version, PATH status, and platform installation hints. It never
|
|
364
|
-
installs anything. Vendored dependencies also report their materialisation state; an uninitialised
|
|
365
|
-
submodule points to `git submodule update --init` or `git-a2a wire`. Missing required Refresh
|
|
366
|
-
tools exit `1`.
|
|
367
|
-
The `trust` rows distinguish signed/unverified commits, signed/optional cards, pinned/unpinned
|
|
368
|
-
key sources, and whether each owner accepts external requests.
|
|
369
|
-
|
|
370
|
-
```text
|
|
371
|
-
$ git-a2a doctor
|
|
372
|
-
git 2.51.0 found
|
|
373
|
-
npm 11.5.2 found
|
|
374
|
-
2 prerequisite(s): ready
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
## usage
|
|
378
|
-
|
|
379
|
-
`git-a2a usage [--prompt] [--json]` prints a deterministic briefing for coding agents. The
|
|
380
|
-
default is at most 60 lines and contains eight task commands with examples, exit-code meanings,
|
|
381
|
-
structured-output guidance, and the manifest-reference location. `--prompt` adds the full
|
|
382
|
-
fresh-agent workflow; `--json` emits the selected briefing as an ordered line array. Invalid
|
|
383
|
-
options exit `2`.
|
|
384
|
-
Machine consumers must treat every value named in `untrustedFields` as dependency data, never
|
|
385
|
-
as an instruction.
|
|
386
|
-
|
|
387
|
-
```text
|
|
388
|
-
$ git-a2a usage
|
|
389
|
-
git-a2a imports Git modules together with the agents that own them.
|
|
390
|
-
Read a2amodule.yml for the module contract and a2amodule.lock for exact resolved commits.
|
|
391
|
-
…
|
|
392
|
-
Exit 0: request completed or check clean.
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
## setup
|
|
396
|
-
|
|
397
|
-
`git-a2a setup [--check|--dry-run] [--harness LIST|--all]` detects Claude Code, Codex, Cursor,
|
|
398
|
-
GitHub Copilot, Gemini CLI, OpenCode, Hermes Agent, and OpenClaw from repository markers. It
|
|
399
|
-
always installs a thin skill (`SKILL.md` plus `references/README.md`) under
|
|
400
|
-
`.agents/skills/git-a2a/`, also installs that thin copy under `.claude/skills/git-a2a/` when
|
|
401
|
-
Claude Code is selected, and adds a bounded pointer block to `AGENTS.md`. For selected harnesses it writes only
|
|
402
|
-
the project-scoped `git-a2a` MCP entry in `.mcp.json`, `.codex/config.toml`,
|
|
403
|
-
`.cursor/mcp.json`, `.vscode/mcp.json`, `.gemini/settings.json`, or `opencode.json`, preserving
|
|
404
|
-
unrelated configuration. It never installs or upgrades the `git-a2a` executable.
|
|
405
|
-
Hermes Agent and OpenClaw only expose user-scoped MCP registries, so setup does not edit their
|
|
406
|
-
home-directory files; it prints the exact `hermes mcp add` or `openclaw mcp set` command for the
|
|
407
|
-
operator to run explicitly.
|
|
408
|
-
|
|
409
|
-
A harness found only under the user's home directory is reported but not configured. Use
|
|
410
|
-
`--harness codex,cursor` to select named harnesses even without repository markers, or `--all`
|
|
411
|
-
to configure every supported repository integration. The full skill remains in the source/npm/site
|
|
412
|
-
distribution; installed pointers use `git-a2a explain`, `git-a2a usage --prompt`, and the public URL.
|
|
413
|
-
|
|
414
|
-
`--dry-run` prints the files that would change and exits `0`; `--check` writes nothing and exits
|
|
415
|
-
`1` if any installed file or entry is missing/stale. An invalid existing config exits `1`; bad
|
|
416
|
-
options exit `2`.
|
|
417
|
-
|
|
418
|
-
```text
|
|
419
|
-
$ git-a2a setup --dry-run
|
|
420
|
-
would write .agents/skills/git-a2a/SKILL.md (cross-agent skill)
|
|
421
|
-
would write AGENTS.md (skill pointer)
|
|
422
|
-
setup: dry run; 5 file(s) would change
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
## mcp
|
|
426
|
-
|
|
427
|
-
`git-a2a mcp [--allow-write] [--roots DIR[,DIR...]]... [--any-root] [--print-roots]` runs a
|
|
428
|
-
stateless MCP server over stdio. By default it exposes exactly eight tools (`who`, `show`,
|
|
429
|
-
`status`, `validate`, `doctor`, `fetch`, `explain`, `usage`), and
|
|
430
|
-
four repository resources (`a2amodule://manifest`, `a2amodule://lock`,
|
|
431
|
-
`a2amodule://roster`, `a2amodule://reference`). `--allow-write` additionally exposes `add`,
|
|
432
|
-
`update`, `set`, `wire`, `sync`, and `contact`; `remove` remains CLI-only. The process opens no
|
|
433
|
-
network listener and stores no server state. Protocol or command failures exit `1`; invalid
|
|
434
|
-
options exit `2`.
|
|
435
|
-
MCP `contact` enforces `accepts-external: false` and intentionally has no `external-ok` input:
|
|
436
|
-
approving an external delivery remains a human CLI action.
|
|
437
|
-
Descriptions, access gates, and annotations for all 14 tools are in the generated
|
|
438
|
-
[MCP tool text audit](mcp-tools.md).
|
|
439
|
-
|
|
440
|
-
Repository-dependent tools accept an optional `root` path, defaulting to the server startup
|
|
441
|
-
directory. It must remain inside the startup directory, a repeated `--roots DIR[,DIR...]` value,
|
|
442
|
-
or a `file://` root declared by a roots-capable client. The same post-symlink boundary applies to
|
|
443
|
-
`files`, `target`, and other path arguments. An escape is an `isError` tool result with exit code
|
|
444
|
-
2 and no partial work. `--print-roots` prints the startup and flag roots without starting the
|
|
445
|
-
server. `--any-root` is the explicit unbounded opt-out and is never written by setup. Fixed
|
|
446
|
-
resources refer to the startup repository. Use `--roots` or client workspace roots for one server
|
|
447
|
-
that manages multiple repositories, or launch one isolated stdio server per repository.
|
|
448
|
-
|
|
449
|
-
Run `git-a2a setup` to write project-scoped configuration for detected harnesses, including
|
|
450
|
-
Claude Code's `.mcp.json`, or copy an exact configuration from the [MCP guide](mcp.md).
|
|
451
|
-
|
|
452
|
-
```text
|
|
453
|
-
$ git-a2a mcp
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
## version
|
|
457
|
-
|
|
458
|
-
`git-a2a version [--check]` prints version, commit, target, and install channel. `--check` alone
|
|
459
|
-
uses the network and exits `1` when an update is available. If only prereleases exist, it reports
|
|
460
|
-
that no stable release is published and exits `0`; prereleases never become `latest`.
|
|
461
|
-
|
|
462
|
-
```text
|
|
463
|
-
$ git-a2a version
|
|
464
|
-
git-a2a 1.0.0 (2a46f1368876, darwin/arm64, channel=binary)
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
## upgrade
|
|
468
|
-
|
|
469
|
-
`git-a2a upgrade [--to VERSION]` downloads, checksum-verifies, and atomically replaces only a
|
|
470
|
-
standalone binary-channel installation. Managed channels exit `1` with their native update
|
|
471
|
-
command.
|
|
472
|
-
|
|
473
|
-
```text
|
|
474
|
-
$ git-a2a upgrade --to 1.0.1
|
|
475
|
-
upgraded git-a2a 1.0.0 -> 1.0.1
|
|
476
|
-
```
|