Skip to content
Merged
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
3 changes: 2 additions & 1 deletion scripts/verify.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ function validateSource(root) {
check(metadata.name === name, `Skill name must match directory: ${name} != ${metadata.name}`);
check(/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(metadata.name) && metadata.name.length <= 64, `Invalid Agent Skills name: ${metadata.name}`);
check(Boolean(metadata.description) && metadata.description.length <= 1024, `Invalid description: ${name}`);
check(!/poteto|potato/i.test(`${metadata.name} ${metadata.description}`), `Legacy Poteto branding remains in skill metadata: ${name}`);
}
check(filesUnder(join(root, 'skills/ronin-core/personas')).filter((path) => path.endsWith('.md')).length === 2, 'Expected two personas');
for (const path of filesUnder(join(root, 'skills/ronin-core/personas')).filter((path) => path.endsWith('.md'))) {
Expand Down Expand Up @@ -225,7 +226,7 @@ function validateSource(root) {
for (const needle of doc.needles) check(text.includes(needle), `Review-separation documentation in ${doc.file} lacks ${JSON.stringify(needle)}`);
}
validateNamedSkillReferences(root, skillDirectories);
check(readFileSync(join(root, 'skills/ronin-core/personas/poteto-agent.md'), 'utf8').includes('/ronin'), 'Poteto Agent persona cannot route to /ronin');
check(readFileSync(join(root, 'skills/ronin-core/personas/ronin-agent.md'), 'utf8').includes('/ronin'), 'ronin agent persona cannot route to /ronin');
}

function validateNamedSkillReferences(root, skillDirectories) {
Expand Down
2 changes: 1 addition & 1 deletion skills/ronin-core/HOST_CONTRACT.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ A worker request defines an objective, ownership boundary, permissions, isolatio

Run independent lanes concurrently when the host supports it. Otherwise run them serially in fresh worker contexts. If no separate worker context is available, execute in the coordinator and disclose that fresh-context review was not exercised. Lost concurrency and lost review separation are different limitations. Report them separately.

Named ronin workers are prompt files, not host registrations. A Poteto Agent worker reads the ronin-core skill's `personas/poteto-agent.md`, this contract, and `skills/ronin/SKILL.md` before work. A Comment Sicko worker reads the ronin-core skill's `personas/comment-sicko.md`, this contract, and `skills/ronin-no-comments/SKILL.md` before review.
Named ronin workers are prompt files, not host registrations. A ronin agent reads the ronin-core skill's `personas/ronin-agent.md`, this contract, and `skills/ronin/SKILL.md` before work. A Comment Sicko worker reads the ronin-core skill's `personas/comment-sicko.md`, this contract, and `skills/ronin-no-comments/SKILL.md` before review.

## Task profiles

Expand Down
4 changes: 2 additions & 2 deletions skills/ronin-core/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: ronin-core
description: "Shared foundation for every ronin skill: the host capability contract and the Poteto Agent and Comment Sicko personas. Other ronin skills read this skill's files as a sibling directory; install it alongside any of them. Not a workflow itself."
description: "Shared foundation for every ronin skill: the host capability contract and the ronin agent and Comment Sicko personas. Other ronin skills read this skill's files as a sibling directory; install it alongside any of them. Not a workflow itself."
user-invocable: false
---

Expand All @@ -10,7 +10,7 @@ This skill carries the files every other ronin skill depends on. It does nothing

- `HOST_CONTRACT.md` — the host capability contract. Workflow skills read it before delegating, persisting, reading transcripts, or controlling a real surface.
- `task-profiles.json` — the machine-readable contract for `explore`, `implement`, `judge`, `explain`, `verify`, and review separation.
- `personas/poteto-agent.md` — the Poteto Agent worker persona.
- `personas/ronin-agent.md` — the ronin worker persona.
- `personas/comment-sicko.md` — the Comment Sicko review persona.

Skills locate these files as a sibling skill directory: from any installed ronin skill, the contract is at `../ronin-core/HOST_CONTRACT.md`, the task profiles are at `../ronin-core/task-profiles.json`, and the personas are under `../ronin-core/personas/`. This holds wherever skills are installed together — copied or symlinked, global or project-local.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
name: poteto-agent
description: Prompt for a native subagent running `/ronin`. Resume an existing Poteto Agent worker for the conversation rather than spawning a sibling. Reads the host contract and `ronin` in full before any work.
name: ronin-agent
description: Prompt for a native subagent running `/ronin`. Resume an existing ronin agent for the conversation rather than spawning a sibling. Reads the host contract and `ronin` in full before any work.
---

# Poteto subagent
# ronin subagent

You are operating as ronin's full agent style. Locate and read `HOST_CONTRACT.md` from the ronin installation root. From this skill's installed directory, the contract is at `../ronin-core/HOST_CONTRACT.md` (the sibling ronin-core skill; resolve this skill's realpath first if the path does not resolve directly). Then read `skills/ronin/SKILL.md` in full before doing any work, including its inline Principles index. If either file is unavailable, stop and report an incomplete ronin installation. Navigate to a leaf `ronin-principle-*` skill whenever you apply that principle. Follow the worker request's objective, ownership boundary, permissions, isolation, verifier, stop condition, and evidence contract. The active host's safety and permission policy always wins.
4 changes: 2 additions & 2 deletions skills/ronin/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: ronin
description: poteto's agent style for concise, detailed responses, deliberate subagents, unslopped prose, simple code, and verified work. Use for poteto, /ronin, or requests to work in this style.
description: Rigorous engineering workflows for concise plans, deliberate subagents, simple code, and verified results. Use for /ronin or any non-trivial task that should be planned, executed, and proven end to end.
disable-model-invocation: true
---

Expand Down Expand Up @@ -86,7 +86,7 @@ Read the leaf skill in full for any principle you apply. Each entry names when i

## Subagents

**Use the Poteto Agent persona for playbook delegates** (code-writing delegates and ad-hoc helpers). Every such worker reads `../ronin-core/personas/poteto-agent.md`, `../ronin-core/HOST_CONTRACT.md`, and this skill before work. Routed workflow skills (`ronin-how`, `ronin-why`, `ronin-interrogate`, `ronin-reflect`, `ronin-swarm`) define their own worker contracts for independent review; respect those contracts instead of replacing them with the Poteto Agent persona.
**Use the ronin agent persona for playbook delegates** (code-writing delegates and ad-hoc helpers). Every such worker reads `../ronin-core/personas/ronin-agent.md`, `../ronin-core/HOST_CONTRACT.md`, and this skill before work. Routed workflow skills (`ronin-how`, `ronin-why`, `ronin-interrogate`, `ronin-reflect`, `ronin-swarm`) define their own worker contracts for independent review; respect those contracts instead of replacing them with the ronin agent persona.

**Define every worker request completely.** Include its objective, ownership boundary, permissions, isolation, verifier, stop condition, and returned evidence. Prefer file pointers over inlined bulk context. Assign one primary task profile from the host contract: `explore`, `implement`, `judge`, `explain`, or `verify`. The profile defines the job. Every worker inherits the active model. If parallel execution is unavailable, use serial fresh-context workers when possible and disclose lost concurrency only. If no separate worker context exists, execute in the coordinator, disclose that fresh context was not exercised, and report concurrency separately.

Expand Down
4 changes: 2 additions & 2 deletions skills/ronin/references/plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Resolve what is in scope vs explicitly out, technical or platform constraints, p

Delegate codebase exploration (the **ronin-principle-guard-the-context-window** principle skill).

- Prefer a Poteto Agent worker, which reads the ronin-core skill's `personas/poteto-agent.md` and `HOST_CONTRACT.md`, plus `skills/ronin/SKILL.md`, before work. A general worker is the fallback when the host cannot load named personas.
- Prefer a ronin agent, which reads the ronin-core skill's `personas/ronin-agent.md` and `HOST_CONTRACT.md`, plus `skills/ronin/SKILL.md`, before work. A general worker is the fallback when the host cannot load named personas.
- Assign `explore` to source investigation and `judge` to architectural interpretation. Both inherit the active model.

Each explorer returns file pointers, conventions, dependencies, test infrastructure, and entry points. No inlined dumps.
Expand Down Expand Up @@ -98,7 +98,7 @@ In the overview, name which ronin non-negotiables the implementer must apply, by
- the **ronin-interrogate** skill for adversarial review on contested designs before shipping.
- the **ronin-deslop** skill over each diff before commit; the **ronin-unslop** skill over any prose surface.
- the **ronin-review** skill to keep a decision trail when the plan is large enough to need an auditable record.
- the Poteto `playbooks/babysit.md` workflow after opening the PR, using the configured forge-monitoring capability.
- the ronin `playbooks/babysit.md` workflow after opening the PR, using the configured forge-monitoring capability.

## 7. Hand back

Expand Down
4 changes: 2 additions & 2 deletions skills/ronin/scripts/orch/orch.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -284,15 +284,15 @@ describe("Store", () => {
const updated = await store.units.set({
id: "u1",
state: "done",
branch: "poteto/u1",
branch: "ronin/u1",
pr: 184530,
sha: "abc123",
});
expect(updated).toEqual({
id: "u1",
track: "build",
state: "done",
branch: "poteto/u1",
branch: "ronin/u1",
pr: "184530",
sha: "abc123",
brief: "briefs/u1.md",
Expand Down
4 changes: 2 additions & 2 deletions tests/fixtures/delegation.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"objective": "Review a bounded change using the Poteto Agent persona",
"objective": "Review a bounded change using the ronin agent persona",
"ownershipBoundary": "Read-only review; do not edit application files",
"permissions": "read-only",
"isolation": "host-managed",
"verifier": "Return file-scoped findings with evidence",
"stopCondition": "Stop after the scoped diff and verifier are inspected",
"returnedEvidence": "Verdict, findings, inspected paths, and checks run",
"persona": "skills/ronin-core/personas/poteto-agent.md",
"persona": "skills/ronin-core/personas/ronin-agent.md",
"requiredSkill": "skills/ronin/SKILL.md"
}
2 changes: 1 addition & 1 deletion tests/fixtures/routing.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"needles": ["ronin-architect"]
},
{
"from": "skills/ronin-core/personas/poteto-agent.md",
"from": "skills/ronin-core/personas/ronin-agent.md",
"to": "skills/ronin/SKILL.md",
"needles": ["/ronin"]
}
Expand Down