Foundry is a Python, Apache-2.0 licensed agentic engineering framework from Promptise that gives developers one install for building AI agents, the tools they call, the reasoning they follow, and the governed runtime that serves them to customers.
What it is
Foundry is a full-stack framework for building AI agents. Its README describes it as one framework rather than a collection of libraries: the agent, the tools the agent uses, the reasoning engine that decides how the agent thinks, the runtime that keeps it running, and the security and governance layer needed to put it in front of paying customers all ship in the same package. The install is published to PyPI as promptise, and the framework lives in the Python ecosystem alongside the model SDKs and agent libraries it absorbs.
The concrete problem it solves is assembly cost. A typical agent stack is built by hand from a model SDK, a tool layer, a vector database, authentication, guardrails, a job runner, and logging, all glued together and kept alive by the team that wrote it. Foundry replaces that hand-assembled stack with a single framework where memory, security, multi-tenancy, human approvals, runtime, and observability are already present and each switched on with a parameter. The stated payoff is that a prototype can become something shippable without rebuilding the production layer, and that the same install which runs one agent on a laptop can run a fleet serving real users.
Key capabilities
build_agent() turns any supported model into a working agent and discovers tools on its own from connected MCP servers, configured through HTTPServerSpec(url="http://localhost:8000/mcp").
- Persistent memory via
ChromaProvider(persist_directory="./memory"), searched before every reply.
PromptiseSecurityScanner.default() blocks prompt injection and redacts PII, enabled as a single guardrails parameter.
SemanticCache() serves similar queries from cache instead of re-invoking the model.
- A reasoning engine that lays out agent thinking as a readable graph, with seven presets covering research, debate, plan-act-reflect, one-shot self-verify, and write-one-program shapes.
- An MCP Server SDK where
@server.tool() turns a plain Python function into an MCP tool whose schema is derived from type hints, with authentication, per-tool permissions, rate limits, circuit breakers, and tamper-evident audit logs.
- Provider-agnostic model support across OpenAI, Anthropic, Gemini, a local model via Ollama, and anything built on LangChain, plus
observe=True tracing of every step.
Who uses it and how
- Teams moving an agent prototype toward paying customers who would otherwise rebuild the production layer, because multi-tenancy, approvals, and observability are already inside.
- Multi-tenant product builders who need governed, secure, observable agent fleets rather than a single laptop agent.
- Tool authors who write one Python function with
@server.tool() and reuse it across Foundry agents as well as Claude Desktop, Cursor, and other MCP clients.
- Teams with mixed or local model requirements, since the same code path serves hosted providers and a local model through Ollama.
- Developers who want to control agent reasoning explicitly through graph presets rather than accepting an opaque tool loop, for example research or debate shapes.
Getting started
Install with pip install promptise, then call build_agent() with a model string such as openai:gpt-5-mini and pass the optional parameters for memory, guardrails, cache, and tracing. Documentation, a quick start, and a blog are linked from the project homepage at promptise.com.
How it compares
No list of paid products this project replaces is provided in the facts. Among the tools the facts name, LangChain is positioned as something Foundry builds on rather than competes with, since models built on LangChain work inside Foundry, while MCP clients such as Claude Desktop and Cursor are the other half of the tool story: a tool written once for Foundry's MCP Server SDK works in those clients too. The contrast the README draws is therefore against a hand-assembled stack of separate libraries, not against a single named competitor.
When to use it — and when not to
A self-hoster still operates the pieces the framework does not host: the vector store behind ChromaProvider, the MCP tool servers the agent connects to over HTTP, and credentials for whichever model provider is chosen, whether that is a hosted API or a local Ollama instance. Anyone whose needs are a thin wrapper around one model call should not adopt something that bundles a runtime, security layer, and governance model they will not use. The honest caveat is maturity: with 872 stars and 129 forks, Foundry is early in its adoption curve despite claiming coverage of the full production stack, so teams should weigh that against the framework's breadth before standardising on it.
project readme (upstream, from github) — read inline

Promptise Foundry
The first full-stack Agentic Engineering framework.
Build agents and the tools they use. Design how they reason. Run them as autonomous, governed systems.
Ship them to real customers — multi-tenant, secure, and observable. One framework, not a dozen libraries.
Website
·
Documentation
·
Quick Start
·
Blog
·
Discussions
What Promptise is
Promptise is one framework for the whole job of building with AI agents — the agents, the tools they use, the reasoning behind them, the runtime that keeps them running, and the security and governance to put them in front of customers. Not a single feature, but the full stack you'd otherwise assemble from a dozen separate libraries.
Most agent stacks are assembled by hand: a model SDK, a tool layer, a vector database, auth, guardrails, a job runner, logging — glued together and kept alive by you. Promptise pulls all of it into one framework. build_agent() and a Python decorator give you the agent and its tools; memory, security, multi-tenancy, human approvals, a runtime, and observability are already inside, each switched on with a parameter.
The impact: you build what your agent does, not the ten libraries underneath it. A prototype becomes something you can put in front of paying customers without rebuilding the production layer each time — and the same install that runs one agent on your laptop runs a fleet serving real users.
Get started in 30 seconds
pip install promptise
import asyncio
from promptise import build_agent, PromptiseSecurityScanner, SemanticCache
from promptise.config import HTTPServerSpec
from promptise.memory import ChromaProvider
async def main():
agent = await build_agent(
model="openai:gpt-5-mini",
servers={
"tools": HTTPServerSpec(url="http://localhost:8000/mcp"),
},
instructions="You are a helpful assistant.",
memory=ChromaProvider(persist_directory="./memory"), # remembers across calls
guardrails=PromptiseSecurityScanner.default(), # blocks injection, redacts PII
cache=SemanticCache(), # serves similar queries instantly
observe=True, # traces every step
)
result = await agent.ainvoke({
"messages": [{"role": "user", "content": "What's the status of our pipeline?"}]
})
print(result["messages"][-1].content)
await agent.shutdown()
asyncio.run(main())
One call. The agent finds its tools on the MCP server on its own. Memory, guardrails, cache, and tracing are each a single line —
and the ones you don't pass cost you nothing. Works with OpenAI, Anthropic, Gemini, or a local model via Ollama.
The five parts of the framework
Each replaces a stack of libraries you'd otherwise wire together yourself.
01
🤖
|
Agent
One function turns any model into a working agent.
build_agent() connects to your tool servers, discovers the tools on its own, and gives the agent what it needs to be useful in practice: memory that's searched before every reply, a security scanner that blocks prompt injection and redacts PII, response caching, sandboxed code execution, and full tracing. Each is one parameter. Any model — OpenAI, Anthropic, Gemini, a local model, or anything built on LangChain.
Agent docs →
|
|
02
🧠
|
Reasoning Engine
Decide how the agent thinks — or use a preset.
Most tasks run fine on the default tool loop. When you need more control, lay out the agent's reasoning as a graph you can read and change: think, use tools, check its own answer, then respond. Seven presets cover common shapes — research, debate, plan-act-reflect, one-shot self-verify, write-one-program — and you build your own when none fit. No black box.
Reasoning docs →
|
|
03
🔧
|
MCP Server SDK
Build a tool once; every agent can use it.
Write a Python function, add @server.tool(), and it becomes an MCP tool with a schema taken straight from your type hints. The same tool works with Promptise agents and with Claude Desktop, Cursor, and any other MCP client. It comes with authentication, per-tool permissions, rate limits, circuit breakers, tamper-evident audit logs, a background job queue, and a test client that runs the whole request path without a network.
MCP docs →
|
|
04
⚡
|
Agent Runtime
Keep agents running, on budget, and recoverable.
Turn an agent into a long-running process that wakes on a schedule, a webhook, or a file change. It writes down every step, so a crash resumes from where it stopped instead of starting over. Set limits on tool calls and spend, watch for stuck or looping behavior, and require a human when it hits something risky. Run one, or a fleet across machines.
Runtime docs →
|
|
05
✨
|
Prompt Engineering
Prompts you can version and test, not strings you paste.
Assemble a system prompt from typed blocks with a token budget, let it change across the phases of a conversation, and check it with the same kind of tools you use for code. Version prompts, roll back a bad one, and trace exactly how each was built — so a prompt change is a reviewable diff, not a mystery.
Prompts docs →
|