From f33f7ae690bb05d536ef2c045f00f026f460ea75 Mon Sep 17 00:00:00 2001 From: dan Date: Thu, 1 Jan 2026 21:25:01 -0800 Subject: [PATCH] refactor: reorganize lens directory structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Symmetric layout for review lenses: - ~/.config/lenses/code/ <- code-review lenses - ~/.config/lenses/ops/ <- ops-review lenses Updated: - modules/ai-skills.nix deployment paths - skills/code-review/SKILL.md lens references - skills/code-review/lenses/README.md examples 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .beads/issues.jsonl | 2 +- .beads/last-touched | 2 +- modules/ai-skills.nix | 5 ++--- skills/code-review/SKILL.md | 6 +++--- skills/code-review/lenses/README.md | 6 +++--- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 19612f6..05f9c66 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -122,5 +122,5 @@ {"id":"skills-wm9","title":"Research Steve Yegge's orchestration work","description":"Steve Yegge is working on something new related to AI orchestration. Research what it is and how it might inform our skills+molecules integration design.\n\nBlocks: skills-hin (ADR finalization)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T02:41:47.848905848-05:00","updated_at":"2025-12-24T02:42:24.40239935-05:00","closed_at":"2025-12-24T02:42:24.40239935-05:00","close_reason":"Not needed - just parking the ADR work"} {"id":"skills-x2l","title":"Investigate hooks for parallel orch queries","description":"When using orch skill, it would be useful to spin off multiple model queries in parallel automatically (e.g., gemini + gpt simultaneously). Explore if Claude Code hooks can trigger parallel background processes when the orch skill is invoked.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-06T19:29:00.165752425-08:00","updated_at":"2025-12-29T15:49:43.831970326-05:00","closed_at":"2025-12-29T15:49:43.831970326-05:00","close_reason":"Investigated. Hooks are synchronous with 60s timeout - unsuitable for background orch queries. Alternatives: (1) SessionStart hook for initial consensus, (2) Explicit skill invocation, (3) PostToolUse for validation. orch consensus already runs models in parallel internally."} {"id":"skills-x33","title":"Add tests for branch name generation","description":"File: .specify/scripts/bash/create-new-feature.sh (lines 137-181)\n\nCritical logic with NO test coverage:\n- Word filtering with stop-words\n- Acronym detection\n- Unicode/special character handling\n- Max length boundary (244 bytes)\n- Empty/single-word descriptions\n\nRisk: HIGH - affects all branch creation\n\nFix:\n- Create test suite with edge cases\n- Test stop-word filtering accuracy\n- Test boundary conditions\n\nSeverity: HIGH","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-24T02:51:00.311664646-05:00","updated_at":"2025-12-24T02:51:00.311664646-05:00"} -{"id":"skills-ybq","title":"Reorganize lens directory structure","description":"Current structure puts ops lenses as subdirectory of code-review lenses:\n\n```\n~/.config/lenses/ \u003c- code-review lenses\n~/.config/lenses/ops/ \u003c- ops-review lenses\n```\n\nThis is asymmetric. Consider:\n\nOption A: Separate top-level directories\n```\n~/.config/lenses/code-review/\n~/.config/lenses/ops-review/\n```\n\nOption B: Keep flat but with prefixes\n```\n~/.config/lenses/code-*.md\n~/.config/lenses/ops-*.md\n```\n\nOption C: Per-skill lens directories\n```\n~/.claude/skills/code-review/lenses/\n~/.claude/skills/ops-review/lenses/\n```\n\nRequires updating:\n- modules/ai-skills.nix (deployment paths)\n- skills/code-review/SKILL.md (expected paths)\n- skills/ops-review/SKILL.md (expected paths)","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-01T21:57:06.726997606-05:00","created_by":"dan","updated_at":"2026-01-01T21:57:06.726997606-05:00"} +{"id":"skills-ybq","title":"Reorganize lens directory structure","description":"Current structure puts ops lenses as subdirectory of code-review lenses:\n\n```\n~/.config/lenses/ \u003c- code-review lenses\n~/.config/lenses/ops/ \u003c- ops-review lenses\n```\n\nThis is asymmetric. Consider:\n\nOption A: Separate top-level directories\n```\n~/.config/lenses/code-review/\n~/.config/lenses/ops-review/\n```\n\nOption B: Keep flat but with prefixes\n```\n~/.config/lenses/code-*.md\n~/.config/lenses/ops-*.md\n```\n\nOption C: Per-skill lens directories\n```\n~/.claude/skills/code-review/lenses/\n~/.claude/skills/ops-review/lenses/\n```\n\nRequires updating:\n- modules/ai-skills.nix (deployment paths)\n- skills/code-review/SKILL.md (expected paths)\n- skills/ops-review/SKILL.md (expected paths)","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-01T21:57:06.726997606-05:00","created_by":"dan","updated_at":"2026-01-02T00:24:53.647409845-05:00","closed_at":"2026-01-02T00:24:53.647409845-05:00","close_reason":"Reorganized lens directories: code-review → ~/.config/lenses/code/, ops-review → ~/.config/lenses/ops/. Updated ai-skills.nix, SKILL.md, and README references."} {"id":"skills-yxv","title":"worklog: extract hardcoded path to variable","description":"SKILL.md repeats ~/.claude/skills/worklog/ path 4-5 times. Define SKILL_ROOT once, reference throughout. Found by bloat+smells lens review.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-25T02:03:15.831699081-05:00","updated_at":"2025-12-27T10:05:51.532722628-05:00","closed_at":"2025-12-27T10:05:51.532722628-05:00","close_reason":"Closed"} diff --git a/.beads/last-touched b/.beads/last-touched index ca4eff7..1f3f057 100644 --- a/.beads/last-touched +++ b/.beads/last-touched @@ -1 +1 @@ -skills-8ma +skills-ybq diff --git a/modules/ai-skills.nix b/modules/ai-skills.nix index 01742ec..ae0e587 100644 --- a/modules/ai-skills.nix +++ b/modules/ai-skills.nix @@ -89,13 +89,12 @@ in { ) )) - # Lenses for orch (sourced from code-review skill) + # Lenses for orch (separate subdirectories per skill) (mkIf cfg.enableLenses { - ".config/lenses" = { + ".config/lenses/code" = { source = "${cfg.skillsPath}/code-review/lenses"; recursive = true; }; - # Ops lenses in separate subdirectory ".config/lenses/ops" = { source = "${cfg.skillsPath}/ops-review/lenses"; recursive = true; diff --git a/skills/code-review/SKILL.md b/skills/code-review/SKILL.md index a9b1e73..ac751fa 100644 --- a/skills/code-review/SKILL.md +++ b/skills/code-review/SKILL.md @@ -26,7 +26,7 @@ The skill accepts an optional target: ## Available Lenses -Lenses are focused review prompts located in `~/.config/lenses/`: +Lenses are focused review prompts located in `~/.config/lenses/code/`: | Lens | Focus | |------|-------| @@ -50,7 +50,7 @@ Lenses are focused review prompts located in `~/.config/lenses/`: ### Phase 2: Lens Execution For each lens, analyze the target files: -1. Read the lens prompt from `~/.config/lenses/{lens}.md` +1. Read the lens prompt from `~/.config/lenses/code/{lens}.md` 2. Apply the lens to the target code 3. Collect findings in structured format @@ -182,6 +182,6 @@ max_file_size_kb: 500 # Skip files larger than this ## Integration -- **Lenses**: Read from `~/.config/lenses/*.md` +- **Lenses**: Read from `~/.config/lenses/code/*.md` - **Issue Tracking**: Uses `bd create` for beads issues - **Orch**: Optional consensus filtering via `orch consensus` diff --git a/skills/code-review/lenses/README.md b/skills/code-review/lenses/README.md index 2c48750..84034c6 100644 --- a/skills/code-review/lenses/README.md +++ b/skills/code-review/lenses/README.md @@ -10,19 +10,19 @@ Each lens examines code through one specific concern. Multiply lenses × models **Single lens, multiple models:** ```bash -orch consensus "$(cat ~/.config/lenses/bloat.md)" flash gemini gpt --file src/target.py +orch consensus "$(cat ~/.config/lenses/code/bloat.md)" flash gemini gpt --file src/target.py ``` **Pipe file content:** ```bash -cat src/target.py | orch consensus "$(cat ~/.config/lenses/smells.md)" flash gemini +cat src/target.py | orch consensus "$(cat ~/.config/lenses/code/smells.md)" flash gemini ``` **Convergent review (multiple passes):** ```bash for lens in bloat smells dead-code; do echo "=== $lens ===" - orch chat "$(cat ~/.config/lenses/$lens.md)" --model gemini --file src/target.py + orch chat "$(cat ~/.config/lenses/code/$lens.md)" --model gemini --file src/target.py done ```