The WordPress of AI Agents - A modular, lightweight agentic framework
Project description
AgenticStack
Agents you install, not build.
AgenticStack is an open, Apache-2.0 agent runtime with typed capability contracts, permissioned plugins, and a marketplace where working agents are one command away.
pip install agenticstack
stack agent install docs-qa # shows permissions, verifies sha256
stack run docs-qa # prompts live in ./agents/docs-qa — edit freely
That's the whole pitch: a working agent in two commands, unpacked as an
editable bundle — open its prompt files, drop documents into its
knowledge/ folder, make it yours. The WordPress model, for agents.
Why AgenticStack (the honest version)
Plenty of good frameworks orchestrate agents. AgenticStack is different in five specific, checkable ways:
1. Typed capability contracts with shipped conformance suites.
Memory, vector stores, providers, retrieval, and guards are typed contracts
(agenticstack.api), each with a pytest conformance suite the framework
itself passes in CI. A plugin author subclasses one fixture; a green suite
is a proof of compatibility, not a promise. No other open framework ships
this.
# tests/test_conformance.py — this is a plugin's entire proof
import pytest
from agenticstack.testing import MemoryContract
from my_plugin import MyMemory
class TestMyMemoryConformance(MemoryContract):
@pytest.fixture
def memory(self):
return MyMemory()
2. Permissions before anything runs.
Every plugin and agent declares network / filesystem / shell / env
in its agentstack.toml manifest. You see the request at install; the
runtime refuses to load anything you haven't granted — enforced before
a single line of plugin code executes. (Loaded code runs with process
privileges — this is a guardrail and an audit surface, not a sandbox. We
say so plainly; see SECURITY.md.)
3. Packaged agents as products.
Agents ship as .stack bundles: prompts, optional skills, eval fixtures,
a knowledge folder — versioned, sha256-verified, installed into your
project where you can read and edit everything. Publishing one requires
≥5 passing eval fixtures (stack agent eval).
4. Tools that defend themselves. Our HTTP tool blocks SSRF by checking resolved addresses (including IPv4-mapped IPv6, cloud-metadata endpoints, and every redirect hop). Our SQL tool is read-only at the engine level via SQLite's authorizer callback — not a substring blacklist. Our filesystem tools resolve symlinks before deciding a path is inside the sandbox. Each control is tested adversarially, and the residual gaps (DNS rebinding, TOCTOU) are documented rather than hidden.
5. A neutral marketplace.
The registry is a static, CDN-served index over PyPI and
publisher releases — open metadata, yank kill-switch, security advisories
(stack plugin audit), verified publishers. No cloud gravity: the core
never phones home, and there is no hosted tier the framework nudges you
into.
Quickstart in code
from agenticstack import Agent, skill
@skill(id="greet", description="Greet the user")
async def greet(name: str) -> str:
return f"Hello, {name}!"
agent = Agent(
name="Greeter",
skills=[greet],
model="gpt-4o-mini", # provider inferred; 12 providers supported
memory="sqlite", # capability name -> resolved from installed plugins
guards=["pii", "secrets"], # same for guards
)
print(agent.run("Say hi to Ada"))
Capabilities resolve by name through the plugin registry — swap sqlite
for any installed memory backend without touching agent code. Providers
get retry/backoff/timeouts; the tool loop chains multi-step tool calls;
agent.stream() streams. Also built in:
from pydantic import BaseModel
from agenticstack import FallbackProvider
class Invoice(BaseModel):
total: float
currency: str
invoice = await agent.chat_structured("Bill: 3 units at $12", model=Invoice)
agent = Agent(name="Resilient", provider=FallbackProvider(["openai", "anthropic"]))
The catalog — every package is ours
No wrappers around other frameworks. Each plugin is first-party code implementing a typed contract, with its own conformance or adversarial tests and a declared permission set.
| Package | Kind | What it does |
|---|---|---|
agenticstack-vectorstore-chroma |
plugin | ChromaDB vector store (persistent or in-memory) |
agenticstack-vectorstore-qdrant |
plugin | Qdrant — in-memory, local, or remote; passes the full contract against the real client |
agenticstack-vectorstore-pgvector |
plugin | PostgreSQL/pgvector — hand-written SQL, injection-hardened identifiers |
agenticstack-memory-sqlite |
plugin | SQLite long-term memory with FTS5 search, zero deps |
agenticstack-loaders |
plugin | PDF (per-page), DOCX (sections + tables), HTML, web fetch, same-origin crawl |
agenticstack-tools-web |
plugin | HTTP client with real SSRF defense, pluggable web search, page-to-text |
agenticstack-tools-data |
plugin | Read-only SQL (engine authorizer), sandboxed filesystem, CSV querying |
agenticstack-tools-essentials |
plugin | Safe skills pack: calculator, dates, text utilities |
agenticstack-guard-secrets |
plugin | Redacts API keys/tokens/credentials from agent traffic |
agenticstack-hitl |
plugin | Approvals, review queues, feedback collection, intervention points |
agenticstack-dashboard |
plugin | Live local dashboard of plugins, hooks, and agent activity |
agenticstack-costs |
plugin | Per-agent token/cost tracking with budget warnings |
agenticstack-transcripts |
plugin | JSONL audit transcripts of every run, tool call, and error |
agenticstack-cache |
plugin | LLM response caching (in-memory LRU or SQLite) as a provider wrapper |
docs-qa |
agent | Answers strictly from your documents, with citations |
code-reviewer |
agent | Severity-ranked code review with checklist skills |
support-bot |
agent | Ticket triage with escalation rules |
invoice-bot |
agent | Invoicing and margin math that shows its work |
standup-scribe |
agent | Turns raw notes into standup summaries (prompt-only bundle) |
pip install "agenticstack[full]" # the whole catalog
Browse them in the marketplace — a static site
over the same index.json the CLI reads.
Agent architectures
Four executing reasoning patterns, not scaffolding — each emits the standard hooks, so cost tracking and transcripts work unchanged:
from agenticstack import ReActAgent, PlanExecuteAgent, ReflectionAgent, SubAgentDelegator
result = await ReActAgent(agent).run("Research X and summarize")
result.trace # (thought, action, observation) per step
result.usage # tokens/cost for the whole run
| Pattern | What it does |
|---|---|
ReActAgent |
Thought → Action → Observation with an inspectable trace and graceful step-limit fallback |
PlanExecuteAgent |
Plans, then executes dependency-ordered steps with replanning on failure |
ReflectionAgent |
Draft → critique → revise until a score threshold or iteration cap |
SubAgentDelegator |
Supervisor delegating to named specialists, concurrently, with a depth cap |
Build a plugin in 15 minutes
stack plugin create mymemory --capability memory
cd agenticstack-memory-mymemory && pip install -e ".[dev]"
stack plugin validate # manifest lint + conformance suite + import-time check
stack plugin publish # PyPI + registry PR
The failing conformance tests are the spec — implement until green. Full tutorial: docs/plugins/write-a-memory-plugin.md · manifest reference: docs/reference/agentstack-toml.md
Build an agent bundle
stack agent create my-bot --template docs-qa
# edit prompts/system.md, drop files into knowledge/
stack agent eval my-bot # fixture-based checks, pass/fail table + cost
stack agent pack my-bot # -> my-bot-0.1.0.stack + sha256
Architecture (one paragraph)
A thin core — kernel (events/config/lifecycle), agenticstack.api
(the contract surface, versioned as API_VERSION), and one plugin runtime
(agentstack.toml manifests, DISCOVERED → RESOLVED → LOADED → ACTIVE
with dependency/version/permission gating at RESOLVED) — beneath
first-party capability packages and agent bundles. Agents are wired
through public hook points (agent.before_run, before_llm_call,
before_tool_call, …), and the built-in memory, RAG, guard, and tracing
integrations attach through the same hooks and registries a marketplace
plugin uses. Also in the box: graph-based StateGraph workflows,
12 LLM providers, and offline license validation for paid plugins
(agenticstack[commerce]). Human oversight — approvals, review queues,
feedback, intervention points — is now an opt-in first-party plugin
(pip install agenticstack-hitl), included in agenticstack[full].
Status
v0.2 (alpha). APIs may change until the contracts freeze (then changes go through the contract-RFC process). The test suite — including per-capability conformance suites the built-ins must pass — runs in CI on Python 3.11–3.13. Migrating from v0.1: MIGRATION.md.
Contributing
- CONTRIBUTING.md — DCO sign-off, dev setup, plugin-vs-core guide
- GOVERNANCE.md — BDFL + contract RFCs (14-day window)
- SECURITY.md — private reporting, 72h acknowledgement
- The fastest way to contribute: publish a plugin. The registry's 90-day goal is one external plugin passing a conformance suite.
License
Apache-2.0. The AgenticStack name and logo are trademarks; see NOTICE.
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 agenticstack-0.2.0.tar.gz.
File metadata
- Download URL: agenticstack-0.2.0.tar.gz
- Upload date:
- Size: 706.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a8d7e16320adf886f44b5c553059a22a3f6dae92db54ce1b413cde272fc9b9c
|
|
| MD5 |
aeaeb1ea8ae9a8cfcacf6f3b2b872eeb
|
|
| BLAKE2b-256 |
c2d90f47c8e4cd0b9207b97fd811d804c54a5648f389545163117e878099ba41
|
File details
Details for the file agenticstack-0.2.0-py3-none-any.whl.
File metadata
- Download URL: agenticstack-0.2.0-py3-none-any.whl
- Upload date:
- Size: 395.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5b712929344110333d98dfb5632df0ace39ab9429a6840fac09cd19ec39924f
|
|
| MD5 |
7b3b898ee2429ad2a25d04e9ac15d051
|
|
| BLAKE2b-256 |
3a0eac0ba2374cb9d569fcfb08a720ce2de367bad1dcdd3e8b4279dae87eeb10
|