Liking cljdoc? Tell your friends :D

vis logo

Vis

Vis is a coding agent that writes Python into a sandboxed GraalPy runtime, keeps durable state outside the context window, and inspects/changes the host project through tools.

Install

One command installs vis-agent — the only Vis command there is. (We deliberately do not install vis: Linux already ships an unrelated vis utility.)

curl -fsSL https://raw.githubusercontent.com/Blockether/vis/main/bin/install-vis-agent | bash
vis-agent help

That installs the vis-agent command into ~/.local/bin (adding it to your PATH when needed). vis-agent then downloads its own private vis-agent-native runtime beside itself — the native image is never a separate command you install. From then on vis-agent owns both:

vis-agent runtime show      # what is installed and selected
vis-agent update            # update the command and its runtime together
vis-agent update --native   # (re)download just the native runtime

Native runtimes are published for Linux x64 and arm64.

Variants

GoalCommand
Install for all userscurl -fsSL …/bin/install-vis-agent -o /tmp/install-vis-agent
sudo bash /tmp/install-vis-agent --install-dir /usr/local/bin
Pin a releasecurl -fsSL …/bin/install-vis-agent \| bash -s -- --version vX.Y.Z
Run on the JVM source runtime (needs Java 25+, the Clojure CLI, and git)curl -fsSL …/bin/install-vis-agent \| bash -s -- --runtime jvm

Corporate proxies often block raw.githubusercontent.com. Clone from github.com and run bin/install-vis-agent out of the checkout: it then installs that checkout's wrapper without touching the raw host.

Hosts to allowlist

HostNeeded for
github.comgit clone and release bytes
api.github.comrelease resolution for install/update
release-assets.githubusercontent.comrelease bundle bytes
repo1.maven.org, repo.clojars.orgJVM/source dependency resolution
raw.githubusercontent.comone-line installers only
your model provider's APIrunning the agent

Companion app (iPhone / Android)

Vis Companion is the phone client for a Vis gateway you run yourself — it drives the same sessions as the TUI (see Gateway & pairing). Both stores are in public testing; no invite, no tester list, just the link.

PlatformPublic test linkStatus
iOS / iPadOShttps://testflight.apple.com/join/4anYT4WkTestFlight public link, open to anyone with the URL (requires the free TestFlight app)
Androidhttps://play.google.com/apps/testing/com.blockether.viscompanionPlay open testing (beta track), package com.blockether.viscompanion

The app is useless on its own: it needs a gateway. Start one with vis-agent gateway, then pair by scanning the QR it prints. Feedback goes to karol@blockether.com (or the TestFlight feedback button).

Choose the runtime

vis-agent follows the releases by default: the published native runtime, or JVM source pinned to the newest vX.Y.Z tag. A live checkout is dev mode — opt in; it is never picked for you, not even from inside a Vis checkout.

RuntimeRuns
nativethe private sidecar downloaded by vis-agent update
jvmsource pinned to the newest vX.Y.Z tag
deva live checkout (~/vis, or $VIS_DEV_CHECKOUT), tracking its branch
autono choice at all: native if installed, else tagged source
vis-agent runtime show
vis-agent runtime use native|jvm|dev|auto   # persisted default
vis-agent --native|--jvm|--dev help         # one launch only
VIS_RUNTIME=dev vis-agent help              # one process only

A one-launch flag beats VIS_RUNTIME, which beats the persisted default in ~/.vis/runtime. vis-agent update updates whichever runtime is in effect — the newest release bundle, or the checkout Vis owns moved onto the newest tag. Only update --dev follows a moving branch, and any target that is not a vX.Y.Z release pins the owned source to that git ref. A selected runtime that is not installed is an error with the command that fixes it, never a silent substitution. There is no jar runtime: target/vis.jar is a build artifact. Full flag, update, state, and environment matrix: Runtime distributions.

Build / develop

clojure -T:build native          # builds the private native runtime
clojure -M:format check
clojure -M:lint src extensions test build.clj
clojure -M:test

Can you improve this documentation? These fine people already did:
Karol Wojcik, blockether-deployer & Karol Wójcik
Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close