Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Wisp — A coding agent that stays in sync, illustrated by a glowing spectral companion linked to a terminal.

Wisp

A coding agent that stays in sync with you.
Redirect it while it works. Approve what it changes. Inspect everything it did.

Install · Quickstart · Staying in sync · Docs · PyPI · Changelog

PyPI version Python 3.12+ CI MIT License

Release candidate status: Wisp is approaching its first stable release. Interfaces may still change while the 0.1.0 candidate is validated.

What is Wisp?

Most coding agents ask you to choose between watching and working: you either sit and wait, or you walk away and audit a diff afterwards. Wisp is built for the middle — you can redirect it mid-run, you approve anything that touches your machine, and every action it takes is a typed event on an inspectable transcript.

Underneath is a single event-driven runtime. The CLI, the fullscreen TUI, the JSONL RPC process, and the in-process SDK all drive the same command host and agent loop rather than reimplementing it. They share session, tool, approval, and cancellation semantics, while each frontend exposes the controls its input model supports: RPC and SDK clients have live steering and queue APIs, the TUI accepts interactive follow-ups, and print/JSON modes run one prompt without a mid-run input channel.

Install

Wisp is published on PyPI as wisp-ai, installs a wisp command, and requires Python 3.12+. Linux and macOS are supported; Windows is best-effort until it has dedicated CI coverage.

uv tool install "wisp-ai==0.1.0rc6"   # request the prerelease explicitly
wisp --version

To run it without installing: uvx --from "wisp-ai==0.1.0rc6" wisp. If wisp is not on your PATH, run uv tool update-shell once and restart your shell.

See Installation for the update policy and troubleshooting.

Quickstart

Run Wisp from the project you want it to work on:

cd path/to/project
wisp

Wisp defaults to OpenAI Codex subscription access. Type /connect to open the provider panel, pick OpenAI → ChatGPT Plus/Pro, and complete the device-code flow. The same panel accepts masked API keys for OpenAI, xAI, DeepSeek, Anthropic, and Google. Then ask for something:

explain the architecture of this repository

For one-shot prompts and scripts, use print mode — or run entirely offline to try it without credentials:

wisp -p "summarize the current changes"
wisp -p "hello" --provider fake

Staying in sync

This is the part worth knowing before anything else.

Steer without starting over. RPC and SDK clients can queue a course correction for the active run. Wisp injects it at the next safe request boundary without discarding completed tool work or rewriting the transcript. A follow-up waits until the run would otherwise finish. The TUI queues text entered during a run as follow-up work; print and JSON invocations are intentionally one-shot.

Cancel cleanly. Cancellation is cooperative and leaves the session resumable rather than half-written. In-flight tool work is unwound, the JSONL record stays valid, and --continue picks up from the last committed state.

Approve what matters. Tools are classified read, mutating, or command. Reads run directly; writes, edits, and shell commands stop and ask. The decision lives outside the model's reach — no prompt can talk Wisp into skipping it — and print mode blocks unsafe execution entirely unless you pass --yes.

Nothing happens off-screen. Every action is a typed WispEvent in an enforced order, persisted to an append-only JSONL session you can read, resume, branch, or audit long after the run.

How it stays in sync

Interfaces

Mode Command Output Best for
TUI wisp (or wisp tui) Fullscreen Textual UI Interactive development
Print wisp -p "…" Assistant text on stdout, events on stderr One-shot prompts and scripts
JSON wisp -p "…" --mode json One WispEvent JSON object per line Machine-readable automation
RPC wisp --mode rpc Typed JSONL commands and events Long-lived integrations

RPC mode and the in-process SDK expose the same command, event, session, trust, and approval contracts the built-in interfaces use. See Interfaces and the Python SDK guide.

Architecture

One event-driven runtime, shared by every interface:

CLI / JSONL-RPC / SDK adapters → RPC command host → CodingSession → AgentHarness → run_agent_loop

Each layer adds exactly one concern. The provider/tool cycle knows nothing about sessions or frontends; the harness owns in-memory conversation state; the coding session adds persistence and safety policy; interfaces consume typed events. The TUI is an RPC client, not a second agent loop — which is why it cannot drift from the guarantees above.

Architecture

Documentation

Guide Installation, quickstart, providers, tools, sessions, skills, TUI
Staying in sync Steering, cancellation, approvals, transcripts
Python SDK In-process embedding, typed events, safety, sessions, and cleanup
Reference CLI, SDK, configuration, and environment variables
Architecture Runtime layers and ownership boundaries
Contributing Development setup and testing

Contributing

uv sync                                                              # install
uv run ruff format --check . && uv run ruff check . && uv run mypy   # quality gates
uv run pytest tests                                                  # complete suite

The suite runs entirely against deterministic fake and scripted providers, so the agent core, CLI, and JSONL sessions are exercised without API keys or network calls. Run the complete command before considering a change verified, and preserve the layer boundaries described above.

See Contributing for development setup and CI policy. Issues and pull requests are welcome at github.com/whanyu1212/Wisp/issues.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wisp_ai-0.1.0rc6.tar.gz (572.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wisp_ai-0.1.0rc6-py3-none-any.whl (659.4 kB view details)

Uploaded Python 3

File details

Details for the file wisp_ai-0.1.0rc6.tar.gz.

File metadata

  • Download URL: wisp_ai-0.1.0rc6.tar.gz
  • Upload date:
  • Size: 572.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for wisp_ai-0.1.0rc6.tar.gz
Algorithm Hash digest
SHA256 5942a69e10d87c89e80f7843fd507ae2ba55fddd403aa7d5198ae7a9ebf533bf
MD5 cdd6aa3761783c7c5c2d662c20c4c471
BLAKE2b-256 ef999ff16722d93a090a846b86366811cabac11cd49308c637bf5ca595c5a163

See more details on using hashes here.

File details

Details for the file wisp_ai-0.1.0rc6-py3-none-any.whl.

File metadata

  • Download URL: wisp_ai-0.1.0rc6-py3-none-any.whl
  • Upload date:
  • Size: 659.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for wisp_ai-0.1.0rc6-py3-none-any.whl
Algorithm Hash digest
SHA256 8f8a7611921cd9914cb337a112f3742f5cf436b8fa43f924ea9a0a7b9af0692e
MD5 de0f10842dcbf9054bd5fa7e2304f41f
BLAKE2b-256 0edac978f1a0de48aa534bb9a3dd8a9ac739b99e65f09a28b7ab9174c90d3104

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page