AgentMuru
AgentMuru is a Python-native runtime and workspace for building observable, human-governed AI applications. Agents, tools, events, sessions, approvals, artifacts, workflows, and traces are the application. Muru Workspace is their UI.
from agentmuru import Agent, Application, FakeModel, tool
@tool(permission="customer.read")
def lookup_customer(customer_id: str) -> dict[str, str]:
return {"customer_id": customer_id, "status": "active"}
agent = Agent(
name="customer-intelligence",
instructions="Investigate customer questions using approved tools.",
model=FakeModel.responses("The customer is active."),
tools=(lookup_customer,),
permissions=frozenset({"customer.read"}),
)
application = Application(agent=agent, title="Customer Intelligence")
if __name__ == "__main__":
application.run()
Open http://127.0.0.1:8000 to use Muru Workspace.
Why AgentMuru
- Provider-neutral streaming model interface with a deterministic fake provider.
- Typed, ordered runtime events with replay and reconnect cursors.
- Explicit sessions, messages, runs, artifacts, approvals, usage, and traces.
- Type-derived tools with permissions, risk, timeout, retries, and redaction.
- Resumable human approval before dangerous tool execution.
- Deterministic workflows and typed agent handoffs without orchestration theater.
- FastAPI HTTP/WebSocket protocol and a purpose-built React workspace.
- Optional Databricks adapters without Databricks coupling in the runtime core.
Install and run
python -m pip install agentmuru
muru doctor
Create and run a project:
muru init my-agent --name "My Agent"
cd my-agent
muru dev app:application
Open http://127.0.0.1:8000 to use Muru Workspace. Read the complete
AgentMuru documentation for runtime,
tool, approval, integration, and deployment guides.
For source development:
git clone https://github.com/AjayAJ2000/AgentMuru.git
cd AgentMuru
python -m pip install -e ".[dev,docs]"
muru run examples.hello_agent:application
Runtime flow
User objective
-> AgentMuru Runtime
-> model stream / tool request
-> permission and optional approval
-> tool result / artifact
-> ordered events and trace
-> Muru Workspace projection
Security defaults
Tool permissions are deny-by-default when a capability is declared but not granted. High-risk and explicitly gated tools pause before execution. Sensitive arguments are redacted from public events. The server enforces session ownership, payload limits, trusted hosts, optional origin allowlists, and safe error payloads. Application owners remain responsible for provider credentials, durable store encryption, deployment auth, and sandboxing untrusted tool code.
Commands
python -m pytest -q
python -m ruff check agentmuru tests
python -m mypy agentmuru
cd frontend
npm test -- --run
npm run typecheck
npm run lint
npm run build
See https://ajayaj2000.github.io/AgentMuru/, the architecture, and the migration guide.
Status
AgentMuru is an alpha release. The in-memory stores and FakeModel are complete local
implementations. Durable stores, production model providers, MCP clients, and remote
workflow workers are extension interfaces until concrete adapters are added and verified.
License: MIT.
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 agentmuru-0.1.0.tar.gz.
File metadata
- Download URL: agentmuru-0.1.0.tar.gz
- Upload date:
- Size: 224.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d946250537bd888116637378dba8f339a23b71aa459f4813f4b6d9542c17547b
|
|
| MD5 |
10be2379e9484dadd735c763610a26fd
|
|
| BLAKE2b-256 |
7d3982634132a904162d79a29d534a6e2bf182cd08d74f0f9fad57f00afd9a97
|
Provenance
The following attestation bundles were made for agentmuru-0.1.0.tar.gz:
Publisher:
publish.yml on AjayAJ2000/AgentMuru
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentmuru-0.1.0.tar.gz -
Subject digest:
d946250537bd888116637378dba8f339a23b71aa459f4813f4b6d9542c17547b - Sigstore transparency entry: 2389983671
- Sigstore integration time:
-
Permalink:
AjayAJ2000/AgentMuru@42e145fb341e3a3c259b2b7452e0b84a0dff38c5 -
Branch / Tag:
refs/tags/agentmuru-v0.1.0 - Owner: https://github.com/AjayAJ2000
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@42e145fb341e3a3c259b2b7452e0b84a0dff38c5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file agentmuru-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentmuru-0.1.0-py3-none-any.whl
- Upload date:
- Size: 221.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b07e5e6493fbdc5c081dfae9a314f52d31f34d65ce6ed8bcbdf182650f1c1a2
|
|
| MD5 |
fb33d13cbb82b77dee54e73ea4d05a04
|
|
| BLAKE2b-256 |
1ce0080371c971bfaf61898d60407064d0e7743dc1d266f5beb05cb1faee99e1
|
Provenance
The following attestation bundles were made for agentmuru-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on AjayAJ2000/AgentMuru
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentmuru-0.1.0-py3-none-any.whl -
Subject digest:
3b07e5e6493fbdc5c081dfae9a314f52d31f34d65ce6ed8bcbdf182650f1c1a2 - Sigstore transparency entry: 2389983819
- Sigstore integration time:
-
Permalink:
AjayAJ2000/AgentMuru@42e145fb341e3a3c259b2b7452e0b84a0dff38c5 -
Branch / Tag:
refs/tags/agentmuru-v0.1.0 - Owner: https://github.com/AjayAJ2000
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@42e145fb341e3a3c259b2b7452e0b84a0dff38c5 -
Trigger Event:
release
-
Statement type: