@matt82198/aesop 0.1.0-beta.3 → 0.1.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -95
- package/CLAUDE-TEMPLATE.md +115 -0
- package/README.md +126 -245
- package/aesop.config.example.json +34 -26
- package/bin/CLAUDE.md +67 -0
- package/bin/cli.js +593 -36
- package/daemons/CLAUDE.md +36 -0
- package/daemons/backup-fleet.sh +92 -21
- package/daemons/run-watchdog.sh +95 -12
- package/dash/CLAUDE.md +32 -0
- package/dash/dash-extra.mjs +194 -21
- package/dash/watchdog-gui.sh +23 -6
- package/docs/BEHAVIORAL-PR-REVIEW.md +86 -0
- package/docs/CHECKPOINTING.md +100 -0
- package/docs/DISPATCH-MODEL.md +11 -7
- package/docs/FORENSICS.md +204 -0
- package/docs/GOVERNANCE.md +4 -2
- package/docs/HOOK-INSTALL.md +307 -0
- package/docs/HOW-THE-LOOP-WORKS.md +175 -0
- package/docs/MEMORY-TEMPLATE.md +61 -0
- package/docs/README.md +44 -0
- package/docs/RELEASING.md +159 -0
- package/docs/RELIABILITY.md +61 -0
- package/docs/RESTORE.md +397 -0
- package/docs/SCRIPTS-POLICY.md +97 -0
- package/docs/archive/README.md +3 -0
- package/docs/archive/spikes/tiered-cognition/ACTIVATION.md +125 -0
- package/docs/archive/spikes/tiered-cognition/DESIGN.md +287 -0
- package/docs/archive/spikes/tiered-cognition/FINDINGS.md +113 -0
- package/docs/archive/spikes/tiered-cognition/README.md +27 -0
- package/docs/archive/spikes/tiered-cognition/aesop-cognition.example.md +32 -0
- package/docs/archive/spikes/tiered-cognition/force-model-policy.merged.mjs +673 -0
- package/docs/archive/spikes/tiered-cognition/strip-tools-hook.mjs +434 -0
- package/docs/case-study-portfolio.md +61 -0
- package/docs/self-stats-data.json +11 -0
- package/docs/templates/FLEET-OPS-ANALYSIS.example.md +27 -0
- package/docs/templates/FLEET-OPS-RECOMMENDATIONS.example.md +24 -0
- package/docs/templates/PROPOSALS-LOG.example.md +64 -0
- package/hooks/CLAUDE.md +61 -0
- package/hooks/claude/force-model-policy.mjs +159 -0
- package/hooks/pre-push-policy.sh +753 -0
- package/mcp/CLAUDE.md +213 -0
- package/mcp/package.json +26 -0
- package/mcp/server.mjs +543 -0
- package/monitor/.signal-state.json +3 -0
- package/monitor/ACTIONS.log +1 -0
- package/monitor/BRIEF.md +24 -0
- package/monitor/CHARTER.md +75 -88
- package/monitor/CLAUDE.md +40 -0
- package/monitor/SIGNALS.json +54 -0
- package/monitor/collect-signals.mjs +613 -61
- package/package.json +15 -3
- package/scan/fleet-scan.example.mjs +292 -0
- package/skills/CLAUDE.md +3 -0
- package/skills/healthcheck/SKILL.md +44 -0
- package/skills/power/SKILL.md +161 -0
- package/state_store/CLAUDE.md +39 -0
- package/state_store/__init__.py +24 -0
- package/state_store/__pycache__/__init__.cpython-314.pyc +0 -0
- package/state_store/__pycache__/api.cpython-314.pyc +0 -0
- package/state_store/__pycache__/export.cpython-314.pyc +0 -0
- package/state_store/__pycache__/ingest.cpython-314.pyc +0 -0
- package/state_store/__pycache__/projections.cpython-314.pyc +0 -0
- package/state_store/__pycache__/store.cpython-314.pyc +0 -0
- package/state_store/api.py +35 -0
- package/state_store/export.py +19 -0
- package/state_store/ingest.py +24 -0
- package/state_store/projections.py +52 -0
- package/state_store/store.py +102 -0
- package/tools/CLAUDE.md +72 -0
- package/tools/__pycache__/alert_bridge.cpython-314.pyc +0 -0
- package/tools/__pycache__/buildlog.cpython-314.pyc +0 -0
- package/tools/__pycache__/ci_merge_wait.cpython-314.pyc +0 -0
- package/tools/__pycache__/ensure_state.cpython-314.pyc +0 -0
- package/tools/__pycache__/eod_sweep.cpython-314.pyc +0 -0
- package/tools/__pycache__/fleet_ledger.cpython-314.pyc +0 -0
- package/tools/__pycache__/fleet_prompt_extractor.cpython-314.pyc +0 -0
- package/tools/__pycache__/healthcheck.cpython-314.pyc +0 -0
- package/tools/__pycache__/heartbeat.cpython-314.pyc +0 -0
- package/tools/__pycache__/inbox_drain.cpython-314.pyc +0 -0
- package/tools/__pycache__/launch_tui.cpython-314.pyc +0 -0
- package/tools/__pycache__/metrics_gate.cpython-314.pyc +0 -0
- package/tools/__pycache__/orchestrator_status.cpython-314.pyc +0 -0
- package/tools/__pycache__/power_selftest.cpython-314.pyc +0 -0
- package/tools/__pycache__/prepublish_scan.cpython-314.pyc +0 -0
- package/tools/__pycache__/rotate_logs.cpython-314.pyc +0 -0
- package/tools/__pycache__/scanner_selftest.cpython-314.pyc +0 -0
- package/tools/__pycache__/secret_scan.cpython-314.pyc +0 -0
- package/tools/__pycache__/self_stats.cpython-314.pyc +0 -0
- package/tools/__pycache__/session_usage_summary.cpython-314.pyc +0 -0
- package/tools/__pycache__/stall_check.cpython-314.pyc +0 -0
- package/tools/__pycache__/transcript_replay.cpython-314.pyc +0 -0
- package/tools/__pycache__/transcript_timeline.cpython-314.pyc +0 -0
- package/tools/__pycache__/verify_dash.cpython-314.pyc +0 -0
- package/tools/__pycache__/verify_submit_encoding.cpython-314.pyc +0 -0
- package/tools/agent-forensics.sh +186 -0
- package/tools/alert_bridge.py +449 -0
- package/tools/buildlog.py +182 -0
- package/tools/ci_merge_wait.py +317 -0
- package/tools/ensure_state.py +94 -0
- package/tools/eod_sweep.py +239 -0
- package/tools/fleet_ledger.py +272 -0
- package/tools/fleet_prompt_extractor.py +134 -0
- package/tools/healthcheck.py +296 -0
- package/tools/heartbeat.py +131 -0
- package/tools/inbox_drain.py +249 -0
- package/tools/launch_tui.py +51 -3
- package/tools/lock.mjs +211 -0
- package/tools/metrics_gate.py +205 -0
- package/tools/orchestrator_status.py +99 -0
- package/tools/power_selftest.py +386 -0
- package/tools/prepublish_scan.py +84 -0
- package/tools/proposals.mjs +248 -0
- package/tools/reconstitute.sh +467 -0
- package/tools/rotate_logs.py +228 -0
- package/tools/scanner_selftest.py +303 -0
- package/tools/secret_scan.py +138 -31
- package/tools/self_stats.py +509 -0
- package/tools/session_usage_summary.py +198 -0
- package/tools/stall_check.py +172 -0
- package/tools/svg_to_png.mjs +50 -0
- package/tools/transcript_replay.py +236 -0
- package/tools/transcript_timeline.py +184 -0
- package/tools/verify_dash.py +513 -0
- package/tools/verify_submit_encoding.py +202 -0
- package/ui/CLAUDE.md +125 -0
- package/ui/__pycache__/agents.cpython-314.pyc +0 -0
- package/ui/__pycache__/collectors.cpython-314.pyc +0 -0
- package/ui/__pycache__/config.cpython-314.pyc +0 -0
- package/ui/__pycache__/cost.cpython-314.pyc +0 -0
- package/ui/__pycache__/csrf.cpython-314.pyc +0 -0
- package/ui/__pycache__/handler.cpython-314.pyc +0 -0
- package/ui/__pycache__/render.cpython-314.pyc +0 -0
- package/ui/__pycache__/serve.cpython-314.pyc +0 -0
- package/ui/__pycache__/sse.cpython-314.pyc +0 -0
- package/ui/agents.py +183 -0
- package/ui/api/__init__.py +84 -0
- package/ui/api/__pycache__/__init__.cpython-314.pyc +0 -0
- package/ui/api/__pycache__/submit.cpython-314.pyc +0 -0
- package/ui/api/__pycache__/tracker.cpython-314.pyc +0 -0
- package/ui/api/submit.py +97 -0
- package/ui/api/tracker.py +116 -0
- package/ui/collectors.py +735 -0
- package/ui/config.py +123 -0
- package/ui/cost.py +260 -0
- package/ui/csrf.py +144 -0
- package/ui/handler.py +676 -0
- package/ui/render.py +49 -0
- package/ui/serve.py +68 -796
- package/ui/sse.py +183 -0
- package/ui/web/.gitattributes +13 -0
- package/ui/web/dist/assets/index-2LZDQirC.js +9 -0
- package/ui/web/dist/assets/index-D4M1qyOv.css +1 -0
- package/ui/web/dist/index.html +14 -0
- package/ui/web/index.html +13 -0
- package/ui/web/package-lock.json +2225 -0
- package/ui/web/package.json +26 -0
- package/ui/web/src/App.test.tsx +74 -0
- package/ui/web/src/App.tsx +142 -0
- package/ui/web/src/CONTRIBUTING-UI.md +49 -0
- package/ui/web/src/components/AgentRow.css +187 -0
- package/ui/web/src/components/AgentRow.test.tsx +209 -0
- package/ui/web/src/components/AgentRow.tsx +207 -0
- package/ui/web/src/components/AgentsPanel.css +108 -0
- package/ui/web/src/components/AgentsPanel.test.tsx +41 -0
- package/ui/web/src/components/AgentsPanel.tsx +58 -0
- package/ui/web/src/components/AlertsPanel.css +88 -0
- package/ui/web/src/components/AlertsPanel.test.tsx +51 -0
- package/ui/web/src/components/AlertsPanel.tsx +67 -0
- package/ui/web/src/components/BacklogPanel.test.tsx +126 -0
- package/ui/web/src/components/BacklogPanel.tsx +122 -0
- package/ui/web/src/components/CostChart.css +110 -0
- package/ui/web/src/components/CostChart.test.tsx +144 -0
- package/ui/web/src/components/CostChart.tsx +152 -0
- package/ui/web/src/components/CostTable.css +93 -0
- package/ui/web/src/components/CostTable.test.tsx +165 -0
- package/ui/web/src/components/CostTable.tsx +94 -0
- package/ui/web/src/components/EventsFeed.css +68 -0
- package/ui/web/src/components/EventsFeed.test.tsx +36 -0
- package/ui/web/src/components/EventsFeed.tsx +31 -0
- package/ui/web/src/components/HealthHeader.css +137 -0
- package/ui/web/src/components/HealthHeader.test.tsx +278 -0
- package/ui/web/src/components/HealthHeader.tsx +281 -0
- package/ui/web/src/components/InboxForm.css +135 -0
- package/ui/web/src/components/InboxForm.test.tsx +208 -0
- package/ui/web/src/components/InboxForm.tsx +116 -0
- package/ui/web/src/components/MessagesTail.module.css +144 -0
- package/ui/web/src/components/MessagesTail.test.tsx +176 -0
- package/ui/web/src/components/MessagesTail.tsx +94 -0
- package/ui/web/src/components/ReposPanel.css +90 -0
- package/ui/web/src/components/ReposPanel.test.tsx +45 -0
- package/ui/web/src/components/ReposPanel.tsx +67 -0
- package/ui/web/src/components/Scorecard.css +106 -0
- package/ui/web/src/components/Scorecard.test.tsx +117 -0
- package/ui/web/src/components/Scorecard.tsx +85 -0
- package/ui/web/src/components/Timeline.module.css +151 -0
- package/ui/web/src/components/Timeline.test.tsx +215 -0
- package/ui/web/src/components/Timeline.tsx +99 -0
- package/ui/web/src/components/TrackerBoard.test.tsx +121 -0
- package/ui/web/src/components/TrackerBoard.tsx +107 -0
- package/ui/web/src/components/TrackerCard.test.tsx +180 -0
- package/ui/web/src/components/TrackerCard.tsx +160 -0
- package/ui/web/src/components/TrackerForm.test.tsx +189 -0
- package/ui/web/src/components/TrackerForm.tsx +144 -0
- package/ui/web/src/lib/api.ts +218 -0
- package/ui/web/src/lib/format.test.ts +89 -0
- package/ui/web/src/lib/format.ts +103 -0
- package/ui/web/src/lib/sanitizeUrl.test.ts +84 -0
- package/ui/web/src/lib/sanitizeUrl.ts +38 -0
- package/ui/web/src/lib/types.ts +230 -0
- package/ui/web/src/lib/useHashRoute.test.ts +60 -0
- package/ui/web/src/lib/useHashRoute.ts +23 -0
- package/ui/web/src/lib/useSSE.ts +175 -0
- package/ui/web/src/main.tsx +10 -0
- package/ui/web/src/styles/global.css +179 -0
- package/ui/web/src/styles/theme.css +184 -0
- package/ui/web/src/styles/work.css +572 -0
- package/ui/web/src/test/fixtures.ts +385 -0
- package/ui/web/src/test/setup.ts +49 -0
- package/ui/web/src/views/Activity.module.css +43 -0
- package/ui/web/src/views/Activity.test.tsx +89 -0
- package/ui/web/src/views/Activity.tsx +31 -0
- package/ui/web/src/views/Cost.css +87 -0
- package/ui/web/src/views/Cost.test.tsx +142 -0
- package/ui/web/src/views/Cost.tsx +54 -0
- package/ui/web/src/views/Overview.css +51 -0
- package/ui/web/src/views/Overview.test.tsx +76 -0
- package/ui/web/src/views/Overview.tsx +46 -0
- package/ui/web/src/views/Work.test.tsx +82 -0
- package/ui/web/src/views/Work.tsx +79 -0
- package/ui/web/src/vite-env.d.ts +10 -0
- package/ui/web/tsconfig.json +22 -0
- package/ui/web/vite.config.ts +25 -0
- package/ui/web/vitest.config.ts +12 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,108 +7,92 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
### Added
|
|
10
|
+
### Added (Wave-16/17 in-flight)
|
|
11
|
+
- CLAUDE.md minimization and domain map refinements (PR #151).
|
|
12
|
+
- Isolation detector and machinery/scripts port (PR #150).
|
|
13
|
+
- MCP server and scan/ directory shipping in npm package.
|
|
14
|
+
- README stats refresh and agent-catalog reference.
|
|
15
|
+
|
|
16
|
+
## [0.1.0-beta.5] - 2026-07-15
|
|
17
|
+
|
|
18
|
+
### Added (Wave-15)
|
|
19
|
+
- **State-Sourced State Layer** (#134, #135): Event-sourced SQLite WAL backing store with projections; tracker.json re-rendered as export for git integration; dual-path mutations via StateAPI.
|
|
20
|
+
- **Self-Building Stats** (#130): `tools/self_stats.py` computes verified repository metrics (merged PRs, commits, waves, files, coauthors) live from git; README stats block auto-populated via CI drift gate.
|
|
21
|
+
- **MCP Fleet Server** (#121): Read-only MCP server exposing fleet status, agents, tracker, costs for external Claude integrations.
|
|
22
|
+
- **Alert Webhook Bridge** (#120): Incoming HTTP webhook relay to monitor alerts; configurable signing + filtering.
|
|
23
|
+
- **Onboarding Wizard** (#127): Interactive CLI scaffolder with guided config, hook setup, repo discovery.
|
|
24
|
+
- **Healthcheck Skill** (#126): Liveness probe skill for orchestrator health; integrated into monitor signal collection.
|
|
25
|
+
- **Symlink/Junction Coverage** (#125): Test coverage for path-traversal guards; validates symlink/junction rejection in backup and UI handlers.
|
|
26
|
+
|
|
27
|
+
### Changed (Wave-15)
|
|
28
|
+
- **Agent Detail Rendering** (#128): Transcript lookup fixed for parallel agent teams; handles multi-file agent logs.
|
|
29
|
+
- **CI Cascade** (#122, #131, #132, #133): Tools-index alert bridge integration; SSE transcript fixture isolation; favicon verification; node_modules secret-scan gate.
|
|
30
|
+
|
|
31
|
+
### Fixed (Wave-15)
|
|
32
|
+
- **Socket Race** (#129): stderr noise from concurrent SSE keepalive; added locking around socket writes.
|
|
33
|
+
- **State Store Concurrency Seams** (#138): Inbox-drain deduplication, render-failure recovery, migration guard.
|
|
34
|
+
- **CSRF HTTPS Origins** (#137): Accept https loopback origins in CSRF validation.
|
|
35
|
+
- **CI/Daemon Machinery** (#136): Dist-freshness gate enforcement; watchdog script-relative path fix.
|
|
36
|
+
- **Dashboard UX Hardening** (#141): Stale-data timestamps, empty states, lane badges, a11y improvements.
|
|
37
|
+
|
|
38
|
+
### Documentation (Wave-15)
|
|
39
|
+
- **RELEASING.md** (#140): Release process documentation; npm publish and CI merge procedures.
|
|
40
|
+
- **Currency Sweep** (#140): CHANGELOG #113–#135 documentation; README state_store and stats updates; CLAUDE.md drift correction; beta.5 preparation.
|
|
41
|
+
- **Portfolio Case Study** (#139): Matt Culliton personal portfolio documentation; agent-fleet-built showcase.
|
|
42
|
+
|
|
43
|
+
## [0.1.0-beta.4] - 2026-07-14
|
|
44
|
+
|
|
45
|
+
### Added (Wave-13)
|
|
46
|
+
- UI correctness hardening: a11y improvements, contrast fixes, dead marquee removal, monitor-status class.
|
|
47
|
+
- Dashboard UX: accessibility fixes, keyboard navigation improvements.
|
|
48
|
+
- npm packaging fixes: dependency alignment, build optimization.
|
|
49
|
+
- Docs currency: dead-link sweep, reference updates, HOW-THE-LOOP-WORKS clarifications.
|
|
50
|
+
- Test/CI wiring: doc-drift and domain-map test verification.
|
|
51
|
+
- Machinery gates: secret-scan enforcement, pre-push hook gating.
|
|
52
|
+
|
|
53
|
+
### Added (Wave-14)
|
|
54
|
+
- **Dashboard Rewrite**: Complete React 18 + Vite + TypeScript redesign with 4 hash-routed views (Overview, Work, Activity, Cost), sticky health header, live SSE updates, light/dark theming with WCAG AA contrast, keyboard navigation, and `aria-live` regions.
|
|
55
|
+
- **Frontend Architecture**: Zero runtime dependencies beyond React/React-dom; Vite dev server with API proxy; committed `dist/` serves as authoritative build with content-hashed assets and immutable cache headers.
|
|
56
|
+
- **Backend Additions**: `/api/state` consolidated first-paint snapshot (one round trip), `/api/session` for Vite dev server CSRF fallback, `/api/cost` cost/scorecard collector from `OUTCOMES-LEDGER.md` with optional pricing map and per-model/per-day aggregates.
|
|
57
|
+
- **Cost Analytics**: Per-model token totals, per-day bar chart (pure SVG), verdict scorecard (success/failure/hung rates), configurable pricing estimates from `aesop.config.json`.
|
|
58
|
+
- **Testing Infrastructure**: Vitest + Testing Library component tests, rewritten `tools/verify_dash.py` (Playwright) with data-testid-based assertions, CI drift gate for committed dist, a11y/theme verification in CI.
|
|
59
|
+
|
|
60
|
+
### Changed (Wave-14)
|
|
61
|
+
- **Dashboard Cutover**: `ui/templates/dashboard.html` deleted; `ui/handler.py` serve_html now returns hard 500 if dist missing (no fallback).
|
|
62
|
+
- **Render Module**: `render.py` requires `template_path` parameter (no legacy default); raises TypeError if called without it.
|
|
63
|
+
- **API Contract**: SSE emits 6 sections (added `cost`); `/api/state` returns consolidated snapshot for optimal first paint.
|
|
64
|
+
|
|
65
|
+
### Fixed (Wave-14)
|
|
66
|
+
- **Wave-12 Stability**: Swallowed failures now loud; `sse.reset_state()` locked for concurrent test isolation; tracker writes in tempdir; symlink/path-injection guards in rotate-logs.
|
|
67
|
+
- **Wave-11 Security**: Dangling symlink inbox rejection; real handler exercise over HTTP; staged merge tier + model policy hook.
|
|
68
|
+
|
|
69
|
+
## [Wave-10] - 2026-07-10
|
|
11
70
|
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
71
|
+
### Added
|
|
72
|
+
- **UI API Package** (`ui/api/`): Extracted mutation-gate helpers (`validate_mutation()`, `append_to_inbox()`, tracker CRUD handlers) from monolithic handler.py for direct unit testing.
|
|
73
|
+
- **Work-item Tracker**: 4-lane kanban (proposed | ranked | in-progress | done) with full CRUD API and SSE updates, priority chips (P0-P3), expandable item details.
|
|
74
|
+
- **Orchestrator Status Panel**: Real-time activity, phase, age display with stale detection (>30m).
|
|
75
|
+
- **Dashboard ASCII Banner**: Animated audit-phase indicator (tortoise + magnifying glass).
|
|
76
|
+
- **UI Module Refactoring**: Split monolithic `serve.py` → focused modules (`config.py`, `csrf.py`, `render.py`, `handler.py`, `collectors.py`, `agents.py`, `sse.py`).
|
|
15
77
|
|
|
16
78
|
### Improved
|
|
17
|
-
-
|
|
18
|
-
-
|
|
79
|
+
- **Security**: CSRF on /api/tracker create; XSS whitelist for pr_link (http/https only, blocks javascript:); fail-closed lock with PID liveness.
|
|
80
|
+
- **Stability**: SSE exception handling; timezone-aware datetime; stale lock timestamp spoofing prevention.
|
|
81
|
+
|
|
82
|
+
## [Wave-9] - 2026-06-30
|
|
19
83
|
|
|
20
|
-
|
|
84
|
+
### Added
|
|
85
|
+
- **UI Module Split**: Monolithic `serve.py` refactored into composable modules for maintainability and direct testing (config, csrf, render, handler, collectors, agents, sse).
|
|
86
|
+
- **Real Handler Tests**: Seam tests exercising render, collectors, agents without full HTTP coupling (wave-10 P0 foundation).
|
|
87
|
+
|
|
88
|
+
## [0.1.0-beta.3] - 2026-07-12
|
|
21
89
|
|
|
22
90
|
### Added
|
|
91
|
+
- Hardened rule documentation (CARDINAL-RULES, DISPATCH-MODEL, GOVERNANCE.md).
|
|
92
|
+
- Real orchestration monitor with 10 standing health checks (replaced stub).
|
|
23
93
|
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
- Real-time fleet monitoring with 3-second refresh cycles
|
|
27
|
-
- Heartbeat liveness detection for daemon health
|
|
28
|
-
- Security alerts panel with unreviewed event tracking
|
|
29
|
-
- Inbox integration for direct orchestrator communication
|
|
30
|
-
- Agent tracking with status and runtime hints
|
|
31
|
-
- **Agent detail expansion**: Click agent rows to view full dispatch prompts, dispatcher, model, and message counts
|
|
32
|
-
- **GET /agent endpoint**: RESTful query for agent metadata and full dispatch details
|
|
33
|
-
- Repository synchronization status display
|
|
34
|
-
- Recent events log with the latest 8 backup operations
|
|
35
|
-
- Transcript integration showing main-thread conversation history
|
|
36
|
-
- Configurable port (default 8770) via environment variables
|
|
37
|
-
- Zero external dependencies (Python 3.10+ stdlib only)
|
|
38
|
-
|
|
39
|
-
#### Orchestration Engine
|
|
40
|
-
- Fable-fleet dispatch model (orchestrator + Haiku subagents)
|
|
41
|
-
- Cost-optimized multi-agent coordination
|
|
42
|
-
- Durable git-committed state (STATE.md, BUILDLOG.md)
|
|
43
|
-
- Autonomous watchdog daemon with 150-second cycle
|
|
44
|
-
- Secret-scan gate on every push (configurable via `tools/secret_scan.py`)
|
|
45
|
-
- Heartbeat-based liveness detection (300s watchdog, 3600s monitor)
|
|
46
|
-
- Append-only BUILDLOG for recovery and audit trails
|
|
47
|
-
|
|
48
|
-
#### Refinement Monitor
|
|
49
|
-
- Standing orchestration health monitor (Haiku loop)
|
|
50
|
-
- Dual-action tier system (AUTO for immediate, PROPOSE for staged)
|
|
51
|
-
- Signal collection and drift detection
|
|
52
|
-
- Automated health checks and rule-friction analysis
|
|
53
|
-
- Extensible signal collectors via `monitor/collect-signals.mjs`
|
|
54
|
-
|
|
55
|
-
#### State Machine & Durability
|
|
56
|
-
- Filesystem-first checkpoint design
|
|
57
|
-
- Git-committed STATE.md and BUILDLOG.md
|
|
58
|
-
- Recovery from machine wipes and interruptions
|
|
59
|
-
- Single-writer control file discipline
|
|
60
|
-
- Idempotent restart semantics
|
|
61
|
-
|
|
62
|
-
#### Security & Observability
|
|
63
|
-
- Configurable secret-scan gate (blocks pushes on policy violation)
|
|
64
|
-
- Observable machinery (every agent run logged, every cost tracked)
|
|
65
|
-
- Security alert collection and triaging
|
|
66
|
-
- AV-resilience patterns for Windows environments
|
|
67
|
-
- Support for dot-directory backup discovery
|
|
68
|
-
|
|
69
|
-
#### Documentation
|
|
70
|
-
- Cardinal Rules guide (10 principles for cost-optimized orchestration)
|
|
71
|
-
- Dispatch Model documentation (cost analysis, parallel patterns)
|
|
72
|
-
- State Machine guide (durability and recovery)
|
|
73
|
-
- AV-Resilience guide (Windows security software compatibility)
|
|
74
|
-
- Quickstart walkthrough and setup guide
|
|
75
|
-
- Architecture deep-dives for extend points
|
|
76
|
-
|
|
77
|
-
#### TUI Dashboard (Legacy Alternative)
|
|
78
|
-
- Terminal-based dashboard via `dash/watchdog-gui.sh`
|
|
79
|
-
- Real-time fleet status display
|
|
80
|
-
- Agent activity tracking
|
|
81
|
-
- Alert visualization
|
|
82
|
-
- Optional jq dependency for JSON parsing
|
|
83
|
-
|
|
84
|
-
### Configuration
|
|
85
|
-
|
|
86
|
-
#### aesop.config.json Schema
|
|
87
|
-
```json
|
|
88
|
-
{
|
|
89
|
-
"aesop_root": "/path/to/aesop",
|
|
90
|
-
"state_root": "/path/to/state",
|
|
91
|
-
"scan_root": "/path/to/scan",
|
|
92
|
-
"transcripts_root": "/path/to/transcripts",
|
|
93
|
-
"repos": [
|
|
94
|
-
{
|
|
95
|
-
"path": "/path/to/repo",
|
|
96
|
-
"name": "repo-name"
|
|
97
|
-
}
|
|
98
|
-
],
|
|
99
|
-
"watchdog_cycle_secs": 150,
|
|
100
|
-
"monitor_cycle_secs": 300,
|
|
101
|
-
"heartbeat_stale_threshold_secs": 300
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Development & Extension
|
|
106
|
-
|
|
107
|
-
- Plugin architecture for custom signal collectors
|
|
108
|
-
- Hook points for watchdog customization
|
|
109
|
-
- Dashboard extensibility via JavaScript injection
|
|
110
|
-
- Secret-scan policy implementation examples
|
|
111
|
-
- Support for Haiku-per-domain decomposition
|
|
94
|
+
### Improved
|
|
95
|
+
- Production observability infrastructure.
|
|
112
96
|
|
|
113
97
|
---
|
|
114
98
|
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# {{PROJECT_NAME}} — Multi-Agent Orchestration Brain
|
|
2
|
+
|
|
3
|
+
**What**: {{PROJECT_NAME}} is a {{DOMAIN_LIST}} system orchestrated through cost-optimized multi-agent dispatch.
|
|
4
|
+
This is the team's durable brain: cardinal rules, domain map, and memory indexed here.
|
|
5
|
+
|
|
6
|
+
## Cardinal Rules (how we work reliably at scale)
|
|
7
|
+
|
|
8
|
+
These six rules keep our fleet fast, cheap, and unbreakable:
|
|
9
|
+
|
|
10
|
+
1. **Subagents are always Haiku** (cost optimization at scale). Orchestrator (Opus/Sonnet) on main thread only.
|
|
11
|
+
2. **Orchestrator is durable**: STATE.md + BUILDLOG.md committed to git; survive wipes and interruptions.
|
|
12
|
+
3. **State gates everything**: No decision without git commit + push. Diff = behavior record.
|
|
13
|
+
4. **Secret-scan gates every push**: `tools/secret_scan.py` blocks credentials. No override, no exceptions.
|
|
14
|
+
5. **Idempotent + append-only**: Safe to restart mid-cycle. BUILDLOG.md never rewrites, only appends.
|
|
15
|
+
6. **Observable machinery**: Every agent dispatch logged. Every cost tracked. Every security event audited.
|
|
16
|
+
|
|
17
|
+
Read `docs/CARDINAL-RULES.md` for the full 10 rules and rationale. Single-writer discipline and heartbeat patterns are in `docs/GOVERNANCE.md`.
|
|
18
|
+
|
|
19
|
+
## Domain Map (our system structure)
|
|
20
|
+
|
|
21
|
+
Each domain maps to one Haiku subagent. Orchestrator dispatch = tiny, scoped, cheap.
|
|
22
|
+
|
|
23
|
+
{{DOMAINS}}
|
|
24
|
+
|
|
25
|
+
## Team Memory Structure
|
|
26
|
+
|
|
27
|
+
Facts live in `~/.claude/MEMORY.md` (index) and individual files in `~/.claude/memory/`.
|
|
28
|
+
|
|
29
|
+
**Fact format**:
|
|
30
|
+
```
|
|
31
|
+
---
|
|
32
|
+
name: [Title]
|
|
33
|
+
description: [1-line hook]
|
|
34
|
+
type: [user|feedback|project|reference]
|
|
35
|
+
---
|
|
36
|
+
[Content]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Types**:
|
|
40
|
+
- `user` — who you are, team composition
|
|
41
|
+
- `feedback` — decisions, learnings, constraints
|
|
42
|
+
- `project` — repo-specific, {{PROJECT_NAME}} setup
|
|
43
|
+
- `reference` — patterns, how-tos, runbooks
|
|
44
|
+
|
|
45
|
+
See `docs/MEMORY-TEMPLATE.md` for full indexing format.
|
|
46
|
+
|
|
47
|
+
## Initial Setup Checklist
|
|
48
|
+
|
|
49
|
+
1. **Brain directory** (your private persistent memory):
|
|
50
|
+
```bash
|
|
51
|
+
mkdir -p ~/.claude/memory
|
|
52
|
+
# Edit ~/.claude/CLAUDE.md with your domains and team info
|
|
53
|
+
# Edit ~/.claude/MEMORY.md with your facts
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
2. **Configuration**:
|
|
57
|
+
```bash
|
|
58
|
+
cp aesop.config.example.json aesop.config.json
|
|
59
|
+
# Edit paths, repos, cycle times per your setup
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
3. **Directory structure**:
|
|
63
|
+
```bash
|
|
64
|
+
mkdir -p ~/{{PROJECT_NAME}}/state
|
|
65
|
+
mkdir -p ~/.heartbeats
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
4. **Test the watchdog**:
|
|
69
|
+
```bash
|
|
70
|
+
export AESOP_ROOT=$HOME/{{PROJECT_NAME}}
|
|
71
|
+
bash $AESOP_ROOT/daemons/run-watchdog.sh --once
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
5. **Launch the dashboard**:
|
|
75
|
+
```bash
|
|
76
|
+
python $AESOP_ROOT/ui/serve.py
|
|
77
|
+
# Opens http://localhost:8770
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
6. **(Optional) Arm the monitor**:
|
|
81
|
+
```bash
|
|
82
|
+
# In your Claude Code orchestrator loop, run:
|
|
83
|
+
export AESOP_ROOT=$HOME/{{PROJECT_NAME}}
|
|
84
|
+
node $AESOP_ROOT/monitor/collect-signals.mjs
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Repo Map
|
|
88
|
+
|
|
89
|
+
Your tracked repositories (from aesop.config.json):
|
|
90
|
+
|
|
91
|
+
{{REPO_LIST}}
|
|
92
|
+
|
|
93
|
+
Each repo in the list will be discovered by the watchdog, backed up to `backup/wip-*` branches, and secret-scanned before push.
|
|
94
|
+
|
|
95
|
+
## Key Files & Paths
|
|
96
|
+
|
|
97
|
+
- **This file**: `~/.claude/CLAUDE.md` — your team brain
|
|
98
|
+
- **Memory index**: `~/.claude/MEMORY.md` — indexed facts
|
|
99
|
+
- **Memory directory**: `~/.claude/memory/` — individual fact files
|
|
100
|
+
- **Orchestrator config**: `~/{{PROJECT_NAME}}/aesop.config.json` (git-ignored)
|
|
101
|
+
- **Durable state**: `~/{{PROJECT_NAME}}/state/` — STATE.md, BUILDLOG.md (committed)
|
|
102
|
+
- **Watchdog heartbeat**: `~/.heartbeats/.watchdog-heartbeat` (epoch timestamp)
|
|
103
|
+
- **Monitor heartbeat**: `~/.heartbeats/.monitor-heartbeat` (epoch timestamp)
|
|
104
|
+
|
|
105
|
+
## See Also
|
|
106
|
+
|
|
107
|
+
- `docs/CARDINAL-RULES.md` — full 10 rules with rationale
|
|
108
|
+
- `docs/DISPATCH-MODEL.md` — cost analysis + parallel patterns
|
|
109
|
+
- `docs/GOVERNANCE.md` — single-writer discipline, inbox, loops
|
|
110
|
+
- `docs/MEMORY-TEMPLATE.md` — memory structure and frontmatter
|
|
111
|
+
- `README.md` — full walkthrough and troubleshooting
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
**Onboarding ready.** Your fleet is live when BUILDLOG.md shows the first dispatch.
|