Arbor agent setup intake
Setup, intake, preflight, and launch-contract phase for open-source Arbor runs. Use when confirming a target project, metric, baseline, dev/test split, config/plugin settings, branch guard, session directory, or when translating a user goal into the precise contract consumed by the coordinator.From its SKILL.md
npx -y skills add RUC-NLPIR/Arbor --skill arbor-agent-setup-intakeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
7.0 KB, as published. Nobody here has run it
Arbor Setup And Intake
Use this before the coordinator starts. The output is a concrete research contract plus a clean workspace/session ready for the Arbor cycle.
Fast Path
- Confirm the target project directory. Treat the launch cwd as the default unless evidence says it is wrong.
- Inspect README/config/eval files yourself. Do not ask the user to recite data you can read.
- Identify the primary metric, direction, and real evaluation command.
- Determine B_dev and B_test. If only one split exists, call it B_dev and record that no separate B_test is available.
- Run or locate a cheap baseline when feasible. If not feasible, state
baseline unknown - measure during INIT. - Propose one complete contract and ask for a single yes/edit confirmation.
- Initialize or select
.arbor/sessions/<run_name>/and hand the contract to the coordinator. - If real merges are allowed, define a non-protected
trunk_branchsuch asarbor/trunk/<run_name>. Treatmain/masteras the base branch, not the merge target.
For smoke/forward tests, never run expensive setup, data prep, training, GPU
jobs, or the discovered full eval command. Locate an existing score in cached
metadata/logs or use a clearly labelled mocked score, and include
smoke-only in the contract.
Research Contract
The instruction passed to the coordinator must contain all five components:
- Metric: exact score name, command that prints it, and maximize/minimize.
- Baseline anchor: current value if known, otherwise say it will be measured in INIT.
- Ambition: beat baseline, reach a target, or push as high as possible within the cycle budget.
- Scope preference: novelty-leaning, effect-leaning, or mixed. Infer it from the repo/task when possible.
- Hard constraints: at minimum, B_test is not for iteration, data/eval harness must not be modified to game the metric, and project-specific protected paths must be respected.
Do not prescribe a specific approach in the contract. The coordinator owns idea generation.
Scaffold When Not Eval-Ready
Some targets arrive as code only — no runnable eval, no dev/held-out split, or no clean git repo. Do not dead-end: scaffold the measurement plumbing (never the solution) so the coordinator has a metric to optimize.
- Prefer the keyless MCP tool
scaffold_benchmark.style="light"produces a runnable target (eval entrypoint printingscore:, a dev/test split, an editablesolution.py);style="zoo"additionally writes the README front-matter contract +PROVENANCE.mdand runs the structural verifier. Passgit_init=trueto initialize and commit a baseline. - Fallback when the MCP server is absent:
arbor benchmark scaffold <dir> [--style zoo] [--git-init]. - Only scaffold after the user confirms what counts as success. The tool is idempotent and non-destructive — report created vs skipped, never overwrite.
Persist The One-Screen Contract
Once the contract is confirmed, persist it at the target root so it outlives the chat (the durable upgrade over an ephemeral on-screen contract):
ARBOR_CONTRACT.md— one screen: target dir, metric (name / command / direction), baseline anchor, ambition, scope, dev/test discipline, edit surface, and budget (suggested max cycles).research_config.yaml— machine-readable, auto-detected byarbor:task(the contract paragraph),coordinator.max_cycles,coordinator.ui.interaction_mode: review(safest default; change on request). Followexamples/research_config.example.yaml.
These are written during setup, before handing the contract to the coordinator.
Preflight Checks
Mirror arbor run preflight:
- LLM credentials or provider config exist if using the real CLI.
cwdexists and is non-empty.gitexists. A git repo should be clean before a fresh run.- An eval entry point exists or can be discovered (
eval.sh,run_eval.py,evaluate.py, README instructions, Makefile targets, etc.). - If the repo is on a non-base branch, either switch to the base branch or explicitly allow starting from that branch.
For skill-only smoke tests, do not require external API credentials unless an LLM call will actually be made.
Session Layout
Use the open-source layout:
<project>/.arbor/sessions/<run_name>/
REPORT.md
COORDINATOR_FINAL_REPORT.txt
events.jsonl
run_stats.json
conversation.md
.coordinator/
idea_tree.json
idea_tree.md
checkpoint.json
messages.jsonl
baseline_cache.json
experiments/<node_id>/
report.md
metrics.json
diff.patch
submissions/
When no native Arbor runtime exists, initialize the same layout with:
TOOLS="<skill-dir>/arbor-agent-tools/scripts/arbor_state.py"
python "$TOOLS" init \
--cwd <project> --run-name <run_name> --task "<contract>"
Config And Plugins
Honor this precedence:
pydantic defaults < plugin.config_overrides < profile < project YAML < CLI
Recognize auto config names in the target project:
research_config.yamlarbor.yamlautoresearch.yaml
If plugin: mle_kaggle is selected, load
arbor-agent-plugins-hitl-budget before INIT because the plugin pre-fills
eval contract, protected paths, required outputs, time budget, and skill
behavior.
Baseline Metadata
The setup phase can discover metadata, but the coordinator must persist it:
baseline_scoretrunk_scoretest_baseline_scoretest_trunk_scoreeval_cmdeval_cmd_testeval_timeouteval_retriesdataset_infometric_directiontrunk_branchsubmission_pathsample_submission_path
Use command templates:
cd {cwd} && <eval command> --run-name {node_id}
Never bake the main checkout path into executor commands.
When using arbor_state.py meta, quote any --set value that contains
spaces, braces, shell metacharacters, or JSON:
python "$TOOLS" meta --cwd <project> --run-name <run_name> \
--set "eval_cmd=cd {cwd} && python eval.py --split dev" \
--set "trunk_branch=arbor/trunk/<run_name>"
In smoke mode, if a cached baseline log exists, parse only metric lines with
arbor_state.py parse-log or an equivalent parser that normalizes carriage
returns. Do not cat, raw rg, raw grep, or tail long training logs; if
debugging requires context, cap output to 20 lines.
Launch Commands
Native runtime examples:
arbor setup
arbor doctor
arbor run "<contract>" --yes --yes-cwd <project> --config <config> --max-cycles 3
arbor report <project>/.arbor/sessions/<run_name>
Skill-only smoke tests should use arbor-agent-tools and a copied project
directory unless the user explicitly wants to modify the live repo.