Files
stack/roles/pm.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

32 lines
977 B
JSON

{
"roleVersion": 2,
"name": "pm",
"title": "Product manager",
"contract": "pm.md",
"tools": ["read", "write", "edit", "grep", "find", "ls"],
"network": "api-only",
"skills": ["ms-unslop", "ms-goal", "ms-communications"],
"authority": {
"withinRole": ["task.create", "task.assign", "task.reassign", "task.schedule", "task.update.assigned", "task.close", "message.send", "record.write"],
"crossRole": ["task.priority.change", "task.scope.change"]
},
"credentials": [
{
"service": "gitea",
"scopes": ["write:issue", "read:repository", "read:user"]
},
{
"service": "vikunja",
"scopes": {
"tasks": ["read_one", "create", "update"],
"tasks_assignees": ["create", "delete"],
"tasks_relations": ["create", "delete"],
"tasks_labels": ["create", "delete"],
"tasks_comments": ["create"],
"labels": ["read_all"],
"projects": ["views_buckets_tasks"]
}
}
]
}