thinking-theory-of-constraints — Claude Code skill: find
A skill that walks your agent through theory of constraints: find the one binding stage, exploit it, then remeasure. Useful when extra capacity does not raise output.
npx skills add tjboudreaux/cc-thinking-skills --skill thinking-theory-of-constraints -a claude-codeWhat thinking-theory-of-constraints does
This skill puts the agent into theory-of-constraints mode. It starts by naming the unit of work — a request, a job, a PR, a record — and the metric that matters: end-to-end rate or latency. Then it hunts for the stage that caps the whole flow and backs the pick with evidence: utilization, queue length, stage rate. Opinions do not count here; measurements do.
The order matters. Exploit the constraint first without major spend: cut idle time, drop nonessential work, reduce rework, protect its time. Next, subordinate the other stages to the constraint's pace so they stop flooding it with work. Only if that is not enough do you elevate capacity. After any change the agent remeasures every stage, because the constraint tends to move.
The skill steps aside when load is spread evenly and no stage dominates, or when the real problem is a fault rather than flow rate. It also refuses to optimize several stages at once just in case. If the bottleneck is already known and a cheap fix is ready, apply it without ceremony.
What it helps with
- find the stage that caps the whole pipeline
- separate a measured constraint from a loud opinion
- raise end-to-end rate without buying more capacity
- stop flooding the bottleneck with work
- spot where the constraint moved after a fix
Example prompts for the agent
- Work out why the build got slow: name the constraint and back it with numbers
- Jobs pile up before one stage — run theory of constraints and give me a plan
- We added workers and throughput did not move. Remeasure the stages and tell me where the bottleneck is now
How to install thinking-theory-of-constraints
1Skills CLI (Vercel)
npx skills add tjboudreaux/cc-thinking-skills --skill thinking-theory-of-constraints -a claude-code2Manually: put the files in place
~/.claude/skills/thinking-theory-of-constraints/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/thinking-theory-of-constraints/
1Skills CLI (Vercel)
npx skills add tjboudreaux/cc-thinking-skills --skill thinking-theory-of-constraints -a codex2Manually: put the files in place
.agents/skills/thinking-theory-of-constraints/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add tjboudreaux/cc-thinking-skills --skill thinking-theory-of-constraints -a cursor2Manually: put the files in place
.cursor/skills/thinking-theory-of-constraints/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install tjboudreaux/cc-thinking-skills thinking-theory-of-constraints2Manually: put the files in place
.github/skills/thinking-theory-of-constraints/SKILL.md1Skills CLI (Vercel)
npx skills add tjboudreaux/cc-thinking-skills --skill thinking-theory-of-constraints -a gemini-cli2Platform CLI
gemini skills install https://github.com/tjboudreaux/cc-thinking-skills --path skills/thinking-theory-of-constraintsManually: put the files in place
.devin/skills/thinking-theory-of-constraints/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add tjboudreaux/cc-thinking-skills --skill thinking-theory-of-constraints -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about thinking-theory-of-constraints
How do I install thinking-theory-of-constraints in Claude?
Run npx skills add tjboudreaux/cc-thinking-skills --skill thinking-theory-of-constraints -a claude-code. The skill lands at ~/.claude/skills/thinking-theory-of-constraints/SKILL.md.
What does thinking-theory-of-constraints do?
It guides the agent through the five focusing steps: define the flow and goal, identify the binding constraint from evidence, exploit it cheaply, subordinate other stages, and elevate only if still short.
When should I not use this skill?
When load is spread and no single stage dominates, or when the problem is correctness rather than flow rate. The skill points you to systems thinking or plain debugging instead.
Source text
SKILL.md · MIT
---
name: thinking-theory-of-constraints
description: When throughput or latency is pipeline-limited, identify the single binding constraint and exploit, subordinate, elevate, then recheck—ignore non-constraints.
disable-model-invocation: true
---
# Theory of Constraints
A throughput-limited system has one binding constraint. Improve only that constraint; local optimization of non-constraints wastes effort and often grows WIP.
## When to Use
- Latency or throughput goal where one stage dominates time or rate.
- Work piles up before one stage; downstream idles.
- Adding capacity/workers elsewhere does not raise end-to-end output.
- Need ordered plan: exploit cheaply before spending to elevate.
## When NOT to Use
- Load is spread; no stage dominates—use systems for interactions.
- Problem is correctness/fault, not flow rate—debug the fault.
- Bottleneck hops every run due to coupling/contention without a stable stage—systems or concurrency design, not five focusing steps.
- Constraint already known and a cheap fix is ready—apply it without ceremony.
## Procedure
1. **Define the flow and goal.** Name the unit of work (request, job, PR, record) and the metric that matters (end-to-end rate or latency).
2. **Identify the constraint with evidence.** Compare stages on utilization, queue/wait, and throughput. Constraint signals: near-100% use, longest queue, lowest stage rate, work piles here, more input does not raise system output. Prefer measured rates over opinions. If two candidates tie, pick the one whose improvement would raise system throughput first.
3. **Exploit (no major spend).** Maximize constraint output: cut idle, drop nonessential work on the constraint, reduce rework/setup, protect its time, improve quality at the constraint so output is not wasted. Estimate gain before spending.
4. **Subordinate non-constraints.** Pace upstream to constraint rate; do not flood WIP. Make other stages serve the constraint (readiness, clarity, immediate pull). Reject local utilization targets that grow queues before the constraint.
5. **Elevate only if still short.** After exploit is maxed, invest to raise constraint capacity (people, tooling, sharding, parallel path). Choose cheapest adequate elevation.
6. **Recheck (prevent inertia).** After elevation or large exploit, remeasure all stages—the constraint often moves. Return to step 2. Do not keep optimizing the old constraint.
**Stop when** constraint, evidence, exploit plan, subordination rules, and elevate-or-not decision are explicit—or when no single stage binds (exit to systems).
## Output
```text
system_goal: <throughput/latency objective>
flow: <stage sequence>
constraint: <stage or resource>
evidence: <utilization / queue / rate facts>
exploit: <actions, expected gain>
subordinate:
- stage: <name>
change: <how it serves the constraint>
elevate: <none | option + cost/gain>
next_constraint_watch: <what to remeasure after change>
```
## Verification
- **Falsify:** If raising the named stage cannot increase system throughput (another stage already caps), identification is wrong. If non-constraint optimizations change end-to-end rate, re-identify.
- **Stop:** Do not elevate before exploit is exhausted. Do not optimize multiple stages “just in case.”
- **Over-application guard:** One constraint at a time. Idle capacity upstream is not a problem to fill. Do not use TOC language for pure multi-loop emergence without a binding stage.
© tjboudreaux · MIT · tjboudreaux/cc-thinking-skills