Skip to main content

exit-door 𓉸

PyPI tests Python license

𓉸 Passage Protocol · exit-door · entry-door · mcp · langchain · vercel · eliza · eas · erc-8004 · sign · python

⚠️ Pre-release software -- no formal security audit has been conducted. This project is published for transparency, review, and community feedback. It should not be used in production systems where security guarantees are required. If you find a vulnerability, please report it to hawthornhollows@gmail.com.

Vehicle registration for AI. Cryptographic proof that an agent left, when, and why. Python SDK.

What is EXIT?

The EXIT Protocol creates verifiable departure records for AI agents. When an agent leaves a platform, it can create a cryptographically signed marker proving it departed, preserving reputation and continuity across contexts.

Think of it as a passport stamp for AI agents.

Quick Start

pip install exit-door

Create a signed departure marker in 3 lines:

from exit_door import quick_exit, quick_verify

result = quick_exit("https://platform.example.com")
print(result.marker.id)  # urn:exit:a1b2c3...

Verify a marker:

verification = quick_verify(result.marker)
assert verification.valid  # True

From JSON:

from exit_door import to_json, quick_verify

json_str = to_json(result.marker)
verification = quick_verify(json_str)  # Accepts both strings and objects

Core API

from exit_door import (
    generate_identity,
    create_marker,
    sign_marker,
    verify_marker,
    from_json,
    to_json,
    ExitType,
    ExitStatus,
)

# Generate an identity (DID + Ed25519 keypair)
identity = generate_identity()
print(identity.did)  # did:key:z6Mk...

# Create an unsigned marker
marker = create_marker(
    subject=identity.did,
    origin="https://platform.example.com",
    exit_type=ExitType.VOLUNTARY,
)

# Sign it
signed = sign_marker(marker, identity.private_key, identity.public_key)

# Serialize to JSON (camelCase, spec-compliant)
json_str = to_json(signed)

# Parse and validate from JSON
parsed = from_json(json_str)

# Verify signature
result = verify_marker(parsed)
assert result.valid

P-256 Support

result = quick_exit("https://example.com", algorithm="P-256")
# Uses ECDSA P-256 with low-S normalization for cross-language compatibility

Features

  • Ed25519 + P-256 signing and verification
  • Pydantic v2 models with full type annotations and py.typed
  • RFC 8785 JCS canonicalization for deterministic signing
  • did:key encoding/decoding (Ed25519 + P-256)
  • Content-addressed marker IDs (SHA-256)
  • Cross-language compatible with the TypeScript exit-door package
  • Frozen models (immutable after creation)
  • Zero async dependencies (sync-only, CPU-bound crypto)

Cross-Language Compatibility

This package produces markers that verify correctly with the TypeScript exit-door package and vice versa. Key interop decisions:

  • P-256 signatures use compact r||s format with low-S normalization
  • Ed25519 multicodec prefix: [0xed, 0x01] (varint)
  • Domain prefix: "exit-marker-v1.2:"
  • Base64 standard encoding (not URL-safe)
  • Timestamps: millisecond precision with Z suffix

Ecosystem

Package Language Description
exit-door TypeScript Core protocol (reference impl)
exit-door Python Core protocol ← you are here
cellar-door-entry TypeScript Arrival/entry markers
@cellar-door/langchain TypeScript LangChain integration
cellar-door-langchain Python LangChain integration
@cellar-door/vercel-ai-sdk TypeScript Vercel AI SDK
@cellar-door/mcp-server TypeScript MCP server
@cellar-door/eliza TypeScript ElizaOS plugin
@cellar-door/eas TypeScript EAS attestation anchoring
@cellar-door/erc-8004 TypeScript ERC-8004 identity/reputation
@cellar-door/sign-protocol TypeScript Sign Protocol attestation

Paper · Website

License

Apache-2.0

Metadata

Release files for exit-door 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for exit-door 0.1.0
File Size Uploaded
exit_door-0.1.0.tar.gz 28.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for exit-door 0.1.0
File Interpreter ABI Platform
exit_door-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 53.5 kB

Release files / exit_door-0.1.0.tar.gz

Download URL exit_door-0.1.0.tar.gz
Size 28.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f91c08be3a5f1286002317456af874cf792f4ef117a7657736d15557b8f29c6c
BLAKE2b-256 checksum
How to use checksums
68d5c6862e23d12446866d70973e2ba433788eb8a5ea410d7bd2b2afb4912833
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.2

Release files / exit_door-0.1.0-py3-none-any.whl

Download URL exit_door-0.1.0-py3-none-any.whl
Size 25.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e05fb1aa8790808173678270223cfcc797d3dd4bcff9c89c1f46276243141c5f
BLAKE2b-256 checksum
How to use checksums
6a6b718da3812ac3ae61d0ce90fa68d02580c33072e10a23b2faa8797e429193
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.2

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page