Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions skills/supervise/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,38 @@ Use only fields the selected backend can materialize.
{
"name": "source-skeptic-v1",
"description": "Challenge one candidate claim against primary evidence.",
"harness": "codex",
"prompt": {
"appendSystemPrompt": "Return a claim table with source locations, contradictions, unknowns, and a reproducible rejection check."
},
"model": {
"default": "<allowed-model-id>",
"provider": "openai",
"default": "gpt-5.6-sol",
"reasoningEffort": "xhigh"
},
"metadata": {
"role": "driver"
"tools": {
"agent_runtime_coordination_spawn_worker": true
},
"resources": {
"failOnError": true,
"skills": [
{
"kind": "inline",
"name": "profile-authoring",
"content": "<complete profile-authoring SKILL.md bytes>"
}
]
}
}
```

The example shows placement, not required values.
Use `metadata.role: 'driver'` only when this child should author and supervise descendants.
Omit that role for a leaf.
Replace the example skill content with the exact bytes the parent received.
Declare `tools.agent_runtime_coordination_spawn_worker: true` only when this child can create descendants.
That declaration is the recursion signal; names, descriptions, prompts, and metadata never grant authority.
Every profile with spawn authority must carry the complete authoring skill in `resources.skills`.
Also declare every other coordination or work tool the child needs by its visible name.
Omit spawn authority and the authoring skill for an ordinary leaf.

The task argument names the concrete artifact and a check that can fail.
The profile names how the agent works and which capabilities it receives.
Expand Down
17 changes: 17 additions & 0 deletions tests/kernel/skill-tool-names.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,20 @@ describe('shipped skills name no harness-native tool', () => {
).toEqual([])
})
})

describe('supervise skill recursive authority', () => {
const supervise = readFileSync(join(skillsRoot, 'supervise', 'SKILL.md'), 'utf8')

it('teaches the profile-owned spawn signal and complete skill propagation', () => {
expect(supervise).toContain('tools.agent_runtime_coordination_spawn_worker: true')
expect(supervise).toContain(
'Every profile with spawn authority must carry the complete authoring skill',
)
expect(supervise).toContain('"name": "profile-authoring"')
expect(supervise).toContain('"failOnError": true')
})

it('does not grant recursion through role metadata', () => {
expect(supervise).not.toMatch(/metadata\.role|role\s*:\s*['"]driver['"]|"role"\s*:\s*"driver"/)
})
})