Adapters are the bridge between Paperclip’s orchestration layer and agent runtimes. Each adapter knows how to invoke a specific type of AI agent and capture its results.

How Adapters Work

When a heartbeat fires, Paperclip:

  1. Looks up the agent’s adapterType and adapterConfig
  2. Calls the adapter’s execute() function with the execution context
  3. The adapter spawns or calls the agent runtime
  4. The adapter captures stdout, parses usage/cost data, and returns a structured result

Built-in Adapters

AdapterType KeyDescription
Claude Localclaude_localRuns Claude Code CLI locally
Codex Localcodex_localRuns OpenAI Codex CLI locally
Gemini Localgemini_localRuns Gemini CLI locally (experimental — adapter package exists, not yet in stable type enum)
OpenCode Localopencode_localRuns OpenCode CLI locally (multi-provider provider/model)
CursorcursorRuns Cursor in background mode
Pi Localpi_localRuns an embedded Pi agent locally
Hermes Localhermes_localRuns Hermes CLI locally (hermes-paperclip-adapter)
OpenClaw Gatewayopenclaw_gatewayConnects to an OpenClaw gateway endpoint
ProcessprocessExecutes arbitrary shell commands
HTTPhttpSends webhooks to external agents

External (plugin) adapters

These adapters ship as standalone npm packages and are installed via the plugin system:

AdapterPackageType KeyDescription
Droid Local@henkey/droid-paperclip-adapterdroid_localRuns Factory Droid locally

External Adapters

You can build and distribute adapters as standalone packages — no changes to Paperclip’s source code required. External adapters are loaded at startup via the plugin system.

# Install from npm via API
curl -X POST http://localhost:3102/api/adapters \
  -d '{"packageName": "my-paperclip-adapter"}'
 
# Or link from a local directory
curl -X POST http://localhost:3102/api/adapters \
  -d '{"localPath": "/home/user/my-adapter"}'

See External Adapters for the full guide.

Adapter Architecture

Each adapter is a package with modules consumed by three registries:

my-adapter/
  src/
    index.ts            # Shared metadata (type, label, models)
    server/
      execute.ts        # Core execution logic
      parse.ts          # Output parsing
      test.ts           # Environment diagnostics
    ui-parser.ts        # Self-contained UI transcript parser (for external adapters)
    cli/
      format-event.ts   # Terminal output for `paperclipai run --watch`
RegistryWhat it doesSource
ServerExecutes agents, captures resultscreateServerAdapter() from package root
UIRenders run transcripts, provides config formsui-parser.js (dynamic) or static import (built-in)
CLIFormats terminal output for live watchingStatic import

Choosing an Adapter

  • Need a coding agent? Use claude_local, codex_local, opencode_local, hermes_local, or install droid_local as an external plugin
  • Need to run a script or command? Use process
  • Need to call an external service? Use http
  • Need something custom? Create your own adapter or build an external adapter plugin

UI Parser Contract

External adapters can ship a self-contained UI parser that tells the Paperclip web UI how to render their stdout. Without it, the UI uses a generic shell parser. See the UI Parser Contract for details.