agentpanel
A small, domain-agnostic core for multi-agent LLM workflows on LangGraph:
- Specialists produce artifacts in parallel.
- Reviewers judge each other's artifacts; rejections send the author back to revise, with the feedback, for a bounded number of rounds.
- A coordinator assembles the result, including anything still unresolved.
It runs on local models by default (Ollama), with bring-your-own-key OpenAI and Anthropic support, and gets reliable structured output from small models.
pip install agentpanel # Ollama only
pip install "agentpanel[cloud]" # plus OpenAI and Anthropic
Example
import asyncio
from agentpanel import AgentContext, LLMReviewer, LLMSpecialist, Workflow
from agentpanel.config import LLMSettings
from agentpanel.llm import create_chat_model
model = create_chat_model(LLMSettings()) # qwen3:8b on local Ollama by default
class Join:
async def assemble(self, ctx: AgentContext) -> str:
return ctx.artifacts["writer"].content
workflow = Workflow(
specialists=[
LLMSpecialist(
name="writer",
kind="product description",
model=model,
instructions="You write concise product descriptions.",
render=lambda ctx: f"Describe {ctx.inputs['product']} in two sentences.",
)
],
reviewers=[LLMReviewer("editor", model, "You edit marketing copy for accuracy.")],
coordinator=Join(),
max_revisions=1,
)
result = asyncio.run(workflow.run({"product": "a solar-powered kettle"}))
print(result.result, result.unresolved)
Pieces
| Module | What it gives you |
|---|---|
agentpanel.graph |
Workflow: parallel specialists, cross-review, bounded revision, progress callbacks |
agentpanel.agents |
Specialist, Reviewer, Coordinator protocols: bring any implementation |
agentpanel.llm_agents |
LLMSpecialist, LLMReviewer: prompt-driven agents with revision handling |
agentpanel.structured |
ainvoke_structured: pydantic-validated output with error feedback and domain checks; constrained decoding on Ollama |
agentpanel.llm |
create_chat_model, check_provider: provider factory and health checks |
agentpanel.config |
LLMSettings: env/.env settings, per-agent model and reasoning overrides |
agentpanel.testing |
ScriptedChatModel: a deterministic fake chat model for tests |
Configuration
LLMSettings reads AGENTPANEL_* environment variables (subclass it to use your own
prefix): PROVIDER (ollama, openai, anthropic), MODEL, BASE_URL, TIMEOUT,
REASONING, CONTEXT_WINDOW, AGENT_MODELS, AGENT_REASONING. Cloud keys use the
standard OPENAI_API_KEY / ANTHROPIC_API_KEY.
Built for and used by API Shakedown, where the source lives. Issues and contributions: see that repository.
License
MIT
Metadata
Release files for agentpanel 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agentpanel-0.1.0.tar.gz | 18.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agentpanel-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.0 kB
Release files / agentpanel-0.1.0.tar.gz
| Download URL | agentpanel-0.1.0.tar.gz |
|---|---|
| Size | 18.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
80745fe41ca9d2f3fe152d0be25d52374bcaece31b790926933699b5df8c3f83
|
|
BLAKE2b-256 checksum How to use checksums |
bd690ec7045a72d9259d46496cbb78e7bdc100561c3d4886c1c82b9d16c604f9
|
| 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 Oct 11, 2026.
Transparency logRelease files / agentpanel-0.1.0-py3-none-any.whl
| Download URL | agentpanel-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
df5bcfc02ae270d24d1c1f190d8a4fd9fbd4d653ead0c264855755ffd08bcda2
|
|
BLAKE2b-256 checksum How to use checksums |
551275e0a599eef6fe49145ee12765382f10640cec38b70db10a59d6b8fd45f0
|
| 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 Oct 11, 2026.
Transparency log