Remove the agent_orchestration enabled feature switch and root_delegates config; delegation edges now derive from the catalog's delegate_targets. Replace the four orchestration design/review docs with a single SUB_AGENT_DESIGN.md. Bump version to 1.13.0.
- drop agent_run_groups table and group_id/scope_kind/scope_id columns (schema v8)
- remove group_id from AgentExecutionContext and recovery group counters
- flatten TasksPage background tab into a per-run list
- add WebUI Agents page with definition CRUD and inline provider/model
- bump version to 1.11.0
- bash is now Delegatable so named Agents may run shell commands
- remove the legacy anonymous 'general' path entirely: SubAgentManager
run_background/run_foreground_batch/run_inline/run_foreground,
filter_tools/get_skills_prompt, TaskNotification direct delivery,
DelegateContext task-local, background_permits/admission, and the
delegate tool's check_task/cancel_task/list_tasks actions (agent_task
replaces them); /stop and todo migrate off the task-local bridge
- stop writing the legacy background_tasks table (read-only transition);
/api/tasks union still renders historical records
- ship a built-in general-purpose Agent definition (resources/agents)
released to ~/.picobot/agents on first run like built-in skills, with
bash/read-only/search/web/calculator/sleep tools; root_delegates now
defaults to it so orchestration works out of the box
- update AGENTS/README/architecture/config/db-schema docs accordingly
- RunQuota now enforced: background admission acquires the run permit
(global→session) and the runner holds it until terminal commit;
foreground never takes run permits so nested limit=1 cannot deadlock
- RuntimeAdmission activity guard held by background runners for the
whole run; admission checked before any durable write
- signal_contract_json/signal_delivery persisted at run admission so
definition-level steer delivery actually takes effect (was silently
falling back to queue)
- terminal completion payload carries the run's emitted signal IDs
(design §12.3) so the main Agent can recognise duplicates
- ROOT caller_scope_id is the literal "ROOT" (design §9.6)
- legacy general delegation returns a deprecation/migration hint
Cleanup:
- remove unused AgentCaller enum and run_parallel wrapper
- remove unreachable http_get_only prompt machinery (http_request is
RootOnly and never enters sub-agent registries)
- drop never-read EmittedSignal fields; derive WakeupSource from
TurnInputSource instead of duplicating match arms
- replace the /stop oneshot compatibility bridge with a plain turn_busy
flag; the worker's forced-cancel path now selects on the cancellation
token (implementation doc §11.1)
Version 1.8.0
- AgentCatalog/definitions with strict Markdown frontmatter, delegation graph,
fail-closed tool scoping, and signal contracts
- structured cancellation (AgentError::Cancelled/TimedOut) across provider
streams, tool batches, and sleep; /stop drives the same terminal state
- schema v6 run/group/inbox persistence with execution-ID conditional
transitions and completion-slot reservations
- ExecutionGate separating run quota from provider/tool step permits
- background completion inbox with hidden-trigger continuation turns,
fairness scheduling, lease release, dead-lettering, and activation recovery
- typed TurnMailbox with two-phase steer admission and atomic consumption at
turn commit; /stop releases admitted steer events back to pending
- emit_signal tool with contract-enforced rate/dedupe/severity/size limits
- WS run/event projection (GetAgentRuns, AgentRunUpdated, AgentEventUpdated),
/api/agent-runs* management endpoints, /api/tasks union, WebUI run tree
and signal cards
- ChannelContext.durable_private persisted for continuation delivery reuse
Version 1.7.0