Skip to main content

Quenda

A lightweight, layered Agent framework for Python

Python License Status


What's New

2026-09 (v0.3.6)

  • Memory Evolution — Corrections, bounded consolidation, and audited detailed Markdown memory.
  • Skill Evolution — Governed creation and revision of reusable Skills.
  • Runtime & Web Reliability — Stronger continuation, compaction, streaming, MCP, and session workflows.

2026-08 (v0.3.4)

  • Web UI — A FastAPI gateway + React dashboard for agents, sessions, workspaces, and settings. quenda web for foreground use, quenda gateway for a background service.
  • Self-Evolution Platform — Post-run memory evolution with automatic/review/disabled write modes, plus staged skill proposals with validation and rollback.
  • Config-Driven Providers — Declare builtin overrides, custom OpenAI-compatible endpoints, and local llama-server presets directly in config.yaml (ADR-035).

2026-06 (v0.3.0)

  • Skills Framework — Composable capability packages with instructions, resources, and tools. Discover, activate, and use skills on demand. Learn more →
  • Context Compression — Automatic summarization when context grows large, with configurable policies and manual /compress command.
  • Interaction Requests — LLM can ask users for choices, confirmations, and input via structured interaction protocol.
  • Custom Tool Extensions — Agent-local tools via extensions/tools/*.py with config.yaml declaration.
  • Policy System — Runtime policies for termination, tool selection, and result processing.
  • Multimodal Support — Image input support with resource activation.
  • 26 Model Providers — OpenAI, Anthropic, DeepSeek, DashScope, Moonshot, Ollama, and 20 more.

Quenda Code

Quenda Code is an AI coding agent that runs in your terminal. It reads your codebase, writes code, runs commands, and helps you ship.

📖 Quenda Code Documentation →

# Install
pip install quenda quenda-code

# Start interactive session
quenda code

# One-shot task
quenda code "Add error handling to the API client"

Personal Agents

Create a long-lived local agent with its own prompts, skills, memory, sessions, and default workspace:

quenda agent create reviewer
quenda reviewer

Seed an independent agent from an installed package or source directory:

quenda agent create coder --from quenda-code
quenda agent create writer --from ./agents/writer

Agents live under ~/.quenda/agent-<name>/. Without --workspace, they work inside their own workspace/; the same agent can enter a project explicitly:

quenda reviewer --workspace ~/Workspace/my-project

Features

  • Code-aware — Reads and understands your codebase structure
  • Workspace-aware — File tools resolve paths against the selected project; local execution follows explicit permissions and trust policy
  • Explicit execution trust — Local shell/Python run as local-trusted; strong isolation must use a future isolated backend
  • Session persistence — Conversations saved and resumable
  • Interactive mode switching — Switch between code, architect, and chat modes
  • Skills on demand — Activate capability packages as needed

REPL Commands

Command Description
/help Show available commands
/mode [code|architect|chat] Switch interaction mode
/model <provider>/<model> Switch model mid-session
/skill list List available skills
/skill activate <name> Activate a skill
/compress Manually compress context
/status Show session and token info
/remember [target] <text> Commit audited durable memory
/forget [target] <text> Remove matching durable memory
`/evolve status review
/reset Clear conversation history

Example Session

> read the main entry point and explain how it works

I'll read the main entry point...

[Reads src/quenda/cli.py]

The entry point is `cli.py:main()`. It defines two subcommands:
- `quenda run --agent <path>` — Run a custom agent from AGENT.md
- `quenda code` — Run Quenda Code Agent (built-in)

Each command supports one-shot mode (with a message) or REPL mode (without).

> add a --version flag to the CLI

I'll add a `--version` flag to the argument parser...

[Applies patch to cli.py]

Done. Added `--version` flag that prints the version and exits.

> run the tests

[Runs pytest]

All 42 tests passed.

Quenda SDK

Build agents in Python with a minimal API:

from quenda import Agent, tool
from quenda.providers import get_provider_registry
from quenda.tools import get_core_tools
import asyncio

@tool
def calculate(expression: str) -> float:
    """Safely evaluate a math expression."""
    import ast
    node = ast.parse(expression, mode='eval')
    return eval(compile(node, '<string>', 'eval'), {"__builtins__": {}}, {})

model = get_provider_registry().get_model("deepseek", "deepseek-v4-flash")

agent = Agent(
    name="assistant",
    system_prompt="You are a helpful assistant.",
    tools=[calculate, *get_core_tools(".")],
    model=model,
)

async def main():
    session = agent.open_session()
    result = await session.send("What is 15% of 847?")
    print(result)

asyncio.run(main())

Failed text calls (Session.send, send_sync, and Agent.run) raise quenda.RunFailedError, which exposes run_id and the normalized error event. Use Session.send_collecting() when handling completion, errors, pauses, and interruptions through events. Concurrent writes to a stored session are rejected; reload a session after a storage revision conflict.

📖 SDK Tutorials — 8 chapters covering agents, tools, providers, sessions, and events.


Installation

# Quenda Code — AI coding assistant (CLI)
pip install quenda quenda-code

# Quenda SDK — Build agents in Python
pip install quenda

Requires Python 3.12+. Runtime dependencies are installed automatically; see pyproject.toml.


Web UI

A FastAPI gateway plus React dashboard to manage agents, sessions, workspaces, and settings from the browser:

pip install "quenda[web]"   # optional dependencies

quenda web --port 8000      # foreground (dev)

quenda gateway start        # background service
quenda gateway status
quenda gateway logs
quenda gateway stop

Pages cover agents (create/edit/detail with model picker), sessions (chat with streaming events), workspaces, and settings. Sessions run through the same Host layer as the CLI.


Features

  • Minimal API. Agent, Session, @tool, and you're done.
  • 27 model providers. OpenAI, Anthropic, DeepSeek, DashScope, and more — one registry, one API.
  • Core tools. Filesystem, local-trusted shell/Python, and user interaction.
  • Skills framework. Composable capability packages with instructions and resources.
  • Explicit security contracts. SSRF protection, command filtering, permissions, and fail-closed isolation requirements.
  • Observable by default. Every run emits structured events for streaming and debugging.
  • Context compression. Automatic summarization when context grows large.
  • Self-evolution. Post-run memory writes and staged skill proposals, auditable and roll-back-able.
  • Config-driven providers. Built-in overrides, custom OpenAI-compatible endpoints, and llama-server presets in config.yaml.
  • Web UI. Optional FastAPI/React dashboard with quenda web and quenda gateway.

Model Providers

Quenda ships with 27 built-in providers covering 300+ models:

Provider Example Models API Key Env
openai gpt-4o, gpt-4-turbo OPENAI_API_KEY
anthropic claude-3-5-sonnet-20241022 ANTHROPIC_API_KEY
agnes agnes-2.0-flash AGNES_API_KEY
deepseek deepseek-chat, deepseek-v4-flash DEEPSEEK_API_KEY
deepseek-anthropic deepseek-v4-flash (Anthropic API) DEEPSEEK_API_KEY
dashscope qwen-max, qwen-plus DASHSCOPE_API_KEY
moonshot moonshot-v1-8k, moonshot-v1-128k MOONSHOT_API_KEY
openrouter anthropic/claude-3.5-sonnet OPENROUTER_API_KEY
ollama llama3, mistral, qwen2 local (no key)

Full provider list →

Add a custom provider in 5 lines:

from quenda.providers import ProviderSpec, ModelSpec, get_provider_registry

registry = get_provider_registry()
registry.register(ProviderSpec(
    id="my-provider",
    name="My Provider",
    base_url="https://api.example.com/v1",
    api="openai-completions",
    api_key="${MY_API_KEY}",
    models=(ModelSpec(id="my-model", name="My Model", tool_calling=True),),
))

Agents can also declare providers in config.yaml — a builtin override, a custom OpenAI-compatible endpoint, or a llama-server preset — and select roles with models.default / models.vision using provider/model (ADR-035):

providers:
  openai:
    api_key: "${OPENAI_API_KEY}"

  local-llama:
    type: llama-server
    url: http://127.0.0.1:8080/v1
    models:
      - id: "qwen3.5:9b"
        tool_calling: true

models:
  default: openai/gpt-4o
  vision: local-llama/qwen3.5:9b

Built-in Tools

get_core_tools(workspace) returns 11 essential framework tools:

Tool Capability
list_files Browse directories (ls, find, tree)
search_text Search file contents (grep, rg)
read_file View files with line ranges
write_file Create or overwrite files
apply_patch Apply targeted text patches
run_shell Execute shell commands (filtered)
execute_python Run Python code in subprocess
get_current_datetime Get exact current time or convert timezones
request_interaction Ask the user for structured input
request_skill_activation Ask Host to activate discovered skills
activate_resource Attach a historical session resource

Full tool reference →


Architecture

Interface → Host → Runtime → Kernel
Layer Responsibility
Kernel Synchronous model-tool loop. No knowledge of agents, sessions, or users.
Runtime Async Agent/Session/Run lifecycle. Event emission, context management.
Host Persistence, identity, permissions, instruction composition, skills.
Interface Event rendering, user interaction, REPL.

Each layer depends only on the layer inside it. The Kernel is fully testable with fake models — no network required.

Framework self-description is generated from the code-owned capability registry. Maintainers can update or verify the checked-in artifacts with:

quenda capabilities --generate-artifacts .
quenda capabilities --check-artifacts .

Documentation

Resource Description
Getting Started Setup and your first agent
Tools Guide All built-in tools with parameters
Skills Guide Capability packages system
API Reference Complete API reference
SDK Tutorials Step-by-step Python SDK guide (8 chapters)
CLI Tutorials Step-by-step Quenda Code guide (5 chapters)
Architecture Decisions ADR records

Contributing

Quenda is intentionally small. Before making a change, read CLAUDE.md and the ADR records.

  1. Identify which architectural layer owns the change.
  2. Prefer the smallest complete change; add tests with behavior changes.
  3. Do not cross established layer boundaries.
pip install -e ".[dev]"   # editable install with dev tooling
pytest                    # run tests
ruff check src/quenda       # lint

License

MIT

Metadata

Release files for quenda 0.3.9

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

Source distribution (sdist)

Source distribution for quenda 0.3.9
File Size Uploaded Provenance Actions
quenda-0.3.9.tar.gz 575.4 kB With provenance Details for quenda-0.3.9.tar.gz

Built distribution (wheel)

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

Total release size: 1.3 MB

Release files / quenda-0.3.9.tar.gz

Download URL quenda-0.3.9.tar.gz
Size 575.4 kB
Tags Source
SHA-256 checksum
How to use checksums
b6d7369d4209646ce9476c121569d9e98635ec4fec92bb9709ff77b0bdfe7404
BLAKE2b-256 checksum
How to use checksums
587e443b89b9525cac40b44b50a3ae8b5d4ed6e01dffc0b1d878ccb47edd3617
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / quenda-0.3.9-py3-none-any.whl

Download URL quenda-0.3.9-py3-none-any.whl
Size 686.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b2a55cf1549af270677527d4e72daeb9d4079180abbf6c86acef37058e995f27
BLAKE2b-256 checksum
How to use checksums
c0994d9842cbc9c891c295de3b5528219f03df617b5a7a14e81ec71bec301eee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Security for quenda 0.3.9

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for quenda-0.3.9.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

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.

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