Observed since 20 Oct, 21:46 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Official Python SDK for agentctl — sign, hash-chain, and govern every agent action. Zero dependencies.
Official Python SDK for agentctl — sign, hash-chain, and govern every action your AI agents take. The event format is the open AGP spec, so what you emit is portable and independently verifiable. Standard library only, no dependencies.
pip install agentctl-sdk
The PyPI package is
agentctl-sdk; the import name isagentctl. (Do notpip install agentctl— that is an unrelated package.)
import os
from agentctl import Agentctl
ac = Agentctl("https://app.agentctl.io", os.environ["AGENTCTL_TOKEN"], default_vendor="openai")
ac.record_action(
agent_id="billing-bot",
tool="stripe.refund",
target="cus_9021",
decision="allowed",
)
Every call returns the signed, hash-chained record:
r = ac.record_action(agent_id="billing-bot", tool="email.send", target="x@acme.com")
# r["event_id"], r["prev_hash"], r["this_hash"], r["scf_controls"], r.get("duplicate")
Group an agent's steps into one trace — events chain parent → child automatically:
run = ac.run() # or ac.run("trc_my_id")
run.record_action(agent_id="research-agent", type="session_open")
run.record_action(agent_id="research-agent", tool="web.search", target="market sizing")
run.record_action(agent_id="research-agent", tool="snowflake.query", target="prod.orders")
run.record_action(agent_id="research-agent", type="session_close")
from agentctl import hash_principal
ac.record({
"actor": {"agent_id": "claude-code", "vendor": "anthropic", "model": "claude-opus-4-8",
"framework": "claude-code", "human_principal": hash_principal("user@acme.com")},
"action": {"type": "tool_call", "tool_name": "bash", "target_resource": "cat .env"},
"policy": {"decision": "blocked", "rule_id": "rule_secret_file"},
})
hash_principal() SHA-256s a user id so you never store it in plaintext.
Agentctl(base_url, token, *, default_vendor="custom", timeout=10.0).record(event) -> dict.record_action(agent_id, *, tool=, target=, decision=, type=, vendor=, model=, framework=, principal=) -> dict.run(trace_id=None) -> Run with .record() / .record_action() (auto lineage)hash_principal(user_id) -> strApache-2.0.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.1 | 21 Jul 2026 | 0 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:46 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:7d99fdd87b4da713d43c25e1c8824be26d3c64542897700005f4d3d27cbc9908