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.
32 lines
977 B
JSON
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"]
|
|
}
|
|
}
|
|
]
|
|
}
|