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.
- package/README.md +38 -6
- package/dist/bin.mjs +4036 -1074
- package/dist/bin.mjs.map +1 -1
- package/dist/cli.mjs +2505 -1585
- package/dist/cli.mjs.map +1 -1
- package/dist/{config-BJz1m9eN.mjs → config-B1w3pAkY.mjs} +142 -279
- package/dist/config-B1w3pAkY.mjs.map +1 -0
- package/dist/config-DXhifxOw.mjs +3 -0
- package/dist/doc-cache-CamtXfi4.mjs +1035 -0
- package/dist/doc-cache-CamtXfi4.mjs.map +1 -0
- package/dist/doc-cache-CiBwpDTf.mjs +3 -0
- package/dist/doc-fork-BMjqzfAs.mjs +3 -0
- package/dist/doc-fork-CoPi1G1N.mjs +304 -0
- package/dist/doc-fork-CoPi1G1N.mjs.map +1 -0
- package/dist/docref-C7g0sjvL.mjs +167 -0
- package/dist/docref-C7g0sjvL.mjs.map +1 -0
- package/dist/docs/README.md +38 -6
- package/dist/docs/SKILL.md +21 -5
- package/dist/docs/guidelines/backward-compatibility-rules.md +1 -0
- package/dist/docs/guidelines/bun-monorepo-patterns.md +1 -0
- package/dist/docs/guidelines/cli-agent-skill-patterns.md +228 -52
- package/dist/docs/guidelines/commit-conventions.md +1 -0
- package/dist/docs/guidelines/common-doc-guidelines.md +1 -0
- package/dist/docs/guidelines/convex-limits-best-practices.md +1 -0
- package/dist/docs/guidelines/convex-rules.md +1 -0
- package/dist/docs/guidelines/electron-app-development-patterns.md +1 -0
- package/dist/docs/guidelines/error-handling-rules.md +4 -0
- package/dist/docs/guidelines/general-coding-rules.md +3 -1
- package/dist/docs/guidelines/general-comment-rules.md +3 -1
- package/dist/docs/guidelines/general-eng-agent-principles.md +127 -0
- package/dist/docs/guidelines/general-tdd-guidelines.md +7 -0
- package/dist/docs/guidelines/general-testing-rules.md +5 -0
- package/dist/docs/guidelines/golden-testing-guidelines.md +1 -0
- package/dist/docs/guidelines/pnpm-monorepo-patterns.md +1 -0
- package/dist/docs/guidelines/python-cli-patterns.md +5 -0
- package/dist/docs/guidelines/python-modern-guidelines.md +4 -0
- package/dist/docs/guidelines/python-rules.md +7 -0
- package/dist/docs/guidelines/release-notes-guidelines.md +1 -0
- package/dist/docs/guidelines/supply-chain-hardening.md +3 -2
- package/dist/docs/guidelines/tbd-sync-troubleshooting.md +25 -2
- package/dist/docs/guidelines/typescript-cli-tool-rules.md +4 -3
- package/dist/docs/guidelines/typescript-code-coverage.md +7 -4
- package/dist/docs/guidelines/typescript-rules.md +8 -9
- package/dist/docs/guidelines/typescript-sorting-patterns.md +2 -1
- package/dist/docs/guidelines/typescript-yaml-handling-rules.md +6 -5
- package/dist/docs/references/docmap-format.md +64 -0
- package/dist/docs/references/docref-format.md +71 -0
- package/dist/docs/shortcuts/standard/checkout-third-party-repo.md +17 -4
- package/dist/docs/shortcuts/standard/new-shortcut.md +17 -3
- package/dist/docs/shortcuts/standard/plan-implementation-with-beads.md +1 -1
- package/dist/docs/shortcuts/standard/setup-github-cli.md +4 -1
- package/dist/docs/shortcuts/standard/suggest-upstream-improvements.md +69 -0
- package/dist/docs/shortcuts/standard/sync-failure-recovery.md +1 -1
- package/dist/docs/shortcuts/standard/welcome-user.md +28 -0
- package/dist/docs/shortcuts/system/shortcut-explanation.md +16 -1
- package/dist/docs/shortcuts/system/skill-baseline.md +21 -5
- package/dist/docs/tbd-design.md +144 -3
- package/dist/docs/tbd-docs.md +169 -5
- package/dist/docs/tbd-prime.md +0 -1
- package/dist/docs/templates/qa-playbook.md +3 -1
- package/dist/docs/templates/research-brief.md +2 -2
- package/dist/fork-manifest-ByU7U2do.mjs +253 -0
- package/dist/fork-manifest-ByU7U2do.mjs.map +1 -0
- package/dist/fork-manifest-C7lGRq-6.mjs +3 -0
- package/dist/{id-mapping-mtoSP9Qt.mjs → id-mapping-D0iitY-F.mjs} +1 -1
- package/dist/{id-mapping-687_UEsy.mjs → id-mapping-DAIeLKzm.mjs} +8 -200
- package/dist/id-mapping-DAIeLKzm.mjs.map +1 -0
- package/dist/index.d.mts +90 -13
- package/dist/index.mjs +3 -3
- package/dist/lockfile-BR0laSDy.mjs +198 -0
- package/dist/lockfile-BR0laSDy.mjs.map +1 -0
- package/dist/paths-C1DpnZJW.mjs +405 -0
- package/dist/paths-C1DpnZJW.mjs.map +1 -0
- package/dist/{schemas-f0EcuAVu.mjs → schemas-lCwRk30L.mjs} +19 -6
- package/dist/schemas-lCwRk30L.mjs.map +1 -0
- package/dist/{src-BpvcrLnq.mjs → src-CxKOynr1.mjs} +3 -3
- package/dist/src-CxKOynr1.mjs.map +1 -0
- package/dist/tbd +4036 -1074
- package/dist/yaml-utils-BPy991by.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/config-BJz1m9eN.mjs.map +0 -1
- package/dist/config-DlCUMyCG.mjs +0 -3
- package/dist/docs/guidelines/general-eng-assistant-rules.md +0 -59
- package/dist/id-mapping-687_UEsy.mjs.map +0 -1
- package/dist/schemas-f0EcuAVu.mjs.map +0 -1
- 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-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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,
|
|
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
|
|
127
|
-
|
|
128
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
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
|
-
|
|
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
|
-
|
|
642
|
-
|
|
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
|
-
(
|
|
646
|
-
|
|
647
|
-
|
|
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
|
|
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
|
|
742
|
-
content evolves *will* leave older
|
|
743
|
-
(
|
|
744
|
-
a clean full overwrite, with no managed `AGENTS.md`
|
|
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” (
|
|
1060
|
-
stores
|
|
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
|
-
- **
|
|
1072
|
-
|
|
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
|
|
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: 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: 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.
|