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.

Home→Prevent·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.