@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.
- package/agents/aidlc-reviewer.md +46 -0
- package/capabilities/codex.yaml +10 -0
- package/dist/agents.d.ts +12 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +48 -0
- package/dist/agents.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/roadmap.md +6 -3
- package/docs/skills-and-platforms.md +29 -7
- package/package.json +2 -1
- package/resources/rules/task-agents.md +6 -6
- package/skills/80-review.md +13 -2
|
@@ -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.
|
package/capabilities/codex.yaml
CHANGED
|
@@ -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: >-
|
package/dist/agents.d.ts
ADDED
|
@@ -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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
*
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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
|
|
189
|
-
|
|
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.
|
|
72
|
-
|
|
73
|
-
|
|
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.
|
|
77
|
-
per phase, and three platforms already occupy `requirements` and `design` — the two
|
|
78
|
-
actually get asked in. A second entry for those phases would silently lose to the
|
|
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.
|
|
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
|
|
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.
|
|
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 —
|
|
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
|
|
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,
|
|
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:
|
|
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
|
```
|
package/skills/80-review.md
CHANGED
|
@@ -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.
|
|
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
|