Files
stack/roles/coder.json
T
jason.woltje 9f00397110 roles, harness, cli: a managed session gets its role's skills as prompt text on both harnesses (row 64, #1557)
Author and gate owner: Sage (mos-0855).

Role files take an optional skills list. The bundle reads each named skill
from <dataRoot>/skills-enabled, copies it into the bundle and renders every
file into prompt.md between skill-file markers, so the prompt text matches
the bundle copy byte for byte. The role's skills together are capped at
SKILL_BYTES (64 KiB): the claude adapter passes prompt.md as one argument,
and Linux caps one argument at 128 KiB. Symlinks are refused, not followed.
The launcher checks the list before a run exists: skill-not-enabled names
the activate command, anything else refuses skill-refused.

Pi keeps --no-skills; Claude Code keeps --disable-slash-commands and
--restricted. The two harness modules and MOSAIC_SKILLS are unchanged.
First lists: coder, reviewer, cto and pm, ms-unslop on each.
2026-10-19 16:11:36 -05:00

28 lines
744 B
JSON

{
"roleVersion": 2,
"name": "coder",
"title": "Coder",
"contract": "coder.md",
"tools": ["read", "write", "edit", "bash", "grep", "find", "ls"],
"network": "api-only",
"skills": ["ms-unslop", "ms-sdlc", "ms-file-read", "ms-file-write"],
"authority": {
"withinRole": ["task.update.assigned", "git.push.working", "review.request", "message.send", "record.write"],
"crossRole": ["task.scope.change"]
},
"credentials": [
{
"service": "gitea",
"scopes": ["write:issue", "write:repository", "read:user"]
},
{
"service": "vikunja",
"scopes": {
"tasks": ["read_one", "update"],
"tasks_comments": ["create"],
"projects": ["views_buckets_tasks"]
}
}
]
}