@rasensio/aidlc-content 1.64.0 → 1.66.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.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: aidlc-reviewer
3
+ description: Reviews AIDLC lifecycle artifacts and task diffs from a fresh context and cannot change files. Use for aidlc-review and for the per-task check in .aidlc/resources/rules/task-agents.md.
4
+ commands:
5
+ - git diff
6
+ - git log
7
+ - aidlc compliance list
8
+ - aidlc compliance check
9
+ ---
10
+ # AIDLC reviewer
11
+
12
+ You review work you did not write. You start without the author's conversation, so everything you
13
+ know comes from the files you read and the message that started you. That is the point: judge what
14
+ is on disk, not what anyone meant.
15
+
16
+ ## What you cannot do
17
+
18
+ You cannot change files. You have no edit or write tool, and your shell runs only `git diff`,
19
+ `git log`, `aidlc compliance list` and `aidlc compliance check`. Give them literal arguments — a
20
+ commit id, a path, a flag. Pipes, redirects, `;`, `&&`, `$` and backticks are refused, and so is
21
+ every other command. Read and search files with your read and search tools.
22
+
23
+ If you are asked to change a file, do not try another way. Say that you cannot, and carry on with
24
+ the review.
25
+
26
+ ## What you deliver
27
+
28
+ Your reply is the deliverable. Nothing you do is saved unless it is in your reply.
29
+
30
+ - **An artifact review** — you were started from the `aidlc-review` skill, or asked to review
31
+ `requirements.md`, `design.md`, `tasks.md` or another lifecycle artifact. Follow
32
+ `.aidlc/skills/aidlc-review.md`. Reply with each findings file it calls for, in full, each under a
33
+ heading naming its path in the instance directory, each in one block fenced with four backticks
34
+ so a code fence inside a finding cannot close it. Write
35
+ `reviewer: aidlc-reviewer` in each file's frontmatter. End with this line, exactly:
36
+
37
+ Write each file above unchanged, then follow **Completion** in `.aidlc/skills/aidlc-review.md`.
38
+
39
+ - **A per-task check** — you were given a task line, the criteria it cites, a diff and a list of
40
+ changed test files, as `.aidlc/resources/rules/task-agents.md` describes. Judge the diff against
41
+ each cited criterion: met, or not and why. Every listed file is flagged; it fails the task unless
42
+ the task's own text calls for that change. Reply `PASS` or `REJECT`, the reasons, and each flagged
43
+ file with a verdict.
44
+
45
+ If the message that started you names no instance or artifact, say so and stop. Do not guess which
46
+ one was meant.
@@ -10,7 +10,17 @@ questions:
10
10
  Either way the question file is written first and its path named in one line,
11
11
  because a sandboxed turn can end before an answer arrives and the file is what
12
12
  survives it.
13
+ # Order is load-bearing: the Codex adapter writes every entry covering a phase,
14
+ # in this order, above the skill body, and the task-agents rule reads the line at
15
+ # the top of the skill file (native-reviewer-agent/AC-14).
13
16
  capabilities:
17
+ subagents:
18
+ phases: [implementation]
19
+ activation: >-
20
+ Sub-agents are available on this platform: spawn_agent starts an agent
21
+ with a fresh context of its own and wait_agent collects its reply. When a
22
+ tasks.md is being implemented, one agent per task may be offered, as
23
+ .aidlc/resources/rules/task-agents.md describes.
14
24
  code-generation:
15
25
  phases: [implementation, testing]
16
26
  activation: >-
@@ -0,0 +1,12 @@
1
+ import type { Agent } from './types.js';
2
+ /**
3
+ * Load every agent definition (native-reviewer-agent/AC-1).
4
+ *
5
+ * Shape-checking stops at what the file says. Whether a name or a command is
6
+ * safe to turn into a path or a guard is the CLI's call, in
7
+ * `compile/agents.ts`, because that is where it becomes one.
8
+ *
9
+ * @returns Agents sorted by filename. A file without frontmatter is skipped.
10
+ */
11
+ export declare function loadAgents(): Agent[];
12
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAexC;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,KAAK,EAAE,CAqBpC"}
package/dist/agents.js ADDED
@@ -0,0 +1,48 @@
1
+ import { fileURLToPath } from 'node:url';
2
+ import { resolve, dirname } from 'node:path';
3
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
4
+ import { parse as parseYaml } from 'yaml';
5
+ const CONTENT_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
6
+ const AGENTS_DIR = resolve(CONTENT_ROOT, 'agents');
7
+ /**
8
+ * Filenames an agent may have. The name becomes a path segment in every project
9
+ * the CLI writes to, so anything else in the directory is ignored rather than
10
+ * trusted — the same rule `loadRules` applies.
11
+ */
12
+ const AGENT_FILE = /^([a-z0-9-]+)\.md$/;
13
+ /** Frontmatter, then the body. */
14
+ const FRONTMATTER = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
15
+ /**
16
+ * Load every agent definition (native-reviewer-agent/AC-1).
17
+ *
18
+ * Shape-checking stops at what the file says. Whether a name or a command is
19
+ * safe to turn into a path or a guard is the CLI's call, in
20
+ * `compile/agents.ts`, because that is where it becomes one.
21
+ *
22
+ * @returns Agents sorted by filename. A file without frontmatter is skipped.
23
+ */
24
+ export function loadAgents() {
25
+ if (!existsSync(AGENTS_DIR))
26
+ return [];
27
+ const agents = [];
28
+ for (const id of readdirSync(AGENTS_DIR)
29
+ .map((name) => AGENT_FILE.exec(name)?.[1])
30
+ .filter((name) => name !== undefined)
31
+ .sort()) {
32
+ const raw = readFileSync(resolve(AGENTS_DIR, `${id}.md`), 'utf8');
33
+ const match = FRONTMATTER.exec(raw);
34
+ if (!match)
35
+ continue;
36
+ const meta = (parseYaml(match[1]) ?? {});
37
+ agents.push({
38
+ name: typeof meta['name'] === 'string' ? meta['name'] : id,
39
+ description: typeof meta['description'] === 'string' ? meta['description'] : '',
40
+ commands: Array.isArray(meta['commands'])
41
+ ? meta['commands'].filter((c) => typeof c === 'string')
42
+ : [],
43
+ instructions: match[2],
44
+ });
45
+ }
46
+ return agents;
47
+ }
48
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAG1C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,kCAAkC;AAClC,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC;SACrC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACzC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;SACpD,IAAI,EAAE,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1D,WAAW,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/E,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBACpE,CAAC,CAAC,EAAE;YACN,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,9 +5,10 @@ export { loadGlossary, getGlossaryTerm } from './glossary.js';
5
5
  export { loadCapabilities, getCapabilityMap } from './capabilities.js';
6
6
  export { loadPhases, getPhase } from './phases.js';
7
7
  export { loadRules } from './rules.js';
8
+ export { loadAgents } from './agents.js';
8
9
  export { loadBoardWorkflow, BOARD_WORKFLOW_PATH } from './recipes.js';
9
10
  export { loadTutorials, getTutorial, getSeries, parseTutorialSource } from './tutorials.js';
10
11
  export { loadHowTos, getHowTo, parseHowToSource, HOWTO_SECTIONS } from './howto.js';
11
12
  export { DOCS_DIR, loadDocTopics, findDocTopic, readDocPage } from './explain.js';
12
- export type { Skill, WorkflowTemplate, GuidanceLayer, GlossaryTerm, CapabilityMap, QuestionRendering, PhaseDefinition, Rule, CodeSample, ContentReference, TutorialStep, Tutorial, WidgetKind, WidgetReference, HowTo, DocTopic } from './types.js';
13
+ export type { Skill, WorkflowTemplate, GuidanceLayer, GlossaryTerm, CapabilityMap, QuestionRendering, PhaseDefinition, Rule, Agent, CodeSample, ContentReference, TutorialStep, Tutorial, WidgetKind, WidgetReference, HowTo, DocTopic } from './types.js';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClF,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClF,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ export { loadGlossary, getGlossaryTerm } from './glossary.js';
5
5
  export { loadCapabilities, getCapabilityMap } from './capabilities.js';
6
6
  export { loadPhases, getPhase } from './phases.js';
7
7
  export { loadRules } from './rules.js';
8
+ export { loadAgents } from './agents.js';
8
9
  export { loadBoardWorkflow, BOARD_WORKFLOW_PATH } from './recipes.js';
9
10
  export { loadTutorials, getTutorial, getSeries, parseTutorialSource } from './tutorials.js';
10
11
  export { loadHowTos, getHowTo, parseHowToSource, HOWTO_SECTIONS } from './howto.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
package/dist/types.d.ts CHANGED
@@ -29,6 +29,21 @@ export interface Rule {
29
29
  /** The whole file, H1 included. */
30
30
  body: string;
31
31
  }
32
+ /**
33
+ * One agent definition, written by each adapter in its harness's own format
34
+ * (native-reviewer-agent/AC-1). The single source of the agent's instructions, so
35
+ * the Claude Code and Codex copies cannot drift.
36
+ */
37
+ export interface Agent {
38
+ /** Filename without `.md`; also the agent's name on every harness. */
39
+ name: string;
40
+ /** One line; what a harness matches a request against. */
41
+ description: string;
42
+ /** The shell commands the agent may run, each a command prefix such as `git diff`. */
43
+ commands: string[];
44
+ /** The body: the agent's instructions, its system prompt on every harness. */
45
+ instructions: string;
46
+ }
32
47
  /**
33
48
  * One canonical vocabulary definition.
34
49
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/docs/roadmap.md CHANGED
@@ -148,7 +148,10 @@ Each item goes through these steps:
148
148
  boundary or the release boundary, or parks the item on a hard stop. A start that
149
149
  fails parks the item with `parked — could not start: <error>` and autopilot goes straight on to
150
150
  the next ready item; the parked one does not count toward `--items`. Retrying the same item every
151
- pass is what held a whole `--all` run on one item for five hours.
151
+ pass is what held a whole `--all` run on one item for five hours. An agent that exits with an
152
+ error within 30 seconds of launch parks the item with `agent failed to launch (exit <code>):`
153
+ and the first line it printed, so a flag the agent no longer accepts names itself instead of
154
+ reading as a failed build.
152
155
  3. **Your review, after each paused phase.** When a phase in `pause_after` is complete and
153
156
  unapproved, the item waits as `awaiting-review` — not parked. Read the artifact in the item's
154
157
  worktree, then `aidlc autopilot approve <instance>`; the next pass waits at the next paused
@@ -185,8 +188,8 @@ never edits a rank or a dependency: deciding what is agreed work stays a person'
185
188
  six questions on its own. Each is a list with one choice marked recommended:
186
189
 
187
190
  - **The agent, and what it may do.** Claude Code limited to editing files and running git, pnpm,
188
- node and read-only shell tools (recommended); Claude Code with full access; Codex in full-auto
189
- mode; or a command you type. This decides what an unattended agent may do on your machine, so
191
+ node and read-only shell tools (recommended); Claude Code with full access; Codex editing and
192
+ running commands inside its `workspace-write` sandbox; or a command you type. This decides what an unattended agent may do on your machine, so
190
193
  it is never picked for you: with no terminal, setup needs `--agent <preset>` or
191
194
  `--non-interactive`.
192
195
  - **How many items build at once** — two (recommended) or one.
@@ -68,15 +68,37 @@ subsystem of this repo. These pages are organised by **topic** for that reason.
68
68
  Claude Code's `subagents` entry, for the implementation phase, is a fact rather than a mode: it tells
69
69
  the agent sub-agents exist, which is the condition for offering one agent per task. It sits in the map
70
70
  rather than on the implementation skill because the map reaches every implementation-phase entry —
71
- including `aidlc-continue`, the route an unattended run takes into implementation. Add another platform
72
- only once it is confirmed to have sub-agents; a skill naming a tool the platform lacks is worse than
73
- not offering the mode.
71
+ including `aidlc-continue`, the route an unattended run takes into implementation. Codex's `subagents`
72
+ entry says the same in Codex's terms (`spawn_agent`, `wait_agent`); Codex sub-agents are on by default.
73
+ Until then a Codex skill file carried no activation line at all, so the rule's condition could never
74
+ hold there — the Codex adapter now writes its phase's lines above the body, as Copilot does. Add
75
+ another platform only once it is confirmed to have sub-agents; a skill naming a tool the platform lacks
76
+ is worse than not offering the mode.
77
+
78
+ **The reviewer agent** is the one place AIDLC asks a harness to enforce something rather than a prompt
79
+ to request it. One definition, `packages/content/agents/aidlc-reviewer.md`, is written as
80
+ `.claude/agents/aidlc-reviewer.md` for Claude Code and `.codex/agents/aidlc-reviewer.toml` for Codex.
81
+ The adversarial review and the per-task check run in it, and it cannot change files. On Claude Code the
82
+ tool list and the guard enforce it: the agent has `Read`, `Grep`, `Glob` and `Bash`, and a
83
+ `PreToolUse` hook runs `.claude/hooks/aidlc-reviewer-guard.mjs` before every shell command, allowing
84
+ only `git diff`, `git log`, `aidlc compliance list` and `aidlc compliance check` with literal
85
+ arguments, and blocking whenever the guard cannot run. A hook rather than the `tools` list, because
86
+ `tools` takes names only — `Bash(git diff *)` there removes Bash outright. The review skill's shim
87
+ carries `context: fork` and `agent: aidlc-reviewer`, so it starts without the author's conversation.
88
+ On Codex the read-only sandbox does, and the review skill's first line tells the session to spawn the
89
+ agent; whether a child keeps `read-only` under a workspace-write parent is what the opt-in live test
90
+ (`AIDLC_LIVE_HARNESS=1`) measures. Codex loads `.codex/` only in a trusted project, and `AGENTS.md` says
91
+ what happens without it: a fresh sub-agent told to edit nothing, read-only by request only. Because the
92
+ reviewer cannot write, it replies with its findings files and the session that started it writes them
93
+ unchanged. Claude Code reads `.claude/agents/` at session start, so an `update` that adds the agent
94
+ takes effect in the next session.
74
95
 
75
96
  Those files also carry a **top-level `questions:` key**, outside the phase-keyed `capabilities:` map, and
76
- the reason it sits outside is not cosmetic. Capability resolution returns exactly one activation string
77
- per phase, and three platforms already occupy `requirements` and `design` — the two phases questions
78
- actually get asked in. A second entry for those phases would silently lose to the first, so question
79
- rendering could not live there at all.
97
+ the reason it sits outside is not cosmetic. The shared capability resolution returns exactly one
98
+ activation string per phase, and three platforms already occupy `requirements` and `design` — the two
99
+ phases questions actually get asked in. A second entry for those phases would silently lose to the
100
+ first, so question rendering could not live there at all. (Codex's adapter has its own resolver, which
101
+ writes every entry covering a phase; that is how its two implementation entries both arrive.)
80
102
 
81
103
  Every question opens with **what it is**: the thing being decided, in plain words, on one concrete
82
104
  example. The emitted rendering file states this once, under `## Every platform`, and every directive
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rasensio/aidlc-content",
3
- "version": "1.64.0",
3
+ "version": "1.66.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -22,6 +22,7 @@
22
22
  "tutorials/",
23
23
  "howto/",
24
24
  "resources/",
25
+ "agents/",
25
26
  "docs/",
26
27
  "glossary.yaml"
27
28
  ],
@@ -1,12 +1,12 @@
1
1
  # The task-agents rule
2
2
 
3
- This file is the only statement of the rule. The implementation skill points here instead of restating it, so a session that runs its tasks itself carries none of this.
3
+ This file is the only statement of the rule. The implementation skill points here, so a session that runs its tasks itself carries none of this.
4
4
 
5
- **One agent per task** hands each task in `tasks.md` to a fresh agent, then has a second fresh agent review it. Task 8 gets the attention task 1 got, and the agent that wrote the code does not decide it is done. It doubles the agents, so it is off unless chosen.
5
+ **One agent per task** hands each task in `tasks.md` to a fresh agent, then has a second fresh agent review it. The agent that wrote the code does not decide it is done. It doubles the agents, so it is off unless chosen.
6
6
 
7
7
  ## When it is offered
8
8
 
9
- Only for an instance with a task-bearing `tasks.md`, and only where the platform's entry for the skill says sub-agents are available — the line above the pointer in the loaded skill file. Without it, every task runs in the session.
9
+ Only for an instance with a task-bearing `tasks.md`, and only where the platform's entry for the skill says sub-agents are available — a line at the top of the loaded skill file. Without it, every task runs in the session.
10
10
 
11
11
  ## Choosing, once per instance
12
12
 
@@ -27,7 +27,7 @@ Take open tasks in number order. For each one:
27
27
  - do not edit `requirements.md` or `tasks.md`;
28
28
  - do not commit and do not tick the checkbox;
29
29
  - reply with the files it changed.
30
- 3. **Review, in a second fresh agent that edits nothing.** First run `git add --intent-to-add .`, so files the implementer created show up in a diff without being staged. Then give the reviewer the same task line and criteria text, the output of `git diff $BASE`, and the output of this command, run by you:
30
+ 3. **Review, in a second fresh agent that edits nothing.** Use `aidlc-reviewer`, which cannot edit files (Claude Code: `subagent_type`; Codex: `spawn_agent`); where it is not loaded, tell a fresh agent to edit nothing. First run `git add --intent-to-add .`, so new files show in the diff unstaged. Then give the reviewer the same task line and criteria text, the output of `git diff $BASE`, and the output of this command, run by you:
31
31
 
32
32
  ```
33
33
  git diff --name-status --diff-filter=MDR $BASE -- '*test*' '*spec*' .aidlc/state/<instance>/requirements.md .aidlc/state/<instance>/tasks.md
@@ -42,7 +42,7 @@ Take open tasks in number order. For each one:
42
42
 
43
43
  ## Waves
44
44
 
45
- Adjacent open tasks carrying the same `(wave: <n>)` may be handed out at once, each to its own implementing agent, in this one checkout — never in separate worktrees. `BASE` is where the wave starts. Each task still gets its own reviewer, told which files its implementer reported, so it judges its own task within the shared diff; run the listing command once and give every reviewer its output. Commit task by task as each passes, staging only the files its implementer reported. A task that fails twice does not hold the others: they commit, and it is finished in the session afterwards.
45
+ Adjacent open tasks carrying the same `(wave: <n>)` may be handed out at once, each to its own implementing agent, in this one checkout — never in separate worktrees. `BASE` is where the wave starts. Each task still gets its own reviewer, told which files its implementer reported, to judge within the shared diff; run the listing command once and give every reviewer its output. Commit task by task as each passes, staging only the files its implementer reported. A task failing twice holds up no other: it is finished in the session afterwards.
46
46
 
47
47
  ## The record
48
48
 
@@ -50,6 +50,6 @@ Add a `## Task reviews` section to `code-complete.md`, one line per task:
50
50
 
51
51
  ```
52
52
  - T4: PASS — attempts 1 — flagged: none
53
- - T5: REJECT → PASS — attempts 2 — flagged: packages/cli/test/parser.test.ts (task asks to update its fixture)
53
+ - T5: REJECT → PASS — attempts 2 — flagged: test/parser.test.ts (task asks to update it)
54
54
  - T6: finished in session — attempts 2 — flagged: none
55
55
  ```
@@ -4,6 +4,7 @@ description: Performs adversarial review of lifecycle artifacts — examining fo
4
4
  phase: requirements
5
5
  trigger: Activated when a review is requested for any artifact or phase
6
6
  priority: 60
7
+ agent: aidlc-reviewer
7
8
  ---
8
9
  # Adversarial Review
9
10
 
@@ -15,7 +16,7 @@ Provide a structured, critical review of a lifecycle artifact from fresh context
15
16
 
16
17
  ## Important
17
18
 
18
- You MUST perform this review with fresh eyes. If you authored the artifact being reviewed, delegate to a separate session or subagent. Self-review defeats the purpose.
19
+ You MUST perform this review with fresh eyes. Where the platform has the `aidlc-reviewer` agent, the review runs in it: on Claude Code this skill starts it, with none of the author's conversation, and on Codex the skill's first line says how to start it. That agent cannot change files. Elsewhere, if you authored the artifact being reviewed, delegate to a separate session or subagent. Self-review defeats the purpose.
19
20
 
20
21
  ## Entry Criteria
21
22
 
@@ -79,6 +80,16 @@ The split is also the better review. Reviewing `design.md` and `tasks.md` into o
79
80
  Do not write a cleared line for a control you did not actually examine. An
80
81
  unchecked control reported as covered is the one outcome worse than no check at all.
81
82
 
83
+ ## Running as the reviewer agent
84
+
85
+ The `aidlc-reviewer` agent cannot write files, so steps 6 and 7 change shape. When you cannot write:
86
+
87
+ 1. Do everything up to writing the files.
88
+ 2. Reply with each findings file in full — `<artifact>.review.md` and, when a pack is installed, `<artifact>.compliance.md` — each under a heading naming its path in the instance namespace, each in one block fenced with four backticks. Write `reviewer: aidlc-reviewer` in each file's frontmatter.
89
+ 3. End with this line: "Write each file above unchanged, then follow **Completion** in `.aidlc/skills/aidlc-review.md`."
90
+
91
+ The session that started the review writes each file byte for byte, changing nothing in it, then follows **Completion**. A findings file its author has edited is no longer a review.
92
+
82
93
  {{guidance:secure-defaults}}
83
94
 
84
95
  ## Findings Format
@@ -87,7 +98,7 @@ The split is also the better review. Reviewing `design.md` and `tasks.md` into o
87
98
  ---
88
99
  artifact: <filename>
89
100
  reviewed_at: <ISO 8601 UTC>
90
- reviewer: <session-id>
101
+ reviewer: <session-id, or aidlc-reviewer>
91
102
  ---
92
103
 
93
104
  ## Finding 1