Skip to Content
PlatformHow-to guidesEnable your twin

How to enable your twin

Use this guide when you hold a program persona other than viewer and want your twin to do the plumbing of your role between your decisions. You start on the program home with no twin; you end with a twin active whose duties each run under a standing plan you approved, and a panel that reads “Your twin · scientist · active · last pass … · next …”. Enabling a twin needs program.twins.use; it is your own act, and nobody can do it for you. Every R3 surface described here carries the status word designed until the R3 gates pass (roadmap).

Three sentences are fixed as console copy and shown on the setup screen: “Your twin proposes. You decide.” / “Your twin never approves, signs or sends.” / “Paused. Nothing runs until you resume.” A twin is never a user, a signer, an approver or a sender; the tool catalogue refuses any tool with those verbs.

Prerequisites

  • A program role that is scientist, quality_reviewer, program_lead, program_owner or manufacturing_specialist. Viewers have no twin; their home reads “Viewers have no twin. Nothing waits for you.”
  • On a partner program, a baseline row for the program in CLAIMS-REGISTER.md; the button reads “Baseline recorded on <date>” or stays disabled with “Baseline pending” (409 baseline_missing).
  • Nothing else: your twin’s tool allowlist is computed from your own live permissions, so there is nothing to grant.

Open the twin panel

On the program home, the Twin panel sits under “Decisions waiting for you”. With no twin it offers Set up your twin, which opens /p/<slug>/twin. If a phase-2 schedule of yours was moved here by the migration, the panel already shows a twin paused with “Paused: a schedule from phase 2 was moved to your twin; review it and resume”; continue with the same steps.

Step 1: what your twin will do

The persona’s default duties appear as cards, each naming its tools, the permission every tool exercises and, where knowledge.fetch_document is used, the fetch cap you can lower (“Documents fetched per pass”, default 10). A duty whose permission you lack is disabled and names the key (“Needs review.sops.manage”). Untick any duty you do not want. For a scientist the defaults are the weekly literature watch, notebook follow-through, draft readiness, report scaffold, gap hygiene and information hand-offs to the lead; for a quality reviewer SOP watch, hand-off intake, check triage and the requirement-set queue (about personas and twins).

Step 2: when

Set the brief time (digest_time), the batch times, quiet hours and the proposal expiry (default 72 h). Quiet hours hold delivery, not the record: a proposal filed at night is in your inbox at once and in your e-mail after the window. One person, one clock: the time zone is users.settings.timezone.

Step 3: what it never does

The three fixed sentences, then one standing-plan approval per enabled duty. Choosing Enable calls POST /programs/{program_id}/twins with TwinCreate {persona_key, duties, expiry_hours, digest_time, batch_times}; the API creates the twin, audits twin.create, and enqueues one planning-only twin_cycle (input.phase = standing_plan) per duty. Each plan arrives on this screen as a detached plan_approval naming the tools, sources, expected writes, budget.tool_calls, max_proposals_per_cycle, max_fetches_per_cycle and cadence. Read it and choose Approve; the audit row records permission_exercised = program.twins.use, the plan is copied to the trigger (standing_plan_json, standing_plan_hash) and the duty becomes enabled. A duty without an approved plan does not run.

Read the panel

“Your twin · scientist · active · last pass 07:10 · next 12:00 · 3 proposals waiting” with Pause, Run now and Duties, and the transparency line “0 record writes without your approval. This week: 14 reads, 8 documents fetched, 6 proposals, 4 accepted, 1 edited, 1 declined, 1 brief written (agent-generated, unsigned).” The counts are computed from records and link to the runs. Every twin run’s footer reads “Started by schedule, event, hand-off or you under <Name>’s standing plan (approved <date>, plan <hash prefix>)”.

Pausing, and what pauses it for you

Pause (POST .../twins/{twin_id}/pause, program.twins.use) stops every duty; the panel reads “Paused. Nothing runs until you resume.” An owner or lead can pause your twin with a recorded reason (program.twins.manage); the panel names the reason. The twin also pauses itself, in the same transaction as the cause, when a permission a duty needs is removed (permission_lost), when you leave the program (membership_lost) or are deactivated (user_inactive), when 80 percent of the monthly tool-call budget is used (“Paused: 1,200 of 1,500 tool calls used this month”), and when more than half of at least ten decisions in fourteen days were declines (“Paused: high decline rate, 6 of 10 declined in 14 days”). Removal from the organisation retires it and withdraws its open items. Resume re-checks the standing plans first: a changed tool list, permission set or agent version invalidates a plan’s hash and asks again.

Troubleshooting

SymptomCauseFix
Set up your twin is missingyou hold viewer, or no program personaviewers have no twin; ask an owner or lead for the persona your work needs
409 twin_active_existsyou already have an active twin in this program under another personaone active twin per person and program; retire or pause the other first
409 baseline_missingthe program is a partner program without a registered baselinethe baseline window (two full weeks on the phase-2 console) must be registered first
A duty is disabled with “Needs <key>your persona lacks the permission the duty’s tool exercisesthat duty is not for your role; the twin of the persona that holds the key proposes it (for example QA proposes checks)
422 duty_unavailablea duty template names an action outside TRIGGERABLE_ACTIONSthe template is refused by design; report it
The standing plan asks againtools, permissions or the agent version changedread the new plan and approve it; nothing ran in between

Source: PRODUCT-PLAN.md Part 7 sections 1, 2, 5 (standing plans, self-pause and backpressure) and 6 (onboarding a twin, twin panel); PRODUCT-CONTRACT.md sections 11.4 and 11.7; api/app/auth/permissions.py (program.twins.use, program.twins.manage); api/app/db/models/twin.py (TWIN_STATUSES, TWIN_PAUSED_REASONS, TRIGGERABLE_ACTIONS); api/scripts/designed-routes.json (POST /programs/{}/twins, .../pause, .../resume, .../run-now); web/lib/content.ts (consoleCopy, twinCopy); web/lib/api/types.ts (TwinCreate, TwinOut); decisions/0021-persona-twins.md

Last updated on