Identify the installed contract
Before editing an integration:- Resolve the exact executable your script or MCP configuration launches. Keep the CLI paired with its app and environment.
- Record the app version and build. On macOS, read the app bundle’s
Info.plist. The Transcription-generation CLI rejects--version. - Read root and nested help from that executable. For MCP, initialize that server and read
tools/list,resources/list,resources/templates/list, andprompts/list. Tool availability can depend on the session. - Select the matching column below. Update only to commands and schemas the installed executable exposes. If the app and CLI disagree, resolve the installation mismatch before testing actions.
Detect the command contract instead of assuming a minimum version from this table. A root command’s presence alone does not prove a flag, MCP tool, or app capability is available.
Update commands and defaults
Every command below starts withtuple. Preserve the exact executable path in scripts and bundled integrations.
The inspected 3.2.0 root help does not list
machines. On a Capture-generation installation that exposes it, use machines list and pass its machine UUID to call start <person-or-machine-id>. Keep person-name resolution separate from machine IDs.
Contacts and rooms retain their command groups. Verify filters through nested help. Notifications use notifications send, ask, list, and cancel; replace legacy notifications list --follow with notifications follow. Replace contacts list --follow with contacts follow. Rooms use rooms follow for updates and rooms show for one room. Verify each command separately instead of replacing flags globally.
Terms such as sessions, --session, review/headless modes, and mcp serve can occur in older skills but are absent from the inspected baseline’s public command tree. Remove those assumptions. Use Call selectors, connect prompt for instructions, and tuple mcp as the server entry point. A Capture recording selector is --recording <uuid>; it is distinct from a connected client’s session identity.
In cli.toml, remove the obsolete mcp_installed bookkeeping key. Keep client registration in the client’s MCP configuration. For requested ongoing participation, per-harness attention defaults use [harness.<key>.attention] with batch and wake_on; saving those defaults does not start a reader. See configuration fields.
Preserve Capture meaning and delivery
capture show --format json returns a finite sequence of JSON Lines. capture follow --format json and capture next --format json also emit JSON Lines. Parse each stream line separately and distinguish durable records from framing.
The categories are transcript, events, and content. Replace any conversation category assumption with the appropriate supported category. The record type transcription_finished still identifies finalized speech; a product command rename does not rename record types.
For an explicitly requested ongoing task:
- Keep one reader for the selected call. Its first read supplies catch-up, so a separate initial snapshot can duplicate context.
- Deliver durable records to the model or destination. Save the highest positive record
idonly after that delivery succeeds. - Resume with that ID, the same call or recording selector, and the same exclusions. Retain the prior checkpoint after a delivery failure.
- Handle
kind: "status"separately from durable records. Carry terminal framing to the task controller so it can stop at call end. Neither framing nor an ephemeralid: 0advances the checkpoint. - Stop a call-specific reader at
call_ended.recording_endedmeans Capture stopped and may restart within the call. A follower without a call selector stays open across calls, so use it only when the user’s task covers those calls.
--cursor 0 on the next invocation to wait for records instead of repeating immediate catch-up. Keep the prior cursor after later empty batches.
--since selects time-based catch-up. It is not a delivery checkpoint. --until belongs to bounded show, not live readers. For Capture exclusions, keep at least one category.
Exports take a file destination. They preserve the previous destination if no calls match and replace it only after a complete artifact is ready. Create a private temporary directory for verification instead of overwriting an existing export.
call_id so a multi-call export remains attributable.
Update MCP configuration and allowlists
Keeptuple mcp as the server command and point it at the matching bundled executable. Reconnect the client after changing configuration, then refresh discovery. Keep the client-specific server prefix when replacing allowlisted tool suffixes.
Resource migrations are explicit reads:
Remove resource subscriptions and their re-read callbacks. A bounded snapshot does not replace a subscription’s ongoing behavior; implement explicit reader ownership for a task that needs it.
find_discussion and summarize_call prompts remain available. The connect prompt appears when the app permits live-call pull. Read their current argument schemas. Use ordinary search terms in examples instead of teaching agents raw database query syntax.
Resources include tuple://agent/guide, tuple://agent/guide/{topic}, and tuple://capture/{callId}. Topics include live-call, call-content, past-calls, communication, safety, connection, troubleshooting, and automation. The app’s managed mount also supplies managed-agent.
When advertised for an attached session, next_capture returns a batch with call_id, records, cursor, and terminal. Omit cursor for initial catch-up. After delivery, repeat with the returned call and cursor. If initial catch-up is empty, cursor: 0 starts waiting. Stop at terminal call_ended; retain the reader across recording_ended. Use batch, timeout, and wake_on according to the advertised schema.
Agent messaging and managed attention depend on session capabilities. Refresh discovery when it changes. The app owns managed mode and its delivery loop. Reading managed-agent or changing an allowlist does not make an attached agent managed.
Check scripts, skills, and prompts
Search the files you own, includingAGENTS.md, CLAUDE.md, skills, launch scripts, MCP configurations, and allowlists:
- Pin its executable and app environment. Keep separate verified branches if it supports both generations.
- Replace command names, flags, destinations, structured argument fields, and response parsers together.
- Make a one-time request finish after its bounded reads. Start one ongoing reader only for an explicit follow-along request.
- Remove named active/passive/watch modes and unsolicited polling from prompts. Use the installed shared guides for participation instructions.
- Preserve confirmation and user intent for call actions, notifications, exports, and deletion.
Verify behavior before declaring migration complete
Run these checks with the matching app and CLI. Report actual exit codes, stderr, parsed results, and any check you could not exercise.
The removed
screen_share_recording product flag is separate from macOS Screen Recording permission. Capture owns stored screen media. Historical selectors remain discoverable even when a call has no stored video.
Use the CLI reference, Connect guide, and MCP reference for ongoing use after migration.
