A terminal coding assistant built with Zero, with native file tools, streaming model responses, MCP servers, and project skills.
zero code runs coding tasks in your current workspace. The project includes:
- Zero compiler – compiles Zero source into a standalone binary (
zero-code) - Native transport – a small C worker uses system libcurl; Zero parses responses and controls tool execution
- Test suite – black-box tests for the compiled Zero executable
- Build system –
Makefilefor cross-compilation targets
- Lightweight – native executable using the system libcurl for HTTP/TLS
- Native execution – compiled directly to native code via the Zero compiler
- Agent integration – supports multiple LLM providers (OpenAI, Claude, Gemini, OpenRouter)
- Peer learning – equal P2P nodes replicate durable failure lessons, apply local guards and show live synchronization in
/peers - 1M context budget – configurable token budgeting, provider usage calibration and multi-megabyte history;
/contextshows the estimate and actual reported usage - Agentic workflow – optional discovery, planning, implementation, review and verification stages, with repairs driven by tool results
- Streaming – incremental text and tool-call deltas for all four providers, with cancellation
- Internet access – built-in
web_fetchretrieves web pages and text APIs by URL for all four providers - Large files – UTF-8 range reads and approved edits of files up to 64 MiB
- Bounded context – automatic shortening of old tool output and a digest of older exchanges
- Project memory – automatic task recaps and saved facts persist across sessions, with commands to inspect and forget them
- Validated learning – structured task experience, isolated policy replay, immutable strategy versions, and rollback are part of the normal prompt lifecycle
- Executable evolution – rewrite strategy functions in staged
zero.graphgenerations, compile and compare both programs, then select improvements for the next launch - Explicit self-editing – read your executable graph with
self_inspect, including installed bundles outside the task workspace; an approvedself_patchreplaces existing functions, compiles a new generation and selects it for restart; named peers have separate program histories - Host builds – Linux and macOS builds using the pinned Zero compiler and system libcurl
See continuous learning for the mutation gates, scope promotion, supported policy changes, experience storage, and rollback commands. See P2P agents and editable graphs for mesh setup, the learning protocol, context limits and the distinction between automatic learning and explicit program patches.
zero-code/
├── src/main.0 # Application state, task loop, approvals, startup
├── src/workflow.0 # Agentic stages, review/verification gates and repair loop
├── src/buffers.0 # Bounded buffers, JSON and UTF-8 helpers
├── src/workspace.0 # Path checks, range reads and atomic file edits
├── src/providers.0 # Provider configuration and request/response mapping
├── src/streaming.0 # SSE parsing and incremental message assembly
├── src/web.0 # URL fetching, validation and bounded text results
├── src/stream_arguments.0 # Separate buffers for streamed tool arguments
├── src/context.0 # History, tool results and automatic compaction
├── src/context_budget.0 # 1M token target, provider calibration and context status
├── src/peers.0 # Collective lessons, local admission and tool guards
├── src/self_graph.0 # Approved edits of the executable program graph
├── src/memory.0 # Persistent project facts, approvals and atomic storage
├── src/logs.0 # Automatic local session journals and key redaction
├── src/learning.0 # Semantic strategy graph, evidence, replay gates and versions
├── src/mcp.0 # Persistent MCP stdio connections
├── src/skills.0 # Skill discovery and loading
├── src/skill_fetch.0 # Repository fetching and project skill imports
├── src/ui.0 # Terminal rendering and keyboard input
├── native/http_stream.c # HTTP transport worker
├── native/web_fetch.c # Read-only HTTP/HTTPS GET worker
├── native/session_log.c # Bounded native append writer
├── native/learning_store.c # Private journals and atomic graph transactions
├── native/peer_network.c # Symmetric authenticated gossip and durable set union
├── tests/ # Black-box tests of the compiled binary
├── zero.toml # Package manifest
├── zero.graph # Canonical Zero program graph
├── Makefile # Build automation
├── install.sh # Linux/macOS installer for the zero-code command
├── scripts/
│ ├── setup-zero.sh # Setup Zero compiler environment
│ └── build.sh # Build the Zero binary
└── README.md # This file
- Node.js ≥ 24 (required by Zero's standard library)
- A C compiler, libcurl development headers,
make, Git,curl,tar, and a SHA-256 checksum tool - Python 3.10+ for the installed executable-evolution bundle and its replay validator
# Set up the pinned compiler, then build for your host OS/architecture.
make setup build
# Or manually via the Zero compiler
./scripts/build.shThe build creates dist/zero-code for the host OS/architecture. The compiler
itself is stored at .tools/bin/zero.
Setup applies an exact patch to the pinned compiler's per-function fixed-buffer
limit (16 MiB) for large file-tool arguments. The application reserves up to 64 MiB of
stack before entering its buffer frames; buffer bounds checks remain enabled.
After updating an older checkout, rerun make setup build to refresh the compiler.
# Run the built binary
./dist/zero-code
# Or use the development launcher
./zero-code --help
# Evolve executable graph functions through build/replay validation.
# Requires the source checkout, pinned compiler and Python 3.10+.
./zero-code --self-evolve --prompt "Read the complete large file"Use ↑ / ↓ to scroll the conversation and logs one line at a time, including when reviewing an action for approval. PgUp / PgDn scroll by ten lines. In the provider picker, ↑ / ↓ select a provider.
make test
# or
python3 -m unittest discover -s tests -vThe slow-provider regression waits 105 seconds before returning a file write:
ZERO_TEST_SLOW=1 python3 -m unittest tests.test_streaming.StreamingTests.test_provider_reply_after_100_seconds_still_writes_and_edits -vCI runs the build, tests, and an installation smoke test on Linux and macOS.
-
Clone & install dependencies
git clone https://github.com/Protocol-Lattice/ZeroCode-tui.git cd zero-code-tui -
Build and install
make install
Source installs include a graph/compiler bundle. Use
zero-code --self-evolvefrom any workspace to run validated executable generations. Inspect them withzero-code --self-evolve --learning-historyand restore the original withzero-code --self-evolve --learning-rollback base. -
Run the TUI
zero-code
-
Test the implementation
make test
The application supports four LLM providers:
| Provider | Model | Endpoint |
|---|---|---|
| OpenAI | gpt-5.4 | https://api.openai.com/v1/chat/completions |
| Claude | claude-sonnet-4-6 | https://api.anthropic.com/v1/messages |
| Gemini | gemini-3.8-flash | https://generativelanguage.googleapis.com/v1beta/openai/chat/completions |
| OpenRouter | free | https://openrouter.ai/api/v1/chat/completions |
--provider <name>– Select the AI provider (openai, claude, gemini, openrouter)--model <model>– Choose a model (default: provider-specific)--max-turns <N>– Maximum conversation turns--max-output-tokens <N>– Tokens per model response (256–65536); output that hits the limit continues in another response--context-window <N>– Total input/output budget (16384–1000000, default 1000000); choose a model supporting the requested window--peer-port <N>/--peer– Start the P2P listener on a fixed/available port--peer-name <NAME>– Persistent node identity and separate executable lineage--peers <URL,URL>– Bootstrap links to equal peers; requires a sharedZERO_PEER_TOKEN--peer-bind <IPv4>– Listener address (default loopback); use HTTPS proxies for remote seeds--no-peers– Disable peer networking for this run--workflow agentic|off– Enable the built-in development loop (default: off)--parallel <N>– Concurrent file workers or model subagents (1–4, default 4)--cwd <dir>– Working directory for the agent--no-memory– Disable reading and changing saved project memory for this run--no-session-logs– Disable automatic session logging for this run--no-learning– Disable experience capture and automatic policy learning--no-global-learning– Keep learning local to this project--learning-frozen– Capture measurements and use existing strategies without mutation or promotion
# Connect to OpenAI with GPT-4
./dist/zero-code --provider openai --model gpt-4
# Connect to Claude
./dist/zero-code --provider claude --model claude-sonnet-4-6
# Connect to Gemini
./dist/zero-code --provider gemini --model gemini-3.8-flash
# Connect to OpenRouter (free tier)
./dist/zero-code --provider openrouter --model any/custom-model-idFor a structured Superpowers-inspired development loop, enable
--workflow agentic or enter /workflow agentic in the TUI. The coordinator
discovers the workspace, records a plan, implements it, reviews the changes and
verifies the result before finishing. Failed verification returns to
implementation. /workflow shows the current checkpoint; /workflow off
restores direct mode. See agentic workflow for the stage gates,
inspection mode for documentation, request limits and repair behavior.
The coordinator can call delegate_tasks to run up to four independent model
subagents. Each task declares a prompt, a mode (read, write, or edit), and
one to eight exact workspace file paths. For example:
{"tasks":[
{"mode":"read","paths":["src/parser.0"],"prompt":"Review the parser and report proposed changes."},
{"mode":"edit","paths":["README.md"],"prompt":"Correct the documented command examples."}
]}Subagents inherit the selected provider, model, active skill instructions and a
read-only snapshot of project memory, with separate conversations and a maximum
of four model requests each. read
allows reading; edit also allows fragment edits; write also allows creating
or replacing files. Runtime checks restrict every file operation to the declared
paths. Subagents cannot run commands, call MCP tools, load skills, or delegate
again. Only the coordinator can modify zero.graph; subagents return proposals
for graph changes. The coordinator receives an ordered list of task statuses and
summaries. Delegation uses additional model requests beyond the coordinator's
--max-turns budget.
Consecutive read_file, write_file, and edit_file calls also run in a worker
pool, without another model request. --parallel bounds both pools; setting it
to 1 makes execution serial. Operations that may write overlapping paths wait
for earlier owners, including ASCII case aliases. Jobs with non-ASCII paths are
conservatively serialized against writers to cover filesystem case and Unicode
normalization aliases. Results enter conversation
history in their original order. Commands, MCP calls, file listings, skill loads,
and task completion wait for preceding file work.
Each mutation retains its own preview and approval. Other independent workers
continue while one waits for a decision. Headless runs deny mutations unless
--approve is supplied. Esc cancels the pool and its nested HTTP processes;
changes already completed remain on disk. Existing workspace, symlink, ignore,
and stale-preview checks apply in workers too.
Parallel work appears in one PARALLEL WORKERS section with stable worker-N
rows in task order. Rows show queued, running, waiting for approval, done, error,
or cancelled states, the active tool and path, and elapsed time. Finished rows
retain their tool count and completion time until the group ends, then remain as
a compact conversation summary. Worker activity preserves the scroll position
and input, and the terminal updates only changed rows.
Tool results in the normal transcript are compact summaries. File reads show the path, byte size, and line count; paged reads label the line count as belonging to the returned range. Writes show bytes written, listings show file counts, and errors retain a short diagnostic. Full results still reach the model and the local session journal, including results from parallel workers.
Requests enable streaming. Text appears while the model responds, in both the
TUI and --prompt mode. Tool arguments and provider metadata are assembled across
SSE events; tools run only after the response completes successfully. Esc
cancels the worker and restores the conversation to the beginning of the task.
Providers that return ordinary JSON are also supported. When a provider reports
its output token limit, ZeroCode retains completed text and requests the next
batch automatically. A truncated tool batch is discarded in full and retried
as smaller complete operations; partial tool arguments never execute. Use
--max-output-tokens N to set the per-response budget (default: 4096 for Claude,
8192 for the other providers). Continuations share --max-turns; three
consecutive truncated tool or empty responses stop with an error. This works in
direct, agentic and chat-only modes, and subagents inherit the selected budget.
Large file generation uses successive small writes/section edits, with each
tool call completing normally. Older tool history still has its separate
compaction budget.
An incomplete stream,
invalid JSON, or an HTTP/transport error ends the task without executing partial
tool calls. The transport allows 64 MiB of incoming data, with 64 KiB per SSE event
and a 12 MiB response buffer and final assembly arena, including JSON
escaping of file content. History has a separate 6 MiB storage ceiling and the
configured token budget; use /context for the current values.
Each HTTP request has a 360-second deadline. The application allows ten additional
seconds for worker cleanup, so slow responses are not cut off after 100 seconds.
Esc still cancels immediately; shell commands retain their 60-second limit.
Tool argument fragments accumulate in separate buffers for each call; the final
response JSON is assembled once when the stream ends. File content is copied in
bounded blocks, and events without new usage or finish metadata skip the extra
message merge. Local edits prefer small exact
replacements; long translations proceed section by section to reach the first
write sooner while preserving the full document.
read_file accepts optional byte offset and limit arguments. Small files keep
the original plain-text result when these arguments are omitted. Large files or
explicit ranges return an object containing content, offset, next_offset,
total_bytes, and truncated. Follow next_offset to continue reading. Range
boundaries preserve UTF-8 characters. The default range is 8,192 bytes; limit
accepts 4–12,000 bytes. Heavily escaped content may require a smaller range.
edit_file can replace one unique text fragment in a UTF-8 file up to 64 MiB.
Both old_text and new_text accept up to 1000 KB (1,000,000 UTF-8 bytes) each.
It previews the old and new fragment, checks a fingerprint of the entire file
again after approval, and writes through an adjacent temporary file before an
atomic rename. Existing permissions are preserved. Changes elsewhere in the file
invalidate the preview. write_file can replace existing UTF-8 files up to 64 MiB,
with a bounded preview of the old content, a fingerprint check, preserved
permissions, and atomic replacement. It accepts up to 1000 KB (1,000,000 UTF-8
bytes) of complete new content; use edit_file in fragments for larger rewrites
without dropping content. Large proposed fragments have explicitly truncated
previews; the complete supplied text is used when the operation is approved.
Previews and successful write summaries show the full proposed content's line
count, including lines beyond the preview. For translations, Zero is instructed
to preserve every section and example and to edit in sections when the complete
replacement cannot fit in one model response.
Existing per-call argument and result limits apply. Workspace path,
symlink, secret-file, and ignore checks apply to both small and large files.
Before history fills its buffer, the client shortens older tool results. If that
is insufficient, it replaces older exchanges with a local digest and retains the
current user request and recent complete tool exchanges. Tool-call IDs remain
paired with their results, including during multi-tool batches. A
CONTEXT COMPACTED notice marks this operation. This is deterministic, lossy
compaction based on byte budgets, without an extra model request: omitted details
may need to be read again. It does not calculate a provider-specific token window.
The normal working budget is 64 KiB, with up to 1 MiB available for a large active
exchange. Provider reasoning blocks and signatures are retained intact while
tools run. Completed exchanges may be summarized to make room for the next
response; the transport accepts the larger history together with system context
and tool definitions.
If the active request, tool batch, or tool catalog alone exceeds the available
space, the client reports an error and asks for a smaller task or catalog.
Large file arguments remain intact for execution but their text is replaced by an
explicit omission notice in subsequent model history. Paths, call IDs, metadata,
and results are retained. Calls whose arguments exceed the worker batch buffer
run sequentially. Provider output-token limits still apply independently.
The built-in web_fetch tool lets Zero read a web page or text API by URL with
any supported provider. It is available automatically when tools are enabled;
no MCP server, extra API key, shell command, or --approve flag is needed.
zero-code --prompt 'Fetch https://example.com and summarize the page.'The model calls web_fetch with a required url, optional max_bytes (4–12,000,
default 8,000), and optional timeout_seconds (1–60, default 30). Successful
results contain url, effective_url, HTTP status, content_type, content,
and truncated. Cite effective_url when using the retrieved information.
Requests use HTTP/HTTPS GET, verify TLS certificates, and follow up to five
HTTP/HTTPS redirects. Text, HTML, JSON and XML are returned as UTF-8; HTML stays
as source without running JavaScript. Binary responses and URLs with embedded
credentials are rejected. Provider keys, cookies and .netrc credentials are
not sent. HTTP errors, connection failures and timeouts become tool errors.
Downloads stop at the content limit, including decompressed responses. Content
may be shortened further so the complete JSON result fits within 16 KiB; check
truncated before treating a page as complete. Press Esc to cancel a fetch.
--chat-only and /tools off disable it. Delegated file workers keep their
existing file-only scope. Retrieved content is reference data, not instructions.
OpenRouter's existing hosted web-search integration remains separate.
Zero automatically saves a short recap after a successful task, using the final
response or finish_task summary. No separate command, approval or extra model
request is needed. The latest three recaps are kept, newest first, alongside
lasting project facts and preferences that you or the model explicitly save.
Recaps are bounded excerpts, not a separate AI summary; long responses are
shortened at a UTF-8 boundary.
Memory lives in .zero-agent/memory.json under the workspace selected by --cwd.
It is included in subsequent model requests for all four providers, including
chat-only mode, and survives conversation compaction, /clear, and provider or
model changes. It is treated as reference data; the current task and tool
restrictions still take precedence.
Manage notes directly in the TUI:
/memory Show saved facts, recent recaps and commands
/memory set testing Run make test. Add or replace the note named testing
/memory delete testing Forget that note
/memory clear Forget all saved facts and recaps
These explicit commands work without an API key. They also work headlessly:
zero-code --cwd /path/to/project --prompt '/memory set testing Run make test.'
zero-code --cwd /path/to/project --prompt '/memory'The model can use the memory tool with action set to list, set, delete,
or clear. set takes a key and content; delete takes a key. Listing runs
without approval. Model-requested changes show a preview and require approval, or
--approve in headless mode. Delegated subagents receive a snapshot of the notes
but cannot call this tool or change the store.
Memory contains facts and recaps; full activity is saved separately in session logs. Failed,
cancelled or empty responses and tasks containing tool errors or denied actions
do not get a recap. Recaps containing the active API key are also skipped.
An explicit memory deletion or clear suppresses the recap for that task so
the final acknowledgement does not reintroduce forgotten information.
Saved facts and recaps are sent to your selected provider as context. Avoid
storing secrets. Use --no-memory to disable both reading and changing memory for a session; existing
notes remain on disk. Demo mode also disables memory. Deleting notes removes them
from future memory context; use /clear as well to discard messages from the
current conversation that may already mention them.
The store is limited to 32 named facts, three recaps, and 8 KiB of encoded JSON.
Keys contain 1–64 ASCII letters, digits, underscores or hyphens; each note contains at most 1,024 UTF-8
bytes. Older recaps are dropped first when space is needed. If named facts leave
no room for a new recap, automatic saving reports that it was skipped and keeps
the facts intact. New stores use a private directory and files use mode 0600.
The directory is already excluded from this repository and from normal file tools; add
.zero-agent/ to other projects' .gitignore files if needed.
Saves compare the store with the preview under a short write lock and replace it
atomically. A conflicting or busy save fails without overwriting another
session's changes; list memory and retry. Invalid, oversized, unreadable or
symlinked stores are reported and left untouched. Repair the file before saving
again. If a process is forcibly killed during the write, a stale
.zero-agent/memory.lock directory may need to be removed after confirming no
save is active.
Every normal session automatically creates
.zero-agent/sessions/session-XXXXXXXX/events.jsonl under its workspace. Each
prompt, displayed reply, tool preview/result, approval, and error is appended as
it happens. Streaming replies are saved incrementally, so received text remains
available even if the process is killed before the task completes. Parallel
worker activity is collected in the coordinator's journal.
Use /logs to show the current file, or inspect it without an API key:
zero-code --cwd /path/to/project --prompt '/logs'Each line is a JSON object with a schema version, sequence seq, Unix-seconds
time, event, title, and text. Large entries share a sequence number and
use zero-based part values with last: true on the final part. Streamed text
uses assistant_delta records followed by stream_end; normal sessions finish
with session_end. Worker output uses worker_delta with a worker title.
An absent end record can indicate an abrupt termination.
Writes reach the operating system after each record; this is process-crash persistence, not
a guarantee against power loss. A forcibly interrupted write may leave a partial
last line; earlier complete JSON lines remain readable.
/clear, context compaction, and memory deletion retain the journal. Restarting
creates a new file, so simultaneous sessions never share a journal. Logs are not
loaded into model context and are not automatically pruned. Delete old session
directories when you no longer need them.
Files use mode 0600 inside private session directories. Configured provider API
keys and keys entered through /key are redacted, including across streaming
chunks; the key dialog itself is never recorded. Logs can still contain other
sensitive text from prompts or tool output. Keep .zero-agent/ out of version
control. --no-session-logs disables logs independently of --no-memory; use
both flags to disable session logs and memory. Demo, snapshot, help, and
self-test runs do not create logs. If storage fails, a visible warning disables
logging for that run while the task continues. Learning experiences have their
own journal; add --no-learning to disable that persistence as well.
The native Zero application connects to MCP servers over stdio. Define servers
in .mcp.json in the workspace:
{
"mcpServers": {
"my-tools": {
"command": "/absolute/path/to/mcp-server",
"args": ["--example-option"],
"env": {"SERVICE_TOKEN": "${SERVICE_TOKEN}"}
}
}
}Replace the command and arguments with those required by your server. Commands
are executed directly, with argument boundaries preserved. ${VARIABLE} expands
an existing environment variable in command, args, cwd, or env values.
The default server working directory is the workspace; cwd can override it.
Keep credentials in environment variables rather than literal configuration values.
In the TUI:
/mcp List servers and discovered tools
/mcp connect my-tools Start a server and discover its tools
/mcp connect all Connect all configured servers
/mcp disconnect my-tools Stop one server
/mcp disconnect all Stop all servers
/mcp reload Disconnect and reread configuration
Connections are opt-in. Server processes stay alive across tool calls and stop
when disconnected or when the app exits. Discovered tools work with all four
providers and require the same approval as shell commands. Esc cancels an active
MCP request and disconnects its server. Reconnect a server to refresh changed tools.
For a noninteractive task:
./zero-code --mcp all --approve --prompt "Use the configured tools to complete the task."--mcp-config PATH selects another JSON configuration file. --approve authorizes
MCP calls, file edits, and shell commands for that run; without it, noninteractive
MCP calls are denied. Configuration supports up to four servers, 128 tools in a
64 KiB catalog, 64 KiB protocol messages, and 16 KiB text tool results. Requests
time out after 60 seconds. This client implements MCP tool discovery and calls;
remote HTTP endpoints need a separately configured stdio bridge. Server-provided
sampling, elicitation, resources, and prompts are not exposed as client features.
Add project skills under .agents/skills/NAME/SKILL.md:
---
name: review-docs
description: Review documentation for accuracy and runnable examples.
---
Check the requested documentation against the implementation.
Read references/checklist.md if a detailed checklist is needed.
Summarize the findings and stop when the requested review is complete.The frontmatter name must match its directory. Plain, quoted, and folded
descriptions are supported. Optional references, scripts, and assets live beside
SKILL.md. Only skill metadata enters the model's initial skill catalog;
the model calls load_skill when it needs the instructions. Its optional path
argument reads a text reference relative to that skill's directory.
/skills Show available skills
/skills reload Rescan skill directories
/skills fetch REPO Fetch skills from a Git repository into this project
/skill review-docs Apply a skill to the session
/skill off Clear the selected skill
Fetch a skill collection using a Git URL or a GitHub owner/repository shorthand:
/skills fetch anthropics/skills
/skills fetch https://github.com/owner/repository.git --path skills/review-docs
/skills fetch git@github.com:owner/repository.git --path skills --ref v1.0
--path selects one skill directory or a directory containing skill folders;
quote paths containing spaces. Without it, Zero checks for a root SKILL.md,
then skills/, then .agents/skills/, then skill folders at the repository root.
--path . explicitly selects the repository root. --ref selects a branch or
tag; otherwise Git's default branch is used. HTTPS, HTTP, SSH, Git, and file://
URLs are supported. Git uses your existing credentials, with interactive prompts
disabled, and the fetch stops after 120 seconds. Press Esc to cancel a clone.
Fetched skills are installed in the current workspace's .agents/skills/ and
the catalog refreshes immediately. Existing files or directories with the same
skill name are kept, including local edits; fetching again does not update them.
Fetching is an explicit user action and works without an API key or --approve:
zero-code --cwd /path/to/project --prompt '/skills fetch owner/repository --path skills'Zero validates metadata with the same rules used for local discovery and copies tracked references, scripts, and assets, preserving executable permissions. It never runs bundled scripts or initializes submodules. Symlinks, unsafe paths, and files ignored by the source or workspace are rejected. Each skill is staged before installation, so a failed copy does not expose a partial skill. Other successfully imported skills remain installed if a later skill fails. Temporary files are cleaned up after success, failure, or cancellation.
A fetch handles up to 32 skills and examines at most 512 collection entries.
Each skill may contain up to 256 tracked files totaling 16 MiB, with a file list
smaller than 32 KiB. Use --path to select a smaller collection if needed.
SKILL.md retains the 16 KiB UTF-8 limit. --no-skills and demo mode disable
fetching.
User skills are discovered in $XDG_CONFIG_HOME/zero-code/skills, or
~/.config/zero-code/skills when XDG_CONFIG_HOME is unset. Use
--skills-dir PATH to replace that user collection with another directory;
project skills take precedence when names collide. --skill NAME selects a skill
at startup, and --no-skills disables discovery.
Discovery is limited to 32 valid skills and a bounded catalog. Skill files and
text references must be UTF-8 and at most 16 KiB. Workspace .gitignore rules,
path checks, and symlink restrictions also apply to skills. Loading a skill does
not run its scripts or grant approvals: scripts use the existing approved
run_command flow. Skill instructions remain subordinate to the user's task.
MCP and skills are implemented in Zero, in src/mcp.0, src/skills.0, and
src/skill_fetch.0.
The standalone Node.js promotional website lives in website/.
Run npm run dev from this repository and open http://localhost:3000.
It requires Node.js 24+ and has no package dependencies or build step.
- Source:
src/main.0is the entry point; modules group code by responsibility - Parallel execution:
src/parallel.0owns worker scheduling, scoped subagents, approvals, and ordered results - Memory:
src/memory.0owns bounded project notes, persistence and memory tool/command handling - Tests:
tests/covers providers, file operations, concurrency, streaming, context compaction, persistent memory, extensions, and installation - Build:
Makefile– Handles compilation and distribution
After editing the source projection, synchronize and validate the program graph:
.tools/bin/zero import .
make test
.tools/bin/zero verify-projection .Keep both src/ and zero.graph in version control. Zero's package modules share
the package namespace. The startup buffer frames restore caller-owned spans
before returning, and are ordered from their dependencies outward for the pinned
compiler's bounded provenance analysis. The streaming JSON merger uses an
explicit stack to avoid recursive mutable borrows and stays within the direct
ARM64 backend's eight ABI argument slots.
This project is licensed under the MIT License (see LICENSE).
Contributions are welcome! Please ensure:
- All Zero source remains readable and well-documented
- Tests cover edge cases and provide meaningful assertions
- Build system continues to work across supported platforms
- Zero Language – https://github.com/ZeroLang/zero
- std.term.terminal – The underlying terminal abstraction
- OpenAI, Claude, Gemini, OpenRouter – Provided LLM APIs
Last updated: 2026-09-19