for engineers

Agents that live next to your code.

Drop a .vinos/routines.yaml in any repo. Your team runs the same PR reviewer, the same commit-message writer, the same standup summarizer — locally, versioned in git, auditable in PR.

Three things you get when you commit the spec.

Portable, sandboxed, cost-capped. All three enforced by the runtime, not by convention. Read them yourself in libexec/vinos-routine.

Portable agents in a single yaml.

.vinos/routines.yaml in the repo root. vinos-routine load . installs the set under ~/.vinos/routines/<project>/. Scoped per repo.

vinos-routine load . · git-native

80/20 router keeps API bills predictable.

route = "auto": local Ollama first, escalate to Claude only when the task exceeds what a local can handle. Ledger logs every choice.

vinos-router explain <task> · SQLite ledger

Sandbox by default.

Every tool call goes through bwrap with an explicit filesystem + network allowlist declared in the routine. Nothing implicit.

tools.allow = [ ... ] · bwrap-enforced

The proof — the actual repo spec.

This is the file that lives at .vinos/routines.yaml in your repo. Committed. Reviewed. Loaded on every engineer's machine with one command.

.vinos/routines.yaml yaml
apiVersion: vinos.computer/v1
kind: RoutineSet

metadata:
  project: startup-inc
  owner: engineering@startup.example

defaults:
  agent:
    route: auto            # 80% local · 20% escalate
    model: llama3.1:8b
    escalate_to: claude-sonnet-4-6
    memory: session
  budget:
    max_tokens_per_run: 8000
    max_dollars_per_day: 0.50
    on_exceed: skip

routines:
  - name: pr-review
    description: Triage new PRs across the org · flag what needs a human.
    schedule:
      oncalendar: "*-*-* 09,13,17:00:00"
      timezone: America/New_York
      jitter: 3m
    agent:
      tools:
        - "shell:gh pr list --state=open --json number,title,repository"
        - "read:{{git_root}}/CODEOWNERS"

  - name: commit-message
    description: Suggest a Conventional-Commits subject line from staged diff.
    schedule: on_demand      # `vinos-routine run commit-message`
    agent:
      route: ollama          # local only · never leaves the box
      tools:
        - "shell:git diff --cached"

Full spec: /spec/ · loader source: libexec/vinos-routine

Questions engineers actually ask.

Vendor lock-in?
None. vinOS is Arch under the hood. The routine spec is versioned YAML — you can read it, port it, or export routines to plain systemd unit files with vinos-routine export --systemd. The whole distribution uninstalls with pacman -Rns vinos-*. MIT-licensed. Your .vinos/routines.yaml keeps working if you leave.
How does the auto-router decide local vs. frontier?
Three heuristics, in order: context length (if the prompt exceeds the local model's window, escalate), tool count (multi-tool orchestration escalates), and prior-run classification (if the same routine has escalated on similar inputs before, escalate immediately). Full decision tree in the router spec — deterministic, no LLM in the routing loop.
Can I write my own tools?
Yes. A tool is either shell:<command> or read:<path>. Both go through bwrap with a scoped filesystem view. Custom long-running tools can be wrapped as shell:vinos-tool my-tool — anything on PATH works.
Does it work with our monorepo?
Yes. Each .vinos/routines.yaml is scoped by its directory — the loader keys routines by repo path, so you can have per-service routine sets under services/foo/.vinos/ that only apply when {{git_root}} resolves inside that subtree.
CI integration?
Planned for v2.1 (see the roadmap) — ghcr.io/vinpatel/vinos-cloud Docker image runs the same routine set as a GitHub Action or GitLab CI job. Today you can wire a routine to a webhook via vinos-routine run <name> --json and pipe the result into any CI's step outputs.
Language / stack requirements?
Nothing beyond what your repo already needs. The routine runtime is Python + bash + SQLite; tools you invoke run in your project's environment. If your monorepo has a devcontainer, routines see the same shell.

Commit the spec. Your team inherits the agents.

Flash a USB. Boot. Drop .vinos/routines.yaml in your repo. Push.

Uninstall: pacman -Rns vinos-*. No lock-in. MIT-licensed.