fez5587 and Claude Fable 5
4fd6f3fd1d
Slice 1: engine dashboard + persistent company workspaces
...
- 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 >
2026-08-04 10:08:58 -05:00
fez5587 and Claude Fable 5
9b6e7a23f6
Slice 1: dispatcher loop + objective decomposition — first live objective completed
...
- engine/dispatcher.py: 10s tick, bounded in-flight (3), ready->kanban dispatch
with budget mapping (goal_max_turns/max_runtime_seconds), poll->AgentMessage
extraction->events, wall-clock cap with run termination, blocked triage state.
- engine/protocol.py: schema-enforced pool calls — raw report -> AgentMessage,
objective brief -> task decomposition (3.6s live).
- engine/main.py: POST /companies/{slug}/objectives (manager decompose ->
child work items, role-matched round-robin), GET work-items.
- schema: work_item.hermes_task_id/dispatched_at, employee.role.
- Hermes integration fixes discovered live:
* profiles must use the pool custom endpoint (provider config written into
per-profile config; 'ollama' provider = Ollama Cloud, wants API key)
* kanban toolset was globally disabled in deployed Hermes config — removed
from agent.disabled_toolsets (backup in scratchpad)
* no_skills profiles (73 bundled skills drowned 9B tool discipline)
* souls spell out kanban_show first, kanban_complete/kanban_block with
required args last — after this, tasks complete reliably.
- Live result: GasWatch objective decomposed into 3 tasks, all completed by
qwen3.5:9b employees (mvp_features.md, onepager.md, report.md), 4 cost
entries totaling ~24 min wall, full event trail.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-04 09:49:26 -05:00
fez5587 and Claude Fable 5
c8bfa0c0ab
Slice 1: engine core — compose stack, db layer, company/employee API
...
- docker-compose.yml: Postgres 16 (schema auto-applied) + Redis, nonstandard
host ports 5433/6380.
- engine/db.py: async psycopg pool, append_event in caller's transaction.
- engine/souls.py: versioned role charters (manager/engineer/qa) + reporting
protocol appended to every soul.
- engine/main.py: POST/GET companies, employee hire with Hermes profile
creation (outside tx, retryable; DB authoritative), event feed, archive
with profile cleanup, global pause/resume in Redis.
- Verified live end-to-end: create -> 4 events + 3 real Hermes profiles;
pause flips health; archive 204 removes profiles, keeps rows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-04 00:36:36 -05:00
fez5587 and Claude Fable 5
d05004e9cd
Slice 1: Hermes adapter with live-verified round-trips
...
- engine/hermes_client.py: cookie-auth async client — profiles (create/soul/
model/delete), kanban tasks (create with tenant + runaway budget mapping,
idempotency via work-item UUID, update/delete), dispatch, runs, workers.
- engine/config.py: env-driven settings (.env stays gitignored).
- tests/test_hermes_live.py: live smoke against Hermes 0.19.0 — all pass:
profile round-trip, task create (t_*), idempotent re-create, status patch,
cleanup. No dispatch triggered (no GPU burn).
- Discovery: kanban responses wrap in {task}; webhooks are inbound triggers,
so engine polls run/task status (ADR-001 fallback is the primary channel).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-04 00:34:20 -05:00
fez5587 and Claude Fable 5
ad4f603799
Step 5+6: event schema v1, core DDL, policy table, Slice 1 acceptance demo
...
- db/schema.sql: 9 core tables, append-only event log (trigger-enforced),
deny-by-default policy_rule with seeded globals, runaway budgets on work items.
Validated against Postgres 16 (DDL applies, trigger rejects UPDATE).
- engine/schemas/events.py: AgentMessage (flat, inference-enforced) +
EventEnvelope pydantic models; models are the schema (ADR-003).
- adr/ADR-003: event schema and data model decisions.
- SLICE1_DEMO.md: verbatim acceptance script for Slice 1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-03 23:26:49 -05:00
fez5587 and Claude Fable 5
fdf7a67db0
Add PRD, addendum, pre-implementation docs, ADRs, and capability-gate benchmarks
...
- 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 >
2026-08-03 22:58:52 -05:00
fez5587
dc665519a8
Initial commit
2026-08-03 18:28:51 -05:00