mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
CEO verdict on the blind 3-day timer: 'It should default to 1 day and be more like... smart.' Now: interval defaults to 1 day; the cycle skips (with logged reasons) while a spotlight draft is still awaiting the CEO, and stretches to 3x the interval when nothing has shipped (CHANGELOG sections via the read clone) since the last spotlight activity — where activity is a materialized draft's seen_at or a completed exploration's updated_at, deliberately excluding the stale- cycle janitor's cancels. The HoM gains an explicit skip exit (propose_feature_spotlight skip=true + reason: completes the exploration, no draft, no seen-slug, still counts as activity), and its spawn prompt now carries the seen ledger WITH dates, what shipped since the last spotlight, and recently rejected drafts with the CEO's reasons — fresh-but-unspotlighted first. Fail-open on changelog read errors so a signal outage never starves the engine. Co-authored-by: Renn F <rennf93@users.noreply.github.com>
1.7 KiB
1.7 KiB
Verbs available to you (autogenerated source of truth)
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]) |
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) |
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() |
read_a2a |
read_a2a(see do_server) |
propose_feature_spotlight |
propose_feature_spotlight(feature_slug: str = '', feature_title: str = '', body: str = '', wants_video: bool = False, video_script: str = '', skip: bool = False, skip_reason: str = '') |