From cc2a72764403cf5b874765ac4d0cd1ee1d526aa2 Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 10 Jan 2026 13:34:04 -0800 Subject: [PATCH] bd sync: 2026-01-10 13:34:04 --- .beads/issues.jsonl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 9a17ab3..e75d6f1 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -120,7 +120,7 @@ {"id":"skills-lzk","title":"Simplify branch name generation in create-new-feature.sh","description":"File: .specify/scripts/bash/create-new-feature.sh (lines 137-181)\n\nIssues:\n- 3 nested loops/conditionals\n- Complex string transformations with multiple sed operations\n- Stop-words list and filtering logic hard to maintain\n\nFix:\n- Extract to separate function\n- Simplify word filtering logic\n- Add input validation\n\nSeverity: MEDIUM","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T02:51:14.286951249-05:00","updated_at":"2026-01-03T12:13:27.083639201-08:00","closed_at":"2026-01-03T12:13:27.083639201-08:00","close_reason":"Simplifed generate_branch_name logic, added main() function, and BASH_SOURCE guard for testability."} {"id":"skills-m21","title":"Apply niri-window-capture code review recommendations","description":"CODE-REVIEW-niri-window-capture.md identifies action items: add dependency checks to scripts, improve error handling for niri failures, add screenshot directory validation, implement rate limiting. See High/Medium priority sections.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-30T11:58:24.648846875-08:00","updated_at":"2025-12-28T20:16:53.914141949-05:00","closed_at":"2025-12-28T20:16:53.914141949-05:00","close_reason":"Implemented all 4 high-priority recommendations from code review: dependency checks, directory validation, error handling, audit logging"} {"id":"skills-mjf","title":"Design: Portable adversarial reviewer","description":"Design a reviewer agent/skill that can run on any capable model.\n\nalice is Claude Opus with specific tools. We need:\n- Model-agnostic reviewer prompt/instructions\n- Tool requirements (read-only: Read, Grep, Glob, Bash)\n- Integration with orch for multi-model consensus\n- Decision format (APPROVED/ISSUES)\n- Issue filing (beads or tissue)\n\nKey principles from alice:\n- Work for the USER, not the agent\n- Assume errors exist, find them\n- Steel-man then attack\n- Seek second opinions\n\nOutput: Reviewer skill spec that works across agents","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-09T17:14:20.778647076-08:00","created_by":"dan","updated_at":"2026-01-09T19:59:37.80146821-08:00","closed_at":"2026-01-09T19:59:37.80146821-08:00","close_reason":"Covered in architecture design doc - adversarial reviewer section"} -{"id":"skills-ms5","title":"Design: Local message passing layer","description":"Append-only local files for agent coordination. No network calls.\n\n## Principle\nEverything is local filesystem. Any agent that can read/write files can participate.\n\n## Structure\n.worker-state/messages/\n├── orchestrator.jsonl # orchestrator outbox\n├── worker-auth.jsonl # worker-auth outbox\n└── worker-pay.jsonl # worker-pay outbox\n\n## Message Format\n{\n \"ts\": \"2026-01-10T12:00:00Z\",\n \"from\": \"worker-auth\",\n \"type\": \"stuck|done|permission|error\",\n \"data\": { ... }\n}\n\n## Operations\nWrite (append):\n echo '{...}' \u003e\u003e .worker-state/messages/worker-auth.jsonl\n\nRead all:\n cat .worker-state/messages/*.jsonl | jq -s 'sort_by(.ts)'\n\nTail (watch):\n tail -f .worker-state/messages/*.jsonl\n\n## Message Types\n- stuck: Worker is blocked, needs help\n- done: Worker completed task\n- permission: Worker needs approval for action\n- error: Worker hit unrecoverable error\n- review: Worker ready for review\n\n## Benefits\n- No network calls\n- Any agent can participate (just file I/O)\n- Append-only = no conflicts\n- Easy to debug (just cat the files)","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T13:24:21.597509853-08:00","created_by":"dan","updated_at":"2026-01-10T13:24:21.597509853-08:00","dependencies":[{"issue_id":"skills-ms5","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T13:24:36.033492407-08:00","created_by":"dan"}]} +{"id":"skills-ms5","title":"Design: Local message passing layer","description":"Local message passing layer with phased complexity growth.\n\n## Principle\nStart simple, grow as needed. Any agent that can read/write files can participate.\n\n## Phase 1: Simple JSONL (Now)\n.worker-state/messages/*.jsonl\n\nFormat:\n{\"ts\": \"...\", \"from\": \"worker-auth\", \"type\": \"done\", \"data\": {...}}\n\nOperations:\n- Write: echo '{...}' \u003e\u003e messages/worker-auth.jsonl\n- Read: cat messages/*.jsonl | jq -s 'sort_by(.ts)'\n- Watch: tail -f messages/*.jsonl\n\nGood enough for prototype. No dependencies.\n\n## Phase 2: JWZ-like Features (When Needed)\nAdd when conversations get complex or files get large:\n- Threading (parent message linking)\n- SQLite cache for fast queries\n- Git context (commit, branch, dirty)\n- Rich identity (sender, model, role)\n\nConsider adopting JWZ directly or building compatible format.\n\n## Phase 3: Talu or Service Layer (Future)\nWhen we need:\n- Rich querying across projects\n- Persistence beyond filesystem\n- Graph relationships between messages\n- Real service layer\n\nTalu (~/proj/talu) is graph-based PKM that could model:\n- Agents as nodes\n- Messages as edges\n- Tasks with relationships\n\n## Research Sources\n- JWZ (emes): JSONL + SQLite, topic-based, git context\n- Gastown: Git worktrees as mailboxes (overcomplicated)\n- OpenHands: Git branches for coordination","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T13:24:21.597509853-08:00","created_by":"dan","updated_at":"2026-01-10T13:33:46.398683229-08:00","dependencies":[{"issue_id":"skills-ms5","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T13:24:36.033492407-08:00","created_by":"dan"}]} {"id":"skills-mx3","title":"spec-review: Define consensus thresholds and decision rules","description":"'Use judgment' for mixed results leads to inconsistent decisions.\n\nDefine:\n- What constitutes consensus (2/3? unanimous?)\n- How to handle NEUTRAL votes\n- Tie-break rules\n- When human override is acceptable and how to document it","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T00:23:24.121175736-08:00","updated_at":"2025-12-15T13:58:04.339283238-08:00","closed_at":"2025-12-15T13:58:04.339283238-08:00"} {"id":"skills-njb","title":"worklog: clarify or remove semantic compression references","description":"SKILL.md references 'semantic compression is a planned workflow' multiple times but it's not implemented. Speculative generality - adds cognitive load for non-existent feature. Either implement or move to design notes. Found by smells lens review.","status":"closed","priority":4,"issue_type":"task","created_at":"2025-12-25T02:03:25.387405002-05:00","updated_at":"2025-12-27T10:11:48.169923742-05:00","closed_at":"2025-12-27T10:11:48.169923742-05:00","close_reason":"Closed"} {"id":"skills-nto","title":"Prototype: End-to-end cross-agent workflow","description":"Build a working prototype of cross-agent quality gate.\n\n## Scenario\n1. Worker agent (any) does task\n2. Posts status to message layer\n3. Reviewer agent (any) checks work\n4. Posts approval/issues to memory layer\n5. Gate checks memory, allows/blocks completion\n\n## Test Matrix\n\n| Orchestrator | Worker | Reviewer | Enforcement |\n|--------------|--------|----------|-------------|\n| Claude | Claude | Gemini | Hook |\n| Claude | Gemini | Claude | Hook |\n| OpenCode | Claude | Gemini | Orchestrator |\n| Manual | OpenCode | Claude | Protocol |\n\n## Components to Build\n1. Message layer interface (post/read status)\n2. Memory layer interface (review state)\n3. Gate check CLI (for hooks and manual)\n4. Reviewer skill/prompt\n\n## Success Criteria\n- At least 2 agent combinations working\n- Gate actually blocks when review fails\n- State persists across agent boundaries","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-09T19:32:57.579195169-08:00","created_by":"dan","updated_at":"2026-01-09T20:39:24.013666826-08:00","closed_at":"2026-01-09T20:39:24.013666826-08:00","close_reason":"Prototype complete: review-gate CLI with hooks.json, adversarial reviewer prompt, and dual-publish structure"} @@ -136,7 +136,7 @@ {"id":"skills-rex","title":"Test integration on worklog skill","description":"Use worklog skill as first real test case:\n- Create wisp for worklog execution\n- Capture execution trace\n- Test squash → digest\n- Validate trace format captures enough info for replay\n\nMigrated from dotfiles-drs.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T19:21:18.75525644-05:00","updated_at":"2025-12-29T13:55:35.814174815-05:00","closed_at":"2025-12-29T13:55:35.814174815-05:00","close_reason":"Parked with ADR-001: skills-molecules integration deferred. Current simpler approach (skills as standalone) works well. Revisit when complex orchestration needed.","dependencies":[{"issue_id":"skills-rex","depends_on_id":"skills-3em","type":"blocks","created_at":"2025-12-23T19:22:00.34922734-05:00","created_by":"dan"}]} {"id":"skills-roq","title":"Design: Branch-per-worker isolation","description":"Each worker operates on its own git branch for code isolation.\n\n## Pattern\n- worker spawn creates branch: worker/\u003cid\u003e\n- Worker does all work on that branch\n- On completion, branch ready for review/merge\n- Orchestrator or human merges to main\n\n## Benefits\n- Clean isolation between parallel workers\n- Easy rollback (just delete branch)\n- Familiar git workflow\n- No conflicts during work\n\n## Implementation\nworker spawn:\n 1. git checkout -b worker/\u003cid\u003e\n 2. Run agent\n 3. Agent commits to branch\n 4. On completion, branch stays for review\n\nworker merge \u003cid\u003e:\n 1. Review diff\n 2. Merge to main (or rolling branch)\n 3. Delete worker branch\n\n## Open Questions\n- Merge from main during work? (rebase vs merge)\n- Rolling branch pattern? (main \u003c- rolling \u003c- workers)","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T13:24:21.364434026-08:00","created_by":"dan","updated_at":"2026-01-10T13:24:21.364434026-08:00","dependencies":[{"issue_id":"skills-roq","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T13:24:35.976245936-08:00","created_by":"dan"}]} {"id":"skills-rpf","title":"Implement playwright-visit skill for browser automation","description":"## Overview\nBrowser automation skill using Playwright to visit web pages, take screenshots, and extract content.\n\n## Key Findings (from dotfiles investigation)\n\n### Working Setup\n- Use `python312Packages.playwright` from nixpkgs (handles Node driver binary patching for NixOS)\n- Use `executable_path='/run/current-system/sw/bin/chromium'` to use system chromium\n- No `playwright install` needed - no browser binary downloads\n\n### Profile Behavior\n- Fresh/blank profile every launch by default\n- No cookies, history, or logins from user's browser\n- Can persist state with `storage_state` parameter if needed\n\n### Example Code\n```python\nfrom playwright.sync_api import sync_playwright\n\nwith sync_playwright() as p:\n browser = p.chromium.launch(\n executable_path='/run/current-system/sw/bin/chromium',\n headless=True\n )\n page = browser.new_page()\n page.goto('https://example.com')\n print(page.title())\n browser.close()\n```\n\n### Why Not uv/pip?\n- Playwright pip package bundles a Node.js driver binary\n- NixOS can't run dynamically linked executables without patching\n- nixpkgs playwright handles this properly\n\n## Implementation Plan\n1. Create `skills/playwright-visit/` directory\n2. Add flake.nix with devShell providing playwright\n3. Create CLI script with subcommands:\n - `screenshot \u003curl\u003e \u003coutput.png\u003e` - capture page\n - `text \u003curl\u003e` - extract text content \n - `html \u003curl\u003e` - get rendered HTML\n - `pdf \u003curl\u003e \u003coutput.pdf\u003e` - save as PDF\n4. Create skill definition for Claude Code integration\n5. Document usage in skill README\n\n## Dependencies\n- nixpkgs python312Packages.playwright\n- System chromium (already in dotfiles)\n\n## Related\n- dotfiles issue dotfiles-m09 (playwright skill request)","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-16T16:02:28.577381007-08:00","updated_at":"2025-12-29T00:09:50.681141882-05:00","closed_at":"2025-12-29T00:09:50.681141882-05:00","close_reason":"Implemented: SKILL.md, visit.py CLI (screenshot/text/html/pdf), flake.nix devShell, README. Network down so couldn't test devShell build, but code complete."} -{"id":"skills-s6y","title":"Multi-agent orchestration: Lego brick architecture","description":"Simple, composable primitives for multi-agent coordination. Inspired by Gastown but dramatically simpler - Lego bricks not pirate ships.\n\n## Architecture\n- Human-attended orchestrator (any agent)\n- Background workers (any agent, own git branch)\n- Local message passing (.worker-state/messages/*.jsonl)\n- Review gates (review-gate CLI)\n- File-based state (.worker-state/)\n\n## Core Primitives\n1. worker spawn - start background agent on own branch\n2. worker status - check all workers via local files\n3. worker merge - merge completed worker branch\n4. review-gate - quality gates (pass/fail)\n5. worker stuck - detect non-progress (Rubber Duck)\n6. worker veto - block without doing (for reviewers)\n\n## Key Principles\n- Everything is local filesystem (no network for coordination)\n- Any agent that can read/write files can participate\n- Git branches for code isolation\n- Append-only JSONL for message passing\n- Pass/fail review first, richer scoring later\n\n## Research Sources\n- OpenHands iterative refinement (worker → critique → feedback loop)\n- Gastown (what NOT to do - too complex)\n- LangGraph breakpoints\n- MetaGPT role-based agents\n\n## Key Insights\n- Agents coordinate through files, not direct communication\n- External reviewer process approves/rejects (not inline spawning)\n- Circuit breakers prevent infinite loops\n- 80-90% automation realistic (human for the rest)","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-10T12:14:16.141746066-08:00","created_by":"dan","updated_at":"2026-01-10T13:24:36.265535217-08:00"} +{"id":"skills-s6y","title":"Multi-agent orchestration: Lego brick architecture","description":"Simple, composable primitives for multi-agent coordination. Inspired by Gastown but dramatically simpler - Lego bricks not pirate ships.\n\n## Architecture\n- Human-attended orchestrator (any agent)\n- Background workers (any agent, own git branch)\n- Local message passing (.worker-state/messages/*.jsonl)\n- Review gates (review-gate CLI)\n- File-based state (.worker-state/)\n\n## Core Primitives\n1. worker spawn - start background agent on own branch\n2. worker status - check all workers via local files\n3. worker merge - merge completed worker branch\n4. review-gate - quality gates (pass/fail)\n5. worker stuck - detect non-progress (Rubber Duck)\n6. worker veto - block without doing (for reviewers)\n\n## Phased Approach\nPhase 1 (Now): Simple JSONL, basic primitives, pass/fail review\nPhase 2 (When Needed): Threading, SQLite cache, richer review scoring\nPhase 3 (Future): Talu or service layer for rich querying\n\n## Key Principles\n- Everything is local filesystem (no network for coordination)\n- Any agent that can read/write files can participate\n- Git branches for code isolation\n- Start simple, grow as needed\n- 80-90% automation realistic (human for the rest)\n\n## Research Sources\n- OpenHands: Worker → critique → feedback loop, git-based coordination\n- JWZ (emes): JSONL + SQLite, topic-based messaging\n- Gastown: What NOT to do (too complex, Kubernetes-level)\n- LangGraph: State serialization breakpoints\n- MetaGPT: Role-based agents","status":"open","priority":1,"issue_type":"epic","created_at":"2026-01-10T12:14:16.141746066-08:00","created_by":"dan","updated_at":"2026-01-10T13:34:00.126490996-08:00"} {"id":"skills-s92","title":"Add tests for config injection (deploy-skill.sh)","description":"File: bin/deploy-skill.sh (lines 112-137)\n\nCritical logic with NO test coverage:\n- Idempotency (running twice should be safe)\n- Correct brace matching in Nix\n- Syntax validity of injected config\n- Rollback on failure\n\nRisk: MEDIUM-HIGH - can break dotfiles Nix config\n\nFix:\n- Test idempotent injection\n- Validate Nix syntax after injection\n- Test with malformed input\n\nSeverity: MEDIUM","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T02:51:01.314513824-05:00","updated_at":"2026-01-06T16:29:18.728097676-08:00","closed_at":"2026-01-06T16:29:18.728097676-08:00","close_reason":"21 tests added covering idempotency, brace preservation, inject_home_file wrapper, edge cases"} {"id":"skills-sh6","title":"Research: OpenHands iterative refinement pattern","description":"Document OpenHands SDK patterns for our architecture.\n\n## Iterative Refinement Loop\n1. Worker agent does work\n2. Critique agent evaluates (correctness, quality, completeness)\n3. If not good → worker tries again with feedback\n4. Repeat until standard met\n\n## Parallel Agent Orchestration\n- Git-based coordination (not direct communication)\n- Each agent works on own branch\n- PRs to intermediate 'rolling branch'\n- Human reviews and merges\n- Agents pull latest, handle conflicts\n\n## Key Quote\n'Don't expect 100% automation—tasks are 80-90% automatable.\nYou need a human who understands full context.'\n\n## Mapping to Our Architecture\n- Worker = their refactoring agent\n- Reviewer = their critique agent\n- review-gate = their quality threshold\n- Human orchestrator = their human on rolling branch\n\n## Sources\n- https://openhands.dev/blog/automating-massive-refactors-with-parallel-agents\n- https://arxiv.org/abs/2511.03690\n- https://docs.openhands.dev/sdk","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-10T12:24:02.368542878-08:00","created_by":"dan","updated_at":"2026-01-10T12:24:02.368542878-08:00","dependencies":[{"issue_id":"skills-sh6","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T12:24:07.013388857-08:00","created_by":"dan"}]} {"id":"skills-sse","title":"Design: worker spawn/status primitives","description":"Basic worker lifecycle management.\n\n## Commands\n- worker spawn \"task\" --id X - runs agent in background\n- worker status - shows all worker states\n- worker kill X - terminate worker\n\n## State\n.worker-state/X.json:\n - id, status, task, started_at\n - output (truncated)\n - exit_code (when done)\n\n## Implementation\n~50 lines bash wrapper that:\n- Spawns claude/gemini/codex in background\n- Redirects output to log file\n- Writes status JSON\n- Updates on completion","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T12:14:33.115131833-08:00","created_by":"dan","updated_at":"2026-01-10T12:14:33.115131833-08:00","dependencies":[{"issue_id":"skills-sse","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T12:15:10.014285119-08:00","created_by":"dan"}]}