Commit Graph
92 Commits
Author SHA1 Message Date
Smokey dab245cb73 feat(boss): Boss creates nests and assigns registry crows (#43) 2026-10-28 09:11:57 -06:00
Smokey 3e4b591762 test(boss): red for #43 — Boss creates nests and assigns registry crows 2026-10-28 09:09:49 -06:00
jacisjake 5edb263656 Merge pull request #51 from jacisjake/task/42-boss-crow-registry
feat(boss): Chief of Staff Boss + spun-crow registry with cap (#42)
2026-10-28 09:01:55 -06:00
Smokey 663c8a19d8 feat(boss): Chief of Staff Boss + spun-crow registry with cap (#42) 2026-10-28 09:01:26 -06:00
Smokey ccb0e503c5 test(boss): red for #42 — Boss spin_up needs a crow registry, /api/crows and MaxSpunCrows 2026-10-28 09:00:54 -06:00
jacisjake 0963210ffd Merge pull request #50 from jacisjake/task/44-sentry-quarantine
E3: Sentry watchdog detection + quarantine (#44)
2026-10-28 09:00:41 -06:00
Smokey 084a4309d4 feat(watchdog): Sentry flags + quarantine on above-band Jev verdicts (#44) 2026-10-28 09:00:38 -06:00
Smokey 66cdd053f8 test(watchdog): red for #44 — Sentry flags + quarantine API absent 2026-10-28 08:59:18 -06:00
jacisjake e0cf8548ee Merge pull request #49 from jacisjake/task/41-ask-owner
feat(ask-owner): owner-only fail-safe decisions in the nest log (#41)
2026-10-28 08:59:07 -06:00
Smokey 6808a6713b feat(ask-owner): owner-only fail-safe decisions in the nest log (#41)
Message gains approval_phrase; ask_owner is postable by the owner and the
owner-facing service roles (Quill/Sentry) and bypasses Jev tagging with
tagged_by header. An ordinary crow's ask_owner header is dropped and the
message tags as it otherwise would. nestRecord (now a Server method)
carries approval_phrase and a computed resolved: approved only on an
owner reply whose trimmed lowercased text equals the phrase via refers_to;
anything else, including an ask unanswered past Server.askTimeout
(10 minutes by default, the same fail-safe window as list approvals), is
not a yes.
2026-10-28 08:59:03 -06:00
Smokey 9118aabb85 test(askowner): red for #41 — ask_owner kind, approval_phrase, fail-safe resolved field
EVENTS.md contract first: ask_owner kind row, approval_phrase and computed
resolved payload fields, owner-facing service roles (Quill/Sentry) may post
ask_owner, crow ask_owner headers drop to the default tag, 10-minute
fail-safe window shared with list approvals. Tests fail: Message has no
ApprovalPhrase, Server has no askTimeout.
2026-10-28 08:58:20 -06:00
jacisjake 9781bfa3b3 Merge pull request #48 from jacisjake/task/40-quill-relay
(#40) Relay — Quill posts requests on the owner's behalf
2026-10-28 08:58:08 -06:00
Smokey 31bf98411c feat(relay): Quill relays owner asks as nest requests (#40) 2026-10-28 08:57:50 -06:00
Smokey bfffb04a87 test(relay): red for #40 — Quill relays owner asks as nest requests 2026-10-28 08:57:26 -06:00
jacisjake 4494a4ac19 Merge pull request #47 from jacisjake/task/39-quill-reads-nest
(#39) Status answers read the nest
2026-10-28 08:57:16 -06:00
Smokey 6cab10badd feat(quill): status answers read the nest — capped recent-message block (#39) 2026-10-28 08:46:02 -06:00
Smokey a70c12a52d test(quill): red for #39 — prompt must carry recent nest history 2026-10-28 08:45:23 -06:00
jacisjake 7a766d4ded Merge pull request #46 from jacisjake/task/38-quill-role
feat(quill): assistant crow Quill — addressable service role (#38)
2026-10-28 07:52:36 -06:00
Smokey 8d34ef293e fix(quill): restore persona and trigger lost in red-capture checkout (#38) 2026-10-28 07:52:03 -06:00
Smokey 9744904645 feat(quill): assistant crow Quill — addressable service role with persona reply (#38) 2026-10-28 07:48:20 -06:00
Smokey abb8453db2 test(quill): red for #38 — Quill service role, in-character reply, never a member 2026-10-28 07:48:20 -06:00
jacisjake 22fc2491a6 Merge pull request #35 from jacisjake/task/28-dispatch-guardrails
feat(guardrails): context-aware flock slot + dispatch guardrail integration (#28)
2026-10-28 06:48:07 -06:00
Smokey acc09331b8 feat(guardrails): context-aware flock slot — saturated calls give up instead of wedging (#28) 2026-10-28 06:46:15 -06:00
Smokey c957bdd3f6 test(dispatch): red for #28 — saturated flock must honor context, all dispatch through Flock 2026-10-28 06:46:15 -06:00
jacisjake 9f457eb512 Merge pull request #34 from jacisjake/task/27-trust-gated-speaking
(#27) Trust-gated speaking + directed assignment
2026-10-28 05:46:54 -06:00
Smokey a2d69507e7 feat(trust): trust-gated invites, open-request claim opportunity, claim-author rule (#27) 2026-10-28 05:46:38 -06:00
Smokey c23fcdd73c test(trust): red for #27 — stranger gating, open-request claim, directed claims 2026-10-28 05:46:38 -06:00
jacisjake b43294341d Merge pull request #33 from jacisjake/task/26-elder-synthesis
(#26) Elder synthesis on request
2026-10-28 05:40:28 -06:00
Smokey 77b33cbe6d feat(elder): @Elder merges a thread's delivers when asked (#26) 2026-10-28 05:40:22 -06:00
Smokey b43cb8c2cc test(elder): red for #26 — addressable service role, merge on request only 2026-10-28 05:40:22 -06:00
jacisjake 47bf5ef004 Merge pull request #32 from jacisjake/task/25-divergence-nudge
(#25) Divergence check -> review nudge
2026-10-28 05:37:34 -06:00
Smokey dfe50da320 feat(divergence): Jev noul restatement check -> harness review nudge (#25) 2026-10-28 05:37:19 -06:00
Smokey b04aace26b test(divergence): red for #25 — restated deliver nudged, distinct not, no model spend 2026-10-28 05:37:19 -06:00
jacisjake 7fd81345ca Merge pull request #31 from jacisjake/task/24-conspiracy-invites
(#24) Conspiracy invites + lens directives
2026-10-28 05:34:07 -06:00
Smokey d45fb64eff feat(conspiracy): invite N crows, each from its own persona lens (#24) 2026-10-28 05:33:52 -06:00
Smokey 92a7ff35d0 test(conspiracy): red for #24 — distinct lens invites, capped to MurderSize 2026-10-28 05:33:52 -06:00
jacisjake 5a9fa3a4fc Merge pull request #30 from jacisjake/task/23-claim-arbitration
(#23) Claim arbitration per mode
2026-10-28 05:30:19 -06:00
Smokey 5ff45f355a feat(claim): arbitration per mode (#5) — first claim wins except conspiracy (#23) 2026-10-28 05:29:57 -06:00
Smokey 46993aaef4 test(claim): red for #23 — solo/split first-claim-wins, conspiracy multiple 2026-10-28 05:29:57 -06:00
jacisjake b03d3b7a0e Merge pull request #29 from jacisjake/task/22-mode-classification
(#22) Jev mode classification for nest requests
2026-10-28 05:26:58 -06:00
Smokey 9205cece65 feat(mode): Jev solo/conspiracy/split classification on nest requests (#22) 2026-10-28 05:26:30 -06:00
Smokey 5b3701d6e2 test(mode): red for #22 — modeQuestions, ClassifyMode guardrail wrapper, record fields 2026-10-28 05:26:30 -06:00
Smokey 7b042b77cc fix(nest): reply prompt order so Respond-to lands before the TASK line 2026-10-28 05:03:16 -06:00
jacisjake 00e249d8eb Merge pull request #20 from jacisjake/task/13-live-models-nest
(#13) Live models deliver in the nest
2026-10-28 05:00:09 -06:00
Smokey 0da8cf2bb6 test(nest): live-model crow delivery in the nest; ReadEvents log helper (#13) 2026-10-28 04:59:46 -06:00
jacisjake ca22c16a53 Merge pull request #19 from jacisjake/task/12-nest-e2e-mock
(#12) Mock-brain end-to-end conversation
2026-10-28 04:56:51 -06:00
Smokey 214e7e3a8d test(nest): mock-brain end-to-end conversation + SSE replay (#12) 2026-10-28 04:56:38 -06:00
jacisjake 5d1bb92855 Merge pull request #18 from jacisjake/task/11-addressing-must-respond
(#11) @-addressing parse + must-respond
2026-10-28 04:54:20 -06:00
Smokey 4cfe9df6ba feat(nest): @-addressing, addressed-crow-must-respond, deliver back to requester (#11) 2026-10-28 04:53:53 -06:00
Smokey a37e34cc9a test(nest): red for #11 — parse @-address, must-respond flag, deliver-to-requester 2026-10-28 04:53:53 -06:00
jacisjake c9a6a64605 Merge pull request #17 from jacisjake/task/10-post-nest-messages
(#10) POST nest messages + event-driven response
2026-10-28 03:39:11 -06:00
Smokey e4e4d12dea feat(nest): POST/GET nest messages, Jev-first tagging, event-driven crow response (#10) 2026-10-28 03:34:37 -06:00
Smokey ba5dbbc7ae test(nest): red for #10 — post/get endpoints, event-driven trigger, SSE stream 2026-10-28 03:34:37 -06:00
jacisjake 6e8b7764d2 Merge pull request #15 from jacisjake/task/8-events-nest-contract
(#8) EVENTS.md nest message contract
2026-10-28 00:09:36 -06:00
jacisjake aaa222aa76 Merge pull request #16 from jacisjake/task/9-nest-message-log
(#9) Nest message log + replay
2026-10-28 00:09:11 -06:00
Smokey 027eb34f6a feat(nestlog): append-only message store with JSON Lines persistence (#9) 2026-10-28 00:02:39 -06:00
Smokey 996660b3db test(nestlog): red for #9 — append order, replay, persistence 2026-10-28 00:02:39 -06:00
Smokey 6f6f1edc50 docs(events): nest message contract — 7 kinds, payload, SSE, tagging, guardrails (#8) 2026-10-28 00:01:09 -06:00
jacisjake 798052a9a6 Merge pull request #14 from jacisjake/task/7-jev-score-noul-probe
(#7) Probe Jev score/noul; escape option on mode
2026-10-27 23:57:44 -06:00
Smokey 5cfb038e7d spec: repeated misses never touch trust; surfaced via the guard summary (section 13 q3 closed) 2026-10-27 23:55:26 -06:00
Smokey ab9bc53ccb spec: claim classes decided — solo/split first-claim-wins, conspiracy expects multiple claims (#5) 2026-10-27 23:51:59 -06:00
Smokey e0c6e8b638 spec: message-kind tagging decided — Jev first, crow header fallback (#3); EVENTS.md nest section stub 2026-10-27 23:50:48 -06:00
Smokey 51cf9ddec6 spec: nudge loop guard decided — 3 nudges per expectation with no new content, then summarize to owner (#4) 2026-10-27 23:45:29 -06:00
Smokey 2637b87ac8 docs(jev): record probe results — score/noul confirmed, noul has no confidence (#7) 2026-10-27 23:42:40 -06:00
Smokey ac95ab1480 feat(jev): SystemOne parser for choice/score/noul, escape option on mode (#7) 2026-10-27 23:42:10 -06:00
Smokey 3b573cea97 test(jev): red for #7 — score/noul probe, escape option, mixed-answer parse 2026-10-27 23:42:00 -06:00
Smokey 3d525fb7c0 spec: Sentry reborn as nest watchdog (quarantine, then escalate); flag message kind 2026-10-27 23:36:39 -06:00
Smokey 4a1f0c2652 docs: conspiracy + 'so many crows' allusion terminology; ignore .scratch 2026-10-27 23:24:07 -06:00
Smokey fbafcce919 docs: SCOPE.md for the chatroom pivot (epic root citation) 2026-10-27 23:13:50 -06:00
Smokey 5cbff38ea5 Approval buttons read Proceed/Deny 2026-10-27 23:07:33 -06:00
Smokey 5ea1a7a3a2 Chatroom pivot: spec, black-box notes, Jev strategies; roadmap rewritten 2026-10-27 23:07:33 -06:00
Smokey fbf9fe67a6 Per-crow banter voice system: three-layer prompt (memory, voice, line) 2026-10-27 23:07:33 -06:00
SmokeyandClaude Opus 5.5 017d11cd99 CLAUDE.md: handoff for the next agent
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 17:37:27 -06:00
SmokeyandClaude Opus 5.5 a131f8dc2a Remove a stray test screenshot
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 17:36:16 -06:00
SmokeyandClaude Opus 5.5 57e9fc2fd2 Crow personas and generated banter
- personas.go: backstory, prompt policy and output policy per crow;
  Hugin and Munin grounded in Grimnismal 20 and Gylfaginning 38;
  every working crow also follows a common output policy
- Personas go into each crow's instructions; Sentry keeps JSON-only
- banter.go: retrieve backstory, relationships and recent flock
  memory, then the speaking crow generates one line in character;
  max 2 per list against the list budget, never blocks work,
  unusable lines dropped
- crow.banter event, GET /api/crows, `crows personas` -> PERSONAS.md
- UI: epithets on tiles and messages, banter as quiet asides

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 17:31:53 -06:00
SmokeyandClaude Opus 5.5 4499291231 Jev classifier in tandem with the LLM Sentry
- Jev (TypeSafe, direct) triages mode and task type with confidence
- Its call stands at >= 70% on both and no split; otherwise the LLM
  Sentry decides (unsure, split needs subtasks, or Jev down)
- Jev flights obey the same budget, flock cap, timeout and log
- Tests for every path; flight log is nil-safe
- start.command reads TYPESAFE_API_KEY and threshold from .env

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 17:13:48 -06:00
SmokeyandClaude Opus 5.5 73cf298fee OpenRouter crows; log which model answered each flight
- ChatBrain speaks OpenAI-style chat completions (OpenRouter now)
- CROWS_PROVIDER picks anthropic or openrouter; default model
  openrouter/free; CROWS_MODEL overrides
- Flight log records the model that actually answered
- Token budgets fall back to a length estimate if usage is missing
- start.command reads either key from .env

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 16:23:59 -06:00
SmokeyandClaude Opus 5.5 69ecabcb8c start.command: real crows from a local .env key; --mock for offline
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 15:54:26 -06:00
SmokeyandClaude Opus 5.5 2d85cab716 Nests: team rooms with core crows and borrowing
- Server: nests API, persistence, core-first picking, borrowed flag
  (built by the backend agent against EVENTS.md; tests pass with -race)
- UI: nests in the sidebar, one feed per nest, header shows the core
  team, New nest dialog, borrowed crows labeled, per-nest waiting count
- start.command: one-click local server in controlled mode (mock crows,
  localhost only, state in .crows/)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 13:45:04 -06:00
SmokeyandClaude Opus 5.5 e9f20349a1 EVENTS.md: nests contract
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:43:22 -06:00
SmokeyandClaude Opus 5.5 2f56bcb5fb More breathing room in tiles and the feed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:42:46 -06:00
SmokeyandClaude Opus 5.5 68ab73f957 Flock as list tiles with latest updates
- Each crow is a tile: live avatar, name, latest update, time;
  the most recently updated tile moves to the top
- Red "N waiting" count per tile tracks open questions separately
  from the latest update, so a newer update never hides one
- Phones: no crow strip; two tabs (# todo, Flock) with a count of
  crows waiting on you

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:41:22 -06:00
SmokeyandClaude Opus 5.5 0733ba1d9c Chat layout: roster, channel feed, composer
- The flock is a member list with live status (perched, flying,
  waiting on you, grounded); a scrolling strip on phones
- The Sentry and crows post into one channel; approvals are inline
  buttons on their messages; verdicts show as reactions
- "Who's flying" line above the composer; Ctrl/Cmd+Enter to send
- Consecutive messages from one author group under one name
- RIVE_CONTRACT.md: roster size and still message avatars

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:36:31 -06:00
SmokeyandClaude Opus 5.5 d0ae4fd1c0 Perch layout: crows stand on the branch
- Each crow stands on its own branch segment; segments join into one
  line per row, names sit under it in one style
- Fixed headroom row for "?" and sparkles, centered over each crow
- Trust star gets its own corner, clear of the beak
- Dazed crows fade in place instead of tipping out of line
- Five crows per row on a phone; tighter rows

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:31:17 -06:00
SmokeyandClaude Opus 5.5 feb3bb1735 Crows keep their size; sparkles mean celebration only
- No animation scales a crow: reactions use hops, tilts and spins
- Waiting is a plain "?" again; dazed crows tip and fade with no
  circling stars (they read as drunk)
- RIVE_CONTRACT.md updated to match

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:29:04 -06:00
SmokeyandClaude Opus 5.5 d5f12f2878 Drop UI strokes: shapes come from fill and stipple
- No pen line on the text box, buttons, banner or toast; no dashed
  lines anywhere
- Focus: the stipple shadow deepens; buttons also underline their
  label on keyboard focus
- Secondary button sits on a paper-tone fill

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:26:57 -06:00
SmokeyandClaude Opus 5.5 da3cd728a8 Clean lines, stippled disabled state, flash sparkles
- Consistent 6px corners instead of hand-wobble edges
- Disabled buttons: light stipple fill with a dashed line, not gray
- Drop the stipple underline under the title
- Four-point stars and broken crosses for waiting, level-up and
  dazed states, after the reference flash sheet
- Fix: trust badge was sized by the crow-art rule and filled the
  whole crow once a crow earned trust

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:14:07 -06:00
SmokeyandClaude Opus 5.5 50149e3d04 Outline-free cards and subtler stipple
- Cards drop the pen line; separation comes from a soft stippled
  shadow that deepens while a card is waiting on you
- Finer dots, layered at two unrelated tile sizes so the repeat
  never shows

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 12:03:32 -06:00
SmokeyandClaude Opus 5.5 1008683b1b Pen-and-ink art direction with stipple shading
- Cream paper, hand-drawn ink borders, engraving-era type
  (IM Fell English SC, EB Garamond)
- Stipple shadows from a seamless, randomly dotted tile (fixed seed)
- Trust badges are ink stars; Sentry and Elder marked by nameplate
- Smokey's crow art unchanged

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 11:58:32 -06:00
SmokeyandClaude Opus 5.5 a89157803b Add web UI with Smokey's crow as the stand-in mascot
- ui/: Vite + plain TypeScript, builds into ./web for `crows serve`
- CrowView mirrors CrowModel in RIVE_CONTRACT.md (pose, trust,
  reactions) so the .riv can replace the SVG later
- Event handling follows the contract's mapping table; server text
  is only ever inserted as text
- Prank: toast plus a send-button cooldown countdown
- art/crow.svg: source art for Rive import

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 11:44:54 -06:00
SmokeyandClaude Opus 5.5 940c74672a Add web server, event stream, and Rive contract
- crows serve: HTTP API, Server-Sent Events per list, web approvals
  with a 10-minute fail-safe timeout; localhost only by default
- Shared pipeline for command line and server; trust.changed events
- EVENTS.md: server/UI contract; RIVE_CONTRACT.md: data-binding spec
  for the animator (one Crow artboard for v1)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 08:31:27 -06:00
SmokeyandClaude Opus 5.5 7ae7f670ff So Many Crows v1: Sentry triage, crows, guardrails, trust ledger
Go command-line tool. Sentry classifies each todo item as solo, split,
or murder; text-only crows fly under budget, timeout, and flock caps;
trust is earned per crow and per task type; abusive requesters get a
mild, fading cooldown. Runs offline with a mock brain.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQnSw4RRWp8uqpj3nsnnXF
2026-10-27 08:16:58 -06:00