skills/tighten-loop/SKILL.md
Harvest course-corrections from the current conversation and convert them into durable fixes so the agent doesn't need the same steer next time. Use when someone says "tighten the loop", "tighten loop", "debrief this session", "session debrief", "what should I update so next time you don't…", "how can I make your life easier", "what tripped you up", "what slowed you down", or at the end of a session when the user reflects on agent friction. The scope marker is THIS SESSION / THIS CONVERSATION — that's the discriminator from sibling skills. Reads the transcript only, classifies each steer, routes to the right fix tool. NOT for: assessing repo readiness before work (use loop-check), retros on past PRs/incidents/releases (use tap-skills:retrospective), coding, or applying edits inline.
npx skillsauth add teambrilliant/dev-skills tighten-loopInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Answer one question: "From the corrections I gave the agent in this conversation, what should I update so it doesn't need them next time?"
Read the transcript. Find the steers. Classify the gap. Route to the right fix tool. Don't make the edits yourself — hand off.
.tap/learnings.mdScan the conversation for moments where the user redirected the agent. Look for:
Skip: tactical exchanges that are normal conversation flow ("can you also add X"), or one-off task pivots that don't generalize. Also filter out steers about personal orchestration style (how the user wants the agent to orchestrate for them) — those are out of scope for repo-portable fixes.
If the harvest is thin (≤2 steers) or empty after filtering, say so honestly. An empty harvest on a low-friction or personal-context session is a correct outcome, not a failure — don't pad with weak findings to fill the signature block.
Same taxonomy as tap-skills:retrospective, so the two skills' outputs are interchangeable:
| Gap | Agent lacked… | Examples | |---|---|---| | Context | Information | Project convention not in CLAUDE.md, missing ADR, undocumented domain rule, working-style rule that should be durable | | Harness | Tools or access | Missing MCP, missing CLI, missing skill, permission re-prompts | | Feedback | A way to verify | No tests for the area, no browser QA, no type check catching the failure | | Scope | Boundaries | Took on architectural decision that needed human judgment, ambiguous task |
tighten-loop only routes to repo-portable fixes — files that live in the project and travel with it (CLAUDE.md, AGENTS.md, .claude/settings.json, hooks, skills). It does not route to harness-local memory or personal global config: those don't help teammates, don't survive a harness change, and defeat the purpose of harvesting durable improvements. If a steer is genuinely personal-preference-only, surface it but recommend the user capture it themselves — out of scope for this skill.
Each finding routes to one intent kind — the canonical action the fix represents. Intent kinds are harness-agnostic so this skill works inside any orchestrator: the what is stable, the how is the harness's call. The right column shows Claude Code implementations as a default; another harness can translate (e.g., project-instruction becomes a memory tool call instead of a CLAUDE.md edit).
| Intent | What it means | Claude Code impl |
|---|---|---|
| project-instruction | Durable rule the agent should follow in this repo, including scope/boundary rules | claude-md-management:claude-md-improver (CLAUDE.md or AGENTS.md) |
| agent-config | Harness behavior change — hooks, permissions, env | update-config (.claude/settings.json); fewer-permission-prompts for re-prompts |
| tool-install | Missing capability — MCP server, CLI, API access | suggest install; name the specific tool |
| new-skill | Repeated multi-step task that should become reusable | skill-creator — name the skill, sketch what it does |
| skill-update | Existing skill in this plugin/repo needs adjustment based on observed friction | edit skills/<name>/SKILL.md directly, or skill-creator for larger changes |
| test-coverage | Missing verification path | suggest test or browser-QA scaffolding; sometimes a PostToolUse hook via update-config |
Default gap → intent mapping:
project-instructionagent-config / tool-install / new-skill / skill-updatetest-coverageproject-instruction (boundary rule)skill-update is worth flagging specifically: if a steer reveals that an existing skill produced the wrong behavior or missed a case, that's a skill-update finding — not a new project-instruction. Fix the skill, not the rules around it.
Be specific in the fix content: name the exact rule, hook, or skill change. "Add a CLAUDE.md rule" is useless; "Add to project CLAUDE.md under Testing: 'Integration tests must hit a real database, not mocks'" is actionable. Same for skill-update: name the skill and the exact paragraph or behavior to change.
Open with the signature block:
`★ Tighten Loop ──────────────────────────────────`
[N] steers harvested — [N context] / [N harness] / [N feedback] / [N scope]
├─ [most impactful finding]
├─ [second]
└─ [top recommended fix]
`─────────────────────────────────────────────────`
Then present each steer in a table. Lead with the highest-leverage findings — the ones that would prevent the most repeated friction. Mark repeats explicitly:
| # | Steer (paraphrased) | Gap | Intent | Concrete fix |
|---|---|---|---|---|
| 1 | "tests must hit real DB, not mocks" (×2) | context | project-instruction | CLAUDE.md under Testing: "Integration tests must hit a real DB, not mocks" |
| 2 | "tighten-loop should report empty harvests honestly" | context | skill-update | Edit skills/tighten-loop/SKILL.md step 1 — add explicit empty-harvest guidance |
| 3 | permission re-prompt on bun run | harness | agent-config | Add Bash(bun run:*) to .claude/settings.json permissions |
After the table, offer handoffs as a numbered list. Let the user pick which fixes to apply now, skip, or defer. Don't apply anything without confirmation — the value of this skill is converging on the right durable change, not racing to write one.
If the orchestrator (or user) asked for findings in a specific format (YAML, JSON, ticket body, etc.), produce that on top of the table — but the table is the canonical human output and shouldn't be skipped.
If .tap/learnings.md exists, append the harvested findings using retrospective's format:
[YYYY-MM-DD] — session debrief
- [steer summary] → [gap type] → [specific fix]
If the file doesn't exist, skip silently. Don't create it — that's tap-skills:retrospective's job, and creating it from here would couple dev-skills to tap-skills.
loop-check)tap-skills:retrospective).claude/settings.json, hooks, skills)development
Capture and enforce a product's visual design language — principles and patterns that make it feel like itself. Use when the user wants to: distill design inspiration into a durable reference ("capture this design from figma", "distill this screenshot", "extract our design language", "capture design direction"), or check an implementation against the product's design language ("review design fidelity", "check against design direction", "does this match our design?", review a PR for design drift). Core signal: user points at a design source (Figma URL, screenshot, live URL) OR built UI and asks how it relates to the product's visual language. Operates on a consumer-repo `docs/design.md` — proposes diffs, never writes directly. Pairs with shaping-work, implementation-planning, implement-change, and qa-test. NOT for: generating new UI (→ frontend-design), translating a Figma design into code (→ figma-implement-design), accessibility audits (→ a11y-debugging), or token extraction.
development
Use for cross-domain strategic reasoning, approach selection, and systems-level analysis. Trigger when the user wants to: think through how to approach a problem, evaluate tradeoffs between architectural or technical approaches, sanity-check a plan or direction, understand second-order effects of a decision, get a holistic view across code/org/time dimensions, or pressure-test assumptions. The core signal is the user asking "what's the right approach?", "think about this", "what am I not seeing?", "sanity check", "tradeoffs", "how should we tackle this?", or any request for multi-level reasoning that spans product, architecture, and organization. Also use when the user needs help deciding which workflow skill to invoke next. NOT for: product/user/business decisions (→ product-thinker), work definition (→ shaping-work), file-level technical planning (→ implementation-planning), writing code, test authoring, or PR review.
development
Shape rough ideas into clear, actionable work definitions. Use this skill whenever someone has an unstructured idea that needs to become a concrete work definition — feature requests, bug reports, PRDs, customer feedback, Slack threads, stakeholder asks, or vague "we should do X" statements. Trigger phrases include "shape this", "scope this", "write a PRD", "define this work", "turn this into a ticket", "flesh this out", "spec this out", "what should we build for X", "I have an idea for...", or any rough input that needs structure before implementation can begin.
tools
Browser-based QA verification after any implementation. Use when someone says "QA this", "test this in browser", "verify the feature", "qa test", "browser test", or after completing an /implement-change to verify acceptance criteria in a real browser. Opens Chrome via MCP, exercises each acceptance criterion, verifies via DOM snapshots, and reports pass/fail. The "closer" for every implementation — proof it works, not just that tests pass.