Skip to main content
Pre-release

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

noeta

An open-source Claude Code that runs on servers. The model sees what Claude Code shows it — the same tools, prompts' rules, reminders and request shape — and reads Claude Code's formats for settings, hooks, skills, agents, MCP servers and plugins. Under it, every task is an append-only event log with exactly one writer, so a task survives a crash without re-running a tool, waits days for a person while holding no worker, and runs on one laptop or many machines unchanged.

1.0.0rc1 is on PyPI as a pre-release (uv tool install --prerelease=allow noeta, or pip install --pre noeta): -p, the server and the SDK. The terminal UI (noeta-tui) is not on PyPI yet, so the install below takes both from the repository. (The 0.x releases were the separate noeta-runtime / noeta-sdk packages.)

Five-minute start

You need Python 3.11+ and uv.

uv tool install --with 'noeta-tui @ git+https://github.com/initxy/noeta#subdirectory=tui' \
  'noeta @ git+https://github.com/initxy/noeta'
# or from a checkout:  git clone https://github.com/initxy/noeta && cd noeta && uv tool install '.[tui]'

Pick a model and a provider. With an Anthropic API key:

export NOETA_MODEL=claude-sonnet-5-5 NOETA_API_KEY=sk-ant-...   # or ANTHROPIC_API_KEY

With an OpenAI-compatible endpoint (vLLM, a gateway, DeepSeek, …), name the provider and the base URL. For openai_compat the base URL ends in /v1 (noeta appends /chat/completions); for anthropic it is the host only (noeta appends /v1/messages); for openai_responses it is the whole …/v1/responses URL:

export NOETA_PROVIDER=openai_compat NOETA_BASE_URL=https://llm.example.com/v1
export NOETA_MODEL=deepseek-chat NOETA_API_KEY=...       # or OPENAI_API_KEY

The same settings are flags (--model, --provider, --base-url) or keys in ~/.noeta/config.toml (model, provider, base_url, api_key). Then:

noeta                                    # full-screen terminal UI in the current directory
noeta -p "what does this repository do?" # one prompt, print the answer (Claude Code's -p)
noeta -p --output-format stream-json --input-format stream-json --verbose
                                         # Claude Code's SDK protocol: point an Agent SDK at it

More providers, models files, side models and how a model id picks its provider: Models and providers and, for the design, Providers and model routing.

Tasks are kept in ~/.noeta/tasks.db; noeta -c continues the newest conversation in this directory, noeta -r lists them. A project's own .noeta/ settings, agents, skills and plugins load only after noeta trust.

Project instructions come from NOETA.md (or, in a directory without one, the cross-tool AGENTS.md); skills from .noeta/skills and the cross-tool .agents/skills, in the project, the directories above it, ~/.noeta/skills and ~/.agents/skills.

Extra For
acp noeta acp: an Agent Client Protocol agent for Zed and other editors
server noeta serve: the HTTP / WebSocket API
postgres a Postgres store, for many workers
keyring {keyring:service/user} secret references in plugin settings
tui the terminal UI (noeta-tui, in tui/)

Install several at once: 'noeta[acp,server,postgres] @ git+…'. The terminal UI (noeta without -p) is its own package, noeta-tui in tui/ (tui/README.md).

Embed it in Python

import asyncio
import noeta
from noeta.core.events import ModelReplied

async def main() -> None:
    store = noeta.store("sqlite:///tasks.db")
    agents = {a.name: a for a in noeta.default_agents("claude-sonnet-5-5")}
    model = noeta.provider("anthropic", api_key="sk-ant-...")   # base_url=... for a gateway
    runtime = noeta.Runtime(store=store, agents=agents, provider_for=lambda _name: model)
    client = noeta.Client(store)
    task = await client.create("main", "What does this repository do?", config={"cwd": "."})
    await runtime.run_until_idle()
    replies = [r.event for r in await client.events(task) if isinstance(r.event, ModelReplied)]
    print(replies[-1].response.message.text)

asyncio.run(main())

noeta.LocalApp is a store, a worker and a client in one process; noeta.connect(url) gives a client for a store URL or a noeta serve server. Everything an embedder needs is outside noeta.cli, which is the noeta command itself.

Serve it on many machines

One Postgres store, any number of workers, an HTTP API in front:

export NOETA_STORE=postgres://noeta:...@db.internal/noeta
noeta worker --concurrency 16             # on every worker machine
noeta serve --no-worker --host 0.0.0.0    # the API; bearer token required
noeta --server http://api.internal:8642   # the TUI against it (also: noeta acp --server URL)

A worker that dies leaves nothing behind: another claims its tasks where their logs stop. A front end attached with --server needs the token in NOETA_SERVER_TOKEN and no model of its own: its tasks run on the server's model and in the server's directory unless --model or --cwd PATH (a directory on the server) say otherwise. Workspaces and the token: Run it as a server.

Extend it

Everything outside the small kernel is a plugin behind one Extension interface, found by name through Python entry points or as a single file in ~/.noeta/plugins/ — the built-in ones exactly like yours. Agents are markdown files in Claude Code's format, prompts have names you can override, and Claude Code plugin directories load from noeta's own places. How to write and ship each kind: Write a plugin; how it compares with pi, DeepSeek Harness and Claude Code: Compared with other agents.

Benchmarks

noeta 1.0.0.dev0 at commit 34f8acee next to Claude Code 2.1.312 on the same model (opensource/deepseek_v4_1_flash, effort high), same tasks, caps and machine, run through harbor (2026-10-30 to 2026-11-01). Each run is one graded attempt per task (harbor retried an attempt that ended without a grade, and some tasks passed only on that retry; bench/README.md lists them); cost is DeepSeek's list price (read 2026-10-30) per run, off-peak throughout:

Benchmark noeta Claude Code noeta − Claude Code (SE)
SWE-rebench 07-2026, 111 tasks, 50 min, 2 runs each pooled 50.5 % 45.0 % +5.4 (3.6)
same, 91 tasks without leaked answers 51.1 % 44.0 % +7.1 (3.6)
same, one same-time run 49.5 % 42.3 % +7.2 (3.8)
Terminal-Bench 4.0, 54 of 66 tasks, 2 h cap, 1 run 3.7 % 1.9 % +1.9 (3.2)

Cost per run of 111 SWE-rebench tasks: noeta $5.01–$5.77, Claude Code $5.70–$6.25; per Terminal-Bench run of 54 tasks: noeta $5.23, Claude Code $6.50.

The first run, at 54121930, scored −2.7 (SE 4.3) on SWE-rebench. 34f8acee differs in two ways the model sees: Bash keeps the image's environment variables (54121930 dropped CARGO_HOME, JAVA_HOME, …), and the token-budget notes go only to Claude models (784c0cd8); the gain is the two together. Terminal-Bench 4.0 is near zero for both on this model and does not separate them. Versions, every run, retries, the leaked-answer tasks, what each agent reads from the repo, and a second model: bench/README.md.

Privacy

noeta sends nothing anywhere except requests to the model provider you configure: no telemetry, no log upload, no update check. Tools reach out only when the model calls them (WebFetch, WebSearch, MCP servers, your commands), under the permission rules you set.

Docs

initxy.github.io/noeta (中文:initxy.github.io/noeta/zh) — quickstart, guides, how every part is designed and why, and the full reference. The source is docs/; make docs-dev serves it locally.

For contributors: CONTEXT.md — the vocabulary; docs/adr/ — the decisions and why; CONTRIBUTING.md, SECURITY.md, CHANGELOG.md.

License

Apache-2.0

Metadata

Release files for noeta 1.0.0rc1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for noeta 1.0.0rc1
File Size Uploaded Provenance Actions
noeta-1.0.0rc1.tar.gz 4.4 MB Without provenance Details for noeta-1.0.0rc1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for noeta 1.0.0rc1
File Interpreter ABI Platform Actions
noeta-1.0.0rc1-py3-none-any.whl Python 3 none any Details for noeta-1.0.0rc1-py3-none-any.whl

Total release size: 5.5 MB

Release files / noeta-1.0.0rc1.tar.gz

Download URL noeta-1.0.0rc1.tar.gz
Size 4.4 MB
Tags Source
SHA-256 checksum
How to use checksums
0742321340a49a8433af9735a53c78b4c89950fe39c9d741dad6a3aa6a0fe573
BLAKE2b-256 checksum
How to use checksums
4df0b58aace85b99f755630dc33a6a037256054af25ad33b92d267cf61214268
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / noeta-1.0.0rc1-py3-none-any.whl

Download URL noeta-1.0.0rc1-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
3515d51d5007828c5da4445079dba2feb71830e83cb806f78b92082b302825a4
BLAKE2b-256 checksum
How to use checksums
999f0443564e10d38e3acee4cd24385f8be180a7f435bc008981a9310b439b2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for noeta 1.0.0rc1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page