Fork of OpenCode by Kujtim Hoxha. Maintained by José F. Rives.
A powerful terminal-based AI assistant for developers, providing intelligent coding assistance directly in your terminal.
Pando is a Go-based CLI application that brings AI assistance to your terminal. It provides a TUI (Terminal User Interface), PWA WebUI and desktop application for interacting with various AI models to help with coding tasks, debugging, and more.
- Interactive TUI: Built with Bubble Tea for a smooth terminal experience
- Multiple AI Providers: Support for Github copilot, OpenAI, Anthropic Claude, Google Gemini, AWS Bedrock, Groq, Azure OpenAI, Ollama, Llama.cpp, and OpenRouter. Also any OpenAI compatible provider, including self-hosted models with the
localprovider. - Session Management: Save and manage multiple conversation sessions
- Tool Integration: AI can execute commands, search files, and modify code
- Output Compression (token reduction): RTK-style filtering of verbose command output (test runners, builds, installers, linters) before it reaches the model — typically 60-90% fewer tokens. Declarative, hot-reloadable TOML filters plus native structured parsers (
go test -json,golangci-lint,tsc). Fail-safe and on by default; never drops errors. Add project-local filters in.pando/filters.tomland validate them withpando filter test. See docs/output-filters.md. - Caveman Output Brevity (opt-in output-token reduction):
/caveman [lite|full|ultra|wenyan]makes Pando answer with fewer words — no filler, no restatement, no redundant summaries — while code, commands, errors, test output, reasoning quality, tool use and verification stay intact./caveman-finishends it for the session, and[Caveman] DefaultModesets a global default. Off by default; it reduces output tokens only. See Caveman output brevity. - Superpowers Mode (opt-in workflow discipline):
/superpowersroutes long or risky work through explicit gates — understand, design and get approval, write a risk-ordered plan, implement test-first, verify with real command output — and/superpowers-finishcloses it with a verified report. Per-session and off by default; it never performs a git operation on its own. See Built-in Slash Commands. - Vim-like Editor: Integrated editor with text input capabilities
- Persistent Storage: SQLite database for storing conversations and sessions
- LSP Integration: Language Server Protocol support for code intelligence
- File Change Tracking: Track and visualize file changes during sessions
- External Editor Support: Open your preferred editor for composing messages
- Named Arguments for Custom Commands: Create powerful custom commands with multiple named placeholders
- Configuration: Supports both JSON and TOML configuration files
- PWA WebUI: Access Pando through a web interface for a more visual experience in React (embedded into the binary). Access remotely or locally via browser. Perfect team with Tailscale or Zerotier distributed vpn for remote access.
- Code Editor: Using the same component to VisualStudio Code's editor, with syntax highlighting and LSP features.
- File Explorer: Browse and search project files with an integrated file explorer.
- Session History: View and manage past conversations in a dedicated session history panel.
- Real-time Updates: See AI responses and tool outputs in real-time with WebSockets.
- Desktop Application: Run Pando as a native desktop app using Wails (embedded into the binary)
- Agent Client Protocol (ACP): Use Pando as an AI coding assistant directly in compatible editors like VS Code, JetBrains IDEs, and Zed
- LLM Proxy Support: Configure Pando to be used as a proxy for LLM API requests, allowing you to route requests through Pando for additional processing or logging
- MCP Server: Start Pando as an MCP server to allow external clients to connect and interact with it using the Model Client Protocol
- ICP and inter-process communication: Pando autodiscover other Pando instances running on the same machine and can communicate with them using a custom inter-process communication protocol, allowing for distributed AI assistance across multiple terminals or projects.
- Subagent Delegation (conclusions + agent-loop resurrection): When the agent spawns delegated subagent tasks (via the mesnada orchestrator), each subagent ends with a thin
<pando:conclusion>block; Pando fills in the launch metadata (task id, engine, model, project, parent session) and feeds the result back to the parent loop — either injected into a still-running loop (Case A) or by resurrecting an idle one (Case B). Includes a non-blockingmesnada_awaitprimitive and anti-fork-bomb caps. Default-off; toggle from the TUI/WebUI settings (Mesnada → Delegation). - Warm per-project instance reuse: Optionally route a delegated task whose project is already open to its running ("warm") per-project ACP instance instead of cold-spawning a CLI subprocess — capturing the conclusion over the wire. A single warm instance serves several delegated agent loops in parallel (each in its own session, bounded by
Max Concurrent); when at that cap a further delegated task normally cold-spawns, but withWarm Queue Depthset it instead waits in a bounded queue for a free slot (0keeps the cold-spawn-at-cap behaviour). The Projects panel shows live delegated-loop counts and anautobadge for router-started instances, and stopping an instance cancels its in-flight loops (which then fall back to the cold path). Router-started warm instances are tagged so a later user activation from the Projects panel promotes them to user-focused; withWarm Instance Idle Timeoutset, ones that stay idle (no in-flight loops, not the active project) are automatically stopped so they don't leak. Default-off; enableReuse Warm Instances(and optionally disableAuto-Start Warm Instancefor reuse-only, or setWarm Instance Idle Timeoutsuch as10mto auto-GC idle instances —0disables it) underMesnada → Delegation, or setPANDO_DELEGATION_REUSE_WARM_INSTANCES/PANDO_DELEGATION_AUTO_START_WARM_INSTANCE/PANDO_DELEGATION_WARM_INSTANCE_IDLE_TIMEOUT. To aim a delegated task at a specific registered project, pass aprojectargument (its id, display name, or directory path) to themesnada_spawn_agent/spawn_agenttool — the task is routed to that project's warm instance and itswork_dirdefaults to the project's directory; an unknown reference returns an error listing the known projects. The Orchestrator dashboard (TUI and WebUI) surfaces live delegation telemetry — warm-reuse hit rate, warm hits/failures, cold fallbacks, cap rejections, and resurrection / live-injection counts — also exposed atGET /api/v1/orchestrator/delegation/metrics. - Hot-peer IPC delegation (external instances as warm targets): Optionally let a delegated task whose project is served by an external instance — e.g. one launched by an editor's ACP integration, which has no stdio pipe to this process — run inside that peer over the localhost IPC bus instead of cold-spawning a CLI, capturing the conclusion synchronously. It is two-sided opt-in and default-off: the caller enables
Allow External Warm Targetsand the target instance enablesAccept Delegations(envPANDO_DELEGATION_ALLOW_EXTERNAL_WARM_TARGETS/PANDO_DELEGATION_ACCEPT_DELEGATIONS), both underMesnada → Delegation. Pando never stops or kills an editor's instance; the delegated run uses a fresh ephemeral session isolated from the user's active one, on cancellation it best-effort interrupts only that session, and a peer that hasn't opted in (or is unreachable / too old — capability is negotiated overinstance.pingand fails closed) simply falls back to the cold path. Delegations served this way are counted asexternal_hitsin the delegation telemetry.
Installer script for windows (copy into powershell)
iex (irm https://github.com/ghraw/digiogithub/pando/main/scripts/install-windows.ps1)
Installer in linux
curl -fsSL https://github.com/ghraw/digiogithub/pando/main/scripts/install-linux.sh | bash
In OSX download the release .pkg for your architecture — pando-<version>-darwin-arm64.pkg (Apple Silicon) or pando-<version>-darwin-x64.pkg (Intel). The installer places Pando.app (with the embedded desktop wrapper, icons and the /usr/local/bin/pando launcher) under /Applications.
go install github.com/digiogithub/pando@latestgit clone https://github.com/your-repo/pando.git
cd pando
cd web-ui && bun install && bun run build:embedded && cd ..
go build -o pando
./pando appPando looks for configuration in the following locations:
$HOME/.pando.jsonor$HOME/.pando.toml$XDG_CONFIG_HOME/pando/.pando.jsonor$XDG_CONFIG_HOME/pando/.pando.toml./.pando.jsonor./.pando.toml(local directory)
Both JSON and TOML formats are supported. Pando auto-detects the format based on the file extension.
You can configure Pando using environment variables (prefixed with PANDO_ for app-specific settings):
| Environment Variable | Purpose |
|---|---|
ANTHROPIC_API_KEY |
For Claude models |
OPENAI_API_KEY |
For OpenAI models |
GEMINI_API_KEY |
For Google Gemini models |
GITHUB_TOKEN |
For Github Copilot models |
VERTEXAI_PROJECT |
For Google Cloud VertexAI (Gemini) |
VERTEXAI_LOCATION |
For Google Cloud VertexAI (Gemini) |
GROQ_API_KEY |
For Groq models |
AWS_ACCESS_KEY_ID |
For AWS Bedrock (Claude) |
AWS_SECRET_ACCESS_KEY |
For AWS Bedrock (Claude) |
AWS_REGION |
For AWS Bedrock (Claude) |
AZURE_OPENAI_ENDPOINT |
For Azure OpenAI models |
AZURE_OPENAI_API_KEY |
For Azure OpenAI models (optional when using Entra ID) |
AZURE_OPENAI_API_VERSION |
For Azure OpenAI models |
LOCAL_ENDPOINT |
For self-hosted models |
PANDO_DEV_DEBUG |
Enable dev debug mode (true) |
SHELL |
Default shell to use (if not specified in config) |
{
"data": {
"directory": ".pando/data"
},
"providers": {
"anthropic": {
"apiKey": "your-api-key",
"disabled": false
}
},
"agents": {
"coder": {
"model": "claude-3.7-sonnet",
"maxTokens": 5000
}
},
"shell": {
"path": "/bin/bash",
"args": ["-l"]
},
"mcpServers": {},
"lsp": {},
"debug": false,
"autoCompact": true
}[data]
directory = ".pando/data"
[providers.anthropic]
apiKey = "your-api-key"
disabled = false
[agents.coder]
model = "claude-3.7-sonnet"
maxTokens = 5000
[shell]
path = "/bin/bash"
args = ["-l"]
debug = false
autoCompact = truePando keeps its SQLite database at <Data.Directory>/pando.db, which for a project
initialized by Pando is .pando/data/pando.db. Older versions stored it directly at
.pando/pando.db; that path is obsolete.
On every startup — before any database connection is opened — Pando reconciles the two paths:
- If only the obsolete
.pando/pando.dbexists, it is moved to the configured data directory together with its SQLite sidecars (-wal,-shm,-journal), so no committed WAL transaction is lost. - If the current database already exists, it is authoritative: it is never modified, and the obsolete files are deleted.
- If migration or cleanup fails, startup fails instead of silently creating a fresh, empty database. Nothing is overwritten in any case.
The migration is idempotent and a no-op for configurations that still set
Data.Directory to .pando (there the obsolete and current paths are the same file) and
for projects that never used the old path. Don't start a second Pando instance while the
first migration is running.
Pando activates language servers on demand. It ships a built-in catalogue of
presets (gopls, pyright, typescript-language-server, rust-analyzer, clangd,
jdtls, and more). When you edit, view, or save a file, Pando looks at its
extension and starts the matching server from the catalogue only if its binary
is found on PATH — exactly like editors such as OpenCode do. This means a
non-Go project never spins up gopls, and each language server starts the first
time a file of its kind is touched, not at boot.
Activation is triggered from three places: the agent's file tools (edit / write / view / patch), the TUI editor and file-tree, and a lightweight workspace watcher that catches edits made by external tools. Servers whose binary is missing are remembered and not retried.
You only need [LSP] entries to override, extend, or disable a catalogue
server, or to add one Pando doesn't know about:
# Turn on-demand activation off entirely (servers then start only if Autostart).
LSPAutoActivate = true
# Override a preset's command / args, or add your own server.
[LSP.gopls]
Command = "gopls"
Args = []
Languages = ["go"]
Disabled = false # set true to keep this language server from ever starting
Autostart = false # set true to eagerly start it at boot instead of on demand| Setting | Scope | Meaning |
|---|---|---|
LSPAutoActivate |
global | When true (default), start servers on demand by file type. |
Disabled |
per-server | Never start this server, even on demand. |
Autostart |
per-server | Eagerly start this server at boot instead of waiting for a matching file. |
The Settings → LSP page shows each configured server's command, its
installed / not installed status, and an Autostart toggle, plus the
catalogue presets you can add (annotated with their install status).
# Start Pando
pando
# Start Pando as an MCP server (stdio + HTTP /mcp)
pando mcp-server
# Start with debug logging
pando -d
# Start with a specific working directory
pando -c /path/to/project
# Run a single prompt in non-interactive mode
pando -p "Explain the use of context in Go"
# Get response in JSON format
pando -p "Explain the use of context in Go" -f json
# Check for a newer compatible GitHub release
pando update --check
# Update the current binary in place
pando update
# Disable one MCP transport if needed
pando mcp-server --no-stdio
pando mcp-server --no-http
# Convert a document (docx, pdf, xlsx, pptx, html, csv, epub, …) to Markdown
pando convert report.docx # prints Markdown to stdout
pando convert data.xlsx -o data.md # writes to a file
pando convert https://example.com/page # converts a web page
pando convert --list-formats # list supported input formatsWhen Pando starts from a released semantic-version build, it also performs a short background update check and prints a notice if a newer compatible release is available.
Pando converts rich documents to Markdown using the pure-Go
conductor-oss/markitdown library (no CGO; PDF
via PDFium compiled to WebAssembly). Beyond the pando convert command, any supported document
dropped inside the Knowledge Base directory ([Remembrances] KBPath) is converted on the fly
and indexed with its Markdown chunks, while the indexed document keeps referencing the
original file (its source_path, source_format and a converted flag are stored in
metadata). Supported KB document formats: .pdf .docx .pptx .xlsx .xls .epub .ipynb .csv .html .htm .rss .atom. Plain .md files are still indexed verbatim.
Configure it under [Remembrances]:
[Remembrances]
KBConvertDocuments = true # default; convert documents in the KB folder
# KBConvertExtensions = ["docx", "pdf", "xlsx"] # optional: override the curated setKB documents link each other with [[wiki links]], turning the knowledge base into a
navigable graph instead of a pile of loose files. Write [[concept]] or
[[concept|display label]] anywhere in a document's body; the target may be a full path
([[pando/plans/foo.md]]), a bare name ([[foo]]) or an alias declared in the document's
front matter (aliases: [...]). Occurrences inside code fences and inline code are ignored,
so documentation that merely shows the syntax does not pollute the graph.
Links are resolved when they are read, not when they are written, so a link to a document that does not exist yet is valid on purpose: it records a concept worth documenting later (a "wanted concept"), and it starts resolving by itself the day that document is created. The KB tools expose the graph:
kb_get_documentreturns the document's outgoing links and its backlinks.kb_search_documentsreports how connected each hit is and lists the neighbours of the best match, so the agent can hop instead of searching again.kb_related_documentsnavigates the graph — with afile_pathit returns links, backlinks and scored related documents; with no arguments it lists the wanted concepts, i.e. what the knowledge base refers to but never explains.kb_add_documentreports how many links it indexed and which targets are still undocumented.
Documents stored before the graph existed are backfilled in the background at startup;
pando kb relink [--force] rebuilds it on demand (it costs no embeddings and never rewrites
your markdown). Toggle the feature from the TUI/WebUI settings (Remembrances → Wiki Links)
or in config:
[Remembrances]
KBWikiLinks = true # default; index [[wiki links]] as a document graphTurning it off is safe and reversible: nothing new is indexed and the tools answer exactly as they did before the graph existed, but the links already stored survive and light up again when you turn it back on.
Pando compresses verbose command output before it reaches the model, cutting token usage on noisy tools (test runners, builds, installers, linters) by roughly 60-90%. It is fail-safe (any error returns the raw output), exit-code preserving, and on by default.
Two complementary mechanisms run at the bash tool boundary:
- Native structured parsers (first tier) for
go test -json,golangci-lintandtsc, with RTK-style 3-tier degradation (structured summary → regex grep → raw). - Declarative TOML filters (second tier) — an 8-stage line pipeline matched to a command by regex. 15 built-ins ship embedded (git, docker, cargo, go, gradle/maven, npm/pnpm/yarn, bun, deno, swift, pip, pytest).
Disable it (always return raw output) from the TUI/WebUI settings (Bash → Output Filter) or in config:
[Bash]
OutputFilterDisabled = false # default; set true to turn compression off
# OutputFilterPaths = ["~/.pando/filters.toml"] # extra user-global filter filesAdd project-local filters in .pando/filters.toml (highest precedence) and validate
their inline [[tests]] before relying on them:
pando filter test .pando/filters.toml # validate your authoring file
pando filter test # validate the built-in defaultsThe full filter schema and authoring guide is in docs/output-filters.md.
Available in the TUI, the Web UI and over ACP (editors like Zed or VS Code):
| Command | What it does |
|---|---|
/goal <objective> (alias /autopilot) |
Start goal mode with a persistent objective; /goal-status, /goal-cancel |
/compact (alias /summarize) |
Summarize and compact the current session |
/db-compact |
VACUUM the database and reclaim free space |
/ponytail [lite|full|ultra|off] |
Toggle "lazy senior developer" mode (build less, keep the diff short) |
/caveman [lite|full|ultra|wenyan] |
Answer with fewer words to spend fewer output tokens (see below) |
/caveman-finish |
Return the session to normal output length |
/superpowers [objective] |
Enable the disciplined development workflow (see below) |
/superpowers-finish |
Verify, report, and return to normal mode |
/improve-agents-md |
Create or reinforce AGENTS.md with the mandatory AI-agent operating rules |
/caveman asks Pando to say the same thing in fewer words: no greetings, no restatement of
your question, no generic transitions, no summary of what you just read. The goal is to spend
fewer output tokens on prose you did not ask for.
It constrains expression, never work. Code, commands, file paths, URLs, JSON/YAML/TOML, error text, API signatures, test output, security warnings and approval questions are always reproduced exactly — the mode may not abbreviate or paraphrase them. It may not skip root-cause evidence, test commands and their results, or safety caveats in order to be shorter, and it does not reduce reasoning, tool use or verification. If you ask for a detailed explanation, you get one: a direct request always beats the brevity preference.
Four levels, from mild to extreme:
| Level | What it does |
|---|---|
lite |
Normal sentences, fewer of them: filler and restatement removed |
full |
Fragments over sentences: the answer, then a few lines of what matters (a bare /caveman picks this) |
ultra |
Telegraphic: the answer and nothing around it |
wenyan |
Renders natural-language prose in Classical Chinese (文言文); code, commands, paths and errors stay verbatim |
Replies stay in your language, except under wenyan, which is an explicit opt-in.
Set a global default for sessions that have not chosen a level, from the TUI/Web UI settings
(Token Optimization → Caveman Output Brevity) or in config:
[Caveman]
DefaultMode = '' # default (off); or 'lite', 'full', 'ultra', 'wenyan'Scope and precedence, from strongest to weakest: your direct instructions and project rules
→ the session's explicit choice (/caveman <level>, or /caveman-finish for explicit off)
→ Caveman.DefaultMode → off. A session that ran /caveman-finish therefore stays
verbose even if the global default is on, and changing the global default never overrides a
session that already made a choice. Like Ponytail and Superpowers, the session override lives in
memory only: it does not survive a restart, while the TOML default does.
What it does not do: it does not reduce input or reasoning tokens, and the policy it injects into the prompt has a small input cost of its own — on work whose output is already terse, total session savings can be small or even negative. How much you save depends on the model and the task, so Pando ships no percentage claim; measure it on your own workload.
The style levels follow caveman by Julius Brussee (MIT), reimplemented natively in Pando as a prompt policy — no hooks, no telemetry, no stats collection, no MCP middleware.
/superpowers turns on a workflow policy for the current session. Long or risky work is then
routed through explicit gates instead of jumping straight to code: understand the context, present
a design and get approval, write a prioritized plan for anything multi-file (phases ordered by
risk and dependency, each with its exit criteria and verification command), implement test-first in
small increments, reproduce bugs before fixing them, and verify with real command output rather
than claims.
/superpowers-finish runs a closing turn that verifies the work, summarizes what changed, states
what is not done, and then returns the session to normal mode.
Worth knowing:
- Opt-in and inert by default. A session that never runs
/superpowersbehaves exactly as before — nothing is injected into the prompt. - Your instructions win. The policy explicitly yields to direct user instructions, AGENTS.md, and the permission system, and it does not apply its gates to trivial or read-only requests.
- No automatic git side effects. Neither the mode nor the finish command will ever commit, merge, push, open a pull request, touch branches or worktrees, or discard work. Git stays user-directed.
- Ephemeral (v1). The mode is per-session and in-memory: it is cleared by
/superpowers-finishand does not survive a restart.
It is inspired by the workflow principles of the Superpowers plugin by Jesse Vincent (MIT), reimplemented natively in Pando — no plugin runtime, no telemetry, no forced subagents.
Custom commands are predefined prompts stored as Markdown files:
- User Commands (prefixed with
user:):$XDG_CONFIG_HOME/pando/commands/or$HOME/.pando/commands/ - Project Commands (prefixed with
project:):<PROJECT DIR>/.pando/commands/
- cmd: Command-line interface using Cobra
- internal/app: Core application services
- internal/config: Configuration management
- internal/db: Database operations and migrations
- internal/llm: LLM providers and tools integration
- internal/tui: Terminal UI components and layouts
- internal/logging: Logging infrastructure
- internal/message: Message handling
- internal/session: Session management
- internal/lsp: Language Server Protocol integration
Pando is a fork of OpenCode, originally created by Kujtim Hoxha.
Special thanks to:
- @isaacphi - For the mcp-language-server project
- @adamdottv - For the design direction and UI/UX architecture
- The broader open source community
Genera una nueva tag
interactive:true
git tag --sort=creatordate | tail -n 5
git tag $(gum input)
git push origin --tagsCompiles the webui
# Build embedded web-ui assets
cd web-ui && bun install && bun run build:embedded && cd ..Compiles the desktop wails wrapper
make desktop-build
make desktop-embedCompiles the binary
requires: build-webui, build-desktop
# Get version from last git tag
VERSION=$(git describe --tags 2>/dev/null || echo "dev")
#go build -ldflags "-X github.com/digiogithub/pando/internal/version.Version=$VERSION" -o pando .
make build
rm -f *.logCompile the working binary and copy to the binary path ~/bin/.
requires: build
rm -f ~/bin/pando
upx -1 pando
cp pando ~/bin/pando
rm -f *.upxCompiles the binaries for the different platforms (Linux x64, Windows x64, macOS aarch64) and zip them into dist/.
interactive:true
# Create dist folder
mkdir -p dist
# Build embedded web-ui assets
cd web-ui && bun install && bun run build:embedded && cd ..
# Get version from last git tag
VERSION=$(git describe --tags 2>/dev/null || echo "dev")
# Linux x64
make release-linux-amd64
# Linux arm64
make release-linux-arm64
# Windows x64
make release-windows-amd64
# macOS aarch64
make release-darwin-arm64
# macOS x64
make release-darwin-amd64
echo "Run in osx terminal the command:"
echo " cd ~/www/MCP/Pando/pando && xc release-osx"
echo
bash -c 'read -n 1 -s -r -p "When the command finish, press any key to continue..."'
echo
scp mac-mini-de-digio:~/www/MCP/Pando/pando/dist/*.zip dist/
echo "Release builds completed in dist/"Compiles the binaries for the different platforms (Linux x64, Windows x64, macOS aarch64) and zip them into dist/.
interactive:true
export PATH=$PATH:/usr/local/bin:~/.bun/bin:/opt/homebrew/bin/:~/go/bin
cd ~/www/MCP/Pando/pando
git pull origin main
git fetch origin --tags
rm -rf dist
mkdir -p dist
eval "$(cat ~/DIGIO_Software_Signing_Keys/kvagerc)"
NOTARYTOOL_STORE_CREDENTIALS=1 bash scripts/setup-macos-signing-keychain
xc build
make release-darwin-arm64
make release-darwin-amd64
bash scripts/build-macos-app
echo "Release builds completed in dist/"Pando supports the Agent Client Protocol, allowing it to be used directly in compatible editors as an AI coding assistant.
Run Pando as an ACP server (stdio mode, for editors):
pando acpAdd to your settings.json:
{
"agent_servers": {
"Pando": {
"command": "pando",
"args": ["acp"]
}
}
}Add to ~/.config/zed/settings.json:
{
"agent_servers": {
"Pando": {
"command": "pando",
"args": ["acp"]
}
}
}Add to your acp.json:
{
"agent_servers": {
"Pando": {
"command": "/path/to/pando",
"args": ["acp"]
}
}
}Configure ACP behavior in .pando.toml:
[acp]
enabled = true
max_sessions = 10
idle_timeout = "30m"
log_level = "info"
auto_permission = false # set true for CI/batch environments# Start ACP server (stdio, for editors)
pando acp
# Start with explicit flags
pando acp start --debug --cwd /path/to/project
# Check server status (HTTP mode)
pando acp status
# List active sessions
pando acp sessions
# View server statistics
pando acp stats
# Stop server
pando acp stopExamples are provided for:
- Go client:
examples/acp-client/go/ - Python client:
examples/acp-client/python/
For comprehensive documentation, see docs/acp-server.md
Features:
- Stdio transport for editor subprocess mode
- HTTP+SSE transport for real-time updates
- Multiple concurrent sessions
- Security boundaries (path validation)
- Permission system for tool execution
- Auto-approval mode for trusted environments
Pando is licensed under the MIT License. See the LICENSE file for details.
