Maya Workflow Kit
The whole Maya workflow in Blender, in one install. Free and open source, Blender 4.5 – 5.2.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Claude Code plugin: run fenced headless claude -p workers from your interactive session. One git worktree per lane, sandboxed role fences, quota-aware launches, usage-limit auto-resume, and a verify, review, readiness and land pipeline that never runs worker code on your host.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Turn one Claude Code session into a controlled engineering team.
Give arbab a large engineering task. Your interactive Claude Code session splits it into independent lanes and runs each one as a headless Claude Code worker, in parallel, in its own git worktree behind a sandbox. arbab then verifies the result inside the fence, has it adversarially reviewed, and prepares a merge that the skill lands only on your yes.
Parallel lanes · isolated worktrees · sandboxed workers · human-controlled merges
The run that wrote this README, at 1.5× speed.
┌─> worker ─┐
you ──> your Claude Code session + arbab ─┼─> worker ─┼─> verify ─> review ─> you approve ─> merge
└─> worker ─┘
arbab: master, the one who gives the orders. You give the order. arbab runs the team. Claude writes the code.
arbab does not replace Claude Code: it gives your session a controlled way to delegate real engineering work. Every
worker is the unmodified claude binary, running under your own login.
One long session plans, implements, waits on tools and tests, and fills its own context until every step slows down. Subagents inside that session share its limits.
arbab splits the roles four ways:
| Workflow agents in one session | Headless arbab workers | |
|---|---|---|
| Lanes finished | 0 of 7 | 7 of 7 |
| Time | stopped after 73 min | 1.9–6.4 min each |
This was not a controlled benchmark:
REQUIREMENTS.md §1 has every measurement and confound.
The point is not a speed-up number, but that independent work stops competing for one session's context and turn loop.
a task
│
▼
your Claude Code session
(plan and briefs)
│
┌────────────────────┼────────────────────┐
▼ ▼ ▼
[ lane A ] [ lane B ] [ lane C ]
worktree + sandbox worktree + sandbox worktree + sandbox
│ │ │
└────────────────────┼────────────────────┘
▼
integration
│
▼
verification (inside the fence)
│
▼
adversarial review
│
▼
readiness report
│
▼
your approval
│
▼
merge (never pushed)
You need:
Install the plugin:
claude plugin marketplace add ozgursagiroglu/arbab
claude plugin install arbab@arbab
The install copies only plugin/: the skill, its hooks and a single-file runner (the arbab ui page included),
with zero runtime dependencies. The plugin's hooks approve the skill's bare runner calls, all but land, so they do
not wait for your click, keep the session from ending its turn while its lanes run unwatched, and tell a returning
session what other sessions landed meanwhile. To update, refresh
the marketplace with claude plugin marketplace update arbab, then run claude plugin update arbab@arbab.
Then:
Configure the project. Add an arbab.config.json at its root:
{
"baseBranch": "main",
"instructions": ["CLAUDE.md"],
"dependencies": { "strategy": "command", "command": ["pnpm", "install", "--frozen-lockfile"] },
"commands": {
"implementer": ["pnpm test", "pnpm typecheck", "pnpm build"],
"reviewer": ["pnpm test", "pnpm typecheck"]
},
"gates": [["pnpm", "typecheck"], ["pnpm", "test"], ["pnpm", "build"]],
"maxParallel": 4
}
instructions are inlined into every brief. Workers do not load CLAUDE.md on their own.commands are the only project commands each role may run.gates are what verify runs; verify.smoke runs after them.hostGates are checks the fence cannot run (Docker, a browser, a database). You run them with
arbab host-check <name> in your terminal.fence.readableEnvFiles lists tracked env templates (.env.example) that workers' shell commands may read (the
Read tool still may not; every other .env* file stays denied); fence.bashOutputMaxChars (default 100000):
longer Bash output is saved where workers cannot read it.landing.tier (low, medium or high, default medium) and landing.squash (one commit per landing).worktrees.idleDays (default 3, 0 turns it off): after a launch, arbab removes what arbab cleanup --worktrees --older-than <idleDays> removes: the clean worktrees of finished lanes merged into the base or landed (at any
age), of finished lanes and unlanded integrations unused for that many days, and of landed integrations. Branches
and records stay, except generated lanes' and landed integrations' branches once merged. Its log is
.arbab/sweep.log, moved to sweep.log.1 once over 1 MiB.preflight.steps, dependencies, env, passEnv, credentialPaths, resources, semaphores,
quota.holdAbove, review.lenses, roles, minClaudeVersion, worktreeRoot, runsRoot.A repository that should carry no arbab file can keep the config at .arbab/config.json instead; arbab excludes
.arbab/ from git as a whole. () caps parallel workers for every
project on the machine. The skill's "Before the first launch" section explains the fields that matter first.
is this repository's own.
Some steps are always yours:
package.json),
nothing is installed. You review the change, install it yourself, and confirm with
arbab integrate <name> --deps-installed <sha> in your own terminal. The CLI refuses that confirmation without a
terminal, so an agent cannot give it for you.arbab readiness <name> --waive <id> and arbab host-check <name> need a terminal
too.land is the orchestrator's command, but the skill asks you first, and the plugin's hook never
approves it. It never pushes.This is how arbab built part of itself: the ui2 milestone, the game-studio pass of arbab ui, from the first check
to the landing. The outputs are real, trimmed, and their paths shortened. The commands are what the orchestrator ran,
shown as arbab <command>; the skill's own form of each is node "${CLAUDE_PLUGIN_ROOT}/dist/arbab.mjs" <command>.
1. Ask for it. In Claude Code, type /arbab, then "Plan this and run it with arbab." The session writes a plan and
one brief per lane.
2. Check the plan. arbab plan check plans/ui2.json lints every phase and prints the waves.
ui2-font: ok
ui2-scene: ok
ui2-art: ok
ui2-hud: ok
ui2-wire: ok
wave 0: ui2-font, ui2-scene
wave 1: ui2-art, ui2-hud
wave 2: ui2-wire
plan ui2: ok
3. Launch the first wave. arbab plan next plans/ui2.json launches every phase whose dependencies have all
succeeded. The orchestrator runs it again after each finish, so the next wave starts as soon as it can.
launched ui2-font run ~/arbab/.arbab/runs/ui2-font shepherd 20399
launched ui2-scene run ~/arbab/.arbab/runs/ui2-scene shepherd 20436
blocked ui2-art waiting for ui2-font
blocked ui2-hud waiting for ui2-font
blocked ui2-wire waiting for ui2-font, ui2-scene, ui2-art, ui2-hud
4. Wait for a finish. The orchestrator runs arbab wait --any in the background. It prints a line when a lane
finishes.
ui2-art#1 success 45m37s turns=115 calls=248 failed=12 cost=$15.46 report=~/arbab/.arbab/runs/ui2-art/attempt-1/report.json
5. Look at every lane. arbab status, given the milestone's lanes, prints one row per lane, then the quota. This
capture predates the why column that status now prints last (see
Know what your workers are doing).
lane state attempt elapsed turns calls last tool effort failed cost quota
ui2-font finished (success) 1 7m40s 18 28 Bash high 1 $1.27 5h 34% · 7d 62%
ui2-scene finished (success) 1 11m02s 31 51 Bash high 2 $2.58 5h 35% · 7d 62%
ui2-art finished (success) 1 45m37s 115 248 Bash high 12 $15.46 5h 65% · 7d 67%
ui2-hud finished (success) 1 24m02s 64 107 Bash high 3 $7.38 5h 50% · 7d 65%
ui2-wire finished (success) 1 24m59s 124 262 Bash high 11 $10.30 5h 82% · 7d 70%
…
ui2-verify finished (success) 2 1m34s 4 3 Bash low 0 $0.00 5h 92% · 7d 72%
quota: 5h 93% (resets 11:20Z) · 7d 73% (resets Oct 21 10:00Z)
6. Integrate. arbab integrate ui2 --plan plans/ui2.json merges the lane branches into integrate/ui2, wave by
wave.
merged ui2-font 5b75f913e3e6ee406f3b63080b596d360d3906a3
merged ui2-scene 849e12a888014de8d7aed8a33518589dc5cf38d7
merged ui2-art a75312440e7a7a5269ac1f427a3a5b60189a7570
merged ui2-hud c1394dfed9827a88b802365187699ab5c1e2ab98
merged ui2-wire 973e88ef59097e2f018c2336611443e4312d85c2
head 2016972fe34166fb7addfb9aa44078218ca9f310 (integrate/ui2 in ~/arbab/.arbab/worktrees/integrate-ui2)
7. Verify. Five more lanes were integrated after these five (polish, build, pay, fix and a second build), so
verify ran on the final head. arbab verify ui2 runs the gates inside the fence, in a lane that has no file-editing
tools.
launched ui2-verify; waiting
exit 0 gate pnpm typecheck
exit 0 gate pnpm test
exit 0 gate pnpm build
verify ui2: passed at 2eee5ebfb9021b5214ad39f0be0e18bc9bb6e96d (lane ui2-verify success)
8. Review. This is arbab review ui on the first arbab ui integration. One reviewer lane runs per lens, then
skeptics check the findings.
launched ui-review-correctness, ui-review-security, ui-review-contracts; waiting
launched ui-skeptic-correctness, ui-skeptic-security, ui-skeptic-contracts; waiting
correctness review ui-review-correctness success 22 paths
security review ui-review-security success 32 paths
contracts review ui-review-contracts success 20 paths
correctness skeptic ui-skeptic-correctness success
security skeptic ui-skeptic-security success
contracts skeptic ui-skeptic-contracts success
confirmed (6)
correctness-1 MEDIUM test/assemble-plugin.test.ts:125 Committed plugin/ was not rebuilt: the marketplace bundle has no `arbab ui` …
correctness-2 LOW src/ui/server/snapshot.ts:139 reportStatus and findings come from an older attempt when the latest attempt …
security-1 LOW skills/arbab/SKILL.md:178 The skill's background `arbab ui` call writes the session token to disk, …
contracts-1 MEDIUM plugin/skills/arbab/SKILL.md:178 Committed plugin/ was not rebuilt: the marketplace install …
contracts-2 LOW src/ui/client/scene/scene.ts:57 Preflight probes keep the probed lane's role, so the scene draws them …
contracts-3 LOW src/ui/server/snapshot.ts:139 reportStatus and findings come from an older attempt when the newest …
…
Every confirmed finding was fixed by a fix lane before landing.
9. Readiness. arbab readiness ui2 writes readiness.md. Its head:
# Readiness report — ui2
Tier: medium · Head: `2eee5ebfb9021b5214ad39f0be0e18bc9bb6e96d` · Date: 2026-10-19
## Verified
| Check | Result |
| --- | --- |
| `verify:pnpm typecheck` | gate: exit 0 |
| `verify:pnpm test` | gate: exit 0 |
| `verify:pnpm build` | gate: exit 0 |
| `review:correctness` | lens ran, 27 paths checked |
| `review:security` | lens ran, 27 paths checked |
| `findings` | 0 confirmed, 0 refuted, 3 unverified |
10. Land. The human said yes, and the orchestrator ran arbab land ui2. It merges into main and removes the
worktrees. It never pushes.
landed ui2: 2eee5ebfb9021b5214ad39f0be0e18bc9bb6e96d into main as be2be12beb53e8f59cfca733ac579a6e1e42124a
Not pushed. To publish: git push origin main
removed worktree ~/arbab/.arbab/worktrees/ui2-font
…
What the fence refuses is in Safe by construction; how to watch the lanes as they run is in Know what your workers are doing.
Workers can write code. They cannot touch your working tree, your git history or your remote.
Every worker gets:
worktrees.idleDays days, by itself, keeping lane branches, and rebuilds a removed one from
its branch when a resume, an integration or a host check needs it. Of the unused ones it keeps any that could not be
rebuilt (its branch changed dependency manifests); it keeps one an integration command is working in.~/.npm/_logs; keep nothing you trust there while lanes run. There is no
network unless the lane is a researcher. A sandbox that cannot start is fatal, never a silent fallback.dontAsk permissions with its role's exact tools. A tool left out of the role does not exist for the worker.node or pnpm. An allowed
command can still run code the worker wrote (pnpm test runs its tests), so the sandbox is what contains that code.
A lane can opt into the sandbox-auto fence, which drops the allowlist and leaves the sandbox as the only wall..git. Git writes are denied, and the runner commits.~/.ssh, ~/.aws and **/.env* cannot be read or edited. A lane's inputs, files from outside the
repository, are copied into its worktree afresh on every run, never through a link the worker left there. The same
credential list plus your credentialPaths, matched in any case, keeps arbab itself from copying a credential file
in as an input, inlining one into a prompt (a brief, a schema, instructions, a review lens) or committing one as a
landing message. Every kind of credentialPaths entry guards inputs, lens files and --message; the brief, schema
and instructions files are guarded by the relative, // and **/ entries only, since ~/ entries match nothing
there. For files inside the project, inputs included, name rules such as .env* and relative entries such as
look only below the project root, so a project kept under a folder like still works.On your machine:
verify runs the gates in a sandboxed lane without file-editing tools, and the tree must
be clean after the run.integrate --adopt installs at the fork point of the adopted branch and its base, so it refuses a --base your
base branch does not contain.core.fsmonitor, no submodule recursion. Checkpoints never commit
nested repositories.status, not as a hidden
retry.land lands only the verified tree, and never pushes. It prints the push command and leaves it to you.The workers can work aggressively. Your repository stays under your control. The full threat model and the review history are in DESIGN.md. Found a hole? See SECURITY.md.
Don't ask one agent whether its own work is correct.
correctness, security, contracts, or your own from review.lenses in the
config.confirmed, refuted or unverified.session:<id> risk, and the skill tells that
session before it runs land. land prints a warning for it too, but in the same call as the merge: a last
record, which also names sessions that appeared since readiness. Neither blocks. Run outside Claude Code (no
session id, such as readiness --waive in a terminal), readiness and land count every session as another, the
orchestrator's own included.claude --resume, the plugin's hooks tell it, with its next message, what other
sessions landed while it was away (its own landings are left out), in its project or, started in a parent folder,
in each registered project inside it (one registered while it was away included), and in a project it worked in
before when it comes back there; a new session gets no history. arbab summary --since <when> (2h, 1d, a date YYYY-MM-DD as midnight UTC,
or an ISO date-time with Z or an offset) lists the landings on demand. When the base moved under an integration, readiness
says so as its first risk, base-moved, naming the landings it lacks, before land refuses it.land refuses while one is left, unless it is waived by its id; verify
cannot be waived. Only you can waive one: --waive needs a terminal.On arbab's own arbab ui, the first review round confirmed six findings. The two MEDIUM ones were the same problem,
found by two lenses independently. All six were fixed before landing. Milestone M3 went through 14 review rounds,
and its review lanes found two paths by which worker code could have run on the host.
arbab status prints one row per lane: its state, attempt, time, work, effort, failures, cost and the quota it saw.
This is part of the ui2 build of arbab's own page, captured before status gained its last column, why (below),
so the rows end at the quota:
lane state attempt elapsed turns calls last tool effort failed cost quota
ui2-font finished (success) 1 7m40s 18 28 Bash high 1 $1.27 5h 34% · 7d 62%
ui2-art finished (success) 1 45m37s 115 248 Bash high 12 $15.46 5h 65% · 7d 67%
ui2-wire finished (success) 1 24m59s 124 262 Bash high 11 $10.30 5h 82% · 7d 70%
ui2-fix finished (success) 1 8m21s 45 88 Bash high 3 $2.94 5h 91% · 7d 72%
ui2-review-security finished (success) 2 2m33s 23 39 Grep high 1 $1.77 5h 92% · 7d 73%
ui2-verify finished (success) 2 1m34s 4 3 Bash low 0 $0.00 5h 92% · 7d 72%
quota: 5h 93% (resets 11:20Z) · 7d 73% (resets Oct 21 10:00Z)
summary.json splits them by
cause: the permission mode, a deny rule, the scope, the sandbox, a real error, and others.41.2k tok.no free slot for a held lane or usage limit for one waiting
for the reset, cut to 40 characters. A finished lane keeps a reason only when its shepherd itself hit an error,
for example while loading the lane, preparing the worktree or copying inputs: why holds the error's message, and
the row reads finished (failed). A lane that finished with the end state of its last attempt (success, a failed
attempt, a budget or time limit) or by arbab stop has an empty why.--max-budget-usd. It is a client-side cost estimate and does not cap subscription quota.held state while the five-hour window is at or above its threshold (85% by default) or the
seven-day window is at or above its own (95% by default). A held lane checks again every minute and after each
reset. Parallel workers spend quota in proportion: N workers use it about N times as fast as one.arbab ui serves a live, read-only page of your lanes on 127.0.0.1: a pixel-art scene inside a dashboard.
Sound is off until you turn it on. Then a horn sounds for each brief and report, a drum for each stone, and coins clink as a finished worker takes its pay.
| Command | What it does |
|---|---|
doctor | Checks node, git, the claude binary, the sandbox, the config, the ignored roots, ~/.arbab, the plugin hook, the gates against the repository's scripts and CI, env templates, lint and test configs that would scan .arbab/, disk and the machine cap. |
lint <lane.json> | Lints the profile, brief and schema. Exit 1 on errors. |
launch <lane.json> | Lints the lane, then starts its shepherd. |
plan check <plan.json> | Validates a plan, lints every phase and prints the waves. Exit 1 on errors. |
plan next <plan.json> [--retry <phase>] | Launches every phase whose dependencies all succeeded and that never ran. --retry first relaunches a phase that failed or was orphaned. |
plan status <plan.json> | One row per phase: wave, state, end state, dependencies. |
status [lane…] [--active] [--mine] | One row per lane, then the quota. --active: lanes not finished; --mine: this session's runs and ownerless ones. |
summary [--all] [--since <when>] | One screen: lanes by state, plans, integrations by stage, what needs attention, quota, slots and worktrees (how many, how many unused, the last sweep). --all: every project that launched a lane on this machine. --since: what landed after <when> (<n>m, <n>h, <n>d ago, a date YYYY-MM-DD as midnight UTC, or an ISO date-time with Z or an offset) and which session landed it. |
report <lane> [--attempt <n>] | An attempt's metrics and the worker's report, the latest unless --attempt. |
wait [lane… | --any | --all] [--all-sessions] [--timeout-min N] [--notify] | Reports finished lanes not yet acknowledged. Without lanes it covers this session's runs and ownerless ones, every session's with --all-sessions. --notify sends a desktop notification. Exit 3 on timeout. |
resume <lane> [--prompt <file> | --digest] | Starts a new attempt in the latest session. --digest starts a fresh session seeded with the latest attempt's digest. |
Every command except help, version and host-check also takes --json, which prints JSON instead of text. A
leading -C <dir> finds the project from <dir> instead of the working directory. arbab refuses a lane worktree as
a project, from -C or the working directory, whether it lies under .arbab/worktrees or the configured
worktreeRoot (also when that is a link elsewhere in the project and the lane is reached by its real path), in any
spelling of case.
The skill runs these as node "${CLAUDE_PLUGIN_ROOT}/dist/arbab.mjs" <command>, bare. The plugin's PreToolUse hook
approves that form, with these limits:
land, which the skill asks you about first anyway, nor help and version.-C <dir> only when <dir> is the absolute path of a project that has launched a lane on this
machine, outside lane worktrees and temporary directories.cd, && or a pipe waits for your approval.From a clone, run node dist/arbab.mjs <command> after pnpm build.
claude -p), under your own
login. arbab decides how they run, fences them and checks their work.land never
pushes.arbab was built by its own method, as an interactive orchestrator with headless workers. Milestones M1–M3 took 146 worker attempts and 5,091 tool calls. Only 1.3% of those calls were refused by the fence; hand-made fences on other machines measured 5.8–15%. The notional API-equivalent cost was about $225, run on a subscription.
M3 alone went through 14 review rounds, 10 of them with all three lenses. Among what the review lanes found and the fix lanes closed were two paths by which worker code could have run on the host. Every run is in bench/RUNS.md, with notes in bench/README.md.
arbab ui was built the same way, in two plans: 46 worker attempts and 2,177 tool calls, at about $105
API-equivalent on a subscription. The second plan was the game-studio pass. In it, an orchestrator checked every page
in a real browser and sent the fixes back as lanes.
What is arbab?
A Claude Code plugin: a skill that teaches your session the orchestration method, plus a runner CLI that launches,
fences, supervises and measures headless claude -p workers.
How is it different from Claude Code subagents or the Task tool?
Subagents run inside your session and share its context, limits and lifetime. arbab workers are separate
claude -p processes, each in its own git worktree with its own fence, budget and clock. They survive usage limits:
a worker waits for the reset and resumes the same session. Their work is reviewed and landed through gates instead of
being merged as it comes.
How is it different from Workflows, agent teams, agent view and Projects? Claude Code's docs list five ways to work on several tasks at once: subagents, agent view, agent teams, dynamic workflows and Projects. As of Claude Code 2.1.295 and its docs in October 2026:
parallel()
waits for every agent before the script continues.--bg), which cannot be
combined with -p. They get no budget cap and no report schema, and Claude Code's usage-limit wait does not apply
to them.For a short fan-out inside your session, Workflows are the simpler tool. arbab is for long, risky or unattended work:
local headless claude -p workers that survive usage limits, gates and review on the result, and a landing that the
skill makes only on your yes.
How is it different from claude-squad, ccmanager, container-use and other worktree managers? They give each agent its own worktree or container and a UI, and you drive and review each agent yourself. With arbab your interactive session drives the workers: it writes the briefs, launches the lanes, reacts as each one finishes, and takes the results through verify, review and readiness before you decide.
How is it different from orchestrators that review before merging? Some, such as claude-orchestrator, have another model review each batch of worktree agents before merging. In arbab, every worker also runs behind Claude Code's sandbox, and the skill lands nothing until you say yes.
Does it work with a Claude subscription or the API?
Both. It runs the unmodified claude binary under your own login, on your machine. It never reads, stores or
proxies your credentials, and there is no hosted mode. What your plan allows is set by Anthropic; check the
legal and compliance page before you run large fleets.
Costs in the reports are Claude Code's API-equivalent estimates.
Is it safe to let workers run unattended? Workers are fenced by Claude Code's sandbox and an exact permission profile. arbab never runs their code on the host outside that fence, except a dependency install you confirmed, and the skill lands nothing without your approval. See Safe by construction.
Does arbab push to my remote?
Never. land merges locally and prints the push command.
What happens when I hit a usage limit?
New launches are held while the quota is above your threshold. A running worker that hits the limit waits for the
reset, plus a little jitter, and resumes the same session. After switching accounts, run arbab quota --refresh: one
small call reads the new account's windows.
Parallel workers use quota in proportion: N workers use it about N times as fast as one. Each attempt's budget is
passed as --max-budget-usd, which is Claude Code's client-side cost estimate; it does not cap subscription quota.
Which platforms are supported?
macOS is tested; the fence uses Claude Code's sandbox. Linux is untested. One known limit: loopback services do not
work under the Linux sandbox, because allowLocalBinding has no effect there.
| Document | What it holds |
|---|---|
| skills/arbab/SKILL.md | The method the orchestrator follows: briefs, lanes, plans, quota, review, landing |
| DESIGN.md | The source of truth for behaviour: process model, fence, brief contract, CLI, landing, security rules |
| REQUIREMENTS.md | Why: the measured problem, requirements, decisions, milestones |
| research/ | What Claude Code does natively, run metrics, retrospectives, prior art |
| bench/ | The run ledger of arbab's own build |
Issues and pull requests are welcome.
pnpm install
pnpm typecheck
pnpm test
pnpm build # bundles dist/arbab.mjs and assembles plugin/; commit plugin/ with your change
The project rules (zero runtime dependencies, tests for every export, no shell strings) are in CLAUDE.md.
MIT © Özgür Sağıroğlu
~/.arbab/machine.json{"maxParallel": 6}Run the skill. Open Claude Code in the project and type /arbab. Ask it to check the setup first; it runs
arbab doctor (node, git, the claude binary, the sandbox, the config, the ignored roots).
Hand it the work: "Plan this and run it with arbab." The orchestrator splits the work into lanes, writes their briefs, lints and launches them, and reacts as each one finishes.
Watch. The skill starts arbab ui, which opens the lanes in your browser as workers building a pyramid.
arbab status shows the same as a table.
Land. The orchestrator integrates, verifies, reviews and writes readiness.md, then asks you. You say yes; it
lands. When the landing affects another session's lanes or runner, readiness names that session and the
orchestrator tells it before landing; land warns about it again as it merges, a last record.
vault/*.md~/.envs/stop <lane> | Stops the lane's shepherd and worker. |
preflight <lane.json> [--timeout-min N] | Probes the lane's fence and model. Exit 1 on any failed check. |
quota [--reset | --refresh] | Shows the account snapshot and the hold decision. After you switch accounts, --refresh reads the new account's windows with one haiku call; --reset only deletes the snapshot. |
cleanup [--worktrees [--older-than <days>]] [--mine] | Reaps orphans, releases stale pool entries and removes empty lock directories and session watermarks unused for 30 days. --worktrees also removes finished lanes' clean worktrees merged into the base or landed (lane branches stay) and landed integrations' worktrees and branches; --older-than <days> adds the clean worktrees of finished lanes and of integrations that have not landed, unused for longer, and keeps their branches: what the automatic sweep does with worktrees.idleDays. That idle rule keeps a lane whose branch changed dependency manifests (it could not be rebuilt); one merged into the base or landed goes as before. A generated verify or review lane its command has not collected yet goes only by --older-than while its worktree exists and its integration has not landed. --mine: only this session's runs. |
integrate <name> --lanes a,b | --plan <plan.json> | Merges lane branches into integrate/<name>, in order or by plan waves. Like --adopt, --refresh and host-check, it holds the integration worktree's writer lock while it works there, so no sweep removes it; it waits up to 2 minutes for another holder, then refuses naming its pid. |
integrate <name> --adopt <ref> [--base <branch>] | Makes an integration of an existing branch, so work done outside lanes gets verify and review. The base (--base, or config baseBranch) must be a branch, since land merges into it, and contained in your base branch: the install runs at the fork point. |
integrate <name> --refresh | Records the integration's head again after a hand commit or a merge of the base in its worktree. Merges nothing. A missing worktree is rebuilt from the branch first, its install on a trusted commit, so run it before the base merge land prints when the worktree is gone. |
integrate <name> --deps-installed <sha> | Records that you reviewed and installed changed dependencies at that head. Terminal only. |
verify <name> [--timeout-min N] | Runs the gates and smoke inside the fence on the integration head. Exit 1 unless all pass, 3 on timeout. A verify worktree left with changes is kept for inspection; the next verify resets it. |
verify --ref <branch> | The same on a branch head with no integration: the check after landing. |
review <name> [--lenses a,b] [--lens-file <lens>=<file>]… [--since <sha>] [--timeout-min N] | One reviewer lane per lens, then skeptics for MEDIUM+ findings. --lens-file adds or replaces a lens for one run, from a file inside the project that is no credential file by the fence's list and credentialPaths (.env*, *.pem, *.key…, in any case); --since diffs from an ancestor of the head instead of the base, for a fix round. |
readiness <name> [--tier low|medium|high] [--waive id,…] | Writes the readiness report: verified, skipped, risks. Exit 1 unless ready. --waive needs a terminal. |
host-check <name> | Runs config hostGates on the integration head, on the host. Terminal only. |
land <name> [--squash] [--message <file>] [--keep-worktrees] | Merges a ready integration into the base, or as one commit with --squash (config landing.squash). The --message file must be inside the project and no credential file, checked as for --lens-file. Never pushes. Then removes its worktrees unless --keep-worktrees. |
ui [--port N] [--hours N] [--no-open] | Serves the live pyramid scene on 127.0.0.1, read-only, until stopped. |
help [<command>], --help | Prints the command list, or one command's options (as does arbab <command> --help). |
version, --version | Prints the arbab version. |