Project structure

A lab is a Git directory with a marker. The agent never sees the laptop filesystem path.

Marker .eve-iac.yml

version: 1
mode: create          # create | import | load  (default create)
topology: topology.yml
eve:
  lab: /IaC/my-lab.unl
Mode Source Managed lab Mutation
create none eve.lab (clients write /IaC/<slug>.unl) full
import source.lab immutable working copy, default /IaC/<basename>.unl managed only
load existing lab that lab lifecycle + console + inspect; no deploy/reconcile/destroy

Never mutate source_lab. A client-supplied lab path does not establish ownership.

On the laptop, labs live under IaC/<name>/. IaC/ is a container, not a lab.

Payload sent to the agent

Packed fields typically include lab, yaml, files, manifest, state, source. dir and out are rejected. LOAD may send only manifest.

Python: pack_lab("./my-lab") builds that payload. The CLI uses the same helper.

Sidecars

File Commit? Role
.eve-iac-state.json no IaC key → EVE numeric id
.eve-iac-source.json no IMPORT only

Send them back on later mutating/console calls. They are not identity in YAML.

configs/

Startup-config files. configsets: in YAML is a library (default is id 1). Each node that has a file needs nodes.<key>.configset.