omp packages

pi-twins0.4.0

Dual-model synthesis for Pi — run the same prompt on two models, get one synthesized answer

GitHub Actions Published 6 hours ago MIT ~466 downloads/mo

Untested on omp

This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

pi-twins

Join dotfield.xyz on Discord

CI Publish npm version npm downloads License: MIT Pi package Trusted Publishing Buy Me A Coffee

Run the same prompt on two models, get one synthesized answer.

What this is

pi-twins sends your prompt to two AI models in parallel, then Pi itself reads both responses and synthesizes a single answer from the best parts. Configure model pairs via YAML. No more manually tabbing between chatbot UIs to compare answers.

Features

  • Dual-model execution — run the same prompt on two models simultaneously
  • Automatic synthesis — Pi reads both responses and produces one unified answer
  • Synthesis language — choose Japanese or English for the final answer (Japanese by default)
  • Synthesis controls — choose balanced, decision, critique, or concise final-answer modes with optional instructions
  • YAML configuration — define model pairs (e.g. Claude + Gemini) in ~/.pi/twins.yaml
  • Model discovery — /twins:scan to see which models are available
  • On-demand only — activate via /twins:run when you want it, no overhead otherwise

Install

Install the published npm package with Pi:

pi install npm:pi-twins

Pin a specific version:

pi install npm:pi-twins@0.4.0

Install into the current project instead of your user Pi settings:

pi install npm:pi-twins -l

Or install from GitHub:

pi install git:github.com/eiei114/pi-twins

Try it without permanently installing:

pi -e npm:pi-twins

Quick start

Try this package locally:

pi -e .

Then run:

/twins:run

Enter a prompt when asked. Pi runs both models in parallel and synthesizes one answer.

Configuration

Create ~/.pi/twins.yaml:

pairs:
  default:
    - anthropic/claude-sonnet-4
    - google/gemini-2.5-pro
  coding:
    - anthropic/claude-sonnet-4
    - openai/gpt-4o

# Optional: language accepts ja or en; it defaults to ja. Omit synthesis to use
# Japanese synthesis and the balanced mode.
synthesis:
  language: en # ja | en
  mode: decision # balanced | decision | critique | concise
  instructions: "Prioritize concrete next steps."

synthesis.language accepts ja or en and defaults to Japanese when omitted. /twins:run uses the configured language without prompting. The optional top-level synthesis block sets reusable defaults for the final answer; existing configs with only pairs: keep Japanese, balanced synthesis. /twins:run uses the default pair when present. If default is missing and multiple pairs are configured, it prompts you to choose one; with a single pair, that pair is used automatically.

Run /twins:config to create a starter file, or /twins:scan to list model IDs.

Commands

Command Description
/twins:run Send the same prompt to two models and synthesize one answer
/twins:scan List available model IDs for ~/.pi/twins.yaml
/twins:config Create or show the pi-twins config file

The twins_run tool is also available for agent-driven twin runs. Tool calls may override synthesis defaults per request:

{
  "prompt": "Choose the safest rollout plan for this migration",
  "pair": "default",
  "synthesisLanguage": "en",
  "synthesisMode": "decision",
  "synthesisInstructions": "Call out rollback risks explicitly."
}

For one twins_run call, synthesisLanguage accepts ja or en and overrides synthesis.language; when neither is set, the final answer is Japanese.

Package contents

Path Purpose
extensions/ Pi extension entrypoints (/twins:* commands, twins_run tool)
lib/ Config loader, model scanner, parallel runner, synthesis helpers
docs/ Usage examples, troubleshooting, and release notes

Development

npm install
npm run ci

npm run ci runs typecheck, tests, and npm pack --dry-run via pack:check.

Local smoke test:

pi -e .

Release

This package uses npm Trusted Publishing (no NPM_TOKEN required).

npm version patch   # or minor / major
git push

After a version bump reaches main, an authorized release owner must manually run the Release (manual) workflow. Merging a PR does not create a tag or release and does not publish to npm.

See docs/release.md for setup details.

Docs

Security

Pi packages can execute code with your local permissions. Review extensions before installing third-party packages.

For vulnerability reporting, see SECURITY.md.

Links

License

MIT