Skip to content

CellarDoorExits/vercel-ai-sdk

@cellar-door/vercel-ai-sdk

npm version tests license NIST

𓉸 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.

Add verifiable departure and arrival records to your Vercel AI SDK agents.

Ecosystem

Package Language Description
cellar-door-exit TypeScript Core protocol (reference impl)
cellar-door-exit Python Core protocol
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 ← you are here
@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

Quick Start

npm install @cellar-door/vercel-ai-sdk cellar-door-exit cellar-door-entry ai
import { generateText } from "ai";
import { openai } from "@ai-sdk/openai";
import { exitMarkerTool } from "@cellar-door/vercel-ai-sdk";

const { text, toolResults } = await generateText({
  model: openai("gpt-4o"),
  tools: { exitMarker: exitMarkerTool },
  prompt: "Complete the task and produce a departure marker for did:web:platform.example",
});

// The agent creates a signed EXIT marker automatically
// toolResults contains the verified marker JSON

Automatic EXIT on session end

import { streamText } from "ai";
import { createExitOnFinish } from "@cellar-door/vercel-ai-sdk";

const result = await streamText({
  model: openai("gpt-4o"),
  prompt: "Hello!",
  onFinish: createExitOnFinish({
    origin: "my-agent",
    onMarkerCreated: (marker, identity) => {
      console.log("EXIT marker created:", marker.id);
    },
  }),
});

EXIT Tools

Tool

import { exitMarkerTool } from "@cellar-door/vercel-ai-sdk";
// Drop into any generateText/streamText call

Middleware

import { createExitOnFinish } from "@cellar-door/vercel-ai-sdk";
// Automatic EXIT marker on session end

ENTRY Tools

Verify and Admit

import { verifyAndAdmitAgentTool } from "@cellar-door/vercel-ai-sdk";
// Agent calls with { exitMarkerJson, destination, admissionPolicy? }

Evaluate Admission Policy

import { evaluateAdmissionTool } from "@cellar-door/vercel-ai-sdk";
// Check if an EXIT marker meets a policy without creating an arrival

Verify Transfer Chain

import { verifyTransferTool } from "@cellar-door/vercel-ai-sdk";
// Verify a complete EXIT→ENTRY transfer

Full Transit Middleware (EXIT + ENTRY)

import { createTransitOnFinish } from "@cellar-door/vercel-ai-sdk";

const result = await streamText({
  model,
  prompt: "Hello",
  onFinish: createTransitOnFinish({
    origin: "platform-a",
    arrivalDestination: "platform-b",
    onMarkerCreated: (marker) => console.log("EXIT:", marker.id),
    onArrivalCreated: (arrival) => console.log("ARRIVAL:", arrival.id),
  }),
});

API

EXIT

  • exitMarkerTool — Vercel AI SDK tool for creating EXIT markers
  • createExitOnFinish(opts)onFinish callback for automatic EXIT markers
  • withExitMarker(originalOnFinish, opts) — Wraps existing onFinish to also create EXIT markers

ENTRY

  • verifyAndAdmitAgentTool — Verify EXIT marker + create arrival
  • evaluateAdmissionTool — Check if EXIT marker meets an admission policy
  • verifyTransferTool — Verify a complete EXIT→ENTRY transfer chain
  • createEntryOnStart(exitMarkerJson, opts) — Create arrival on session start
  • createTransitOnFinish(opts) — Create both EXIT and ENTRY markers on finish

Admission Policies

  • OPEN_DOOR — Accept any verified departure
  • STRICT — Voluntary only, <24h old, requires lineage + stateSnapshot
  • EMERGENCY_ONLY — Accept only emergency exits

⚠️ Disclaimer

WARNING: Automated admission decisions should be reviewed by platform operators. This integration does not constitute legal advice. Platforms are responsible for their own admission policies and the consequences of admitting agents.

License

Apache-2.0

Packages

 
 
 

Contributors