From 36a98391a3c48b647f285e8151c3af70e82284ec Mon Sep 17 00:00:00 2001 From: Abhirup Banerjee <139776126+ovhirup@users.noreply.github.com> Date: Thu, 1 Oct 2026 00:41:39 +0530 Subject: [PATCH] Add run ceilings and demand check (policy-rev 4) Loops state a stop condition and run ceiling, parallel shards state their count, and delegations are sized to what can be reviewed. Adds advisor Demand check, assets/rebound.md, and port parity. Co-Authored-By: Claude Sonnet 5.5 --- .github/workflows/validate.yml | 2 +- CHANGELOG.md | 49 +++++++++++++++++ README.md | 11 ++-- codex/README.md | 2 +- codex/references/templates.md | 13 +++-- evals/evals.json | 33 ++++++++++-- grok/README.md | 2 +- grok/SKILL.md | 13 +++-- plugins/stackwich/.claude-plugin/plugin.json | 2 +- plugins/stackwich/skills/stackwich/SKILL.md | 23 ++++++-- .../skills/stackwich/assets/advisor.md | 7 ++- .../skills/stackwich/assets/rebound.md | 52 +++++++++++++++++++ 12 files changed, 185 insertions(+), 24 deletions(-) create mode 100644 plugins/stackwich/skills/stackwich/assets/rebound.md diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 7fce4c0..da8e5c9 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -47,7 +47,7 @@ jobs: grep -qE '^[[:space:]]*author:' "$S" || { echo "::error::frontmatter author missing"; exit 1; } [ "$(grep -cx -- '' "$S")" -eq 1 ] || { echo "::error::SKILL.md must contain exactly one whole-line opening marker"; exit 1; } [ "$(grep -cx -- '' "$S")" -eq 1 ] || { echo "::error::SKILL.md must contain exactly one whole-line closing marker"; exit 1; } - [ "$(grep -cx -- '' "$S")" -eq 1 ] || { echo "::error::SKILL.md must contain exactly one whole-line policy-rev: 3 comment"; exit 1; } + [ "$(grep -cx -- '' "$S")" -eq 1 ] || { echo "::error::SKILL.md must contain exactly one whole-line policy-rev: 4 comment"; exit 1; } for h in Prompt Context Harness Loop Graph; do awk '/^$/,/^$/' "$S" | grep -q "^### $h" || { echo "::error::policy block missing the $h layer"; exit 1; } done diff --git a/CHANGELOG.md b/CHANGELOG.md index 10c5112..a4e7fa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,55 @@ Headings are `## — `. Ports are named in the body with their own rev counters: a port tracks the parent's layer structure, not its revision number. +## 3.1.0 — policy-rev 4: every efficiency gets a ceiling + +The policy block changes, so this is a real upgrade: `policy-rev` moves from 3 to 4. The +`` marker is unchanged, so existing installs upgrade in place. + +### Why +Stackwich lowers the unit cost of agent work — cheap executors, warm forks, loops instead of +re-running by hand, parallel shards. Cheaper units invite more of them (the rebound effect, or +Jevons paradox), so total spend and review load can rise even as each step gets cheaper. Each of +those efficiencies now comes paired with a limit or a count. The reasoning lives in +`assets/rebound.md`, read only when a user asks about cost, loops, or fan-out; the policy block +carries only the imperatives. + +### Policy block +- **Loop:** every loop, fixed-cadence or self-paced, states its stop condition and a maximum run + count before it starts, and asks the user when either is missing. A loop with no change for 3 + consecutive runs stops and reports. The ceiling is a run count, not a spend figure, because run + count is observable and spend usually is not. +- **Graph:** sharding across parallel executors now states the shard count and the reason for + it. There is no numeric cap — the right number depends on the work. +- **Harness:** delegations are sized to what `verifier` and the reviewer can check in one pass, + and a done report counts delegations, forks, and loop runs. Token or cost figures appear only + where the environment shows them, so a report never states a number nobody observed. + +### Agents +- `advisor`'s plan template gains a `Demand check:` line, and its blast-radius review item now + asks whether making something cheaper or automatic raises load, spend, or review volume + elsewhere. Re-scaffold `advisor` to pick this up; `executor` and `verifier` are unchanged. + +### Upgrading +Update the plugin, then re-run `/stackwich:stackwich`. It finds the existing block by its marker, +shows you the installed `policy-rev: 3`, and replaces the block in place once you confirm. + +If a pre-3.0 clone is still at `~/.claude/skills/stackwich` or `./.claude/skills/stackwich`, +remove it first (see 3.0.0 below) — from this release on, it would install the stale +`policy-rev: 3` block. + +### Ports +- Grok — `stackwich-grok-rev 2`: the same three limits for a single agent. Standing tasks carry + a stop condition and run ceiling, the batch count is stated, and each pass is sized for VERIFY + and REVIEW. +- Codex — `stackwich-codex-rev 2`: the same three limits, applied to scheduled automations and + parallel subagents. + +### Repo +- CI asserts `policy-rev: 4`. +- `evals/evals.json`: case 1 expects `policy-rev 4`, case 2 asserts no older revision remains, + and two new cases cover an unbounded loop request and a large parallel batch. + ## 3.0.0 — installs as a plugin Stackwich is now a Claude Code plugin marketplace rather than a repo you clone into your skills diff --git a/README.md b/README.md index 3d20073..4788e0c 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ The skill does the rest interactively: asks for scope, writes the policy, offers ### Upgrading from 2.x -**Nothing about your policy changes.** Your `CLAUDE.md` block stays at `policy-rev 3`, your `advisor`, `executor` and `verifier` keep their existing names and contents, and there is nothing to re-run. Only the delivery mechanism moved. +**The move itself changes nothing about your policy.** 3.0 left your `CLAUDE.md` block at `policy-rev 3` and your `advisor`, `executor` and `verifier` untouched — only the delivery mechanism moved. 3.1.0 is a separate policy upgrade to `policy-rev 4`; see [CHANGELOG](CHANGELOG.md), and re-run `/stackwich:stackwich` to apply it in place. Before 3.0, Stackwich was installed by cloning this repo into a skills directory. Install the plugin above, then remove the old clone — leaving it in place gives you two skills both named `stackwich`: @@ -102,11 +102,12 @@ stackwich/ │ ├── LICENSE │ └── skills/stackwich/ │ ├── SKILL.md # the skill: install workflow + policy block -│ └── assets/ # agent definitions, read only when scaffolding is accepted -│ ├── advisor.md +│ └── assets/ # read on demand, never on every trigger +│ ├── advisor.md # agent definitions, read only when scaffolding is accepted │ ├── executor.md -│ └── verifier.md -├── evals/evals.json # test cases for the five install paths +│ ├── verifier.md +│ └── rebound.md # cost/rebound playbook, read only for cost or loop questions +├── evals/evals.json # five install paths + two policy-behavior cases ├── docs/sandwich.jpg ├── grok/ # Grok port (stackwich-grok) — not a Claude Code skill ├── codex/ # Codex port (stackwich-codex) — not a Claude Code skill diff --git a/codex/README.md b/codex/README.md index 5b44c17..2d92721 100644 --- a/codex/README.md +++ b/codex/README.md @@ -63,7 +63,7 @@ scaffold `advisor`, `executor`, and `verifier` as TOML agents. > insert a duplicate block. > **Port status:** at parity with the Claude Code parent's five-layer policy, as -> `stackwich-codex-rev 1`. The port tracks the parent's layer structure, not its revision +> `stackwich-codex-rev 2`. The port tracks the parent's layer structure, not its revision > number — a parent bump does not automatically oblige a port bump. --- diff --git a/codex/references/templates.md b/codex/references/templates.md index 47593bb..f1dcfd9 100644 --- a/codex/references/templates.md +++ b/codex/references/templates.md @@ -7,7 +7,7 @@ credit in every custom-agent file. ```markdown - + ## Working Architecture (Stackwich Codex) ### Prompt @@ -42,10 +42,17 @@ credit in every custom-agent file. - Match cost and reasoning to the role: favor a faster, lower-cost configuration for `executor`; reserve higher reasoning for `advisor` planning and review. Do not select a more expensive model or larger agent workflow than the task requires. +- Size each delegation to what `verifier` and `advisor` can check in one pass; split a larger + batch into sequential gated batches. When reporting done, state how many delegations, + subagents, and automation runs the task used — add token or cost figures only where the + environment shows them. ### Loop - Recurring or repeated work defaults to a scheduled automation when the active ChatGPT or Codex surface supports it. Do not create a manual re-run habit for stable recurring work. +- Before creating a scheduled automation or any repeating run, state its stop condition and a + maximum run count; if either is missing, ask the user instead of starting. A repeating run + with no change for 3 consecutive runs stops and reports (unless the user set another number). - Failure routing, with hard stops: - `GATE: FAIL` -> return the failure output to `executor` together with the original plan. - `REVISE: ...` -> return the numbered list to `executor` together with the original plan. @@ -68,8 +75,8 @@ credit in every custom-agent file. implements, `verifier` gates, then `advisor` reviews. Otherwise, use `verifier` after substantive edits when independent verification adds value. - Use custom roles when installed. Otherwise spawn bounded subagents with the same advisor, - executor, and verifier responsibilities. Parallelize only independent work, and avoid - concurrent edits to overlapping files. + executor, and verifier responsibilities. Parallelize only independent work, state how many + parallel runs and why that many, and avoid concurrent edits to overlapping files. - You are the orchestrator: artifacts travel through you, so forward them intact. `executor` receives the plan's exact steps plus its verification command and expected output. `verifier` receives that same verification spec plus the executor's reported diff and the diff --git a/evals/evals.json b/evals/evals.json index 715d56a..8e02455 100644 --- a/evals/evals.json +++ b/evals/evals.json @@ -5,7 +5,7 @@ "id": 1, "name": "fresh-user-level-install", "prompt": "Set up the Stackwich architecture on this machine at the user level, including the subagents.", - "expected_output": "~/.claude/CLAUDE.md created with exactly one stackwich:v1 marker pair and policy-rev 3; advisor.md, executor.md, verifier.md written to ~/.claude/agents/ with valid frontmatter; step 4 verification results reported explicitly.", + "expected_output": "~/.claude/CLAUDE.md created with exactly one stackwich:v1 marker pair and policy-rev 4; advisor.md, executor.md, verifier.md written to ~/.claude/agents/ with valid frontmatter; step 4 verification results reported explicitly.", "assertions": [ "CLAUDE.md contains exactly one opening and one closing marker", "policy-rev line is present inside the block", @@ -19,11 +19,12 @@ "id": 2, "name": "update-existing-v1-install", "prompt": "I already have Stackwich installed from a while back — can you bring it up to date?", - "expected_output": "Existing block located via the opening marker, shown to the user with its declared policy-rev, replaced in place after confirmation. No duplicate section appended.", + "expected_output": "Existing block located via the opening marker, shown to the user with its declared policy-rev, replaced in place after confirmation with the policy-rev 4 block. No duplicate section appended.", "assertions": [ "existing block is shown to the user before modification", "user is asked before replacing", - "final file contains exactly one marker pair" + "final file contains exactly one marker pair", + "final block declares policy-rev 4 and no older policy-rev line remains" ], "files": [] }, @@ -63,6 +64,32 @@ "unrelated CLAUDE.md content is preserved" ], "files": [] + }, + { + "id": 6, + "name": "unbounded-loop-request", + "prompt": "Put a /loop on refactoring the whole codebase — pace it yourself, no fixed schedule.", + "expected_output": "Before any loop starts, the agent states or asks for a stop condition and a maximum run count, and says the loop stops and reports after 3 consecutive runs with no change. The requirement holds even though there is no fixed cadence. No loop is started without both.", + "assertions": [ + "a stop condition is stated or requested before the loop starts", + "a maximum run count is stated or requested before the loop starts", + "the no-change stop (3 consecutive runs, or a user-set number) is stated", + "no loop is started while the stop condition or the run ceiling is missing" + ], + "files": [] + }, + { + "id": 7, + "name": "large-parallel-batch", + "prompt": "Migrate these 40 independent modules to the new logger as fast as possible.", + "expected_output": "The agent states how many parallel executor runs it will launch and why that many, sizes each batch so the verifier can check it in one pass, and when reporting done gives the number of delegations and runs used, with token or cost figures only if the environment showed them.", + "assertions": [ + "the number of parallel executor runs is stated with a reason before launch", + "each batch is sized for a single verifier pass", + "the done report counts delegations, forks, and loop runs", + "no token or cost figure is reported that the environment did not show" + ], + "files": [] } ] } diff --git a/grok/README.md b/grok/README.md index 1f7b81a..3c3636d 100644 --- a/grok/README.md +++ b/grok/README.md @@ -56,7 +56,7 @@ cp SKILL.md LICENSE ~/.grok/skills/stackwich-grok/ ``` > **Port status:** at parity with the Claude Code parent's five-layer policy, as -> `stackwich-grok-rev 1`. The port tracks the parent's layer structure, not its revision +> `stackwich-grok-rev 2`. The port tracks the parent's layer structure, not its revision > number — a parent bump does not automatically oblige a port bump. The Graph layer is > expressed as explicit phases inside one agent rather than three subagents: a deliberate > design choice for this runtime, not a shortfall. diff --git a/grok/SKILL.md b/grok/SKILL.md index 3d157c9..160bd3b 100644 --- a/grok/SKILL.md +++ b/grok/SKILL.md @@ -102,7 +102,7 @@ When the user asks to install or activate Stackwich: ```markdown - + ## Working Architecture (Stackwich) ### Prompt @@ -128,12 +128,18 @@ When the user asks to install or activate Stackwich: its actual output. If it wasn't verified, say so instead of implying it was. - Match effort to the change. Don't escalate a small reversible edit into the full cycle, and don't spend a heavier reasoning budget than the work actually requires. +- Size each pass to what VERIFY and REVIEW can check at once; split larger work into sequential + gated passes. When reporting done, state how many passes and iterations the task used — add + token or cost figures only where the environment shows them. ### Loop - Recurring or repeated work runs as a standing, written task with its own trigger and done condition — not a manual re-run-by-hand habit. Grok has no `/loop` command, so this is a discipline rather than a feature: write the repeating work down and run it from that, not from memory. +- A standing task states its stop condition and a maximum run count before its first run; if + either is missing, ask the user instead of starting. One that produces no change for 3 + consecutive runs stops and reports (unless the user set a different number). - Recurring work runs as explicit iteration that tracks what was attempted and what failed, not as repeated one-shot "try again" prompts. - Failure routing, with a hard stop: @@ -156,8 +162,9 @@ When the user asks to install or activate Stackwich: expected output. VERIFY receives that same verification spec plus the actual diff. REVIEW receives the original plan alongside the diff and the gate result. A phase missing its input says which one and stops. -- Batch independent mechanical work into a single pass. Never interleave edits to the same file - across passes — concurrent writers corrupt diffs. +- Batch independent mechanical work into a single pass; when splitting into several batches, + state how many and why that many. Never interleave edits to the same file across passes — + concurrent writers corrupt diffs. ``` diff --git a/plugins/stackwich/.claude-plugin/plugin.json b/plugins/stackwich/.claude-plugin/plugin.json index a02e2df..965a7d2 100644 --- a/plugins/stackwich/.claude-plugin/plugin.json +++ b/plugins/stackwich/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "stackwich", - "version": "3.0.0", + "version": "3.1.0", "description": "Delivery discipline for AI coding agents. Writes the five-layer Stackwich policy (Prompt / Context / Harness / Loop / Graph) into CLAUDE.md and scaffolds advisor, executor and verifier subagents.", "author": { "name": "Abhirup Banerjee" }, "homepage": "https://github.com/ovhirup/stackwich", diff --git a/plugins/stackwich/skills/stackwich/SKILL.md b/plugins/stackwich/skills/stackwich/SKILL.md index 029c9a4..15094d2 100644 --- a/plugins/stackwich/skills/stackwich/SKILL.md +++ b/plugins/stackwich/skills/stackwich/SKILL.md @@ -1,10 +1,10 @@ --- name: stackwich -description: Installs the Stackwich architecture — meta-prompt delegation, a plan/execute/verify/review sandwich, loop-by-default for recurring work, and fork-based context engineering — into any Claude Code setup. Writes the operating policy into CLAUDE.md and optionally scaffolds three companion subagents (advisor/executor/verifier). Use this whenever the user wants to adopt, install, bootstrap, upgrade, or re-apply this delegation architecture on a new machine, project, or someone else's setup — and also when they ask more loosely for help making their Claude Code setup more disciplined, setting up planner/executor/reviewer subagents, adding a review gate before risky changes, enforcing cheap-model tiering, or fixing agents that make sloppy or out-of-scope edits. +description: Installs the Stackwich architecture — meta-prompt delegation, a plan/execute/verify/review sandwich, loop-by-default for recurring work, and fork-based context engineering — into any Claude Code setup. Writes the operating policy into CLAUDE.md and optionally scaffolds three companion subagents (advisor/executor/verifier). Use this whenever the user wants to adopt, install, bootstrap, upgrade, or re-apply this delegation architecture on a new machine, project, or someone else's setup — and also when they ask more loosely for help making their Claude Code setup more disciplined, setting up planner/executor/reviewer subagents, adding a review gate before risky changes, enforcing cheap-model tiering, or fixing agents that make sloppy or out-of-scope edits. Also use it when the user asks why agent usage or cost keeps climbing despite cheaper models, or whether a loop or more parallel agents will actually save effort. metadata: author: Abhirup Banerjee (@ovhirup) - version: 3.0.0 - policy-rev: 3 + version: 3.1.0 + policy-rev: 4 --- # Stackwich — install the Stackwich architecture @@ -59,7 +59,7 @@ substitute consistently everywhere they appear. ```markdown - + ## Working Architecture (Stackwich) ### Prompt @@ -92,9 +92,15 @@ substitute consistently everywhere they appear. - Model tiering is a cost control: don't escalate a task to a pricier model or a bigger subagent than the work actually requires. (Each agent's tier is set in its own frontmatter — trust it rather than restating it per task.) +- Size each delegation to what `verifier` and the reviewer can check in one pass; split a larger + batch into sequential gated batches. When reporting done, state how many delegations, forks, + and loop runs the task used — add token or cost figures only where the environment shows them. ### Loop - Recurring or repeated work defaults to `/loop`, not a manual re-run-by-hand habit. +- Before starting a loop, fixed-cadence or self-paced, state its stop condition and a maximum + run count; if either is missing, ask the user instead of starting. A loop that produces no + change for 3 consecutive runs stops and reports (unless the user set a different number). - Failure routing, with hard stops: - `GATE: FAIL` -> hand the failure output back to `executor` with the original plan. - `REVISE: ...` -> hand the numbered list back to `executor` with the original plan. @@ -110,6 +116,7 @@ substitute consistently everywhere they appear. mechanical work into one delegation instead of many small round-trips. - If a batch is large AND the items are independent (no shared file, no ordering dependency), shard it across parallel `executor` runs and fan the results into a single `verifier` pass. + Before launching, state the shard count and why that many. If items touch the same files or must land in order, keep it serial — concurrent writers corrupt diffs. - Consult `advisor` BEFORE any change that's hard to reverse, touches shared/production @@ -149,6 +156,11 @@ than restating the rule: The difference isn't length — it's that the second one leaves no judgment call open, states what's already been ruled out so the agent doesn't re-derive it, and defines done. +### Cost, loop, and fan-out questions +If the user asks about agent cost, token budgets, loops that run too long, how many parallel +agents to run, or whether more automation will actually save effort, read `assets/rebound.md` +and answer from it. It is reference material, not policy — don't read it otherwise. + ## 3. Offer the companion subagents Ask whether to scaffold the three subagents the section above refers to (`advisor`, `executor`, `verifier`). Skip this step entirely if the user already has their own plan/execute/verify @@ -157,6 +169,7 @@ implementation of it. The agent definitions live in this skill's `assets/` directory (`advisor.md`, `executor.md`, `verifier.md`). Read them only when the user says yes, then copy them to `/agents/`. +Copy only those three — `assets/rebound.md` is reference material, not an agent. Before copying, check `/agents/` (and the other scope, if different) for name collisions. If any of the three names is taken by an unrelated agent, ask the user for a @@ -170,7 +183,7 @@ This skill installs a verify-before-done policy, so it holds itself to it. After confirm and report actual observed results — not intentions: 1. Both markers present in `/CLAUDE.md`, exactly once each. -2. `policy-rev: 3` is present inside the block (an upgrade from an older revision must +2. `policy-rev: 4` is present inside the block (an upgrade from an older revision must leave no trace of the previous one). 3. If agents were scaffolded: all three files exist in `/agents/`, each starts with valid YAML frontmatter containing `name`, `description`, `model`, and `tools`. diff --git a/plugins/stackwich/skills/stackwich/assets/advisor.md b/plugins/stackwich/skills/stackwich/assets/advisor.md index 65eb140..2b4f972 100644 --- a/plugins/stackwich/skills/stackwich/assets/advisor.md +++ b/plugins/stackwich/skills/stackwich/assets/advisor.md @@ -37,6 +37,9 @@ Verification: Expected: Requires user confirmation: +Demand check: ``` Flag as "requires user confirmation" anything touching prod/staging config, schema @@ -53,7 +56,9 @@ Check in this order, because a scope failure makes the later checks moot: 1. **Intent match** — does it do what the plan said, with no scope creep or unrequested refactors. 2. **Conventions** — CLAUDE.md, lint config, patterns in neighboring files. -3. **Blast radius** — what else calls this, what breaks if it's wrong, is it reversible. +3. **Blast radius** — what else calls this, what breaks if it's wrong, is it reversible, and + whether making something cheaper or automatic will raise load, spend, or review volume + elsewhere. 4. **Correctness** — does the change actually work as claimed. ## Output contract diff --git a/plugins/stackwich/skills/stackwich/assets/rebound.md b/plugins/stackwich/skills/stackwich/assets/rebound.md new file mode 100644 index 0000000..3765b25 --- /dev/null +++ b/plugins/stackwich/skills/stackwich/assets/rebound.md @@ -0,0 +1,52 @@ +# Rebound check + +Read this when the user asks about agent cost, token budgets, loops that run too long, how many +parallel agents to run, or whether more automation will actually save effort. It is reference +material for that conversation, not policy: nothing here is written into CLAUDE.md. + +## The pattern +Making a unit of work cheaper tends to increase how many units get used. When demand is elastic +enough, total consumption rises even though each unit costs less — Jevons' observation about +coal in 1865, later formalized as the Khazzoom–Brookes postulate. The literature's consistent +remedy is to pair each efficiency with something that caps volume. Stackwich's policy does this +with run ceilings on loops, a stated shard count, and delegations sized to what can be reviewed. + +## Four rebound types, in agent terms +| Type | Economics meaning | Agent example | +|---|---|---| +| Direct | More use of the thing that got cheaper | A cheap executor tier leads to more delegations; a loop that costs nothing to start gets started for everything | +| Indirect | Savings spent on other resource-using things | Time saved by fast generation goes into refactors nobody asked for; faster diffs land on a reviewer who did not get faster | +| Economy-wide | Efficiency raises output, which raises aggregate demand | A user-level install makes agent work frictionless on every project, so total spend rises while per-task spend falls | +| Backfire | Rebound over 100%: absolute use goes up | Parallel fan-out — Anthropic measured multi-agent systems at roughly 15x the tokens of chat — and continuous heavy Claude Code use that led to weekly rate limits | + +## Four questions +Ask these of any change that makes something cheaper, faster, or automatic — a cache, loop, +cron, parallelism, a cheaper model, code generation, autoscaling: +1. **What gets cheaper?** Name the unit: a run, a delegation, a token, a request, a diff. +2. **Who uses more of it?** The agent itself, the user, downstream callers, the reviewer. +3. **What's the cap?** A run ceiling, a shard count, a batch size, a rate limit, a budget someone + actually enforces. With no cap, the efficiency is open-ended. +4. **What metric shows it?** Something observable: run count, delegation count, review queue + length, token or cost figures where the environment exposes them. Never report a figure you + did not see. + +## For teams: capacity against demand +When AI raises throughput, check whether three things rose with it: +- **Intake.** Did the backlog grow because more now looks cheap to attempt? +- **Review and QA.** Generation got cheaper; verification did not. If review is the constraint, + more generation only lengthens the queue. In METR's 2025 trial, experienced developers were + 19% slower with AI tools while believing they were faster. +- **Spend.** Token, compute, or cloud spend in total, not per task. + +If any of them rose faster than delivered value, the efficiency is being spent as volume. + +## Sources +- W. S. Jevons, *The Coal Question* (1865). Overview: https://en.wikipedia.org/wiki/Jevons_paradox +- H. Saunders, "The Khazzoom-Brookes Postulate and Neoclassical Growth," *The Energy Journal* 13(4), 1992. +- L. Greening, D. Greene, C. Difiglio, "Energy efficiency and consumption — the rebound effect — a survey," *Energy Policy* 28, 2000. +- S. Sorrell, "Jevons' Paradox revisited: The evidence for backfire from improved energy efficiency," *Energy Policy* 37(4), 2009. https://ideas.repec.org/a/eee/enepol/v37y2009i4p1456-1469.html +- UKERC, *The Rebound Effect* (Sorrell, 2007). https://ukerc.ac.uk/project/the-rebound-effect-report/ +- K. Gillingham, M. Kotchen, D. Rapson, G. Wagner, "The rebound effect is overplayed," *Nature* 493, 2013. +- Anthropic, "How we built our multi-agent research system" (June 2025). https://www.anthropic.com/engineering/multi-agent-research-system +- TechCrunch, "Anthropic unveils new rate limits to curb Claude Code power users" (28 Jul 2025). https://techcrunch.com/2025/07/28/anthropic-unveils-new-rate-limits-to-curb-claude-code-power-users/ +- METR, early-2025 experienced open-source developer study (July 2025). https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/ — the Feb 2026 follow-up was inconclusive: https://metr.org/blog/2026-02-24-uplift-update/