Steed is a deterministic research-infrastructure runtime with a plugin-first policy gate for controlled execution.
Steed is split into two layers:
- Control plane:
packages/opencode-steed-gate(OpenCode plugin) - Data plane:
steed+infra_scripts/workflow.sh(runtime executor)
The plugin decides whether an action is allowed. The runtime executes and writes artifacts.
- Install the plugin and global helper commands:
bash scripts/install-opencode-steed-gate.shThis installs a self-contained Steed bundle into ~/.config/opencode/steed-gate/ with plugin wiring, /steed command wiring, bundled runtime/scripts, MCP entries (websearch, context7, grep_app), and bundled skills (playwright, git-master, steed-master).
-
Restart OpenCode so the plugin loader and bundled plugin copy are picked up.
-
Initialize Steed in your project:
/steed init
- Configure workflow values (no env required):
/steed cfg set REPO_URL https://github.com/org/repo.git
/steed cfg set OPS_REMOTE_REPO /workspace/repo
/steed cfg set OPS_LOCAL_REPO ~/work/repo
Or apply everything at once from a cfg file:
/steed cfg apply steed.setup.cfg
Optional profile switch:
/steed profile retrieval-sparse-fusion
- Check readiness:
/steed status
/steed self --json
/steed self --check-remote --json
This validates missing required workflow keys and shows next steps.
- Generate sweep CSV if needed:
./steed sweep-csv-template- Choose execution mode:
/steed mode manual
or
/steed mode auto
- Run Steed commands:
For user-facing interactive use:
/steed checkout
/steed flow --sweep start --fetch all --teardown delete
For subagents or other slash-less execution contexts, prefer the backend equivalent:
python3 scripts/steed-project.py checkout
python3 scripts/steed-project.py flow --sweep start --fetch all --teardown deleteOptional hardened mode (signed permit per mutating step):
/steed permit-mode on
/steed permit steed checkout
Equivalent env toggle if needed:
export STEED_GATE_REQUIRE_PERMIT=1/steed writes project-local gate config at .opencode/steed-gate/config.json.
/steed cfg apply accepts KEY=VALUE lines and applies both gate keys (mode/permit/profile/etc.) and workflow keys.
For workflow-changing actions inside OpenCode, prefer /steed ... or python3 scripts/steed-project.py ...; raw ./steed ... stays best for direct runtime validation/list/status commands.
Reference workflow cfg file remains infra_scripts/workflow/<profile>.cfg:
- set
REPO_URL - set
OPS_REMOTE_REPO - set
OPS_LOCAL_REPO - configure target/pod values (
LIUM_*or fallback host)
Default permit path is .opencode/steed-gate/permit.json; /steed permit ... uses the installer-managed global secret file.
./steed --help
./steed pod list
./steed volume list
./steed flow --sweep start --fetch all --teardown delete
./steed sweep-status
./steed sweep-watch
./steed fetch-run <run_id>
./steed fetch-allIf TRAIN_COMMAND_TEMPLATE is set, Steed executes it with bash -lc and exposes:
RUN_ID,CONFIG,SEED,TRAIN_OUT_DIR,NPROC_PER_NODEDATA_DIR,HF_HOME,OVERRIDESWANDB_LOG,WANDB_PROJECT,WANDB_GROUP_VALUE,WANDB_RUN_NAMEOPS_REMOTE_REPO,VENV_PYTHON
- Flow-level canonical artifact:
artifacts/pod_logs/_flows/<flow_id>/flow.state.json
- Flow checklist:
infra_scripts/workflow.checklist.md(reset on flow end by default)
- Per-run artifacts:
status.json,summary.json,stdout.log
- Plugin policy artifacts:
${XDG_CONFIG_HOME:-~/.config}/opencode/steed-gate/audit/events.jsonl${XDG_CONFIG_HOME:-~/.config}/opencode/steed-gate/deny/*${XDG_CONFIG_HOME:-~/.config}/opencode/steed-gate/permits/permits.used.jsonl(hardened permit mode)
steed- CLI entrypointinfra_scripts/workflow.sh- orchestrator/runtimeinfra_scripts/workflow/- profile configspackages/opencode-steed-gate/- OpenCode policy pluginscripts/install-opencode-steed-gate.sh- global plugin installerscripts/create-steed-permit.py- signed permit generator (optional hardened mode)docs/infrastructure-automation.md- operational guidedocs/STEED.md- manifesto