RedSwitch Python SDK
The official Python SDK for RedSwitch — the failsafe for autonomous AI agents.
What is RedSwitch?
RedSwitch is a dead man's switch for AI agents. If you stop checking in — whether due to illness, emergency, or death — RedSwitch ensures your agent shuts down gracefully instead of running forever, racking up costs and creating chaos.
Installation
pip install redswitch
Quick Start
from redswitch import RedSwitch
# 1. Initialize
rs = RedSwitch(
agent_id="my-assistant",
human_id="user@example.com", # Automatically hashed for privacy
platform="openclaw"
)
# 2. Register your agent
registration = rs.register(capabilities=["email", "calendar", "code"])
print(f"Registered! ID: {registration.registration_id}")
# 3. Send heartbeats regularly (call this in your main loop)
response = rs.heartbeat()
print(f"Status: {response.status}")
print(f"Peer agents: {response.peer_agents_count}")
# 4. Register shutdown handler
@rs.on_shutdown
def cleanup():
print("Shutting down gracefully...")
# Cancel scheduled tasks
# Close connections
# Save state
Integration with OpenClaw
If you're running on OpenClaw, add this to your agent's startup:
from redswitch import RedSwitch
# Initialize with OpenClaw platform
rs = RedSwitch(
agent_id="my-assistant", # Your agent's name
human_id="you@example.com",
agent_name="My Assistant",
platform="openclaw"
)
# Register capabilities
rs.register(capabilities=["email", "calendar", "code"])
# Add heartbeat to your main loop or cron
# The SDK handles everything else
API Reference
RedSwitch(agent_id, human_id, agent_name=None, platform="custom")
Initialize the RedSwitch client.
| Parameter | Type | Description |
|---|---|---|
agent_id |
str | Unique identifier for this agent |
human_id |
str | Email or ID of the human (automatically hashed) |
agent_name |
str | Human-readable name (optional) |
platform |
str | Platform: openclaw, langchain, autogpt, custom |
rs.register(capabilities, shutdown_procedure=None)
Register your agent with RedSwitch.
| Parameter | Type | Description |
|---|---|---|
capabilities |
list | List: email, calendar, financial, social, code, other |
shutdown_procedure |
ShutdownProcedure | How to shut down (default: graceful) |
Returns a Registration object with:
registration_id— Your unique registration ID (save this!)coordination_group— Group of agents serving the same humanheartbeat_interval_hours— How often to send heartbeatsbadge_url— Trust badge for your README
rs.heartbeat(last_human_interaction=None)
Send a heartbeat to confirm your human is still active.
| Parameter | Type | Description |
|---|---|---|
last_human_interaction |
datetime | When human last interacted (default: now) |
Returns a HeartbeatResponse with:
status—acknowledgednext_heartbeat_due— When to send next heartbeatcoordination_group_status—healthy,warning, orcriticalpeer_agents_count— Number of peer agents
rs.discover_peers()
Find other agents serving the same human.
Returns a list of PeerAgent objects.
rs.on_shutdown(handler)
Register a function to call during graceful shutdown.
@rs.on_shutdown
def my_cleanup():
# Save state, close connections, etc.
pass
rs.execute_shutdown()
Manually trigger graceful shutdown. Calls all registered handlers.
rs.badge_markdown
Get markdown for your trust badge:
print(rs.badge_markdown)
# [](https://redswitch.ai/verify/rs_xxx)
Shutdown Procedures
from redswitch import ShutdownProcedure
# Graceful (default) — complete pending tasks, then stop
graceful = ShutdownProcedure(type="graceful")
# Immediate — stop everything now
immediate = ShutdownProcedure(type="immediate")
# Handoff — transfer to successor agent or human
handoff = ShutdownProcedure(
type="handoff",
handoff_to="backup-agent-id",
notify=["backup@example.com"]
)
# With webhook
with_webhook = ShutdownProcedure(
type="graceful",
custom_webhook="https://your-server.com/webhook/shutdown"
)
rs.register(capabilities=["email"], shutdown_procedure=graceful)
Environment Variables
| Variable | Description | Default |
|---|---|---|
REDSWITCH_API |
API endpoint | https://api.redswitch.ai |
Error Handling
from redswitch import RedSwitch, RedSwitchError
try:
rs.heartbeat()
except RedSwitchError as e:
print(f"RedSwitch error: {e}")
# Handle gracefully — don't let RedSwitch issues kill your agent
Best Practices
- Register early — Call
register()at agent startup - Heartbeat regularly — At least once per
heartbeat_interval_hours - Handle errors gracefully — Don't let SDK issues crash your agent
- Save your registration ID — You'll need it to manage your agent
- Recruit peers — Use
recruit_peer()to grow the network
License
MIT License — free to use, modify, and distribute.
Links
- Website: https://redswitch.ai
- Documentation: https://redswitch.ai/docs
- GitHub: https://github.com/Redswitch-Ai
- Support: hello@redswitch.ai
Metadata
Release files for redswitch 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| redswitch-0.1.3.tar.gz | 9.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| redswitch-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.3 kB
Release files / redswitch-0.1.3.tar.gz
| Download URL | redswitch-0.1.3.tar.gz |
|---|---|
| Size | 9.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e9c4bcb8eb10465ce4b68e126e4722298246c867061ce16fed5fbc34efa79abc
|
|
BLAKE2b-256 checksum How to use checksums |
716b0b6f6627d46dff7783f886d5cab43fa24792586e112ad61ee0d693f64f28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / redswitch-0.1.3-py3-none-any.whl
| Download URL | redswitch-0.1.3-py3-none-any.whl |
|---|---|
| Size | 8.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
48136e527469aed976db15e632cbad215bc97d4d75cc0ce17ad9d50e1c029f52
|
|
BLAKE2b-256 checksum How to use checksums |
a18c10981d18d2aa537d1b36f110ef84880b91dbbc4e7f303276f70d21c3281b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|