The failsafe for autonomous AI agents - dead man's switch for AI
Project description
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
Project details
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 redswitch-0.1.3.tar.gz.
File metadata
- Download URL: redswitch-0.1.3.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9c4bcb8eb10465ce4b68e126e4722298246c867061ce16fed5fbc34efa79abc
|
|
| MD5 |
9b39f70d6f45416ce416b39679e529d4
|
|
| BLAKE2b-256 |
716b0b6f6627d46dff7783f886d5cab43fa24792586e112ad61ee0d693f64f28
|
File details
Details for the file redswitch-0.1.3-py3-none-any.whl.
File metadata
- Download URL: redswitch-0.1.3-py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48136e527469aed976db15e632cbad215bc97d4d75cc0ce17ad9d50e1c029f52
|
|
| MD5 |
39210350c0a70f2ae700ec4c7fd0f310
|
|
| BLAKE2b-256 |
a18c10981d18d2aa537d1b36f110ef84880b91dbbc4e7f303276f70d21c3281b
|