Skip to content

Transactional filesystem simulation

Make the change.
Before you make it real.

Run workspace automation in a virtual snapshot. Review the proposed changes. Commit when you're ready. One fast Rust engine, at home in Rust and Python.

Your first previewChanges stay virtual
from vsh import ReceiptDetail, Runtime

runtime = Runtime.open("./project")
receipt = runtime.preview(
    "vsh_write('/workspace/hello.txt', 'Hello, VSH!')",
    detail=ReceiptDetail.FULL,
)

print(receipt.changes)  # Inspect before committing
use vsh::{ReceiptDetail, RunRequest, Runtime, RuntimeConfig};

fn main() -> Result<(), vsh::VshError> {
    let config = RuntimeConfig::new("./project");
    let runtime = Runtime::open(config)?;
    let code = "vsh_write('/workspace/hello.txt', 'Hello, VSH!')";
    let request = RunRequest::new(code)
        .with_detail(ReceiptDetail::Full);
    let receipt = runtime.preview(request)?;
    println!("{:?}", receipt.changes);
    Ok(())
}

These vsh_* functions are included in VSH. Start with the self-contained installation tutorial for worker setup and a complete preview → review → commit example.

Find your way in.

Same engine. Your workflow.

Every change, accounted for.

From an idea to a verified result.

  1. 01 / Simulate

    A real virtual workspace

    Monty functions and pathlib share one copy-on-write snapshot. Reads see earlier writes.

  2. 02 / Inspect

    Evidence you can review

    Inspect changed paths and bounded content. Policy and approval bind to the exact transaction.

  3. 03 / Commit

    Revalidated, then applied

    VSH checks for drift, applies the approved changes, and verifies the result with recovery support.

Read the security model

VSH is for bounded workspace transformations. Monty has no host mount, subprocess, network capability, or ambient environment. See the guarantees for the precise execution and commit contract.