Metadata-Version: 2.4
Name: novacode-cli
Version: 1.2.0
Summary: Agentic Coding Tool that runs in your terminal
Author-email: Babitdor <babitdorbryan14@gmail.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/Babitdor/NovaCode
Project-URL: Repository, https://github.com/Babitdor/NovaCode
Project-URL: Issues, https://github.com/Babitdor/NovaCode/issues
Project-URL: Changelog, https://github.com/Babitdor/NovaCode/blob/main/CHANGELOG.md
Keywords: nova,code-cli,nova-code,agentic-code-cli
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: <4.0,>=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests
Requires-Dist: certifi>=2026.10.19
Requires-Dist: brotli>=1.2.1
Requires-Dist: jinja2>=3.1.0
Requires-Dist: rich>=13.0.0
Requires-Dist: textual>=1.0.0
Requires-Dist: psutil>=5.9
Requires-Dist: pyte<0.9,>=0.8.2
Requires-Dist: pywinpty<3,>=2.0.15; sys_platform == "win32"
Requires-Dist: langchain>=1.2.13
Requires-Dist: langchain-core>=1.2.22
Requires-Dist: langchain-openai>=1.0.0
Requires-Dist: langchain-anthropic>=1.4.0
Requires-Dist: langchain-ollama>=1.0.1
Requires-Dist: langchain-google-genai>=4.2.1
Requires-Dist: google-auth>=2.40
Requires-Dist: google-auth-oauthlib>=1.2.2
Requires-Dist: langchain-nvidia-ai-endpoints>=1.4.1
Requires-Dist: langchain-mcp-adapters>=0.2.2
Requires-Dist: langgraph>=1.1.3
Requires-Dist: langgraph-checkpoint-sqlite>=2.0.0
Requires-Dist: langsmith>=0.7.22
Requires-Dist: tavily-python
Requires-Dist: deepagents<0.8,>=0.7.0
Requires-Dist: python-dotenv
Requires-Dist: daytona>=0.113.0
Requires-Dist: modal>=0.65.0
Requires-Dist: markdownify>=0.13.0
Requires-Dist: runloop-api-client>=0.69.0
Requires-Dist: mcp<2,>=1.28.1
Requires-Dist: docker>=7.0.0
Requires-Dist: keyring>=24.0.0
Requires-Dist: pillow>=13.0.0
Requires-Dist: aiosqlite>=0.19.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: tomli-w>=1.0.0
Requires-Dist: ddgs>=7.0.0
Requires-Dist: aiohttp>=3.9
Requires-Dist: httpx>=0.27
Requires-Dist: PyJWT[crypto]>=2.10
Requires-Dist: pydantic>=2.0
Requires-Dist: jsonschema>=4.18
Requires-Dist: referencing>=0.28.4
Requires-Dist: regex>=2024.11.6
Requires-Dist: pymupdf>=1.24
Requires-Dist: bm25s>=0.2
Requires-Dist: graphifyy>=0.4.0
Requires-Dist: semble>=0.1.8
Requires-Dist: discord.py>=2.3.0
Requires-Dist: python-telegram-bot>=21.0.0
Requires-Dist: langchain-quickjs==0.3.2
Requires-Dist: dill>=0.3.8
Requires-Dist: langchain-typesafe>=0.0.1a3
Provides-Extra: browser
Requires-Dist: browser-use>=0.1.0; extra == "browser"
Requires-Dist: playwright>=1.40.0; extra == "browser"
Provides-Extra: voice
Requires-Dist: faster-whisper>=1.0.0; extra == "voice"
Requires-Dist: silero-vad>=5.1; extra == "voice"
Requires-Dist: piper-tts>=1.2.0; extra == "voice"
Requires-Dist: sounddevice>=0.4.6; extra == "voice"
Provides-Extra: voice-orpheus
Requires-Dist: orpheus-cpp==0.0.3; extra == "voice-orpheus"
Requires-Dist: llama-cpp-python>=0.3.0; extra == "voice-orpheus"
Provides-Extra: voice-parakeet
Requires-Dist: sherpa-onnx<2,>=1.10.0; extra == "voice-parakeet"
Provides-Extra: voice-pocket
Requires-Dist: pocket-tts>=0.1.0; extra == "voice-pocket"
Provides-Extra: bedrock
Requires-Dist: langchain-aws>=1.0.0; extra == "bedrock"
Provides-Extra: server
Requires-Dist: fastapi>=0.115.0; extra == "server"
Requires-Dist: uvicorn>=0.34.0; extra == "server"
Provides-Extra: agents-server
Requires-Dist: langgraph-cli[inmem]; extra == "agents-server"
Provides-Extra: voice-whistle
Requires-Dist: cactus-needle<4,>=3.2.1; extra == "voice-whistle"
Provides-Extra: voice-kokoro
Requires-Dist: kokoro-onnx==0.4.9; extra == "voice-kokoro"
Provides-Extra: voice-sano
Requires-Dist: sanotts==0.3.0; extra == "voice-sano"
Provides-Extra: computer
Requires-Dist: cua==0.9.0; extra == "computer"
Dynamic: license-file

![NovaCode banner](assets/Nova.png)

# NovaCode

An open-source terminal coding assistant that reads your project, plans changes,
edits files and runs checks. Choose cloud or local models and keep useful project
knowledge between sessions.

Built with Python, LangGraph, deepagents and Textual. [MIT licensed](LICENSE).

![NovaCode terminal in Classic style](assets/Preview-classic.png)

## Get started

Requires **Python 3.11+**, **Git** and **uv**, plus a supported model provider or
a running Ollama instance with a model installed.

```bash
git clone https://github.com/Babitdor/NovaCode.git
cd NovaCode
uv sync
uv run nova
```

First-run setup guides provider configuration and workspace approval. Hosted
models may charge for usage. To install a global `nova` command from this checkout,
run `uv tool install .`, then launch `nova` from your project directory.

## What Nova can do

- **Code and verify:** investigate projects, edit files, run commands and checks,
  and review changes with workspace and tool approvals.
- **Plan and delegate:** compare Council proposals, use specialist agents and
  coordinate project tabs with messages and Git worktrees.
- **Remember:** inspect and maintain a linked Markdown memory wiki, resume
  sessions and recover supported file snapshots.
- **Choose and extend:** select hosted or local models, configure an independent
  vision model, and add skills, plugins and MCP servers.
- **Compose tools in Code Mode:** toggle it below the composer to combine
  eligible native and MCP tools in bounded JavaScript workflows.
- **Speak and listen:** optional speech input and short spoken reply summaries,
  including lightweight CPU voice choices and model download progress.
- **Make it yours:** choose from 13 interface styles, including character art
  and optional animated home scenes.
- **Work beyond the terminal:** use remote chats, local web workspaces, temporary
  artifact previews and headless automation.

See [FEATURES.md](FEATURES.md) for the full catalog, setup requirements and
landing-page copy.

## Everyday use

| Command | Purpose |
| --- | --- |
| `/help` | Commands and keyboard shortcuts |
| `/onboard` | Interactive code map, guided tours, architecture guide, Q&A and change impact |
| `/model`, `/auth` | Models, vision and provider access |
| `/plan`, `/council <task>` | Investigate changes and compare plans |
| `/tabs`, `/resume` | Parallel projects and saved sessions |
| `/dream`, `/context` | Memory maintenance and context inspection |
| `/settings`, `/theme` | Voice, interface styles and preferences |
| `/mcp`, `/remote` | External tools and remote chat setup |
| `/restore` | Recoverable file snapshots |

Attach files with `@`; use **Shift+Enter** for a new line. For a one-shot task:

```bash
uv run nova -p "Summarize the changes in this repository"
```

**New to a project? Start with `/onboard`.** Inspired by
[Understand Anything](https://github.com/Egonex-AI/Understand-Anything), it parses
the local workspace with the already installed Graphify language parsers and
saves a persistent graph and guide in `.nova/onboard/`. The local artifact
dashboard provides file/symbol search, directory filters, a clickable dependency
map, a learning tour and incoming dependency impact tracing. It needs no Node
installation, browser credentials or external dashboard assets.

Use `/onboard open` to reopen the dashboard, `/onboard tour` for a conversational
tour, `/onboard ask <question>` for source-grounded Q&A, and
`/onboard impact <symbol or path>` before changing code. The dashboard's **Ask
Nova** tab prepares a command to paste into the conversation. Nova explains the
architecture and business flows using its normal model and tool permissions;
the initial deterministic guide contains structural facts only. Reopen the
dashboard after Nova enriches the guide. Model calls use your configured provider.

`/onboard refresh` rebuilds after changes. File-content fingerprints detect
new, edited and deleted inputs; saved analyses display a staleness notice.
Scans respect Git ignore rules and skip links, generated directories and common
secret filenames. Static parsing can miss dynamic dependencies; directory
groups are not semantic architecture layers. Limits: 5,000 source/Markdown
files, 1 MiB per file, 64 MiB total input and 32 MiB graph. The parsing deadline
scales with file count and input size from two to ten minutes; Escape cancels it.
Refresh replaces generated graph/guide files, so copy edited guides
elsewhere before rebuilding. This command currently requires a local workspace;
Plan Mode prevents building or refreshing the saved analysis.

## Optional features

Install selected extras from this checkout, for example:

```bash
uv sync --extra voice --extra voice-kokoro
```

Keep all desired `--extra` flags when syncing. Speech models download on first
use. See [setup and usage](SETUP.md) for global installation, voice providers,
browser automation and background-agent requirements.

**Local computer preview:** the `computer` extra lets Nova operate a
separate Linux QEMU VM with a private live browser preview and pause/resume/stop
controls. Requires QEMU, a guest-image download and 4 GiB RAM for the guest.
Start with `/computer start`; see [computer setup and limits](COMPUTER.md).
The Windows WHPX compatibility fix in this checkout has passed a real desktop boot.

## Documentation and contributing

[Setup and usage](SETUP.md) · [Feature catalog](FEATURES.md) ·
[Code Mode](docs/mcp-code-mode.md) · [Permissions](docs/security-guardrails.md) ·
[Sharing](docs/temporary-sharing.md) · [Changelog](changelog/)

For development, run `uv sync --group dev` and tests relevant to your change.
See [project instructions](AGENTS.md) for build and check commands. Report bugs
or propose changes through repository issues and pull requests.


### Compression preferences

The composer selector cycles **Off → Caveman → Ponytail → Off**. Options saves
mode, independent intensities and Caveman feature switches together; Escape discards
edits. Preferences persist across restarts. Existing Caveman settings migrate automatically.
Mode changes use temporary notifications and never submit your draft.

- `/caveman on|off|lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra`
- `/ponytail` activates Ponytail without resetting its selected intensity.
- `/ponytail lite|full|ultra|off|settings|status`
- `/ponytail-review [scope]`, `/ponytail-audit [scope]`, `/ponytail-debt [scope]`,
  `/ponytail-gain`, `/ponytail-help` run the corresponding one-shot helper without
  changing the selected mode. Review and audit request reports, not edits.
- A standalone `stop ponytail` or `normal mode` disables Ponytail. Those phrases
  inside an ordinary task do not change preferences.

Caveman compresses prose and optionally tool views. Ponytail applies the upstream
coding rules: solve the complete problem with the least new code, preserve necessary
checks, and name skipped work and risks. Ponytail leaves tool results intact and
also applies to delegated model requests. Neither mode changes tool permissions.
Savings depend on the task and model; shorter output is not guaranteed.

Ponytail's MIT-licensed skill bodies and JavaScript instruction builder are vendored
from [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail) at
`09c434ab73ca43761c5d8b0c5d341926c2fba710`. Nova's Python builder is checked
against golden hashes from that JavaScript builder. Nova owns the persistent selector;
upstream Claude-specific band, board, install hooks and default-mode files are not used.
There is no Node runtime requirement.

To validate every compression intensity against your configured LLM (20 paid/provider
calls, concurrency two, 60-second timeout each), run:

```sh
uv run python -m scripts.verify_compression_live
```

This opt-in check preserves exact failure facts/commands and validates generated
Python on boundary and invalid-bound cases. It writes synthetic outputs and reported
usage (or `unknown`) to `test-results/compression-live.json`, without changing your
preferences. Offline tests never call an LLM. Golden parity proves prompt equivalence;
it cannot guarantee identical stochastic model responses.
