Automation·terminal·MIT
lane-stack
Claude Code as PM for Codex, Qwen and Grok, with Jev compaction and effort routing.

lane-stack is the Claude Code plugin of Claude Lane Stack, a coding factory for one person: Claude Code is the project manager, and Codex, Qwen, Grok, Kimi or AGY write the code. Its mod changes three things inside Claude Code: compaction keeps old messages word for word instead of summarizing them, each turn and subagent gets an effort level and model picked for its task, and large tool results are trimmed before Claude reads them.
What it does
The conveyor runs on files and git. You talk to the PM agent, dev-orchestrator, which splits a feature into task cards under .agents/runs/<slug>/tasks/, each listing the paths its writer owns and the checks it must pass. A card counts as done only when it leaves an acceptance.json receipt, and the PM then merges the work into main. Writers are background CLI processes, not Claude subagents, and you never start them yourself. At night an independent review runs, and two optional modules keep docs/ and a corpus of project facts current. The plugin also brings onboarding, resume, app-planning, design, copywriting and SEO agents and skills, listed in the English README.
The mod is hooks/lane-mods.ts, which loads three sets of hooks:
- Compaction. A vendored copy of fast-jev-compaction. On
/compactand on auto-compaction, TypeSafe’s Jev model decides which old tool calls and results can go, and everything else stays verbatim. After every turn the mod checks how full the context is and starts a compaction itself at 60%. If Jev cannot cut at least 25%, or anything fails, Claude Code’s own summary runs, and a toast says which of the two happened. - Routing. At the start of each turn, Jev rates your latest prompt and the mod sets that turn’s effort: low for mechanical work such as renames, typos or boilerplate, high for hard or risky work (architecture, security, a chance of data loss or an outage), and otherwise Jev’s estimate. When Claude spawns a subagent, other than a fork, Jev rates the subagent’s prompt the same way and the mod also sets its model: Haiku for mechanical work, Sonnet for the rest.
- Trimming. A vendored copy of winnow. When a Read, Bash or Grep result is 1,500 characters or longer, a local sidecar decides which blocks matter for your current task, and Claude gets the shortened version. A toast says how many blocks were hidden and the size before and after. On each prompt of 12 characters or more, the sidecar can also add the context files it thinks the prompt needs.
Install
Needs Claude Code 2.1.287 or later, plus a TypeSafe API key for compaction and routing, and uv and Python 3 for the plugin’s session-start hooks. The full conveyor also needs Git, Node, rsync, flock, PyYAML and jsonschema, and the writer CLIs you want to use.
claude plugin marketplace add VKirill/claude-lane-stack
claude plugin install lane-stack@claude-lane-stack
Put the key in the environment or in ~/.claude/settings.json:
{ "env": { "TYPESAFE_API_KEY": "<your key>" } }
The plugin brings the agents, the skills and the mod. The conveyor’s host side (the lane-pm, run-controller and agents-doctor commands, the task board and the writer profiles) comes from the repository’s install script, which also registers the marketplace with auto-update on:
git clone https://github.com/VKirill/claude-lane-stack.git
cd claude-lane-stack
./install.sh
export PATH="$HOME/.agents/bin:$PATH"
Run agents-doctor --apply . once in each project, then start the PM with lane-pm. Use /project-onboard the first time in a repository, /resume-project after a break and /lane-stack:info for the list of processes. The PM opens a run only after you tell it to go ahead. The files in ~/.agents do not update themselves, so rerun ./install.sh after pulling a new version. Do not copy the stack’s agents into ~/.claude/agents: copies override the plugin.
How it works
All three hook sets run inside Claude Code’s process and call out through its own HTTP method.
- To TypeSafe. Compaction sends the conversation the same way fast-jev-compaction does: your prompts, Claude’s replies and every tool call’s input, with each tool result replaced by a short note. The router sends one request per turn with your latest prompt, and one per subagent spawn with that subagent’s prompt, each with three questions: what kind of task it is, how much effort it needs, and how likely it is to cause data loss, a security issue or an outage. The key comes from
TYPESAFE_API_KEYin the environment, then from theenvblock of your Claude Code settings, and the requests are charged to it. Without a key, the router sends nothing. - To a sidecar on your machine. Each Read, Bash or Grep result of 1,500 characters or more goes to
http://127.0.0.1:47311with the tool’s input, such as the file path or shell command, the session id, the working directory, your last request and Claude’s last message. Each prompt of 12 characters or more goes there too, with the session id and working directory. The plugin’s session-start hook launches the sidecar withuv. How it decides what to hide, and what it keeps, is in the plugin’swinnow/sidecarfolder, not in the hook module. If it does not answer, results and prompts pass through unchanged. - What stays. The module keeps each turn’s and each subagent’s route in memory and writes every compaction decision to the log. It stores nothing else.
The plugin also registers classic command hooks: at session start a Python script runs and the sidecar starts, and on every prompt a skill-ranker shell script runs. They are outside the function-hook module.
Limitations
- Effort ceiling. The router only ever sets low, medium or high: the code maps xhigh and max to high, on every turn, even without a key. If you work above high, set
LANE_JEV_EFFORT=0(oroff) to switch routing off. - Model override. With a key, every subagent that is not a fork runs on Haiku or Sonnet, whatever model it was given. The same variable turns this off.
- Waiting. With a key, each turn and each subagent spawn waits up to 2.5 seconds for Jev. With no answer in time, the spawn keeps its model and the turn its effort.
- Default thresholds. The plugin declares no options, so compaction uses the defaults. Without a key it still starts at 60% context and falls back to Claude Code’s summary.
- Language and platforms. The stack is built for chat in Russian, with agent files in English. The README documents Linux and macOS and does not mention Windows. It also rules out Claude Code’s plan mode while you work with the stack.
- The author does not say which Claude Code version the mod was tested with. Mod events and methods can change between Claude Code versions.
More mods
The whole directory →agent-router
Pick the exact model for each subagent role, from any Anthropic-compatible endpoint.
Agent Time Machine
Every tool call on a branching timeline with snapshots: inspect, restore, branch, rerun.
autodev-core
Autonomous sprint loop: brainstorm, auto, iterate, audit, review, ship. Redacts secrets.
catalyst-probes
Model judges over subagent dispatches, defined in TOML. Plus your own prompt rules.
