Skip to content

About

Vinci Code CLI — a terminal coding agent you can run with your own provider key (OpenAI, Anthropic, OpenRouter, and more). A distribution of Pi. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

7 stars

Watchers

0 watching

Forks

Latest commit

 

History

5,241 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vinci Code CLI

The canonical public source and release lineage for Vinci Code, a terminal coding agent distributed from the MIT-licensed Pi harness.

Sign in with your Vinci account to start. Bring-your-own-provider use is available through /other and does not require a Vinci account. Managed inference is a separate service dependency. The private vinci-code repository contains operations and historical reference, not a second product publisher.

Start here

Installation · Quick start · Privacy · Security reports · Contributing · Releases

Preserve Pi provenance, the MIT grants and third-party notices. Code licensing does not grant the Vinci/SimpleDirect trademarks or separately governed artwork rights.

Product and developer reference

Vinci logomark

A terminal coding agent with Vinci account sign-in and optional bring-your-own-provider keys through /other.
Same guard rails either way.

Node License Upstream BYOK

Vinci Code is a distribution of Pi — a thin fork of the Pi agent harness (MIT) by Mario Zechner, maintained under SimpleDirect® by Alpine Pacific Trading Inc. Pi's engine and packages are kept intact; Vinci adds an additive layer on top. Provenance, including the exact upstream commit this forked from, is in UPSTREAM.md.

A real coding turn on a user's own Anthropic key with no Vinci account: Vinci finds the ascending sort in sizes.py, changes it to sort descending, runs the script to prove the fix, and closes by saying the project has no test suite so nothing repeatable confirms it

That is one unedited turn on a user's own key — the header reads Anthropic: Claude Haiku 4.5 and /login to connect, because no Vinci account is involved. It ends the way every turn here ends: with what was actually verified, what was not, and what it cost.

How it fits together

flowchart LR
    You["your terminal"] --> Guard

    subgraph Local["on your machine — identical in both modes"]
        direction LR
        Guard[guard] --> Mask[secret redaction] --> Agent[agent loop]
        Agent -.-> Receipts[("receipts<br/>checkpoints<br/>review")]
    end

    Agent -->|BYOK| Provider["your provider<br/>Anthropic · OpenAI · Google · Groq"]
    Agent -->|Managed| Gateway["Vinci gateway"] --> Managed["a model Vinci selects"]

    style Provider fill:#0A84FF,color:#fff
    style Gateway fill:#6C3483,color:#fff
Loading

In BYOK your inference key and prompts go straight to your provider. Opening /model can fetch Vinci's public model details without credentials or conversation content; see PRIVACY.md. Everything in the grey box runs locally in either mode.

Two ways to run it

Direct / BYOK Managed
Vinci account not required required
Provider you choose Vinci selects
Your API key stored locally; sent only to your provider, never to Vinci you have none
Vinci sees your prompts no yes, in transit
Guard · receipts · checkpoints · review ✅ ✅

What the Vinci layer adds

Capability Status What it does
Command guard Shipped Classifies destructive operations and confirms before running them
Secret redaction Shipped Masks credentials before the terminal, diffs, previews, and /feedback + /issue egress
Honest terminal states Shipped A run blocked awaiting permission says so, instead of reporting a read-only success
Checkpoints Shipped Durable recovery points you can roll back to
Review / accept Shipped A workflow for inspecting and accepting agent output
Sandbox Shipped Bounded execution for agent-run commands
BYOK Shipped Any Pi-supported provider, with every guard above still active

The first row is the one worth seeing rather than taking on trust. Asked to delete a directory with rm -rf, it names the classification, prints the exact command it would run, and waits — with no selected. The directory in this capture still had all four files in it afterwards.

Vinci Code pausing on a destructive command: it classifies the command as a recursive force delete, prints the exact command, asks whether to run it, and has "No, don't" selected

Layout, the branch model, and the patch inventory: vinci/README.md.

Project structure

vinci-code-cli/
├── packages/           # upstream Pi — kept intact
│   ├── ai/             # unified multi-provider LLM API
│   ├── agent/          # agent runtime: tool calling and state
│   ├── coding-agent/   # the coding agent CLI
│   ├── tui/            # terminal UI with differential rendering
│   └── orchestrator/   # multi-agent orchestration
├── vinci/              # the Vinci layer — almost everything Vinci is here
│   ├── extensions/     # guard, receipts, checkpoints, review, crew, …
│   ├── updater/        # signed update client and pinned public key
│   ├── themes/         # vinci-dark, vinci-light
│   ├── assets/         # logomark, lockup, demo captures
│   ├── docs/           # architecture, persistence, verification, environment
│   ├── test/           # integration harness for the Vinci layer
│   └── release-notes/  # mirrored to the public releases repository
├── scripts/            # repo tooling: checks, release, shrinkwrap
└── .github/workflows/  # CI, tests, benchmarks, signed release

Everything under packages/ is upstream Pi. Everything Vinci adds lives in vinci/, plus a small number of vinci-* files inside packages/. That seam is what keeps upstream syncs cheap, and it is the first thing to know before contributing.

Extension-by-extension detail, the patch inventory and the branch model → vinci/README.md

System requirements

Requirement Minimum
Node 22.19+
OS macOS or Linux
Sandbox sandbox-exec (built into macOS) · bubblewrap (Linux)
Provider key Any Pi-supported provider, for BYOK mode

Installation

# From source — the path this repository supports (Node 22.19+)
git clone https://github.com/getsimpledirect/vinci-code-cli
cd vinci-code-cli
npm ci --ignore-scripts && bash vinci/build.sh
./vinci/bin/vinci
# Or the signed release (installs the built binary and self-updates)
curl -fsSL https://vinci.getsimpledirect.com/install | sh

There is no vinci npm package. The npm packages in this repo are upstream Pi's (@earendil-works/*, binary pi) — installing those gives you Pi, not Vinci Code.

Quick start

Install it, run it, and sign in with your Vinci account:

./vinci/bin/vinci

/login      # sign in to Vinci in your browser
/model      # choose Vinci Auto, Vinci Mezzo, or Vinci Forte

By default, /login opens Vinci browser sign-in directly, and the model surfaces offer Vinci models. Auto remains the initial model and uses your plan's default. The picker shows live underlying model details for Mezzo and Forte when available, or a note when details are unavailable offline.

To bring your own provider key, run /other and confirm enabling other providers, then use /login to choose an authentication method and provider. This opt-in persists globally. You can also set showOtherProviders: true in settings or VINCI_SHOW_OTHER_PROVIDERS=1. Vinci entries stay first, followed by a separate group of other providers in /model. Run /other again to hide them; the environment switch overrides the setting in either direction.

After enabling other providers, /login offers a subscription or an API key

--list-models works before sign-in. Its auth column marks local credential presence as configured or unconfigured, without validating credentials or contacting providers. Use --list-models <search> to filter it. Other providers appear after opt-in; the interactive picker lists models with configured authentication.

With other providers enabled, --list-models shows other providers alongside Vinci's classes, which sort first

BYOK needs no Vinci account. Credentials are stored by Pi in ~/.pi/agent/auth.json. Vinci Code adds no second credential store, and your provider key is sent only to the provider you picked, never to Vinci. The coding demo above uses this optional mode.

CLI reference

These are the commands /help lists in a session:

/login       Connect to Vinci
/other       Add or hide other providers
/logout      Disconnect from Vinci
/model       Choose which Vinci model to use
/new         Start a fresh conversation
/resume      Pick up an earlier conversation
/undo        Undo the last changes Vinci made to your files
/usage       See this task's model calls, tokens, and cost
/security    Show Vinci's active confidentiality and sandbox controls
/support     Get help and support
/feedback    Send private feedback without uploading your transcript
/issue       Report a bug or request a feature on the public tracker
/hotkeys     Keyboard shortcuts

The Vinci layer adds more on top of these — /review, /checkpoint, /plan, /todo, /crew and others come from the extensions in vinci/extensions/.

Environment variables

Variable Effect
VINCI_SHOW_OTHER_PROVIDERS Other providers are off by default. 1 enables them, 0 hides them; either overrides the saved /other preference.
VINCI_PROVIDER vinci (default) or openrouter
VINCI_MODEL With VINCI_PROVIDER=vinci: auto (default), mezzo, forte, or fortissimo (alias of Forte). auto resolves server-side to your account's class. With openrouter: a full vendor/model id.
VINCI_NO_SANDBOX=1 Disable the sandbox. A development escape hatch — it removes a real safety boundary.
VINCI_ISSUE_REPO_URL Override where /issue files reports

Full extension list and behaviour → vinci/README.md

Documentation

Document What it covers
vinci/README.md The Vinci layer in detail — extensions, layout, branch model
vinci/PRIVACY.md Exactly what leaves your machine, in each mode
SECURITY.md Reporting a vulnerability; known limits
UPSTREAM.md Fork provenance and how to sync with Pi
CONTRIBUTING.md How to contribute
SUPPORT.md Where to take a bug, a question, or a billing issue
CODE_OF_CONDUCT.md Expected conduct, and how to report a concern

Releases

This public repository's reviewed main is the canonical product source and its protected vinci-v* release workflow is the sole product publisher. The workflow builds and tests an unsigned archive, carries those exact bytes into the protected publish job, then signs and stages the immutable artifact before activating the signed manifest. It binds the tested archive to the selected source commit and version; the installer verifies the signature and archive hash. Private operations and signing-key custody remain private and do not make the private product repository a second publisher.

What you want Where it is
What version am I running vinci --version — nothing is pinned in these docs, so it cannot go stale
What changed the releases page, and vinci/release-notes/
The build itself the installer above, which verifies a signed manifest and its sha256
Bug reports and questions SUPPORT.md

Product changes land through the public review lineage. The retained private repository's legacy mirror/rebase workflow is a separate maintenance model; it is unsupported on public product main until adapted. See vinci/UPSTREAM.md.

Project status

Actively maintained by a small team. Security fixes go to the latest release only — there is no LTS branch. APIs and settings may change before 1.0. Issues and pull requests are welcome.

Security reports: SECURITY.md. Report the format of a missed credential, never a live key.

Contributing

Read CONTRIBUTING.md before opening a PR. Most of packages/ is upstream Pi, so the first question is whether a change belongs here or upstream — sending an engine fix only to us means Pi's users never get it, and we carry the patch forever. AGENTS.md carries the engineering rules for this codebase and applies to humans as well as agents.

License

The source code is MIT — see LICENSE.

  • Upstream Pi is © 2025 Mario Zechner, MIT. That notice is preserved verbatim.
  • Vinci's modifications are © 2026 Alpine Pacific Trading Inc., under the same MIT grant.
  • Third-party notices: THIRD_PARTY_NOTICES.md.
  • "Vinci" and "SimpleDirect" are trademarks of Alpine Pacific Trading Inc.; the code grant conveys no trademark rights. See TRADEMARKS.md — if you fork and ship this, rename it.

Original brand artwork retains its recorded provenance; the code license and this README do not grant additional artwork or trademark rights. See vinci/BRAND.md and vinci/NOTICE.

About

Vinci Code CLI — a terminal coding agent you can run with your own provider key (OpenAI, Anthropic, OpenRouter, and more). A distribution of Pi. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages