codebyplan 1.13.51 → 1.13.52

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/dist/cli.js CHANGED
@@ -39,7 +39,7 @@ var VERSION, PACKAGE_NAME;
39
39
  var init_version = __esm({
40
40
  "src/lib/version.ts"() {
41
41
  "use strict";
42
- VERSION = "1.13.51";
42
+ VERSION = "1.13.52";
43
43
  PACKAGE_NAME = "codebyplan";
44
44
  }
45
45
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebyplan",
3
- "version": "1.13.51",
3
+ "version": "1.13.52",
4
4
  "description": "CLI for CodeByPlan — AI-powered development planning and tracking",
5
5
  "type": "module",
6
6
  "bin": {
@@ -157,5 +157,6 @@ Checks: name matches directory, frontmatter parses, no invalid fields, arg-hint
157
157
  - Rendered `SKILL.md` content enters the conversation once when invoked and stays until compaction — write standing instructions, not one-time steps
158
158
  - Preloaded subagent skills cannot have `disable-model-invocation: true`
159
159
  - `context: fork` is only meaningful when the skill body contains an actionable task; otherwise the subagent receives guidelines with no prompt
160
+ - `context: fork` ALSO disqualifies fan-out / spawn-then-route / inline-by-design / consumed-inline skills — they run in the main context for a reason; see [reference/fork-eligibility.md](reference/fork-eligibility.md) for the eligibility test + the CBP classification of which skills may fork and which must stay inline
160
161
  - Descriptions front-load key use case: `description` + `when_to_use` cap at 1,536 chars in the skill listing
161
162
  - `paths:` scoping applies when Claude reads files matching the globs, not on every tool use
@@ -0,0 +1,78 @@
1
+ # `context: fork` Eligibility — when to fork a skill, and when not to
2
+
3
+ `context: fork` runs the **entire SKILL.md body in a forked subagent** — it inherits the
4
+ parent conversation and, per the runtime, **runs in the background by default**. It is
5
+ isolation for a *whole skill*, not a way to delegate one sub-step. A forked body therefore
6
+ cannot drive the main pipeline: it can't `AskUserQuestion`, can't auto-trigger another
7
+ skill, and can't run an inline-fallback that the orchestrator depends on.
8
+
9
+ So forking only helps a narrow shape of skill. The canonical eligible example is
10
+ [examples/fork-skill.md](../examples/fork-skill.md): a single self-contained analytical task
11
+ that reads, reasons, and returns a summary — nothing else.
12
+
13
+ ## Eligibility test
14
+
15
+ A skill is **fork-eligible** only when ALL hold:
16
+
17
+ 1. Its whole body is **one** self-contained analytical/generative task (read → reason → return).
18
+ 2. It is **non-interactive** — no `AskUserQuestion`, no user decision gates.
19
+ 3. It does **not route** — no auto-trigger of another skill, no close-out directive that must
20
+ fire in the main context.
21
+ 4. It does **not fan out** — it does not spawn multiple subagents and coordinate them.
22
+ 5. It has **no inline-fallback** contract the orchestrator relies on.
23
+
24
+ Fail any one → the skill stays **inline** (main context). Inline skills still get clean
25
+ context isolation the right way: by delegating their heavy step to a dedicated **agent**
26
+ (e.g. `cbp-task-check`, `cbp-improve-round`, `cbp-round-executor`). The agent is the
27
+ isolation boundary; the skill stays in the main thread to orchestrate, route, and interact.
28
+
29
+ ## When NOT to use `context: fork` (the disqualifying patterns)
30
+
31
+ | Pattern | Why it can't fork | Example skills |
32
+ |---------|-------------------|----------------|
33
+ | **fan-out** | spawns multiple agents in parallel and coordinates them | `cbp-round-execute`, `cbp-checkpoint-check`, `cbp-map-architecture`, `cbp-refresh-arch-map` |
34
+ | **spawn-then-route** | spawns one agent, then `AskUserQuestion` / auto-triggers the next skill / runs inline-fallback | `cbp-task-check`, `cbp-standalone-task-check`, `cbp-round-start`, `cbp-round-end`, `cbp-checkpoint-plan` |
35
+ | **inline-by-design** | interactive Q&A or stepwise writes that must stay in the main context | `cbp-task-create`, `cbp-task-complete`, `cbp-round-update`, `cbp-merge-main` |
36
+ | **consumed-inline** | invoked *by* an agent (e.g. round-executor) and applies fixes synchronously into that context | `cbp-frontend-design`, `cbp-frontend-ui`, `cbp-frontend-ux` |
37
+ | **doc-ref-only** | mentions subagents/fork only as documentation; runs inline authoring | the `cbp-build-cc-*` authoring skills, `cbp-supabase-migrate` |
38
+
39
+ ## CHK-220 audit — classification matrix
40
+
41
+ Every skill whose `SKILL.md` touches the subagent/fork boundary — by spawning a subagent, by
42
+ being invoked inline by an agent, or by documenting the feature — was classified against the
43
+ eligibility test. **Result: 0 of 25 are fork-eligible** — none were migrated, because every
44
+ one either already isolates heavy work in a dedicated agent (the correct boundary) or depends
45
+ on inline orchestration/interaction that a background fork would break.
46
+
47
+ | Skill | Pattern | Fork-eligible |
48
+ |-------|---------|:---:|
49
+ | cbp-round-execute | fan-out | no |
50
+ | cbp-checkpoint-check | fan-out | no |
51
+ | cbp-map-architecture | fan-out | no |
52
+ | cbp-refresh-arch-map | fan-out | no |
53
+ | cbp-round-start | spawn-then-route | no |
54
+ | cbp-round-end | spawn-then-route | no |
55
+ | cbp-task-check | spawn-then-route | no |
56
+ | cbp-standalone-task-check | spawn-then-route | no |
57
+ | cbp-checkpoint-plan | spawn-then-route | no |
58
+ | cbp-round-update | inline-by-design | no |
59
+ | cbp-task-create | inline-by-design | no |
60
+ | cbp-standalone-task-create | inline-by-design | no |
61
+ | cbp-task-complete | inline-by-design | no |
62
+ | cbp-standalone-task-complete | inline-by-design | no |
63
+ | cbp-merge-main | inline-by-design | no |
64
+ | cbp-task-testing | inline-by-design | no |
65
+ | cbp-standalone-task-testing | inline-by-design | no |
66
+ | cbp-frontend-design | consumed-inline | no |
67
+ | cbp-frontend-ui | consumed-inline | no |
68
+ | cbp-frontend-ux | consumed-inline | no |
69
+ | cbp-supabase-migrate | doc-ref-only | no |
70
+ | cbp-build-cc-skill | doc-ref-only | no |
71
+ | cbp-build-cc-agent | doc-ref-only | no |
72
+ | cbp-build-cc-settings | doc-ref-only | no |
73
+ | cbp-build-cc-mode | doc-ref-only | no |
74
+
75
+ If a **new** skill is authored that passes the eligibility test above, fork it: add
76
+ `context: fork` + `agent: <Explore|Plan|general-purpose|custom>` (use `--fork` in
77
+ `/cbp-build-cc-skill`). Do not retrofit fork onto any skill in the table — their inline
78
+ shape is load-bearing.
@@ -20,6 +20,10 @@ Source: official Claude Code skills spec. All fields are optional; `description`
20
20
  | `paths` | Globs that auto-load the skill when matching files are in play |
21
21
  | `shell` | `bash` (default) or `powershell` for `!`-commands |
22
22
 
23
+ > `context: fork` / `agent` are right for only a narrow shape of skill — a single
24
+ > non-interactive analytical body. See [fork-eligibility.md](fork-eligibility.md) for the
25
+ > eligibility test and the CBP classification of which skills may fork (and which must stay inline).
26
+
23
27
  ## Character budget
24
28
 
25
29
  Combined `description` + `when_to_use` truncates at **1,536 characters** in the skill listing. Front-load the key use case.