01 · Prevent

Refuse the action
before it lands.

Mycelium validates the call, checks scope and authority, controls execution state, and either runs, waits, returns a stored outcome, or stops safely. Invalid, unauthorized, runaway, and repeated actions stop at the boundary.

HomePrevent·Resolve·Verify

What this stops

The expensive mistake,
not the wrong answer.

Failure catalog

Named boundaries.
Not a count.

Each class maps to a runtime surface. Configure only what the workflow needs.

Shared boundary

Validate, authorize, then execute.

Applicable controls compose around one tool-call path. This example shows execution identity: the next dispatch resolves the existing transition instead of charging again.

Python applications use this boundary directly. TypeScript, Go, and other runtimes use the same authoritative engine through a self-hosted HTTP/JSON sidecar.

Full actions reference →

send_payment.py

from mycelium import load_config

config = load_config("mycelium.yaml")

@config.apply
def send_payment(amount: float, recipient: str) -> dict:
    return gateway.charge(amount, recipient)

send_payment(amount=100.0, recipient="acct_123", tool_call_id="call_pay")
duplicate dispatch returns the stored resultNO SECOND CHARGE

Next

When an outcome is uncertain,
resolve it safely.