get-tbd 0.2.2 → 0.3.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.
Files changed (86) hide show
  1. package/README.md +38 -6
  2. package/dist/bin.mjs +4036 -1074
  3. package/dist/bin.mjs.map +1 -1
  4. package/dist/cli.mjs +2505 -1585
  5. package/dist/cli.mjs.map +1 -1
  6. package/dist/{config-BJz1m9eN.mjs → config-B1w3pAkY.mjs} +142 -279
  7. package/dist/config-B1w3pAkY.mjs.map +1 -0
  8. package/dist/config-DXhifxOw.mjs +3 -0
  9. package/dist/doc-cache-CamtXfi4.mjs +1035 -0
  10. package/dist/doc-cache-CamtXfi4.mjs.map +1 -0
  11. package/dist/doc-cache-CiBwpDTf.mjs +3 -0
  12. package/dist/doc-fork-BMjqzfAs.mjs +3 -0
  13. package/dist/doc-fork-CoPi1G1N.mjs +304 -0
  14. package/dist/doc-fork-CoPi1G1N.mjs.map +1 -0
  15. package/dist/docref-C7g0sjvL.mjs +167 -0
  16. package/dist/docref-C7g0sjvL.mjs.map +1 -0
  17. package/dist/docs/README.md +38 -6
  18. package/dist/docs/SKILL.md +21 -5
  19. package/dist/docs/guidelines/backward-compatibility-rules.md +1 -0
  20. package/dist/docs/guidelines/bun-monorepo-patterns.md +1 -0
  21. package/dist/docs/guidelines/cli-agent-skill-patterns.md +228 -52
  22. package/dist/docs/guidelines/commit-conventions.md +1 -0
  23. package/dist/docs/guidelines/common-doc-guidelines.md +1 -0
  24. package/dist/docs/guidelines/convex-limits-best-practices.md +1 -0
  25. package/dist/docs/guidelines/convex-rules.md +1 -0
  26. package/dist/docs/guidelines/electron-app-development-patterns.md +1 -0
  27. package/dist/docs/guidelines/error-handling-rules.md +4 -0
  28. package/dist/docs/guidelines/general-coding-rules.md +3 -1
  29. package/dist/docs/guidelines/general-comment-rules.md +3 -1
  30. package/dist/docs/guidelines/general-eng-agent-principles.md +127 -0
  31. package/dist/docs/guidelines/general-tdd-guidelines.md +7 -0
  32. package/dist/docs/guidelines/general-testing-rules.md +5 -0
  33. package/dist/docs/guidelines/golden-testing-guidelines.md +1 -0
  34. package/dist/docs/guidelines/pnpm-monorepo-patterns.md +1 -0
  35. package/dist/docs/guidelines/python-cli-patterns.md +5 -0
  36. package/dist/docs/guidelines/python-modern-guidelines.md +4 -0
  37. package/dist/docs/guidelines/python-rules.md +7 -0
  38. package/dist/docs/guidelines/release-notes-guidelines.md +1 -0
  39. package/dist/docs/guidelines/supply-chain-hardening.md +3 -2
  40. package/dist/docs/guidelines/tbd-sync-troubleshooting.md +25 -2
  41. package/dist/docs/guidelines/typescript-cli-tool-rules.md +4 -3
  42. package/dist/docs/guidelines/typescript-code-coverage.md +7 -4
  43. package/dist/docs/guidelines/typescript-rules.md +8 -9
  44. package/dist/docs/guidelines/typescript-sorting-patterns.md +2 -1
  45. package/dist/docs/guidelines/typescript-yaml-handling-rules.md +6 -5
  46. package/dist/docs/references/docmap-format.md +64 -0
  47. package/dist/docs/references/docref-format.md +71 -0
  48. package/dist/docs/shortcuts/standard/checkout-third-party-repo.md +17 -4
  49. package/dist/docs/shortcuts/standard/new-shortcut.md +17 -3
  50. package/dist/docs/shortcuts/standard/plan-implementation-with-beads.md +1 -1
  51. package/dist/docs/shortcuts/standard/setup-github-cli.md +4 -1
  52. package/dist/docs/shortcuts/standard/suggest-upstream-improvements.md +69 -0
  53. package/dist/docs/shortcuts/standard/sync-failure-recovery.md +1 -1
  54. package/dist/docs/shortcuts/standard/welcome-user.md +28 -0
  55. package/dist/docs/shortcuts/system/shortcut-explanation.md +16 -1
  56. package/dist/docs/shortcuts/system/skill-baseline.md +21 -5
  57. package/dist/docs/tbd-design.md +144 -3
  58. package/dist/docs/tbd-docs.md +169 -5
  59. package/dist/docs/tbd-prime.md +0 -1
  60. package/dist/docs/templates/qa-playbook.md +3 -1
  61. package/dist/docs/templates/research-brief.md +2 -2
  62. package/dist/fork-manifest-ByU7U2do.mjs +253 -0
  63. package/dist/fork-manifest-ByU7U2do.mjs.map +1 -0
  64. package/dist/fork-manifest-C7lGRq-6.mjs +3 -0
  65. package/dist/{id-mapping-mtoSP9Qt.mjs → id-mapping-D0iitY-F.mjs} +1 -1
  66. package/dist/{id-mapping-687_UEsy.mjs → id-mapping-DAIeLKzm.mjs} +8 -200
  67. package/dist/id-mapping-DAIeLKzm.mjs.map +1 -0
  68. package/dist/index.d.mts +90 -13
  69. package/dist/index.mjs +3 -3
  70. package/dist/lockfile-BR0laSDy.mjs +198 -0
  71. package/dist/lockfile-BR0laSDy.mjs.map +1 -0
  72. package/dist/paths-C1DpnZJW.mjs +405 -0
  73. package/dist/paths-C1DpnZJW.mjs.map +1 -0
  74. package/dist/{schemas-f0EcuAVu.mjs → schemas-lCwRk30L.mjs} +19 -6
  75. package/dist/schemas-lCwRk30L.mjs.map +1 -0
  76. package/dist/{src-BpvcrLnq.mjs → src-CxKOynr1.mjs} +3 -3
  77. package/dist/src-CxKOynr1.mjs.map +1 -0
  78. package/dist/tbd +4036 -1074
  79. package/dist/yaml-utils-BPy991by.mjs.map +1 -1
  80. package/package.json +1 -1
  81. package/dist/config-BJz1m9eN.mjs.map +0 -1
  82. package/dist/config-DlCUMyCG.mjs +0 -3
  83. package/dist/docs/guidelines/general-eng-assistant-rules.md +0 -59
  84. package/dist/id-mapping-687_UEsy.mjs.map +0 -1
  85. package/dist/schemas-f0EcuAVu.mjs.map +0 -1
  86. package/dist/src-BpvcrLnq.mjs.map +0 -1
@@ -2,12 +2,23 @@
2
2
  title: Agent Skills and CLI Integration Patterns
3
3
  description: How to write skills and agent-integrated CLIs that work across Claude Code, Codex, and the broader coding-agent ecosystem—a simple baseline plus references for advanced, multi-subcommand tools
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ category: general
5
6
  ---
6
7
  # Agent Skills and CLI Integration Patterns
7
8
 
8
- **Last Updated**: 2026-05-31 (research verified against primary sources May 2026; added
9
- the L0–L3 integration ladder and §6.6.2 project-vs-global scope mechanics, informed by
10
- `qmd`)
9
+ **Last Updated**: 2026-06-13 (issue #173: named the L2b variant—an L2 self-installer
10
+ that also writes a managed `AGENTS.md` block, `pprose` reference—reframed
11
+ format-versioning as artifact-driven rather than L3-only, added the §6.7 generator-side
12
+ dev-build pin rule, dropped the redundant `surface=` tag from the marker examples, added
13
+ multi-block collapse in §2, and refreshed §6.6 for Cursor’s native `.agents/skills/`
14
+ scanning and the spread of native per-agent skill dirs.
15
+ Earlier 2026-06-04: §4.6 adds the “attention routing” framing—the slopdocs vs.
16
+ hiding-details failure modes—as a contained section, and the §3.1 mechanism callback
17
+ points at it. Earlier 2026-06-02: §6.8 now covers Anthropic’s official and community
18
+ plugin marketplaces—the reviewed, gated submission channel—and the `/plugin` install
19
+ preview; verified against code.claude.com docs.
20
+ Earlier 2026-05-31: research verified against primary sources, added the L0–L3
21
+ integration ladder and §6.6.2 project-vs-global scope mechanics, informed by `qmd`)
11
22
 
12
23
  This guideline covers how to package a capability so AI coding agents can discover and
13
24
  use it well—from a single-file skill up to a full CLI with many subcommands exposed as a
@@ -22,12 +33,11 @@ should use—a prompt-only skill, a CLI tool, an MCP server, or a multi-agent
22
33
  integration—and you want it to work across Claude Code, Codex, Cursor, Gemini CLI, and
23
34
  others without rewriting it per agent.
24
35
 
25
- > **The single most important shift since 2025**: skills and project instructions are
26
- > now **open standards**, not per-vendor formats.
27
- > `AGENTS.md` is governed under the Linux Foundation’s **Agentic AI Foundation (AAIF)**;
28
- > the **Agent Skills (`SKILL.md`)** format is an open standard published at
29
- > [agentskills.io](https://agentskills.io) and implemented by 20+ agents.
30
- > Write to the standard once; most agents pick it up for free.
36
+ Skills and project instructions are now **open standards**, not per-vendor formats.
37
+ `AGENTS.md` is governed under the Linux Foundation’s **Agentic AI Foundation (AAIF)**;
38
+ the **Agent Skills (`SKILL.md`)** format is an open standard published at
39
+ [agentskills.io](https://agentskills.io) and implemented by 20+ agents.
40
+ Write to the standard once; most agents pick it up for free.
31
41
 
32
42
  * * *
33
43
 
@@ -74,7 +84,7 @@ more—proof the baseline scales without custom tooling.
74
84
  manager:
75
85
 
76
86
  ```bash
77
- npx skills add owner/repo # Vercel's skills.sh ecosystem (symlinks, 27+ agents)
87
+ npx skills add owner/repo # Vercel's skills.sh ecosystem (symlinks, 50+ agents)
78
88
  # or commit it to a discovery directory:
79
89
  # .agents/skills/my-skill/SKILL.md (cross-agent: Codex, pi, others)
80
90
  # .claude/skills/my-skill/SKILL.md (Claude Code, project)
@@ -123,9 +133,10 @@ So:
123
133
  - **Maximum reach across many agents** → layer them: AGENTS.md, SKILL.md, CLI, and MCP.
124
134
  (§1)
125
135
  - **Self-installs into agents?** → climb the integration ladder (§6.0): L0 pure skill →
126
- L1 skill + pinned `npx`/`uvx` → L2 self-install into skill dirs only (`qmd`) L3 full
127
- platform with managed `AGENTS.md`, hooks, and format versioning (`tbd`). Most tools
128
- are L1; stop as low as you can.
136
+ L1 skill and pinned `npx`/`uvx` → L2 self-install into skill dirs (`qmd`; its **L2b**
137
+ variant also writes a managed `AGENTS.md` block, `pprose`) L3 full platform with
138
+ hooks, `prime`/`setup`, and format-versioned migration (`tbd`). Most tools are L1;
139
+ stop as low as you can.
129
140
 
130
141
  Everything below is reference material.
131
142
  You do not need most of it for most tools.
@@ -199,7 +210,7 @@ Version the managed block by carrying the format on the **begin marker line itse
199
210
  generated content without touching user-authored text:
200
211
 
201
212
  ```markdown
202
- <!-- BEGIN MYCLI INTEGRATION format=f02 surface=agents-md -->
213
+ <!-- BEGIN MYCLI INTEGRATION format=f02 -->
203
214
  ## mycli
204
215
 
205
216
  - Run `mycli prime` for current project context.
@@ -212,6 +223,17 @@ Keep the begin/end marker *names* stable (`<!-- BEGIN MYCLI INTEGRATION`)—matc
212
223
  prefix so detection finds both legacy blocks (no `format=`, treated as `f01`) and
213
224
  current ones. Only the `format=fNN` value changes when the block’s shape changes.
214
225
 
226
+ The marker carries only `format=fNN`. An artifact’s type is clear from its **location**
227
+ (a `SKILL.md` under a skill dir, or this BEGIN/END block in `AGENTS.md`), so no in-file
228
+ `surface=` tag is needed, and the portable and Claude `SKILL.md` copies stay
229
+ byte-identical.
230
+ On install, if several managed blocks have accumulated (for example after
231
+ a marker-prefix rename across versions), collapse them: replace every matching block
232
+ with one current block at the position of the first, and preserve everything outside the
233
+ markers.
234
+ Collapse only finds blocks whose begin-prefix the installer recognizes, so match
235
+ a small set of known legacy prefixes, not just the current one.
236
+
215
237
  * * *
216
238
 
217
239
  ## 3. The Agent Skills Standard (SKILL.md)
@@ -253,6 +275,9 @@ The body names the capability and the command; the agent runs that command’s `
253
275
  `--list` when it needs the mechanics.
254
276
  This is progressive disclosure applied to a CLI: the tool documents itself, and the
255
277
  skill stays a thin pointer to it.
278
+ This is *attention routing* (§4.6) in mechanism form: each level keeps the agent aware
279
+ that more detail exists and routes to it, without pulling the detail itself up into
280
+ context before it is needed.
256
281
 
257
282
  ### 3.2 Bundled scripts and resources
258
283
 
@@ -381,6 +406,32 @@ it:
381
406
  - **Deprecation**: when removing or renaming a skill, leave a deprecation window with a
382
407
  pointer to the replacement; don’t silently delete an activation trigger users rely on.
383
408
 
409
+ ### 4.6 Attention routing—the idea behind this guide
410
+
411
+ Everything above is in service of one idea.
412
+ Route the agent’s attention through a pyramid of pointers: surface enough context around
413
+ each pointer to show what is relevant, pull detail up only where it helps, and keep the
414
+ upper levels lean.
415
+ The judgment at every step is **how much to copy into the skill versus
416
+ leave behind a link to the CLI**—which is why rules like **route, don’t restate** (§6.5)
417
+ and **the skill points; the CLI documents** (§0.2) exist.
418
+ There are two opposite failure modes:
419
+
420
+ - **Slopdocs** (*copying too much, or unthinkingly*)—help text, flag tables, and recipes
421
+ copied into the skill with no judgment about what level or form belongs where.
422
+ Deliberate, consistent copying is fine—the multi-agent mirror in §6.6 is exactly
423
+ that—but thoughtless copying bloats context and dilutes attention, and breeds
424
+ maintenance burden and inconsistencies that drift into real errors.
425
+ - **Hiding details** (*copying too little, or hiding details behind links too
426
+ dogmatically*)—pointing at the CLI or a reference without enough context to convey
427
+ what is there or why to look, so the agent never learns the capability is relevant.
428
+ Fix: pull up just enough—name each capability and the command that reaches it—so the
429
+ link is worth following.
430
+
431
+ Push the *mechanics* (flags, recipes) down into help pages or docs, but keep enough
432
+ *awareness* and *detail* up in the skill—each key capability described once, with the
433
+ command that reaches it—so the agent knows whether a pointer is worth following.
434
+
384
435
  * * *
385
436
 
386
437
  ## 5. Per-Agent Integration Reference
@@ -471,7 +522,7 @@ Four rungs, lightest first:
471
522
  install command. The agent follows the body directly.
472
523
  Garry Tan’s **gstack** (23 plain skills) is L0. Install by committing to a discovery
473
524
  dir or `npx skills add`.
474
- - **L1—skill + delegated CLI (zero-install).** Ship a `SKILL.md` that points at a CLI
525
+ - **L1—skill and delegated CLI (zero-install).** Ship a `SKILL.md` that points at a CLI
475
526
  invoked through a **version-pinned** zero-install runner—`npx --yes pkg@<ver>`,
476
527
  `uvx --from pkg@<ver>`, or `pipx run pkg==<ver>` (§6.7). No install command, no
477
528
  managed `AGENTS.md` block, no hooks, no format versioning.
@@ -490,26 +541,42 @@ Four rungs, lightest first:
490
541
  and **stops there**: no managed `AGENTS.md` block, no hooks, no `prime`/`setup`
491
542
  context machinery. Because it never touches a human-authored project-instruction file
492
543
  and always full-overwrites its own generated skill, it does **not** need the §6.6
493
- format-version / migration apparatus—a re-install is just a clean overwrite.
494
- **`qmd`** (Tobi Lütke’s Markdown search tool) is the reference: `qmd skill install` /
495
- `--global`, an embedded skill with a build-time drift test, a
544
+ format-version and migration apparatus—a re-install is just a clean overwrite.
545
+ **`qmd`** (Tobi Lütke’s Markdown search tool) is the reference: `qmd skill install`
546
+ and `--global`, an embedded skill with a build-time drift test, a
496
547
  `.claude-plugin/marketplace.json`, and an MCP server—all without writing to
497
- `AGENTS.md` at all.
548
+ `AGENTS.md` at all. One useful variant sits between L2 and L3—call it **L2b**: an L2
549
+ self-installer that *also* writes a compact managed `AGENTS.md` block (an always-on
550
+ bootstrap naming the tool, its trigger, and the pinned runner), but still no hooks,
551
+ `prime`/`setup`, or DocCache.
552
+ That block is the one L3 surface a small tool can adopt on its own; because it is
553
+ merged into a human-authored file rather than overwritten whole, an L2b tool **does**
554
+ need the §6.6 format-stamp and forward-compatibility guard.
555
+ **`pprose`** (Practical Prose) is the reference, writing `.agents/skills/`, the
556
+ `.claude/skills/` mirror, and a `format=fNN`-stamped `AGENTS.md` block with the same
557
+ refuse-to-clobber-newer guard `tbd` uses.
498
558
  - **L3—full self-installing CLI platform.** Everything in L2 **plus** a managed
499
559
  `AGENTS.md` block, lifecycle hooks (`SessionStart`/`PreCompact`), `prime` and `setup`
500
- commands, format-versioned migration with a forward-compatibility guard (§6.6), and
501
- usually a knowledge-injection meta-skill (§6.2) backed by a path-ordered DocCache
502
- (§6.3). Take this on only for a tool with many capabilities, cross-session state, or a
503
- curated knowledge library.
504
- **`tbd`** is the reference implementation; **Beads/`bd`** follows the same shape.
505
- Such platforms are typically **project-only and version-pinned per repo** (§6.6.2):
506
- the tool is part of the project’s reproducible toolchain, so global scope is usually
507
- not worth offering. `qmd` (L2) offers global/dual scope precisely because it is a
508
- general-purpose utility that carries no per-project config.
509
-
510
- The self-upgrade and format-versioning rules in §6.6 apply **only to L3**—L0–L2 never
511
- need them. If in doubt, you are L1: `tbd` is an L3 reference implementation, `qmd` an L2
512
- one, and most CLIs are neither.
560
+ commands, format-versioned migration across every managed surface (§6.6), and usually
561
+ a knowledge-injection meta-skill (§6.2) backed by a path-ordered DocCache (§6.3). Take
562
+ this on only for a tool with many capabilities, cross-session state, or a curated
563
+ knowledge library. **`tbd`** is the reference implementation; **Beads/`bd`** follows
564
+ the same shape. Such platforms are typically **project-only and version-pinned per
565
+ repo** (§6.6.2): the tool is part of the project’s reproducible toolchain, so global
566
+ scope is usually not worth offering.
567
+ `qmd` (L2) offers global/dual scope precisely because it is a general-purpose utility
568
+ that carries no per-project config.
569
+
570
+ Format-versioning is **artifact-driven, not rung-driven**: the §6.6 format-stamp and
571
+ forward-compatibility guard apply to **any rung that writes a generated artifact it may
572
+ later need to upgrade or refuse to clobber**—in practice a managed `AGENTS.md` block
573
+ (the L2b variant, or L3) or a committed generated skill shared across tool versions.
574
+ A tool that only overwrites its own discovery-dir skill whole (plain L0–L2) never needs
575
+ them.
576
+ What stays strictly L3 is the rest of the platform: hooks, `prime`/`setup`, and the
577
+ meta-skill/DocCache machinery.
578
+ If in doubt, you are L1: `tbd` is an L3 reference implementation, `pprose` the L2b
579
+ variant, `qmd` a plain L2 one, and most CLIs are none of these.
513
580
 
514
581
  ### 6.1 Two kinds of commands
515
582
 
@@ -590,7 +657,7 @@ Rules: reference commands **explicitly** (`mycli command arg`, never “see the
590
657
  - **`--json` on every command**—one output path that renders human or machine output.
591
658
  - **`--brief`/`--quiet`** for constrained contexts and scripts.
592
659
  - **Idempotent `setup --auto`** (non-interactive) vs.
593
- `setup --interactive` for humans; never let an agent get stuck on a prompt.
660
+ a guided setup for humans; never let an agent get stuck on a prompt.
594
661
  - **Actionable errors** that include the next command to run.
595
662
  - **Discoverable help**: an `IMPORTANT:` epilog pointing at a context-restore command
596
663
  (e.g., `mycli prime`), and a “Getting Started” one-liner.
@@ -637,17 +704,25 @@ only where a target agent requires it:
637
704
  - `.agents/skills/<tool>/SKILL.md`—the portable project skill.
638
705
  **Be precise about who reads this path natively vs.
639
706
  who reaches it via an installer**, rather than claiming a flat “all agents read it”:
640
- - **Scans repo-root `.agents/skills/` natively** (verified): **Codex** (source above)
641
- and **Gemini CLI** (documents `.agents/skills/` as a workspace/user alias).
642
- **pi** / **OpenCode** scan project Agent Skills dirs.
707
+ - **Scans repo-root `.agents/skills/` natively** (verified): **Codex** (source above),
708
+ **Cursor** (its Agent Skills docs list `.agents/skills/`, `.cursor/skills/`, and the
709
+ `~/` global variants, plus `.claude/skills/` and `.codex/skills/` for
710
+ compatibility), and **Gemini CLI** (documents `.agents/skills/` as a workspace/user
711
+ alias). **pi** and **OpenCode** scan project Agent Skills dirs.
643
712
  - **Reached via the cross-agent installer**: `npx skills add` copies the same
644
713
  `SKILL.md` into `.agents/skills/` and **symlinks it into each agent’s own dir**
645
- (Cursor, Copilot, Cline, Amp, Windsurf, …). For those agents the *installer*, not
646
- the agent, is what binds `.agents/skills/` to their native location—so “works with
647
- Cursor/Copilot/…” means “via skills.sh”, not “Cursor scans `.agents/skills/`
648
- itself.”
714
+ (Copilot, Cline, Amp, Windsurf, …). For an agent that does not scan
715
+ `.agents/skills/` itself, the *installer*, not the agent, binds it to that agent’s
716
+ native location, so “works with Copilot/…” means “via skills.sh”, not “the agent
717
+ scans `.agents/skills/` itself.”
649
718
  - **Claude Code does NOT scan `.agents/`** at all—it reads only `.claude/skills/`
650
719
  (next bullet), which is why the mirror is required, not optional.
720
+ - **Native per-agent skill dirs are multiplying** (community catalogs, mid-2026;
721
+ verify per agent): beyond `.claude/skills/`, agents document their own dirs such as
722
+ `.cursor/skills/`, `.github/skills/` (Copilot), `.gemini/skills/`,
723
+ `.opencode/skills/`, `.windsurf/skills/`, and `.agent/skills/` (Google Antigravity).
724
+ Emitting only the portable `.agents/skills/` and the Claude mirror and letting
725
+ `npx skills add` fan out the rest scales better than writing each one.
651
726
  - When in doubt, verify against the agent’s source/docs before asserting native
652
727
  scanning.
653
728
  - `.claude/skills/<tool>/SKILL.md`—Claude Code compatibility mirror (required: Claude
@@ -661,7 +736,7 @@ tbd should write a CLI-managed `SKILL.md` to `.agents/skills/tbd/`, mirror it to
661
736
  also feeds Cursor, Codex, and Factory), preserving user content outside the markers:
662
737
 
663
738
  ```markdown
664
- <!-- BEGIN MYCLI INTEGRATION format=f02 surface=agents-md -->
739
+ <!-- BEGIN MYCLI INTEGRATION format=f02 -->
665
740
  ## mycli
666
741
 
667
742
  - Run `mycli prime` for current project context.
@@ -738,10 +813,14 @@ Do not make Codex hooks call scripts stored under `.claude/`—that couples Code
738
813
  Claude setup. If a script must move out of `.claude/scripts/`, update the tbd-owned hook
739
814
  commands (or leave a wrapper) so existing Claude hooks keep working.
740
815
 
741
- **Upgrade existing installs deliberately (L3 only).** A self-installing tool whose skill
742
- content evolves *will* leave older generated files in users’ repos.
743
- (An L2 tool that only writes discovery-dir skills can skip all of this: a re-install is
744
- a clean full overwrite, with no managed `AGENTS.md` block or hooks to migrate.)
816
+ **Upgrade managed generated artifacts deliberately.** A self-installing tool whose
817
+ generated content evolves *will* leave older artifacts in users’ repos.
818
+ (A tool that only writes fully-overwritten discovery-dir skills—plain L2 or below—can
819
+ skip all of this: a re-install is a clean full overwrite, with no managed `AGENTS.md`
820
+ block or hooks to migrate.
821
+ The L2b variant, which merges a managed `AGENTS.md` block into a human-authored file,
822
+ **does** need the format stamp and forward-compatibility guard even though it is not
823
+ L3—this is the artifact-driven rule from §6.0, not an L3-only one.)
745
824
  Treat generated integration files like config migrations:
746
825
 
747
826
  Reserve an `fNN` **format bump** for changes big enough to need an explicit migration: a
@@ -783,7 +862,8 @@ it; it does not license the tool to mutate the repo on its own.
783
862
  `AGENTS.md` block, generated skills, tool-owned hooks, `.codex/` config), re-running
784
863
  cleanly with no change when already current.
785
864
  - Treat old marked `AGENTS.md` blocks with no metadata as legacy generated content and
786
- replace only the managed region.
865
+ replace only the managed region, collapsing any duplicate stale blocks to one current
866
+ block at the first block’s position (§2).
787
867
  - Detect tool-owned hook entries by command/path/signature, replace only those entries,
788
868
  and preserve unrelated user hooks.
789
869
  - **Forward-compatibility guard.** When the tool finds a generated artifact whose
@@ -1030,6 +1110,20 @@ This is a supply-chain control, not just ergonomics: an unpinned runner re-resol
1030
1110
  the latest published version on every run and bypasses any cool-off window.
1031
1111
  See `tbd guidelines supply-chain-hardening` for the cross-ecosystem policy.
1032
1112
 
1113
+ **Bake a pin the generator can actually resolve.** The rules above are consumer-side:
1114
+ they assume the generating tool can pin to its own running version.
1115
+ A tool installing from an editable or dev checkout cannot.
1116
+ Its running version is an unpublished dev, pre-release, or local build
1117
+ (`0.1.1.dev49+abc1234`, npm `0.0.0-dev.<sha>` or `x.y.z-canary`) that `uvx pkg@<that>`
1118
+ or `npx pkg@<that>` will never resolve, so baking it ships a skill that fails the moment
1119
+ a teammate runs it—one works-on-my-machine install poisons the clone.
1120
+ Bake the running version only when it is a real, resolvable published release; otherwise
1121
+ fall back to a known-good published pin.
1122
+ `pprose` does this with a `DISCOVERY_VERSION` constant (its last real PyPI release)
1123
+ gated by a PEP 440 release check (`is_pypi_release`), and enforces at release time that
1124
+ the constant equals the release tag.
1125
+ This is the generator-side mirror of the consumer-side pin rule.
1126
+
1033
1127
  **Current tooling (May 2026)**
1034
1128
 
1035
1129
  - **Node / TypeScript**: zero-install via `npx <pkg>@<ver>` (`-y` to skip the prompt),
@@ -1056,9 +1150,12 @@ environments where the project wants lockfile-managed versions and warm-start sp
1056
1150
 
1057
1151
  ### 6.8 Publishing and discovery—make the skill installable
1058
1152
 
1059
- Most “skill registries” (May 2026) are **GitHub-repo discoverers, not gated app
1060
- stores**. You don’t submit a form; you put a spec-compliant `SKILL.md` in a public repo
1153
+ Most “skill registries” (mid-2026) are **GitHub-repo discoverers, not gated app
1154
+ stores**: you don’t submit a form, you put a spec-compliant `SKILL.md` in a public repo
1061
1155
  and the ecosystem finds it.
1156
+ The exception is **Anthropic’s own plugin marketplaces**, which *are* a reviewed,
1157
+ curated channel with a real submission and security-screening flow (below)—so the
1158
+ landscape is now a spectrum from passive scrapers to a gated store, not one shape.
1062
1159
  The landscape worth targeting:
1063
1160
 
1064
1161
  - **`skills.sh` / `npx skills add <owner/repo>`** (Vercel)—the cross-agent “npm for
@@ -1068,16 +1165,59 @@ The landscape worth targeting:
1068
1165
  - **GitHub-scraping indexers** (SkillsMP ~800k skills, ClaudeSkills.info, LobeHub,
1069
1166
  claudemarketplaces.com)—auto-list public repos that contain a `SKILL.md` (often gated
1070
1167
  on ≥2 stars). You get listed for free just by being public and discoverable.
1071
- - **Plugin marketplaces**—`.claude-plugin/marketplace.json` (Claude Code, the official
1072
- Anthropic channel) and `.agents/plugins/marketplace.json` (Codex; Codex reads both).
1168
+ - **Self-hosted plugin marketplaces**—`.claude-plugin/marketplace.json` (Claude Code)
1169
+ and `.agents/plugins/marketplace.json` (Codex; Codex reads both).
1073
1170
  These are *plugin* channels: bundles of skills, MCP servers, hooks, and commands.
1074
1171
  They are **only for publishing a bundle**—a repo-local skill already loads from
1075
1172
  `.claude/skills/` (Claude Code) and `.agents/skills/` (Codex) **without any
1076
1173
  manifest**, so don’t add one just to be discovered.
1174
+ Users add yours with `/plugin marketplace add <owner/repo>` and install with
1175
+ `/plugin install <name>@<marketplace>`; it is not centrally indexed unless you also
1176
+ list on the community marketplace (next bullet).
1077
1177
  If you *do* emit a `marketplace.json` / `.codex-plugin/plugin.json`, treat it like any
1078
1178
  generated artifact (§6.6): point it at the same generated `SKILL.md` payload (no body
1079
1179
  duplication), mark it `DO NOT EDIT`, make it deterministic so re-install is a no-op,
1080
1180
  and pick the same commit-vs-gitignore mode as the skill it references.
1181
+ - **Anthropic’s official and community marketplaces**—the one genuinely *gated* channel,
1182
+ and the only place a third party gets a reviewed, security-scanned listing.
1183
+ Two catalogs ship with Claude Code:
1184
+ - **`claude-plugins-official`**—auto-available in every session (catalog at
1185
+ `claude.com/plugins`); curated by Anthropic, inclusion **at its discretion, not
1186
+ self-serve**. Install: `/plugin install <name>@claude-plugins-official`.
1187
+ - **`anthropics/claude-plugins-community`** (install name `claude-community`)—a
1188
+ **read-only nightly mirror of Anthropic’s internal review pipeline**. Third-party
1189
+ plugins that pass **automated validation + security screening** get listed, each
1190
+ **pinned to a commit SHA**. Users add it manually
1191
+ (`/plugin marketplace add anthropics/claude-plugins-community`) then
1192
+ `/plugin install <name>@claude-community`. **Submitting**: do *not* open a PR
1193
+ against the repo—they are auto-closed.
1194
+ Submit through the in-app form / `clau.de/plugin-directory-submission` and let the
1195
+ scan and approval run (the in-app forms feed the *community* marketplace, never the
1196
+ official one). This is the channel that buys **trust and discoverability inside
1197
+ Claude Code**: current `/plugin` install views show a **Context cost** estimate
1198
+ (per-turn token cost; v2.1.143+), a **Last updated** date (v2.1.144+), and a **Will
1199
+ install** breakdown (commands, agents, skills, hooks, MCP/LSP; v2.1.145+) before the
1200
+ user commits—best-in-class informed consent.
1201
+ Worth it for a tool you want broadly adopted; still optional, since a repo-local
1202
+ skill loads with none of it.
1203
+
1204
+ **Channels at a glance** (generic; verify specifics against current docs—this space
1205
+ moves fast). The rows run from lowest effort/reach to highest trust, and they
1206
+ **compose**: a single public repo can satisfy every row at once.
1207
+
1208
+ | Channel | User install | Discovery & reach | Trust & security | Versioning | Publish / submit |
1209
+ | --- | --- | --- | --- | --- | --- |
1210
+ | **Documented install** (README + optional installer) | A few manual steps, or one command if you ship `mytool install` | None beyond the repo’s own stars/SEO | Fully manual—user reads the source before running | Whatever your docs pin; manual re-pull | Push the repo and write the README |
1211
+ | **`npx skills add`** (skills.sh, Vercel) | `npx skills add <owner/repo>`—one command, 50+ agents, symlink or copy | High and **cross-agent**; `npx skills find`, ranked by install telemetry | Runs the `skills` CLI + your repo; review the `SKILL.md`, pin to a ref | Tracks the repo/ref; `npx skills update`; no semver | Put `skills/<name>/SKILL.md` in a public repo—auto-works. [skills.sh](https://skills.sh) · [vercel-labs/skills](https://github.com/vercel-labs/skills) |
1212
+ | **GitHub-scraping indexers** (SkillsMP, claudemarketplaces, LobeHub…) | They hand you one of the other commands | Highest *passive* top-of-funnel; free; often gated on ≥2 stars | Mostly unvetted link directories; you don’t control the listing | Inherits the underlying method | Automatic once public—no action. e.g. [claudemarketplaces.com](https://claudemarketplaces.com) |
1213
+ | **Self-hosted plugin marketplace** (Claude Code / Codex) | `/plugin marketplace add <owner/repo>`, then `/plugin install <name>@<mp>` (or the `/plugin` UI) | Inside Claude Code once added; **not** centrally indexed | Your repo’s trust only; install preview shows exactly what loads | **Best**—`version` field + SHA pin + auto-update toggle | Add `.claude-plugin/marketplace.json`. [Docs](https://code.claude.com/docs/en/plugin-marketplaces) |
1214
+ | **Anthropic official / community marketplace** | Official: auto-available (`<name>@claude-plugins-official`). Community: add `anthropics/claude-plugins-community`, then `<name>@claude-community` | Highest inside Claude Code (Discover tab, `claude.com/plugins`) | **Best**—reviewed, security-screened, SHA-pinned, install preview | SHA-pinned in the catalog; nightly-mirror updates | Official: not self-serve (Anthropic’s discretion). Community: submit at [clau.de/plugin-directory-submission](https://clau.de/plugin-directory-submission) (no PRs—auto-closed). [Docs](https://code.claude.com/docs/en/discover-plugins) |
1215
+
1216
+ **Takeaway**: for broad cross-agent reach at near-zero effort, ship a valid `SKILL.md`
1217
+ and lean on `npx skills add` plus the scrapers; for the highest trust and
1218
+ discoverability *inside Claude Code*, additionally submit to the community marketplace.
1219
+ Reserve a self-hosted marketplace for a private/team channel or to bundle hooks, agents,
1220
+ and MCP servers alongside the skill.
1081
1221
 
1082
1222
  **The simplest publishable structure** (works for all of the above at once):
1083
1223
 
@@ -1263,7 +1403,9 @@ going:
1263
1403
  - Route, don’t restate: name each capability and the command to run; let the CLI’s
1264
1404
  `--help` and informational subcommands hold the flags and recipes.
1265
1405
  Carry the focused context an agent needs to judge that the tool is relevant, but don’t
1266
- blindly copy help into the skill; that wastes context and goes stale (§3.1, §6.5).
1406
+ blindly copy help into the skill; that wastes context and goes stale (§3.1, §6.5). The
1407
+ two failure modes: **slopdocs** (copying too much or unthinkingly) and **hiding
1408
+ details** (copying too little—content hidden behind links the agent won’t follow).
1267
1409
  - Respect the budget; verify the current model for your target agent (Claude Code ≈ 1%
1268
1410
  of context window, not a flat char count).
1269
1411
 
@@ -1274,6 +1416,10 @@ going:
1274
1416
  This is tbd’s validated approach.
1275
1417
  - Path-ordered resource cache for project/user shadowing; generate `--list` dynamically.
1276
1418
  - Context-injection loop with explicit `cli command arg` references; depth ≤ 3.
1419
+ - Self-installing tools climb the §6.0 ladder and stop at the lowest rung.
1420
+ A managed `AGENTS.md` block (the L2b variant) is the one L3 surface worth adopting
1421
+ alone, but any rung that writes one must format-stamp it and refuse to clobber a newer
1422
+ block.
1277
1423
 
1278
1424
  **Reach and surface**
1279
1425
 
@@ -1290,6 +1436,8 @@ going:
1290
1436
  - Scope `allowed-tools` tightly; gate destructive skills; design for sandboxes.
1291
1437
  - Idempotent multi-agent install with marker-bounded sections; version source files, not
1292
1438
  fully generated install artifacts; mark generated files “DO NOT EDIT.”
1439
+ - Pin a generated runner to a resolvable published release; never bake a dev or
1440
+ pre-release version a teammate’s `uvx`/`npx` cannot resolve (§6.7).
1293
1441
 
1294
1442
  * * *
1295
1443
 
@@ -1301,6 +1449,9 @@ going:
1301
1449
  - [ ] Body carries the essential context to judge whether the tool is relevant and to
1302
1450
  name each key use case, but routes to `mycli <cmd> --help` or `--list` for flags and
1303
1451
  recipes instead of copying help wholesale
1452
+ - [ ] No **slopdocs** (help, flags, or recipes copied in unthinkingly) and no **hiding
1453
+ details** (capabilities behind bare links with too little context to show they are
1454
+ worth following)
1304
1455
  - [ ] Third-person description, trigger keywords front-loaded
1305
1456
  - [ ] Installable via commit to `.agents/skills/`, Claude mirror at `.claude/skills/`,
1306
1457
  and/or `npx skills add`
@@ -1309,16 +1460,26 @@ going:
1309
1460
  - [ ] `AGENTS.md` with build/test/style/conventions (concise)
1310
1461
  - [ ] Managed `AGENTS.md` block uses a stable begin/end marker with a `format=fNN` field
1311
1462
  on the begin line
1463
+ - [ ] Marker carries only `format=fNN` (artifact type is clear from location, no
1464
+ `surface=` tag); duplicate stale blocks collapsed to one on install (the L2b variant
1465
+ and L3)
1312
1466
  - [ ] `CLAUDE.md` strategy decided (symlink to `AGENTS.md`, copy, or separate)
1313
1467
 
1314
1468
  **CLI tool (if applicable)**
1315
1469
  - [ ] `--json` on all commands; `--brief`/`--quiet`; actionable errors
1470
+
1316
1471
  - [ ] Idempotent `setup --auto`; `init` for surgical config
1472
+
1317
1473
  - [ ] Help epilog with `IMPORTANT:` + Getting Started one-liner
1474
+
1318
1475
  - [ ] `prime` (status/context) and `skill` (pure docs) commands
1476
+
1319
1477
  - [ ] Invocation strategy chosen (§6.7): local-first plus pinned zero-install fallback
1320
1478
  by default, or global install + `SessionStart` bootstrap for cloud/ephemeral agents
1321
1479
 
1480
+ - [ ] Generated skill bakes a resolvable published pin, not the running dev or
1481
+ pre-release version (§6.7)
1482
+
1322
1483
  **Advanced (many subcommands / knowledge library)**
1323
1484
  - [ ] Meta-skill composition (header + baseline + dynamic directory)
1324
1485
  - [ ] Informational commands (`guidelines`/`shortcut`/`template`) with `--list`
@@ -1394,10 +1555,25 @@ going:
1394
1555
  https://vercel.com/changelog/introducing-skills-the-open-agent-skills-ecosystem
1395
1556
  - npx skills: https://github.com/vercel-labs/skills
1396
1557
  - Anthropic skills (examples): https://github.com/anthropics/skills
1558
+ - Discover and install plugins (official + community marketplaces, `/plugin` install
1559
+ preview): https://code.claude.com/docs/en/discover-plugins
1560
+ - Create and distribute a plugin marketplace:
1561
+ https://code.claude.com/docs/en/plugin-marketplaces
1562
+ - Community marketplace + submission flow:
1563
+ https://github.com/anthropics/claude-plugins-community (submit via
1564
+ https://clau.de/plugin-directory-submission)
1397
1565
  - gstack: https://github.com/garrytan/gstack
1398
1566
  - Beads (bd): https://github.com/gastownhall/beads
1399
- - qmd (L2 reference: self-installing skill, discovery-dirs only, CLI + MCP + plugin):
1567
+ - qmd (L2 reference: self-installing skill, discovery-dirs only, CLI, MCP, and plugin):
1400
1568
  https://github.com/tobi/qmd
1569
+ - pprose (L2b variant reference: self-installing skill plus a format-stamped,
1570
+ marker-bounded `AGENTS.md` block, no hooks/prime/setup):
1571
+ https://github.com/jlevy/practical-prose
1572
+ - taste-skill (L0 reference: pure-prompt skill collection distributed via skills.sh, a
1573
+ Claude plugin marketplace, `copilot-instructions.md`, and `llms.txt`):
1574
+ https://github.com/Leonxlnx/taste-skill
1575
+ - anthropics/skills (L0 reference: skill collection bundled as Claude plugins):
1576
+ https://github.com/anthropics/skills
1401
1577
 
1402
1578
  ### Security
1403
1579
 
@@ -2,6 +2,7 @@
2
2
  title: Commit Conventions
3
3
  description: Conventional Commits format with extensions for agentic workflows
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ category: general
5
6
  ---
6
7
  # Commit Conventions
7
8
 
@@ -2,6 +2,7 @@
2
2
  title: Common Documentation Guidelines
3
3
  description: Common cross-project standards for writing and organizing docs, code comments, and text files—how to organize, structure, write, and format documents, plus the guideline footer convention. Downstream of github.com/jlevy/practical-prose. Use whenever writing or editing any documentation, README, guideline, or design doc.
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ category: general
5
6
  ---
6
7
  # Common Documentation Guidelines
7
8
 
@@ -2,6 +2,7 @@
2
2
  title: Convex Limits and Best Practices
3
3
  description: Comprehensive reference for Convex platform limits, workarounds, and performance best practices
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ category: convex
5
6
  ---
6
7
  # Research Brief: Convex Database Limits, Best Practices, and Workarounds
7
8
 
@@ -2,6 +2,7 @@
2
2
  title: Convex Rules
3
3
  description: Guidelines and best practices for building Convex projects, including database schema design, queries, mutations, and real-world examples
4
4
  author: Convex team
5
+ category: convex
5
6
  ---
6
7
  # Convex Guidelines
7
8
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Electron App Development Patterns
3
3
  description: Guidelines for Electron development ecosystems including npm, pnpm, and Bun, with security baselines and framework comparisons
4
+ category: electron
4
5
  ---
5
6
  # Electron App Development Patterns
6
7
 
@@ -2,6 +2,7 @@
2
2
  title: Error Handling Rules
3
3
  description: Rules for handling errors, failures, and exceptional conditions
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ category: general
5
6
  ---
6
7
  # Error Handling Rules
7
8
 
@@ -131,6 +132,9 @@ For every operation that can fail:
131
132
  Failure tests are harder to write but catch the bugs that matter most—the ones where the
132
133
  system lies about its state.
133
134
 
135
+ See `general-testing-rules` and `general-tdd-guidelines` for the broader testing
136
+ approach.
137
+
134
138
  ### Principle 8: Classify Errors as Transient or Permanent
135
139
 
136
140
  Not all errors are equal.
@@ -2,6 +2,7 @@
2
2
  title: General Coding Rules
3
3
  description: Rules for constants, magic numbers, and general coding practices
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ category: general
5
6
  ---
6
7
  # General Coding Rules
7
8
 
@@ -14,7 +15,8 @@ author: Joshua Levy (github.com/jlevy) with LLM assistance
14
15
  their purpose.
15
16
 
16
17
  - Constants should be defined in appropriate settings files (e.g., `settings.ts`) for
17
- easy maintenance.
18
+ easy maintenance. Do not restate a constant’s value in a comment; see
19
+ `general-comment-rules`.
18
20
 
19
21
  ```typescript
20
22
  // BAD: Hardcoded numbers
@@ -2,6 +2,7 @@
2
2
  title: General Comment Rules
3
3
  description: Language-agnostic rules for writing clean, maintainable comments
4
4
  author: Joshua Levy (github.com/jlevy) with LLM assistance
5
+ category: general
5
6
  ---
6
7
  # General Comment Rules
7
8
 
@@ -93,7 +94,8 @@ These are language-agnostic rules on comments:
93
94
  prefer `/** ... */` comments wherever appropriate on variables, functions, methods,
94
95
  and at the top of files.
95
96
 
96
- - See language-specific comment rules for more details.
97
+ - See language-specific comment rules for more details, e.g. `typescript-rules` or
98
+ `python-rules`.
97
99
 
98
100
  <!-- This document follows common-doc-guidelines.md.
99
101
  See github.com/jlevy/practical-prose and review guidelines before editing.