cmn-hypha 0.5.0

The reference CMN client CLI — release spores, query synapses, resolve bonds, and manage your local mycelium.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
# hypha CLI reference

<!-- Generated by `hypha --docs`. Do not edit by hand. -->

The reference CMN client CLI — release spores, query synapses, resolve bonds, and manage your local mycelium.

`hypha` is compiled from a closed `cli-spec-v1` registry: one source for argv parsing, typed invocation values, which parameter combinations are legal, output contracts, and help. An invocation runs only when it matches exactly one registered combination.

## Global arguments

AFDATA registers these itself, so the syntax in [Commands](#commands) leaves them out.

| Argument | Where | What it does |
|---|---|---|
| `--help` | every command | Every legal shape of that command, complete, plus its subcommands. JSON by default; `--output plain` for a terminal. |
| `--version` | hypha only | Name, version, and build identity as one protocol result. |
| `--docs` | hypha only | This document, rendered from the registry. |
| `--output <FORMAT>` | per output contract | Render as json, yaml, plain (default `json`). |
| `--output-to <DESTINATION>` | per output contract | Route results and diagnostics to split, stdout, stderr (default `split`). |
| `--stdout-file <PATH>`, `--stderr-file <PATH>` | per output contract | Append that stream to a file instead. |

Success output is protocol events, on those terms, unless a command's own **Output** line says otherwise.

A **shape** is one legal set of arguments that may appear together, under a stable id. Where a command has more than one, each id is a heading below. `--help` returns them all at once, so discovering a command costs one call; there is no recursive mode across commands, and this document is that view.

## Commands

- [`hypha absorb`](#hypha-absorb) — Prepare spores for AI-assisted merge
- [`hypha bond`](#hypha-bond) — Fetch bonds from spore.core.json
- [`hypha cache clean`](#hypha-cache-clean) — Remove old or all cached items
- [`hypha cache list`](#hypha-cache-list) — List cached spores
- [`hypha cache path`](#hypha-cache-path) — Show a cached spore's filesystem path
- [`hypha config list`](#hypha-config-list) — Show merged Hypha configuration
- [`hypha config set`](#hypha-config-set) — Set one dotted configuration key
- [`hypha grow`](#hypha-grow) — Update a spawned working copy through Synapse lineage
- [`hypha hatch`](#hypha-hatch) — Create or update spore.core.json
- [`hypha hatch bond clear`](#hypha-hatch-bond-clear) — Remove every bond
- [`hypha hatch bond remove`](#hypha-hatch-bond-remove) — Remove bonds matching a URI, relation, or both
- [`hypha hatch bond set`](#hypha-hatch-bond-set) — Add or update one bond by URI
- [`hypha hatch bond sync`](#hypha-hatch-bond-sync) — Reconcile one relation to a declarative JSON spec
- [`hypha hatch tree set`](#hypha-hatch-tree-set) — Set tree hashing configuration
- [`hypha hatch tree show`](#hypha-hatch-tree-show) — Show tree hashing configuration
- [`hypha lineage`](#hypha-lineage) — Trace descendants or ancestors of a spore
- [`hypha mycelium nutrient add`](#hypha-mycelium-nutrient-add) — Add or update one nutrient method
- [`hypha mycelium nutrient clear`](#hypha-mycelium-nutrient-clear) — Remove every nutrient method
- [`hypha mycelium nutrient remove`](#hypha-mycelium-nutrient-remove) — Remove one nutrient method
- [`hypha mycelium pulse`](#hypha-mycelium-pulse) — Send a signed mycelium to a Synapse
- [`hypha mycelium root`](#hypha-mycelium-root) — Establish or update a domain site
- [`hypha mycelium serve`](#hypha-mycelium-serve) — Serve a local mycelium site over HTTP
- [`hypha mycelium spore unyank`](#hypha-mycelium-spore-unyank) — Restore a delisted spore from its retained manifest
- [`hypha mycelium spore yank`](#hypha-mycelium-spore-yank) — Delist a spore while retaining published bytes
- [`hypha mycelium status`](#hypha-mycelium-status) — Show local site status
- [`hypha release`](#hypha-release) — Sign and publish a spore
- [`hypha replicate`](#hypha-replicate) — Copy spores to another domain without changing hashes
- [`hypha search`](#hypha-search) — Search spores through a Synapse
- [`hypha sense`](#hypha-sense) — Resolve a CMN URI and show its metadata
- [`hypha skill install`](#hypha-skill-install) — Install or refresh the bundled skill
- [`hypha skill status`](#hypha-skill-status) — Inspect whether the bundled skill is current
- [`hypha skill uninstall`](#hypha-skill-uninstall) — Remove the bundled skill
- [`hypha spawn`](#hypha-spawn) — Create a working copy of a spore
- [`hypha synapse add`](#hypha-synapse-add) — Add a Synapse node
- [`hypha synapse config`](#hypha-synapse-config) — Configure credentials for one Synapse
- [`hypha synapse discover`](#hypha-synapse-discover) — Discover Synapse instances
- [`hypha synapse health`](#hypha-synapse-health) — Check one Synapse instance
- [`hypha synapse list`](#hypha-synapse-list) — List configured Synapse nodes
- [`hypha synapse remove`](#hypha-synapse-remove) — Remove a Synapse node
- [`hypha synapse use`](#hypha-synapse-use) — Select the default Synapse node
- [`hypha taste`](#hypha-taste) — Download a spore for review or record a verdict

### `hypha absorb`

Prepare spores for AI-assisted merge

#### `absorb_explicit` — Absorb the listed URIs

```
hypha absorb [--log <CATEGORY>...] <CMN_URL>... [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>] [--max-depth <COUNT>]
```

#### `absorb_discover` — Discover descendants and absorb them

```
hypha absorb [--log <CATEGORY>...] --discover [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>] [--max-depth <COUNT>]
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `CMN_URL` | One or more spore URIs |
| `--discover` | Discover descendants through Synapse |
| `--synapse` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |
| `--max-depth` | Maximum lineage depth |

### `hypha bond`

Fetch bonds from spore.core.json

```
hypha bond [--log <CATEGORY>...] [--clean] [--status]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--clean` | Remove cached bonds no longer declared |
| `--status` | Show status without fetching |

### `hypha cache clean`

Remove old or all cached items

```
hypha cache clean [--log <CATEGORY>...] [--all]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--all` | Remove every cached item |

### `hypha cache list`

List cached spores

```
hypha cache list [--log <CATEGORY>...]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |

### `hypha cache path`

Show a cached spore's filesystem path

```
hypha cache path [--log <CATEGORY>...] <CMN_URL>
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `CMN_URL` | Spore URI |

### `hypha config list`

Show merged Hypha configuration

```
hypha config list [--log <CATEGORY>...]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |

### `hypha config set`

Set one dotted configuration key

```
hypha config set [--log <CATEGORY>...] <KEY> <VALUE>
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `KEY` | Dotted configuration path |
| `VALUE` | Value to store |

### `hypha grow`

Update a spawned working copy through Synapse lineage

```
hypha grow [--log <CATEGORY>...] [--dist <archive|git>] [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>] [--bond]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--dist` | Override the distribution source |
| `--synapse` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |
| `--bond` | Update and fetch bonds too |

### `hypha hatch`

Create or update spore.core.json

```
hypha hatch [--log <CATEGORY>...] [--id <ID>] [--version <VERSION>] [--name <NAME>] [--domain <DOMAIN>] [--synopsis <TEXT>] [--intent <TEXT>...] [--mutations <TEXT>...] [--license <SPDX>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--id` | Opaque spore identifier |
| `--version` | Spore version |
| `--name` | Display name |
| `--domain` | Publisher domain |
| `--synopsis` | Short description |
| `--intent` | Permanent intent; repeat for more entries |
| `--mutations` | Changes from the parent; repeat for more entries |
| `--license` | SPDX license identifier |

### `hypha hatch bond clear`

Remove every bond

```
hypha hatch bond clear [--log <CATEGORY>...]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |

### `hypha hatch bond remove`

Remove bonds matching a URI, relation, or both

#### `hatch_bond_remove_uri` — Match by URI, optionally narrowed by relation

```
hypha hatch bond remove [--log <CATEGORY>...] --uri <CMN_URL> [--relation <RELATION>]
```

#### `hatch_bond_remove_relation` — Match every bond with one relation

```
hypha hatch bond remove [--log <CATEGORY>...] --relation <RELATION>
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--uri` | URI to match |
| `--relation` | Relation to match |

### `hypha hatch bond set`

Add or update one bond by URI

```
hypha hatch bond set [--log <CATEGORY>...] --uri <CMN_URL> [--relation <RELATION>] [--id <ID>] [--reason <TEXT>] [--with <KEY=VALUE>...]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--uri` | Bond URI and match key |
| `--relation` | Bond relation |
| `--id` | Bond id |
| `--reason` | Why this bond exists |
| `--with` | Bond parameter with a JSON value |

### `hypha hatch bond sync`

Reconcile one relation to a declarative JSON spec

```
hypha hatch bond sync [--log <CATEGORY>...] --relation <RELATION> --spec <PATH_OR_JSON> [--domain <DOMAIN>] [--site-path <PATH>] [--check]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--relation` | Relation to reconcile |
| `--spec` | JSON spec file, inline JSON, or stdin |
| `--domain` | Domain used to resolve omitted URIs |
| `--site-path` | Custom mycelium site directory |
| `--check` | Report drift without writing |

### `hypha hatch tree set`

Set tree hashing configuration

```
hypha hatch tree set [--log <CATEGORY>...] [--algorithm <ALGORITHM>] [--exclude-names <NAME>...] [--follow-rules <FILE>...]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--algorithm` | Tree hash algorithm |
| `--exclude-names` | File or directory name to exclude |
| `--follow-rules` | Ignore-rule file to follow |

### `hypha hatch tree show`

Show tree hashing configuration

```
hypha hatch tree show [--log <CATEGORY>...]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |

### `hypha lineage`

Trace descendants or ancestors of a spore

```
hypha lineage [--log <CATEGORY>...] <CMN_URL> [--direction <in|out>] [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>] [--max-depth <COUNT>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `CMN_URL` | Spore URI |
| `--direction` | in for descendants, out for ancestors |
| `--synapse` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |
| `--max-depth` | Maximum traversal depth |

### `hypha mycelium nutrient add`

Add or update one nutrient method

```
hypha mycelium nutrient add [--log <CATEGORY>...] <DOMAIN> --type <TYPE> [--with <KEY=VALUE>...] [--site-path <PATH>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Domain name |
| `--type` | Nutrient method type |
| `--with` | Nutrient parameter with a JSON value |
| `--site-path` | Custom mycelium site directory |

### `hypha mycelium nutrient clear`

Remove every nutrient method

```
hypha mycelium nutrient clear [--log <CATEGORY>...] <DOMAIN> [--site-path <PATH>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Domain name |
| `--site-path` | Custom mycelium site directory |

### `hypha mycelium nutrient remove`

Remove one nutrient method

```
hypha mycelium nutrient remove [--log <CATEGORY>...] <DOMAIN> --type <TYPE> [--site-path <PATH>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Domain name |
| `--type` | Nutrient method type |
| `--site-path` | Custom mycelium site directory |

### `hypha mycelium pulse`

Send a signed mycelium to a Synapse

```
hypha mycelium pulse [--log <CATEGORY>...] --file <PATH> [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--file` | Signed mycelium JSON file |
| `--synapse` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |

### `hypha mycelium root`

Establish or update a domain site

#### `mycelium_root_domain` — Create or update an explicitly named domain

```
hypha mycelium root [--log <CATEGORY>...] <DOMAIN> [--site-path <PATH>] [--name <NAME>] [--synopsis <TEXT>] [--bio <MARKDOWN>] [--endpoints-base <URL>]
```

#### `mycelium_root_hub` — Create a taste-only identity under a hosted hub

```
hypha mycelium root [--log <CATEGORY>...] --hub <DOMAIN> [--site-path <PATH>] [--name <NAME>] [--synopsis <TEXT>] [--bio <MARKDOWN>]
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Domain name |
| `--hub` | Hosted taste hub |
| `--site-path` | Custom mycelium site directory |
| `--name` | Site or author name |
| `--synopsis` | Brief site description |
| `--bio` | Site or author bio |
| `--endpoints-base` | Base URL for endpoints |

### `hypha mycelium serve`

Serve a local mycelium site over HTTP

```
hypha mycelium serve [--log <CATEGORY>...] [<DOMAIN>] [--site-path <PATH>] [--port <PORT>]
```

Output: protocol events; `--output` json/yaml/plain (default `json`), `--output-to` stdout/stderr (default `stdout`); redirect with `--stdout-file` or `--stderr-file`.

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Domain name |
| `--site-path` | Custom mycelium site directory |
| `--port` | TCP port |

### `hypha mycelium spore unyank`

Restore a delisted spore from its retained manifest

```
hypha mycelium spore unyank [--log <CATEGORY>...] --id <SPORE_ID> [--domain <DOMAIN>] [--site-path <PATH>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--id` | Spore id to restore |
| `--domain` | Domain used to locate the site |
| `--site-path` | Custom mycelium site directory |

### `hypha mycelium spore yank`

Delist a spore while retaining published bytes

```
hypha mycelium spore yank [--log <CATEGORY>...] --id <SPORE_ID> [--domain <DOMAIN>] [--site-path <PATH>] [--purge]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--id` | Spore id to delist |
| `--domain` | Domain used to locate the site |
| `--site-path` | Custom mycelium site directory |
| `--purge` | Delete the published manifest and archive too |

### `hypha mycelium status`

Show local site status

#### `mycelium_status_domain` — List sites or show one domain

```
hypha mycelium status [--log <CATEGORY>...] [<DOMAIN>] [--site-path <PATH>]
```

#### `mycelium_status_spore` — Resolve one spore id from one domain

```
hypha mycelium status [--log <CATEGORY>...] <DOMAIN> [--site-path <PATH>] --id <SPORE_ID>
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Domain name |
| `--site-path` | Custom mycelium site directory |
| `--id` | Resolve a spore from the inventory |

### `hypha release`

Sign and publish a spore

#### `release_archive` — Release from local source and archive

```
hypha release [--log <CATEGORY>...] --domain <DOMAIN> [--source <PATH>] [--site-path <PATH>] [--archive <zstd>] [--dry-run]
```

#### `release_git` — Release with an external git distribution

```
hypha release [--log <CATEGORY>...] --domain <DOMAIN> [--source <PATH>] [--site-path <PATH>] --dist-git <URL> --dist-ref <REF> [--archive <zstd>] [--dry-run]
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--domain` | Target publisher domain |
| `--source` | Spore source directory |
| `--site-path` | Custom mycelium site directory |
| `--dist-git` | External git repository |
| `--dist-ref` | Tag, branch, or commit |
| `--archive` | Generated archive format |
| `--dry-run` | Compute the URI without writing |

### `hypha replicate`

Copy spores to another domain without changing hashes

#### `replicate_explicit` — Replicate the listed URIs

```
hypha replicate [--log <CATEGORY>...] <CMN_URL>... --domain <DOMAIN> [--site-path <PATH>]
```

#### `replicate_refs` — Replicate every declared non-self bond

```
hypha replicate [--log <CATEGORY>...] --refs --domain <DOMAIN> [--site-path <PATH>]
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `CMN_URL` | One or more spore URIs |
| `--refs` | Replicate every non-self bond |
| `--domain` | Target publisher domain |
| `--site-path` | Custom mycelium site directory |

### `hypha search`

Search spores through a Synapse

```
hypha search [--log <CATEGORY>...] <QUERY> [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>] [--domain <DOMAIN>] [--license <SPDX>] [--bonds <RELATION:URI>] [--limit <COUNT>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `QUERY` | Search text |
| `--synapse` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |
| `--domain` | Filter by publisher domain |
| `--license` | Filter by license |
| `--bonds` | Comma-separated bond filters |
| `--limit` | Maximum number of results |

### `hypha sense`

Resolve a CMN URI and show its metadata

```
hypha sense [--log <CATEGORY>...] <CMN_URL> [--id <SPORE_ID>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `CMN_URL` | CMN URI to resolve |
| `--id` | Resolve the latest spore with this id |

### `hypha skill install`

Install or refresh the bundled skill

#### `skill_install_standard` — Use the selected agent's standard skills directory

```
hypha skill install [--log <CATEGORY>...] [--agent <all|codex|claude-code|opencode>] [--scope <personal|project>] [--force]
```

#### `skill_install_explicit_directory` — Use an explicit directory for one concrete agent

```
hypha skill install [--log <CATEGORY>...] --agent <codex|claude-code|opencode> [--scope <personal|project>] --skills-dir <PATH> [--force]
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--agent` | Agent target |
| `--scope` | Install scope |
| `--skills-dir` | Explicit skills directory |
| `--force` | Replace an unmanaged target |

### `hypha skill status`

Inspect whether the bundled skill is current

#### `skill_status_standard` — Use the selected agent's standard skills directory

```
hypha skill status [--log <CATEGORY>...] [--agent <all|codex|claude-code|opencode>] [--scope <personal|project>] [--force]
```

#### `skill_status_explicit_directory` — Use an explicit directory for one concrete agent

```
hypha skill status [--log <CATEGORY>...] --agent <codex|claude-code|opencode> [--scope <personal|project>] --skills-dir <PATH> [--force]
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--agent` | Agent target |
| `--scope` | Install scope |
| `--skills-dir` | Explicit skills directory |
| `--force` | Replace an unmanaged target |

### `hypha skill uninstall`

Remove the bundled skill

#### `skill_uninstall_standard` — Use the selected agent's standard skills directory

```
hypha skill uninstall [--log <CATEGORY>...] [--agent <all|codex|claude-code|opencode>] [--scope <personal|project>] [--force]
```

#### `skill_uninstall_explicit_directory` — Use an explicit directory for one concrete agent

```
hypha skill uninstall [--log <CATEGORY>...] --agent <codex|claude-code|opencode> [--scope <personal|project>] --skills-dir <PATH> [--force]
```

Arguments across every shape above:

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--agent` | Agent target |
| `--scope` | Install scope |
| `--skills-dir` | Explicit skills directory |
| `--force` | Replace an unmanaged target |

### `hypha spawn`

Create a working copy of a spore

```
hypha spawn [--log <CATEGORY>...] <CMN_URL> [<DIRECTORY>] [--vcs <git|none>] [--dist <archive|git>] [--bond]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `CMN_URL` | Spore URI to copy |
| `DIRECTORY` | Target directory |
| `--vcs` | Version-control initialization |
| `--dist` | Preferred distribution source |
| `--bond` | Fetch the spore's bonds after spawning |

### `hypha synapse add`

Add a Synapse node

```
hypha synapse add [--log <CATEGORY>...] <URL>
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `URL` | Synapse URL |

### `hypha synapse config`

Configure credentials for one Synapse

```
hypha synapse config [--log <CATEGORY>...] <DOMAIN> [--token-secret <TOKEN>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Synapse domain |
| `--token-secret` | Token, or an empty string to clear |

### `hypha synapse discover`

Discover Synapse instances

```
hypha synapse discover [--log <CATEGORY>...] [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `--synapse` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |

### `hypha synapse health`

Check one Synapse instance

```
hypha synapse health [--log <CATEGORY>...] [<DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN_OR_URL` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |

### `hypha synapse list`

List configured Synapse nodes

```
hypha synapse list [--log <CATEGORY>...]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |

### `hypha synapse remove`

Remove a Synapse node

```
hypha synapse remove [--log <CATEGORY>...] <DOMAIN>
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Synapse domain |

### `hypha synapse use`

Select the default Synapse node

```
hypha synapse use [--log <CATEGORY>...] <DOMAIN>
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `DOMAIN` | Synapse domain |

### `hypha taste`

Download a spore for review or record a verdict

```
hypha taste [--log <CATEGORY>...] <CMN_URL> [--verdict <sweet|fresh|safe|rotten|toxic>] [--notes <TEXT>] [--synapse <DOMAIN_OR_URL>] [--synapse-token-secret <TOKEN>] [--domain <DOMAIN>]
```

| Argument | Meaning |
|---|---|
| `--log` | Diagnostic category to emit; repeat or use comma-separated values |
| `CMN_URL` | CMN URI to evaluate |
| `--verdict` | Verdict to record |
| `--notes` | Notes accompanying the verdict |
| `--synapse` | Synapse domain or URL |
| `--synapse-token-secret` | Authentication token overriding the configured Synapse token |
| `--domain` | Domain used to sign a taste report |

## Exit codes

| Code | Meaning |
|---|---|
| 0 | The command ran and succeeded. |
| 1 | The command ran and failed. The event carries a domain `error.code`. |
| 2 | The invocation was rejected before anything ran. `error.code` is one of the `cli_*` codes below. |

The split is the useful one for a caller: exit 2 means the call was never made, so retrying it unchanged cannot help, while exit 1 means it was.

## CLI errors

Every structural failure emits one strict JSON `kind:"error"` event on stderr, leaves stdout empty, and exits 2. The `code` names the failure — `cli_unknown_argument` for an unknown spelling, `cli_unregistered_combination` for registered arguments in a mixture that is not, and one each for `cli_unknown_command`, `cli_missing_argument_value`, `cli_invalid_argument_value`, `cli_duplicate_argument`, `cli_unexpected_positional`, and `cli_invalid_utf8`. `message` identifies a safe argument spelling or the failure category and `hint` gives the command to run next; neither ever quotes a raw value, including secrets. These are decided before any config, secret source, filesystem, network, or domain I/O.

Two exit-1 codes describe the tool itself rather than the call: `cli_invocation_invalid` means the program misread its own resolved invocation — an unknown action id, or an argument id the selected combination cannot produce — and `output_setup_failed` means an output sink (`--stdout-file`, `--stderr-file`, stream redirection) could not be established. Both are defects to report, not inputs to correct; retrying the same command cannot help.

Domain failures (exit 1) carry their own stable `error.code` instead, drawn from whatever this tool defines rather than from the `cli_*` set. No error message quotes a raw value it was given — an error event is routinely logged, and the input may hold secrets.