Running VibeSys
A repository-native VibeSys run operates on one candidate repository and one
named task. The repository root is the agent and evaluator working directory.
Human-authored task inputs live below .vibesys/tasks; generated state lives
below .vibesys/state.
project/
├── .git/
├── .vibesys/
│ ├── evaluators.lock # exact package pins, when packages are used
│ ├── tasks/
│ │ └── <task>/
│ │ ├── OBJECTIVE.md
│ │ ├── vibesys.input.toml
│ │ ├── accuracy_checker/ # optional task-owned program
│ │ ├── benchmark/ # optional task-owned program
│ │ └── reference/ # optional held-out inputs
│ └── state/
│ ├── project.json
│ ├── runs/<run-id>/ # committed run metadata and loop state
│ └── local/runs/<run-id>/ # logs and machine-local state
└── candidate source
VibeSys commits candidate evolution and portable .vibesys/state/runs/
metadata on a vibesys-runs/<run-id> branch. .vibesys/state/local/, agent.toml,
and root .env* files stay uncommitted and are hidden from coding agents. The
entire .vibesys/ directory is read-only to coding agents.
Start a Task
Launch from the candidate repository. Select the task explicitly when the repository defines more than one:
cd /path/to/project
vibesys validate --task latency
vibesys --task latency --max-rounds 4
--project selects the repository explicitly. --input remains a compatibility
alias during migration:
vibesys --project /path/to/project --task latency \
--config /path/to/project/agent.toml
The task name may be omitted when .vibesys/tasks contains exactly one task.
The repository must be its Git root, or outside any Git repository so VibeSys
can initialize one. An existing repository needs a baseline commit and a clean
worktree. Keep agent.toml and root .env* files out of Git history.
The agent, plain, and evolve outer loops all use this model. Local, Docker,
and Modal execution change where commands run, not the task layout. Task
commands always start in the repository root. .vibesys is mounted read-only
for coding agents; .vibesys/state/local is also hidden from them.
Modal tasks may set a project-relative deployment file. Omit this block to use
the legacy main.py default:
[environment.modal]
entrypoint = "examples/deployment/service.py"
Accuracy and benchmark commands may be task-owned argv arrays, or stable entry points supplied by an exact evaluator package:
version = 1
[agent]
domain = "generic"
[evaluator]
name = "vibesys-evaluator-queue"
version = "0.1.0"
[accuracy]
entrypoint = "vibesys-queue"
args = ["check", "--workspace", "${PROJECT_ROOT}", "--scenario", "spsc"]
[benchmark]
entrypoint = "vibesys-queue"
args = ["benchmark", "--workspace", "${PROJECT_ROOT}", "--scenario", "spsc"]
Commit .vibesys/evaluators.lock when a task uses a package. VibeSys verifies
its exact version and content digest before a run.
Legacy Input Bundles
Root-level OBJECTIVE.md plus vibesys.input.toml, [workspace],
evaluator.source, standalone --input-* flags, and --runs-dir copied
projects remain temporarily supported for examples that have not migrated.
New integrations should use repository-native tasks. A task in a standalone
repository runs in place. A repository-shaped example nested below another Git
root uses --runs-dir to materialize an isolated project.
For example:
vibesys \
--runs-dir /work/vibesys-runs \
--local \
--input /path/to/input
VibeSys provisions a self-contained project below the runs directory. Candidate
source is at the copied project's root, and a declared evaluator is copied
below _evaluator/. The source input's .git/, .vibesys/, agent.toml, and
.env* files are not copied. Omit --local to publish the copied project using
the authenticated GitHub CLI. See Legacy bundles
for the source, evaluator, and publication contracts.
Resume
Inside a project, resume the machine-local current run, then the newest run if no current pointer exists. A run ID selects a specific run:
cd /path/to/project
vibesys --resume
vibesys --resume <run-id>
With --runs-dir, the resume argument selects a legacy copied project in the
collection. It may be a directory name, a local path, a GitHub OWNER/NAME, or
a cloneable URL. VibeSys then resumes that project's current or newest run.
vibesys --runs-dir /work/vibesys-runs --resume <project-directory-name>
vibesys --runs-dir /work/vibesys-runs --resume /path/to/project
vibesys --runs-dir /work/vibesys-runs --resume my-org/my-experiment
vibesys --runs-dir /work/vibesys-runs --resume https://github.com/my-org/my-experiment.git
Omitted configuration flags and the selected task are restored from
.vibesys/state/runs/<run-id>/run.json. The total round or generation limit
may increase. Other recorded settings cannot change during a resume, including
the runtime environment: a run launched with --modal resumes on Modal without
repeating the flag.
Supply an Input with CLI Flags
Automation can supply the input contract without first writing an input
directory. This form requires --runs-dir. VibeSys synthesizes the objective
and manifest, then provisions the same canonical project layout.
vibesys \
--runs-dir /work/vibesys-runs \
--local \
--input-objective-file ./OBJECTIVE.md \
--input-domain generic \
--input-accuracy-command "python check.py" \
--input-benchmark-command "python benchmark.py" \
--input-benchmark-metric throughput \
--input-benchmark-result-arg=--output-json \
--input-evaluator-dir ./evaluation
Use this form for CI or programmatic integrations. Checked-in
OBJECTIVE.md and vibesys.input.toml files are easier to review for projects
maintained by people.
Presentation and Validation
vibesyslaunches the TUI when attached to a terminal.vibesys --headlessdisables the TUI.- Non-interactive execution runs headless automatically.
vibesys validate [PROJECT] --task NAMEchecks the static task contract without starting an agent or executing the checker and benchmark.
Legacy root input bundles remain valid positional arguments without --task.
See the CLI reference for every flag and
examples/ for complete objectives and manifests.