Arbor Agent Orchestrator
Use this as the first skill for an Arbor-style research run. It is the phase
loader and policy owner; load the smaller skills only when their phase applies.
For normal user-facing use, prefer starting with arbor-research-agent; that
wrapper performs Arbor-style intake and then loads this orchestrator.
Source Model
This suite mirrors the open-source branch of arbor, not the older
single hypothesis-tree extraction. The product entry point is arbor; the run
architecture is:
- Intake/planning agent creates a research contract.
- Coordinator runs one persistent ReAct loop and owns the Idea Tree.
- Executors implement ideas in isolated git worktrees.
- Merge/eval tooling protects B_test and trunk.
- SearchAgent annotates validated nodes with related work.
- Plugins, HITL, budget policy, checkpoint/resume, dashboard, and report are first-class behavior, not optional notes.
Read references/source-map.md when auditing against the source tree or when
you need exact file origins.
Read references/compatibility.md when packaging the suite for another agent
runtime or checking Codex/Claude Code portability.
Phase Loading Order
Launch and contract: load
arbor-agent-setup-intake. Establish target cwd, metric, baseline status, budget, scope preference, dev/test discipline, config/plugin choice, and session directory.Coordinator loop: load
arbor-agent-coordinator. Run INIT, OBSERVE, IDEATE, SELECT, DISPATCH, DECIDE until the cycle cap, budget limit, or diminishing returns says to stop.IDEATE only: load
arbor-agent-ideate. This is a hard gate for novelty/scientific runs. It must followTreeView(format="constraints")and precede everyTreeAddNode. If a plugin disables strict skills for performance-first MLE/Kaggle, use the free-form path described byarbor-agent-plugins-hitl-budgetinstead.Executor dispatch: load
arbor-agent-executor. Use forRunExecutor/RunExecutorParallelbehavior, worktree lifecycle, executor prompts, longRunTrainingcommands, report parsing, artifact capture, and tree updates.Merge and scoring: load
arbor-agent-merge-eval. Use before baseline metadata changes, merge attempts, B_test verification, protected-path checks, and final test scoring.Related work: load
arbor-agent-search. Use after a node isdoneormergedand beat trunk, especially before merge decisions where novelty matters.Domain adaptation and human gates: load
arbor-agent-plugins-hitl-budgetwhen config mentions plugins, profiles,mle_kaggle, lifecycle hooks, convergence, budget policy, or interaction modesdirection,review, orcollaborative.Resume and finalization: load
arbor-agent-resume-reportwhen the run is interrupted/resumed, when dashboard/events/checkpoint artifacts matter, or when producingREPORT.md.No native Arbor tools: load
arbor-agent-tools. Use itsscripts/arbor_state.pyhelper to emulateTreeView,TreeAddNode,TreeSetMeta,TreeUpdateNode,TreePrune,TreePropagate, executor prompt generation, eval score capture, merge checks, and report generation in a plain Codex/Claude environment.
Non-Negotiable Invariants
- As coordinator, do not write benchmark code directly. Code changes happen through executor branches or clearly separated executor subagents.
- Maintain an Idea Tree as durable memory. Do not rely on transient chat reasoning for run state.
- Record
baseline_score,trunk_score,eval_cmd,eval_cmd_test,dataset_info,metric_direction, andtrunk_branchas metadata before dispatching real executors. - Use B_dev for iteration. Use B_test only for merge verification and final reporting when the contract permits B_test and the run is not smoke-only.
- Use eval command templates with
{cwd}and{node_id}. Do not hardcode the main repository path inside executor eval commands. - Keep main/master protected. Merge only into the configured trunk branch.
- If using
arbor_state.py, run tree-mutating commands serially. Do not parallelizeinit,meta,add,update,prune,propagate,eval,record,worktree, ormergeagainst the same run. - Preserve evidence: experiment reports, metrics, diffs, event logs, tree JSON, tree Markdown, run stats, and final report.
- If the real
arborCLI is installed and the user wants a real run, prefer invoking it. If the user wants a skill-based reconstruction or a smoke test, emulate the behavior with this suite andarbor-agent-tools.
Smoke And Forward-Test Mode
When the user asks for a smoke test, forward test, dry run, or validation of
the skill suite, propagate smoke-only through the contract, metadata,
executor prompt, raw reports, and final summary.
- Do not execute inherited real eval commands if they run training, data prep, downloads, GPU jobs, or minute-scale benchmarks.
- Replace expensive eval commands with
arbor_state.py parse-log, another cached-score parser, a harmless echo, or an explicitly labelled mocked score for plumbing validation. - Do not
cat, rawrg, rawgrep, ortaillong training logs. Some logs use carriage-return progress updates that make one physical line enormous. Usearbor_state.py parse-logor normalize withtr '\r' '\n'before matching; only inspect at most 20 log lines when debugging a failure. - Generate executor prompts with
arbor_state.py prompt-executor --smoke. Save the generated prompt asexperiments/<node_id>/executor_prompt.md. - Do not create real worktrees, edit source, or merge branches unless the user explicitly wants a real run.
- Still complete the durable Arbor artifacts: tree JSON/Markdown, experiment
report/metrics, executor prompt,
check, andREPORT.md.
Minimal Run Skeleton
Use this skeleton when no native arbor runtime is available:
- Load
arbor-agent-setup-intake; produce a contract and initialize.arbor/sessions/<run_name>/.coordinator/idea_tree.json. - Load
arbor-agent-coordinator; complete INIT and metadata. - For each cycle:
- OBSERVE code/results.
TreeView(format="constraints").- Load
arbor-agent-ideate; add 1-3 ideas. - SELECT pending leaves.
- Load
arbor-agent-executor; dispatch one or more executors. - Load
arbor-agent-searchfor validated winners when useful. - Load
arbor-agent-merge-eval; merge, prune, or continue.
- Load
arbor-agent-resume-report; run final B_test only if it is available, authorized, and the run is not smoke-only; writeREPORT.md; summarize artifact paths.
Common Failure Corrections
- If only one monolithic skill exists, split it by the phase list above.
- If ideation starts without constraints and the idea-drafting gate, restart
IDEATE from
TreeView(format="constraints"). - If an executor evaluates in the main repo rather than its worktree, discard
that score and rerun with
{cwd}substitution. - If B_test is used for routine idea selection, mark the run contaminated and reset the decision basis to B_dev.
- If reports contain deltas only, convert tree scores to absolute metric values.