Files
roboco/agents/prompts/_generated/verbs.md
T
Renn F 431f2c72e0 [docs] sync_branch prompt + behind-base guidance (Phase B3)
Update every behind-base/rebase guidance surface to reflect the B1
sync_branch dev verb + B2 i_am_done behind-base gate: devs now self-rebase
through the gate instead of escalating a plain behind-base condition; PMs
still escalate cell/root integration branches (they have no rebase verb).

- developer.md: sync_branch in the verb table; 'When your branch is behind
  its base' rewritten — call sync_branch, do NOT i_am_blocked a plain
  behind-base; conflicts → resolve by hand, commit, sync_branch again.
- cell_pm.md: delegate signature gains intends_to_touch/adds_migration/
  touches_shared/depends_on + a 'Collision surface' section (fill it on every
  code subtask so sibling dev tasks that touch the same files sequence into a
  conflict-free order — the 2026-06-27 out-of-order break fix); behind-base
  section steers devs to sync_branch, PMs escalate only the integration branch.
- main_pm.md: behind-base section — dev leaf = dev's sync_branch; cell/root
  integration branch = escalate_up.
- RAG git-errors.md / blocked-tools.md: devs sync_branch, PMs escalate.
- docs/troubleshooting/common-issues.md: leaf self-rebases; integration branch
  still escalates to operator.
- CLAUDE.md verb surface: developer gains sync_branch.
- agents/prompts/_generated/*: regenerated via scripts/regenerate_verb_tables.py
  — adds sync_branch to the dev table AND catches the generated tables up to
  the S1/S2 delegate sequencing params + meltdown-fix note top-level params
  (the derived files had drifted stale vs the already-committed schemas).

Docs/prompts only — no code. ruff + mypy roboco/ tests/ clean.
2026-06-28 04:54:48 +02:00

18 KiB

Per-role verb shapes (autogenerated)

Run uv run python scripts/regenerate_verb_tables.py after changing any role config or schema. Role prompts reference this file's sections as the source of truth for verb signatures.

Driver-based roles (prompter, secretary) are intentionally omitted — their real tools live in their agent_sdk drivers, not role_config.

developer

Flow verbs

Verb Body schema
give_me_work give_me_work()
i_am_blocked `i_am_blocked(task_id: UUID, reason: str, blocker_type: str
i_am_done i_am_done(task_id: UUID, notes: str = '')
i_am_idle i_am_idle()
i_will_work_on `i_will_work_on(task_id: UUID, plan: str
open_pr open_pr(task_id: UUID)
resume resume(task_id: UUID)
sync_branch sync_branch(task_id: UUID)
unclaim unclaim(task_id: UUID)

Content (do) tools

Tool Body schema
commit `commit(message: str, files: list[str]
note `note(text: str, scope: str = 'note', task_id: UUID
say `say(channel: str, text: str, task_id: UUID
dm `dm(recipient: str, text: str, task_id: UUID
evidence evidence(task_id: UUID)
progress `progress(task_id: UUID, message: str, plan_step: str
pr_update pr_update(see do_server)
draft_playbook `draft_playbook(title: str, problem: str, procedure: str, tags: list[str] = PydanticUndefined, source_task_id: UUID
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
notify_ack notify_ack(notification_id: UUID)
read_messages read_messages()
channels channels()

qa

Flow verbs

Verb Body schema
claim_review claim_review(task_id: UUID)
fail_review fail_review(task_id: UUID, issues: list[str])
give_me_work give_me_work()
i_am_blocked `i_am_blocked(task_id: UUID, reason: str, blocker_type: str
i_am_idle i_am_idle()
pass_review `pass_review(task_id: UUID, notes: str, ac_verdicts: list[str]
resume resume(task_id: UUID)
unclaim unclaim(task_id: UUID)

Content (do) tools

Tool Body schema
note `note(text: str, scope: str = 'note', task_id: UUID
say `say(channel: str, text: str, task_id: UUID
dm `dm(recipient: str, text: str, task_id: UUID
evidence evidence(task_id: UUID)
draft_playbook `draft_playbook(title: str, problem: str, procedure: str, tags: list[str] = PydanticUndefined, source_task_id: UUID
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
notify_ack notify_ack(notification_id: UUID)
read_messages read_messages()
channels channels()

documenter

Flow verbs

Verb Body schema
claim_doc_task claim_doc_task(task_id: UUID)
give_me_work give_me_work()
i_am_blocked `i_am_blocked(task_id: UUID, reason: str, blocker_type: str
i_am_idle i_am_idle()
i_documented i_documented(task_id: UUID, notes: str, files: list[str])
resume resume(task_id: UUID)
unclaim unclaim(task_id: UUID)

Content (do) tools

Tool Body schema
commit `commit(message: str, files: list[str]
note `note(text: str, scope: str = 'note', task_id: UUID
say `say(channel: str, text: str, task_id: UUID
dm `dm(recipient: str, text: str, task_id: UUID
evidence evidence(task_id: UUID)
progress `progress(task_id: UUID, message: str, plan_step: str
pr_update pr_update(see do_server)
draft_playbook `draft_playbook(title: str, problem: str, procedure: str, tags: list[str] = PydanticUndefined, source_task_id: UUID
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
notify_ack notify_ack(notification_id: UUID)
read_messages read_messages()
channels channels()

cell_pm

Flow verbs

Verb Body schema
complete complete(task_id: UUID, notes: str)
delegate `delegate(parent_task_id: UUID, title: str, description: str, assigned_to: str, team: str, task_type: str, nature: str, estimated_complexity: str, acceptance_criteria: list[str], project_id: UUID
escalate_up escalate_up(task_id: UUID, reason: str)
give_me_work give_me_work()
i_am_idle i_am_idle()
i_will_plan `i_will_plan(task_id: UUID, plan: str, approach: str, sub_tasks: list[str
reassign reassign(task_id: UUID, new_assignee: str)
resume resume(task_id: UUID)
submit_up submit_up(task_id: UUID, notes: str)
triage triage()
unblock unblock(task_id: UUID, reason: str, restore: bool = True)
unclaim unclaim(task_id: UUID)

Content (do) tools

Tool Body schema
note `note(text: str, scope: str = 'note', task_id: UUID
say `say(channel: str, text: str, task_id: UUID
dm `dm(recipient: str, text: str, task_id: UUID
notify `notify(target: str, text: str, priority: str = 'normal', task_id: UUID
evidence evidence(task_id: UUID)
open_session `open_session(task_id: UUID, channel: str, topic: str, relationship_type: str = 'discussion', group_id: UUID
link_session link_session(session_id: UUID, task_id: UUID, is_primary: bool = False, relationship_type: str = 'discussion')
pr_update pr_update(see do_server)
draft_playbook `draft_playbook(title: str, problem: str, procedure: str, tags: list[str] = PydanticUndefined, source_task_id: UUID
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
notify_ack notify_ack(notification_id: UUID)
read_messages read_messages()
channels channels()

main_pm

Flow verbs

Verb Body schema
complete complete(task_id: UUID, notes: str)
delegate `delegate(parent_task_id: UUID, title: str, description: str, assigned_to: str, team: str, task_type: str, nature: str, estimated_complexity: str, acceptance_criteria: list[str], project_id: UUID
escalate_to_ceo escalate_to_ceo(task_id: UUID, reason: str)
escalate_up escalate_up(task_id: UUID, reason: str)
give_me_work give_me_work()
i_am_idle i_am_idle()
i_will_plan `i_will_plan(task_id: UUID, plan: str, approach: str, sub_tasks: list[str
resume resume(task_id: UUID)
submit_root submit_root(task_id: UUID, notes: str)
triage triage()
triage_all triage_all()
unblock unblock(task_id: UUID, reason: str, restore: bool = True)
unclaim unclaim(task_id: UUID)

Content (do) tools

Tool Body schema
note `note(text: str, scope: str = 'note', task_id: UUID
say `say(channel: str, text: str, task_id: UUID
dm `dm(recipient: str, text: str, task_id: UUID
notify `notify(target: str, text: str, priority: str = 'normal', task_id: UUID
evidence evidence(task_id: UUID)
open_session `open_session(task_id: UUID, channel: str, topic: str, relationship_type: str = 'discussion', group_id: UUID
link_session link_session(session_id: UUID, task_id: UUID, is_primary: bool = False, relationship_type: str = 'discussion')
pr_update pr_update(see do_server)
draft_playbook `draft_playbook(title: str, problem: str, procedure: str, tags: list[str] = PydanticUndefined, source_task_id: UUID
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
notify_ack notify_ack(notification_id: UUID)
read_messages read_messages()
channels channels()

product_owner

Flow verbs

Verb Body schema
escalate_to_ceo escalate_to_ceo(task_id: UUID, reason: str)
i_am_idle i_am_idle()
triage triage()

Content (do) tools

Tool Body schema
note `note(text: str, scope: str = 'note', task_id: UUID
pitch pitch(title: str, slug: str, problem: str, proposed_solution: str, target_cells: list[str])
say `say(channel: str, text: str, task_id: UUID
dm `dm(recipient: str, text: str, task_id: UUID
notify `notify(target: str, text: str, priority: str = 'normal', task_id: UUID
evidence evidence(task_id: UUID)
open_session `open_session(task_id: UUID, channel: str, topic: str, relationship_type: str = 'discussion', group_id: UUID
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
notify_ack notify_ack(notification_id: UUID)
read_messages read_messages()
channels channels()

head_marketing

Flow verbs

Verb Body schema
escalate_to_ceo escalate_to_ceo(task_id: UUID, reason: str)
i_am_idle i_am_idle()
triage triage()

Content (do) tools

Tool Body schema
note `note(text: str, scope: str = 'note', task_id: UUID
pitch pitch(title: str, slug: str, problem: str, proposed_solution: str, target_cells: list[str])
say `say(channel: str, text: str, task_id: UUID
dm `dm(recipient: str, text: str, task_id: UUID
notify `notify(target: str, text: str, priority: str = 'normal', task_id: UUID
evidence evidence(task_id: UUID)
open_session `open_session(task_id: UUID, channel: str, topic: str, relationship_type: str = 'discussion', group_id: UUID
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
notify_ack notify_ack(notification_id: UUID)
read_messages read_messages()
channels channels()

auditor

Flow verbs

Verb Body schema
i_am_idle i_am_idle()
triage triage()

Content (do) tools

Tool Body schema
note `note(text: str, scope: str = 'note', task_id: UUID
evidence evidence(task_id: UUID)
approve_playbook approve_playbook(playbook_id: UUID)
reject_playbook reject_playbook(playbook_id: UUID, reason: str)
archive_playbook archive_playbook(playbook_id: UUID)
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
channels channels()

pr_reviewer

Flow verbs

Verb Body schema
claim_gate_review claim_gate_review(task_id: UUID)
claim_pr_review claim_pr_review(task_id: UUID)
give_me_work give_me_work()
i_am_idle i_am_idle()
post_pr_review `post_pr_review(task_id: UUID, body: str, event: str = 'REQUEST_CHANGES', findings: list[str
pr_fail pr_fail(task_id: UUID, issues: list[str])
pr_pass pr_pass(task_id: UUID, notes: str)

Content (do) tools

Tool Body schema
note `note(text: str, scope: str = 'note', task_id: UUID
evidence evidence(task_id: UUID)
notify_list notify_list(unread_only: bool = True, pending_ack_only: bool = False, limit: int = 20)
notify_get notify_get(notification_id: UUID)
channels channels()