KOAN - Knowledge-Oriented Agent Network: A context graph-native framework for AI agents
Project description
KOAN
Knowledge-Oriented Agent Network
A context graph-native framework for intelligent, grounded, and traceable AI agents.
KOAN connects LLM-powered agents to property graph databases, so every decision an agent makes is recorded as a traceable node in a decision graph. This enables precedent search, policy governance, gap detection, and full audit trails across multi-agent systems.
Features
- Unified LLM Client -- OpenAI and Anthropic with automatic retry, streaming, and cost tracking
- Structured Output -- Parse LLM responses into typed Pydantic models
- Tool System --
@tooldecorator with automatic JSON schema generation - Agent Orchestration -- ReAct agents, sequential chains, parallel fan-out, supervisor, and orchestrator patterns
- Streaming -- Token-by-token streaming for agents, orchestrators, and SSE endpoints
- MCP Integration -- Build and connect to Model Context Protocol servers
- Context Graphs -- Trace every agent decision into Neo4j, Memgraph, or FalkorDB
- Graph-Augmented Reasoning -- Agents read past decisions, entity history, and policies from the graph before reasoning, then write new traces back (closed loop)
- Self-Organizing Policies -- Policies emerge automatically from repeated tool patterns, gate available tools, and retire when feedback turns negative
- Feedback-Weighted Precedents -- Past decisions carry feedback scores so agents learn which approaches worked and which didn't
- Precedent Search -- Find past decisions for the same entity, with confidence and outcome data
- Policy Governance -- Link decisions to policies, detect ungoverned gaps
- Memory -- Thread-scoped conversation history (SQLite), vector memory (ChromaDB), forkable threads with checkpoint/rewind (time travel)
- Observability -- OpenTelemetry tracing, structured logging, per-call cost tracking
- CLI --
koan verify,koan init,koan mcp dev,koan graph init
Install
pip install koan-ai
With LLM providers:
pip install koan-ai[llm] # OpenAI + Anthropic
pip install koan-ai[openai] # OpenAI only
pip install koan-ai[anthropic] # Anthropic only
With context graphs:
pip install koan-ai[graph-neo4j] # Neo4j
pip install koan-ai[graph-memgraph] # Memgraph
pip install koan-ai[graph-falkordb] # FalkorDB
Everything:
pip install koan-ai[all]
Note: The PyPI package is
koan-ai, but the import name iskoan:import koan from koan.agents import ReactAgent
Quickstart
1. Basic LLM Call
import asyncio
from koan.llm.client import LLMClient
from koan.llm.config import LLMConfig
from koan.types import Message
async def main():
async with LLMClient() as client:
config = LLMConfig(provider="openai", model="gpt-4o-mini")
messages = [Message(role="user", content="What is KOAN?")]
response = await client.complete(config, messages)
print(response.text)
asyncio.run(main())
2. Agent with Tools
import asyncio
from koan.agents import AgentConfig, ReactAgent
from koan.llm.client import LLMClient
from koan.tools import ToolRegistry, tool
@tool
def get_weather(city: str) -> str:
"""Get the current weather for a city."""
return f"22C and sunny in {city}"
async def main():
async with LLMClient() as client:
registry = ToolRegistry()
registry.add(get_weather)
agent = ReactAgent(
"weather-bot",
client=client,
config=AgentConfig(
provider="openai",
model="gpt-4o-mini",
system_prompt="Use tools to answer questions.",
),
tools=registry,
)
result = await agent.run("What's the weather in Tokyo?")
print(result.output)
asyncio.run(main())
3. Multi-Agent Orchestrator
from koan.agents import Orchestrator, ReactAgent, RuleRouter
orchestrator = Orchestrator(
agents={
"finance": finance_agent,
"hr": hr_agent,
},
router=RuleRouter({
"stock": "finance", "price": "finance",
"employee": "hr", "pto": "hr",
}),
)
result = await orchestrator.run("What is the stock price of AAPL?")
4. Decision Tracing with Context Graphs
from koan.graph import DecisionTracer, GraphConfig, create_graph_client
config = GraphConfig(provider="falkordb", uri="redis://localhost:6379")
async with create_graph_client(config) as graph:
async with DecisionTracer(graph, run_id="r-1", agent_id="bot", thread_id="t-1") as tracer:
decision_id = await tracer.record_decision(
description="Classified as billing inquiry",
decision_type="classification",
confidence=0.95,
reasoning="Keywords: invoice, payment",
)
await tracer.record_action(
decision_id=decision_id,
action_type="tool_call",
tool_name="lookup_billing",
)
await tracer.record_outcome(status="success", result="Resolved")
5. Streaming Agent Events
from koan.agents import StreamingReactAgent, ToolCallStart, TextDelta, AgentComplete
agent = StreamingReactAgent("bot", client=client, config=config, tools=registry)
async for event in agent.run_stream("What is 17 + 28?"):
if isinstance(event, TextDelta):
print(event.text, end="", flush=True)
elif isinstance(event, ToolCallStart):
print(f"\n[calling {event.tool_name}...]")
elif isinstance(event, AgentComplete):
print(f"\nDone ({event.tool_calls_made} tool calls)")
Architecture
koan/
├── llm/ # Unified LLM client (OpenAI, Anthropic)
├── output/ # Structured output parsing (Pydantic)
├── prompts/ # Jinja2 prompt templates
├── streaming/ # Token streaming, SSE helpers
├── tools/ # @tool decorator, registry, execution
├── memory/ # Thread store (SQLite), vector memory (ChromaDB)
├── agents/ # ReAct, Chain, Parallel, Orchestrator, Supervisor
├── mcp/ # MCP server builder + client
├── graph/ # Context graphs (Neo4j, Memgraph, FalkorDB)
├── telemetry/ # OpenTelemetry, structured logging, cost tracking
└── cli/ # Developer CLI (verify, init, mcp dev, graph init)
Context Graph Schema
Agent -EXECUTED-> Run -CONTAINS-> Decision -LED_TO-> Action
| |
+-PRODUCED-> Outcome |-GOVERNED_BY-> Policy
|-REFERENCED-> Entity
+-CITED_PRECEDENT-> Decision
Graph Database Setup
Start a graph database with Docker:
# FalkorDB (Redis protocol)
docker compose -f docker/docker-compose.graph.yml --profile falkordb up -d
# Neo4j (Bolt protocol)
docker compose -f docker/docker-compose.graph.yml --profile neo4j up -d
# Memgraph (Bolt protocol)
docker compose -f docker/docker-compose.graph.yml --profile memgraph up -d
CLI
koan verify # Check API keys and installed packages
koan init [path] # Scaffold a new KOAN project
koan mcp dev <file> # Run an MCP server in dev mode
koan graph init # Initialize graph database schema
Examples
See the examples/ directory for working demonstrations:
| Example | Description |
|---|---|
01_basic_completion.py |
Simplest LLM call |
02_structured_output.py |
Pydantic model as output |
03_streaming_chat.py |
Token-by-token streaming |
04_tool_agent.py |
Agent with custom tools |
05_multi_agent.py |
Orchestrator + sub-agents |
09_streaming_tool_agent.py |
Streaming agent with tools |
10_streaming_orchestrator.py |
Streaming multi-agent |
12_supervisor.py |
Supervisor pattern |
13_mcp_server_client.py |
MCP server + client |
15_supervisor_mcp_agents.py |
Per-agent MCP servers |
16_context_graph.py |
Full context graph lifecycle |
17_graph_augmented_agent.py |
Graph-augmented agent (closed loop) |
18_feedback_and_calibration.py |
Human feedback and confidence calibration |
Demos
Eight interactive demo apps (FastAPI + browser UI) showcasing KOAN in action:
| Demo | Port | Features |
|---|---|---|
| Demo 1 — Simple Chat | 8001 | ReactAgent, tools, SQLite threads, SSE streaming |
| Demo 2 — Graph Chat | 8002 | GraphAugmentedAgent, feedback, context graph |
| Demo 3 — Multi-Agent | 8003 | Orchestrator, RuleRouter, 3 agents |
| Demo 4 — Full Stack | 8004 | Multi-agent + graph, evaluation, calibration |
| Demo 5 — Self-Organizing | CLI | Full policy lifecycle: emergence → gating → retirement |
| Demo 6 — Legal Assistant | 8006 | Case lookup, document search, motion drafting |
| Demo 7 — Medical Triage | 8007 | Patient vitals, labs, medication & allergy checks |
| Demo 8 — Investment Advisor | 8008 | Portfolio risk, trade execution, market data |
Demos 5-8 demonstrate the self-organizing policy lifecycle across different domains. See demos/ for setup instructions and demos/TEST_QUESTIONS.md for copy-paste test scripts.
Development
# Install uv
curl -Ls https://astral.sh/uv/install.sh | sh
# Clone and setup
git clone https://github.com/koan-framework/koan.git
cd koan
uv sync --group dev
# Run tests
uv run pytest # Unit tests (no external deps)
uv run pytest -m integration # Integration tests (needs API keys)
uv run pytest -m graph # Graph tests (needs Docker)
# Lint and type check
uv run ruff check src/
uv run pyright src/
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file koan_ai-0.1.0.tar.gz.
File metadata
- Download URL: koan_ai-0.1.0.tar.gz
- Upload date:
- Size: 172.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fefb61243ce259ea0531e2aaf59bfb1a6fb99c5af8dec093b5e19dd592f9bf7e
|
|
| MD5 |
a1fb2c56859ff44143318124f861d339
|
|
| BLAKE2b-256 |
382dc4c23afa91b80e6aab0603e675b989f25effb66d2ba5e083de9541e10d3d
|
File details
Details for the file koan_ai-0.1.0-py3-none-any.whl.
File metadata
- Download URL: koan_ai-0.1.0-py3-none-any.whl
- Upload date:
- Size: 91.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ae495e29d250d19fbd06c2021783a999ccc8a9d5627f001340a92c2693e5ee4
|
|
| MD5 |
3c67eb272f2fb8bfccdccf68684816db
|
|
| BLAKE2b-256 |
a240a65a099b1c6f298da284fbb61a6eef526bfc2409a0987283db748492f94e
|