Changelog¶
All notable changes to Promptise Foundry are documented here.
v1.1.0 — 2026-07-08¶
Added¶
- Identity: Agent Identity subsystem (
promptise.identity) -- every agent gets a stable, traceable identity (who is acting), so its tool calls, audit entries, and outbound requests are attributable. An identity can be local (just anagent_id) or verifiable -- backed by a credential provider that mints a signed JWT the agent presents to the resources it calls. One class,AgentIdentity, withfrom_*factories andAgentIdentity.auto()platform auto-detection. Providers: Microsoft Entra ID, AWS IAM (STS + EKS), Google Cloud, SPIFFE/SPIRE, and a generic OIDC issuer -- with per-resource credentials, token caching, and declarative manifest config. Wired throughbuild_agent(identity=...), cross-agent calls, MCP server auth + HMAC-chained audit, runtime, and observability. Cloud SDKs are optional per provider. Hardened: providers retry transient credential-acquisition failures (timeout/connection/429/5xx) but never a 4xx auth failure; server-side JWT verification tolerates a configurable clock-skewleeway; thread-safe caching is concurrency-tested. Easier:AgentIdentity/IdentityErrorre-exported from top-levelpromptise; laptop-runnablelocalandverifiable_mcpexamples (no cloud/key); opt-in platform-gated live integration smoke tests. Docs: enterprise "why this matters", a provider decision guide, and an honest "verification status". - Engine: automatic context handling by default (
context_scope="auto") -- the default ReAct agent (and thereforebuild_agent()) now bounds context automatically. It behaves exactly like"full"while a tool loop is short (zero change to simple tasks) and switches to the deduplicated facts-ledger once the loop passesauto_ledger_after(default 6) tool results, so deep tool loops stay token-efficient with no pattern to choose. An efficiency/context primitive, not an accuracy claim (usecode-actionfor accurate aggregation over data). - Engine:
code-actionreasoning pattern --build_agent(agent_pattern="code-action"). For aggregation / data-traversal tasks the model writes one Python program over your tools in a single LLM turn, instead of chaining dozens of conversational tool calls. The program runs in the hardened Docker sandbox (read-only rootfs, dropped capabilities, no network); its tool calls bridge back to the real host tools over a filesystem-RPC channel, where each tool keeps its protections -- approval gates if configured, plus budget/health/audit hooks when the Agent Runtime has attached them -- and the node enforces a hard per-runmax_tool_callscap regardless. The sandbox is auto-enabled (requires Docker), with bounded self-repair on a crash. Best with tools that return structured data (lists/dicts/numbers). - Engine:
verifyreasoning pattern --build_agent(agent_pattern="verify")runs a single-pass self-verifying reasoning node (plan -> solve -> self-check -> final answer) at one-turn latency. It matches a plain prompt on models that already reason internally, and recovers errors a single pass would miss on weaker/mainstream models -- a good default when you want a self-checking answer without a multi-stage pipeline. - Engine:
PromptNode(context_scope="scoped")-- context-lifecycle management for multi-stage reasoning graphs. A scoped node sees only its own working set -- its system prompt (carrying any inherited/distilled state), the task, and its in-progress tool loop -- not the verbose messages produced by other stages, so token usage does not grow super-linearly across stages. Opt-in;context_scope="full"(the default) preserves existing behavior. -
Engine:
managedtool pattern +PromptNode(context_scope="ledger")--build_agent(agent_pattern="managed")runs a context-managed tool loop for deep multi-tool tasks. Instead of an ever-growing transcript (where the model loses track and re-queries the same facts), the node keeps a compact, deduplicated "facts gathered" ledger and serves identical(tool, args)calls from cache. It cuts redundant tool calls and bounds token growth at equal accuracy -- an efficiency/cost win for long chains (an efficiency primitive, not an accuracy claim). -
MCP server: first-class multi-tenancy --
tenant_idas a structural isolation invariant. Server side:ClientContext.tenant_idfrom a configurable JWT claim or API-key config, tenant-qualified rate-limit buckets, tenant in audit entries,RequireTenant/HasTenantguards,MCPServer(require_tenant=True). Agent side:CallerContext.tenant_id+isolation_key(tenant::user) feeding cache scope keys, memory scoping, and conversation ownership -- two tenants with the sameuser_idcan never see each other's data.SemanticCache.purge_user(user_id, tenant_id=...)purges exactly one tenant's scope. - MCP server: server-side approval gates (HITL) --
@server.tool(requires_approval=True)+ApprovalGateMiddlewareenforce human approval for any MCP client. Fail-closed: denied on timeout by default, denied onmodified_arguments, and an ungated declaration refuses to build. Guards run before a reviewer is asked, self-approval is rejected (four-eyes), and the flag survives router/mount composition. Approvers:PendingApprover(pending store + role-guardedapprovals_list/approvals_decideadmin tools),ElicitationApprover(asks the human behind the calling client; fail-closed without a live session), or any existingpromptise.approvalhandler (sharedApprovalRequest/ApprovalDecisionprotocol).
Changed¶
- Dependencies: eight Dependabot updates consolidated into this release and tested together, so the whole upgrade lands and verifies as one unit -- pydantic >=2.13.3, cryptography >=46, orjson >=3.11.8, numpy >=2.2.6, and the latest langchain / langchain-openai lines, plus GitHub Actions bumps (checkout v7, setup-python v6, codecov v7, codeql v4).
- CI: verified against the latest majors a clean install resolves -- langchain 1.x (langchain-core 1.4.8), numpy 2.5, mypy 2.x, pytest 9.x -- the framework is runtime-compatible (full suite green) with no dependency caps. Compatibility fixes: dependency-resolution unblock (drop
pyspiffe->grpciofrom thedevextra), an import-cycle break (cross_agent<->observability), a numpy-2.x stubmypyoverride, and a widenedon_llm_new_tokenoverride for langchain-core 1.x. - CI: cross-platform green -- two POSIX-only identity tests made platform-agnostic for Windows; the real-model ML-guardrail tests are skipped on macOS hosted CI only (gated on
darwin && $CI), where the DeBERTa injection scores flap below the 0.85 threshold, and still run on Linux CI, Windows CI, and local macOS dev. The full 30-check matrix passes.
Fixed¶
- Engine: routing-hint noise -- a linear node (a single
default_nextwith no real branch) no longer receives a "choose the next step" instruction. The hint could be echoed as the answer by weaker models; it now appears only at genuine branch points (two or more distinct targets). - CLI:
promptise servenow ships -- the documented deployment command was never registered in the CLI. It now resolves themodule:attributetarget, validates it is anMCPServer, and serves over stdio / HTTP / SSE with--dashboardand--reloadsupport. - MCP server: declared per-tool rate limits are enforced --
@server.tool(rate_limit="100/min")was stored but never read. The spec is parsed at registration (malformed specs raise immediately) and enforced automatically -- per client when authenticated, a shared bucket otherwise -- raisingRateLimitErrorwith aretry_after_secondshint.TestClientenforces the same contract. New public API:parse_rate_limit,DeclaredRateLimitMiddleware. - Core:
CallerContextsurvives cross-agent delegation -- a peer invoked viaask_peer/broadcastoverwrote the ambient caller withNone, dropping the original user at every hop.PromptiseAgent.ainvokenow inherits the ambientCallerContextwhen no explicitcalleris passed (an explicitcaller=still wins), keeping peer cache/memory/guardrails/conversations attributed to the original human principal. - Docs: removed the phantom
AgentAccessPolicy-- design docs referenced a class that never existed; replaced with the real layered access-control model (transport auth providers, per-tool guards,CallerContext, runtime open-mode guardrails). - Config: dict-form server specs carry every field -- a server passed as a raw dict (in runtime config and
.agentmanifests) no longer silently drops supported fields: HTTP keepsauth, stdio keepscwdandkeep_alive, so a dict config behaves identically to the equivalentHTTPServerSpec/StdioServerSpec. The runtime normalization is factored into a single_resolve_server_specshelper. - MCP client: stdio
cwdis honored end-to-end --StdioServerSpec(cwd=...)previously never reached the launched MCP subprocess (the nativeMCPClienthad nocwdparameter), so the server always started in the parent's working directory.cwdis now plumbed throughMCPClientinto the SDK's subprocess launch, on both the agent and runtime paths. - Runtime: agent state history is an immutable snapshot --
AgentContext.put()(and initial state) recorded the live mutable value in its timestamped mutation history by reference, so a later in-place mutation retroactively rewrote past audit records. Each history entry is now an independent snapshot while the live blackboard value stays mutable. - Observability: cross-agent delegation stamping is snapshotted -- the
delegated_byidentity written onto a peer's timeline is now copied per entry, so a later mutation of one entry's metadata can't retroactively alter its siblings.
v0.6.1¶
Fixed¶
- Runtime: cross-task MCP client issue --
AgentProcess._build_agent()now pre-discovers MCP tools before agent construction, resolvingCancelledErrorwhen the MCP SDK's cancel scopes crossed asyncio task boundaries. Tools are pre-discovered and passed asextra_toolsinstead of relying on the session-bound MCP client. - Runtime: manifest server conversion --
manifest_to_process_config()now converts plain server dicts from.agentmanifests intoHTTPServerSpec/StdioServerSpecobjects, fixingAttributeError: 'dict' object has no attribute 'transport'when starting processes from manifest files.
Added¶
- Data Pipeline Monitoring Lab (
examples/runtime/data_pipeline_lab/) -- 8 production examples demonstrating process lifecycle, triggers, journals, AgentContext, ConversationBuffer, multi-process AgentRuntime, manifest loading, and open mode with meta-tools. All examples use real LLM calls. - AI Content Creation Studio (
examples/prompts/content_studio_lab/) -- 9 runnable demos covering prompt blocks, flows, guards, strategies, context providers, chain operators, registry, inspector, and templates. All demos use real LLM calls.
v0.6.0¶
Renamed package from deepmcpagent to promptise.
Added¶
- Prompt Engineering framework -- 2-layer system for composing production prompts
- Layer 1:
PromptBlocks-- composable blocks with priority-based assembly - Layer 2:
ConversationFlow-- turn-aware prompt evolution across conversation phases PromptInspectorfor full prompt tracing and debugging
- Layer 1:
- Agent Runtime -- lifecycle container for autonomous agent processes
AgentProcesswith state machine (CREATED, RUNNING, SUSPENDED, STOPPED, FAILED)- Triggers:
CronTrigger,WebhookTrigger,FileWatchTrigger,EventTrigger,MessageTrigger AgentContextfor unified state, environment, and file mountsJournalandReplayEnginefor crash recovery.agentYAML manifest format for declarative process definitionAgentRuntimemulti-process manager with distributed coordination- CLI:
promptise runtime validate|start|logs|init
- MCP Server framework -- build production MCP servers
MCPServerwith@server.tool()decorator and Pydantic model validationMCPRouterfor grouping tools under shared prefixes and policiesAuthMiddlewarewithJWTAuthand role-based guardsLoggingMiddleware,TimeoutMiddleware,ConcurrencyLimiterBackgroundTasksvia dependency injection@cacheddecorator withInMemoryCachebackendServerSettingsfor typed, environment-backed configuration- Exception handlers for structured MCP error responses
- Lifecycle hooks (
on_startup,on_shutdown) - Live monitoring dashboard
require_authoption for fully authenticated servers
- MCP Client library
MCPClientfor single-server connections withfetch_token()helperMCPMultiClientfor multi-server routing with automatic tool discoveryMCPToolAdapterfor converting MCP tools to LangChainBaseToolinstances- Tracing callbacks (
on_before,on_after,on_error)
Changed¶
- Package name:
deepmcpagentrenamed topromptise - CLI command:
deepmcpagentrenamed topromptise - All import paths:
from deepmcpagentchanged tofrom promptise
v0.5.0¶
Initial release as deepmcpagent.
Added¶
- Core agent building with
build_agent() - MCP integration with
HTTPServerSpecandStdioServerSpec - Cross-agent communication and delegation via
CrossAgent - SuperAgent
.superagentYAML configuration format - CLI:
deepmcpagent agent|validate|init|list-tools - Sandbox execution with
SandboxConfig