Shareholder policy: when a worker blocks asking for a human decision
(needs_input block or clarification/approval extraction), the task
reassigns to the company consultant with instructions to make the call,
finish the deliverable, and record decision + rationale. The dashboard
answer button remains the path for companies without a consultant and
for the consultant's own questions (no self-escalation loop).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Workers (9B) repeatedly loop on kanban_complete with empty arguments —
observed 6 wasted attempts in one run. The protocol block now shows a
literal correct final call and instructs composing both strings before
the single call. Redeployed to all 11 live profiles.
First ToolForge self-improvement feedback: aligns with playbook-v1
rules 4-9 (kanban lifecycle) from the tool-calling benchmarks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- GET /companies/{slug}/work-items/{id}/log proxies the Hermes task log
(agent reasoning blocks + tool calls), tail-limited, served as text
- dashboard: every dispatched work item row gets a "log" link
- office: click a working employee sprite to open their live log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- While work is in flight, the manager posts a 2-4 sentence shareholder
status update (what's moving, risks, next step) digested from real
events via one pool call — at most one per 2h per company, skipped
when a milestone update already covered the window. Shows in the CEO
updates feed as status.update.
- Workspace demos: engine proxies top-level company workspace files from
Hermes (GET /companies/{slug}/files[/{name}]); dashboard lists them
with links so deliverables like index.html render live in the browser.
- Engine logs at info level so dispatcher activity is visible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Manager policy, active only when a company employs a consultant:
- a task that blows its wall-clock budget or blocks on machine failure
(crashed worker, capability gap — anything except needs_input) is
reassigned to the consultant with the failure context appended
- every objective rollup spawns a consultant review task: verify each
deliverable against acceptance criteria, write milestone-check.md,
verdict per deliverable, fix nothing
Also: employee_role_check widened to include consultant (db + live);
consultant sprite shirt color in the office.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- create_profile accepts a provider; non-custom providers (anthropic,
openai-codex) skip the pool base_url and use Hermes GUI credentials —
externally billed consultants
- consultant role charter; EmployeeSpec carries model+provider;
POST /companies/{slug}/employees hires into an existing company
- decomposition may assign role consultant, with explicit cost guidance
- POST /companies/{slug}/pause|/resume flips lifecycle_state; dispatcher,
standups and directives already filter on active, in-flight work
finishes; dashboard gets a per-company pause button
Verified: ChatGPT OAuth consultant (gpt-5.4-mini) completed a kanban task
end-to-end via Hermes credential pool; pause/resume roundtrip with 409
guard on double-pause.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
When an active company has no ready/in-progress/blocked work but does have
delivered history, the dispatcher creates a manager research task: skim the
workspace, write standup-report.md with a milestone check per employee and
2-4 proposed next tasks with acceptance criteria. Propose-only — execution
still requires a shareholder directive. 4h cooldown per company.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Empty-content responses from the pool got through the single retry once
two companies ran concurrently; 3 attempts with 3s/6s backoff.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Tabs render only when more than one active company exists; objective line
shows the newest in-progress objective above the canvas.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Decomposition now classifies each task kind (build/research/review);
research/review map to matching work_item types, dispatcher dispatches
them alongside task/subtask/defect
- Office: walled research room (bookshelves, reading table, own floor)
bottom-right; generalized room routing (per-room door waypoints);
workers on research-type tasks walk there and read (page-flip anim)
instead of sitting at a desk; break area moved to mid-floor
Verified live: research directive decomposed into 4 research + 1 build
task; worker rendered at the reading table.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Poll now includes blocked work items: when Hermes retries a transiently
blocked task and it is active again, the item auto-resumes (task.resumed
event) instead of staying blocked forever. Blocked items whose kanban
task is done/review are left alone — re-finishing them every tick would
spam events and duplicate cost entries.
- Extraction prompt: a QA/review task that finished its checks is
task.completed even when it found defects — findings are the
deliverable. Previously "accessibility fails" wording classified the
task as blocked.
Verified live: misclassified QA task re-extracted to done; transiently
blocked task auto-resumed; wall-clock cap fired on a 30-min runaway.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- inConf() was x-only, so the break area routed through the conference door
- door crossings now go west-waypoint -> doorway -> target (no wall clipping)
- workers face the viewer at their desk; typing anim/monitor glow computed
from live state in the draw loop instead of waiting for the next poll
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- /office rebuilt Chrono Trigger style: tile map (work floor, walled
conference room with door, break area), 4-direction sprites with walk
cycles; employees path through the door and walk to their desk when
working (typing anim, lit monitor), to the conference room with a "?"
bubble when blocked on an answer, to the water cooler when idle. All
movement derives from polled engine state only.
- Dispatcher now appends completed-sibling task reports to each task body
so decomposed tasks are no longer blind to each other's output (fixes
the "apply the patch task A made" capability block).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- POST /companies/{slug}/work-items/{id}/answer: shareholder answers a
blocked item; answer is appended to the description and the existing
kanban task is rerun (status=ready + updated body), or the item goes
back to ready for fresh dispatch if it was never dispatched
- Dashboard: answer button on blocked work item rows (native prompt)
- /office: pixel-art 2D office view — one desk row per employee, avatar
color by role, LED/typing animation driven only by real engine status,
live event ticker (PRD 12: no fake activity)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- POST /companies/{slug}/directives: free-form shareholder message becomes
an objective (reuses manager decomposition), logs directive.received
- Objective rollup now emits a CEO-voiced milestone.update event via one
pool call (plain-text fallback if the LLM call fails)
- _chat_structured retries once on empty/invalid JSON from the pool
(observed empty-content responses breaking protocol extraction)
- Dashboard: per-company shareholder textarea + CEO updates feed; refresh
skips DOM rewrite while a textarea is focused
Verified end-to-end: directive -> 3 tasks -> rework after handoff block ->
rollup -> CEO milestone update; gaswatch index.html now on-brand.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Hermes rejects workspace_kind 'path' (valid: dir/scratch/worktree).
- Dispatch failure now blocks the work item with a dispatch.failed event
instead of retrying the same 400 every tick.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- engine/static/index.html served at /: companies, employees, objectives,
work items, live event feed (5s poll), global pause/resume button.
- Persistent per-company workspace on the Hermes host
(/opt/data/farmhouse/<slug>, created via files API at company creation);
dispatcher passes it as kanban workspace_path so artifacts persist across
tasks instead of dying in scratch dirs.
- hermes_client.mkdir; gaswatch backfilled.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PRD v1.0 plus addendum with environment reality checks (qwen3.5:9b pool, runaway protection, MVP trim)
- Pre-implementation checklist and GitHub integration plan
- ADR-001: build on Hermes Agent 0.19.0 as agent runtime; engine stays source of truth
- ADR-002: engine stack (FastAPI, Postgres, Redis, React)
- Benchmark suites + results: all five capability gates PASS, pool scaling 1.92x at 4 concurrent
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>