Resources
Get started with Orvienm
Clone the public source, install the CLI, declare a structure, then validate, plan, apply and verify it.
Install
Orvienm is distributed as a Source-Access Alpha. There is no package index entry and no binary release yet, so pip install orvienm will not resolve — you install from the public source repository, orvienm-polaris. Python 3.10 or newer is required.
Install from source — Windows (PowerShell)
git clone https://github.com/kw13j1qs0/orvienm-polaris.git
cd orvienm-polaris
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install .Install from source — macOS and Linux
git clone https://github.com/kw13j1qs0/orvienm-polaris.git
cd orvienm-polaris
python3 -m venv .venv
source .venv/bin/activate
python -m pip install .To work on the CLI itself, install it in editable mode with python -m pip install -e . and run the test suite that ships with it using pytest.
Confirm the CLI is on your path and see what it exposes.
Check the installation
orvienm --version
orvienm --helpDeclare a structure
Create a working directory and put a specification in it. A specification names the structure and lists the directories it should contain. structure.name is the directory Orvienm will create, resolved relative to where you run the command — so the file below produces platform/core, platform/data platform/docs.
.orvienm.yaml
version: 1
structure:
name: platform
directories:
- core
- data
- docsEntries may contain forward slashes. A nested entry such as services/api creates the intermediate directory too, and plan, verify doctor all account for it.
Every key and rule the format accepts is listed in the Specification Reference.
Validate
Validation reads the specification and checks it. Nothing touches the filesystem. Every other command runs this first, so a failure here stops the lifecycle.
Validate the specification
orvienm validate .orvienm.yamlA valid file prints Validation successful and exits 0. A malformed one prints every problem it found and exits 1; Troubleshooting explains each message.
Plan
Plan compares the declared structure against what is on disk and prints the difference. It changes nothing.
orvienm plan .orvienm.yaml
Orvienm Plan
────────────────────
+ create platform/
+ create core/
+ create data/
+ create docs/
Plan Summary
────────────────────
Create: 4
Keep: 0
Undeclared: 0Once directories exist they appear as keep. A directory that exists but is not declared appears as undeclared. Apply neither creates nor removes it — plan names no operation the engine will not perform.
Apply
Apply creates the root and every declared directory inside it. Directories that already exist are left as they are, and directories Orvienm did not declare are left untouched.
Apply the structure
orvienm apply .orvienm.yamlOn the first successful apply Orvienm writes .orv.lock in the working directory, recording its fingerprint. Use --dry-run to print what would be created without creating it.
Verify and inspect
Verify checks that every declared directory exists and prints Status: VALID or Status: INVALID. It exits 0 when the structure is complete and 2 when it is not, so it can gate a pipeline directly.
Verify, then inspect state
orvienm verify .orvienm.yaml
orvienm status .orvienm.yaml
orvienm doctor .orvienm.yamlstatus adds the lock file and fingerprint to the picture and exits 2 if anything needs attention. doctor goes further and also reports directories present on disk but absent from the specification. On a workspace that matches its specification, all three are clean.
doctor reports by default and exits 0 whatever it finds. In a pipeline, use orvienm doctor .orvienm.yaml --strict, which exits 2 on any diagnosis other than HEALTHY. It detects exactly the same things either way — only the exit code changes.
What happens when the specification changes
Once .orv.lock exists, Orvienm compares the current specification against the fingerprint recorded in it. If they differ, that is drift, and apply refuses to run: it prints Drift detected and exits 3.
This is deliberate. The lock records the specification a workspace was built from, so a changed specification has to be acknowledged before it can be applied. Remove .orv.lock to accept the new specification, then apply again — apply creates whatever the change added, keeps everything already there, and records the new fingerprint.
Removing the lock is currently the only way to accept a change, and it accepts every edit in the file at once, not just the one you had in mind. Read the specification before you remove the lock.
Note that drift here means the specification changed, not that the filesystem did. A directory deleted by hand does not raise drift — verify doctor are what surface that.
Starting from a scaffold instead
orvienm new writes an example project you can edit rather than starting from a blank file.
Scaffold an example project
orvienm new my-project
orvienm validate my-project/.orvienm.yamlRun the lifecycle commands from the directory that contains my-project/, not from inside it: structure.name is resolved relative to the working directory, so applying from inside would create a second nested root.
orvienm init is the other way in, and it writes the specification where you are standing rather than inside a new directory. The name you give it is the root it declares.
Declare a structure in the current directory
mkdir work && cd work
orvienm init platform
orvienm plan
orvienm applyThat produces work/.orvienm.yaml and work/platform/. init only writes the specification — apply is what creates directories, here as everywhere — so the first plan shows the whole structure as pending and the second shows Create: 0.