Catalog PyPI
PACKAGE EXPLORERView in registry

2nd-opinion-cli

PyPI

Second Opinion: a cross-referencing debate CLI where two frontier models debate, a cheaper judge rules, orchestrates, and synthesizes.

agentsanthropicclaudeclidebatellmopenai
Versions collected1
Direct dependencies8From release 0.1.0
Last observed20 Oct, 15:26 UTC

README

Version 0.1.0 documentation

Second Opinion

A cross-referencing debate CLI. Two frontier debater models (e.g. Opus 4.8, GPT 5.2) independently answer your question, then debate it — critiquing and rebutting each other with evidence and live web search. A separate, cheaper judge model (e.g. Sonnet 4.6) rules on each round, asks clarifying questions when needed, and synthesizes the final answer with a stated confidence and any unresolved disagreement.

Every question debates by default. For a simple lookup where you don't need a second opinion, prefix it with ! (or pass --direct) to get a single direct answer from the judge — one cheap call, no debate.

Agreement is the stop condition, not a correctness proof. Two models can be confidently and identically wrong, and the judge is a single point of bias — so every ruling is rationale-backed and the final answer states its confidence.

Install

Requires Python 3.12+.

uv tool install 2nd-opinion-cli   # recommended — isolated, global `2op`
pipx install 2nd-opinion-cli      # same idea, via pipx
uvx --from 2nd-opinion-cli 2op    # run once without installing

Set your keys (ANTHROPIC_API_KEY / OPENAI_API_KEY) in the environment, or run 2op apikey to store them.

Usage

Run 2op to open an interactive session. Type a question to run a full debate, prefix it with ! for a direct single-judge answer (no debate), or use a slash command — type / for an autocompleting palette:

CommandDescription
/helpList commands
/modelsChoose the debater/judge models and save them
/apikeyView (masked) and add/update API keys
/statusShow current models, keys, and flags
/clearClear the screen
/exitLeave the session (or Ctrl-D)

For scripting, 2op -q "your question" runs a single debate and exits (as does any piped/non-TTY run). Set slots inline:

2op --debater-a opus-4.8 --debater-b gpt-5.2 --judge sonnet-4.6 -v -q "…"

Configuration

Model selection is saved after the first run to ~/.config/secondop/config.json and reused silently. Re-choose with /models (or -m at launch), or override a single slot with --debater-a / --debater-b / --judge.

API keys are read from the environment or a .env file first, then from the config file (set via /apikey). Environment/.env values take precedence.

Develop

python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env   # then add your keys
pytest

Pricing note

Model rates live in src/secondop/config.py and are verified against the 2026 catalog captured in pricing/*.json. Provider prices change — re-confirm against the live pricing pages before relying on cost figures.

Downloads & popularity

2downloads
1-day window · source-reported counts19 Oct 2026
20100
2026-07-22: 7 · observed 2026-10-20T19:32:02.7698367Z · period 2026-07-22–2026-07-222026-07-23: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-07-23–2026-07-232026-07-25: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-07-25–2026-07-252026-07-27: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-07-27–2026-07-272026-07-29: 11 · observed 2026-10-20T19:32:02.7698367Z · period 2026-07-29–2026-07-292026-08-01: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-02–2026-08-022026-08-03: 6 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-03–2026-08-032026-08-04: 4 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-04–2026-08-042026-08-06: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-06–2026-08-062026-08-09: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-09–2026-08-092026-08-13: 6 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-13–2026-08-132026-08-14: 5 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-14–2026-08-142026-08-15: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-15–2026-08-152026-08-16: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-16–2026-08-162026-08-17: 5 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-17–2026-08-172026-08-18: 20 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-18–2026-08-182026-08-19: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-19–2026-08-192026-08-20: 3 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-20–2026-08-202026-08-21: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-21–2026-08-212026-08-23: 8 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-23–2026-08-232026-08-24: 9 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-24–2026-08-242026-08-28: 3 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-28–2026-08-282026-08-31: 3 · observed 2026-10-20T19:32:02.7698367Z · period 2026-08-31–2026-08-312026-09-01: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-01–2026-09-012026-09-03: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-03–2026-09-032026-09-04: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-04–2026-09-042026-09-05: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-05–2026-09-052026-09-07: 3 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-07–2026-09-072026-09-09: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-09–2026-09-092026-09-10: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-10–2026-09-102026-09-12: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-12–2026-09-122026-09-16: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-16–2026-09-162026-09-18: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-18–2026-09-182026-09-20: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-20–2026-09-202026-09-23: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-23–2026-09-232026-09-26: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-26–2026-09-262026-09-27: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-27–2026-09-272026-09-28: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-28–2026-09-282026-09-30: 3 · observed 2026-10-20T19:32:02.7698367Z · period 2026-09-30–2026-09-302026-10-06: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-10-06–2026-10-062026-10-07: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-10-07–2026-10-072026-10-09: 3 · observed 2026-10-20T19:32:02.7698367Z · period 2026-10-09–2026-10-092026-10-13: 3 · observed 2026-10-20T19:32:02.7698367Z · period 2026-10-13–2026-10-132026-10-18: 1 · observed 2026-10-20T19:32:02.7698367Z · period 2026-10-18–2026-10-182026-10-19: 2 · observed 2026-10-20T19:32:02.7698367Z · period 2026-10-19–2026-10-19
22 Jul19 Oct

pypistats · 46 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-19 – 2026-10-1922026-10-20T19:32:02.7698367Z
2026-10-18 – 2026-10-1812026-10-20T19:32:02.7698367Z
2026-10-13 – 2026-10-1332026-10-20T19:32:02.7698367Z
2026-10-09 – 2026-10-0932026-10-20T19:32:02.7698367Z
2026-10-07 – 2026-10-0712026-10-20T19:32:02.7698367Z
2026-10-06 – 2026-10-0612026-10-20T19:32:02.7698367Z
2026-09-30 – 2026-09-3032026-10-20T19:32:02.7698367Z
2026-09-28 – 2026-09-2822026-10-20T19:32:02.7698367Z
2026-09-27 – 2026-09-2712026-10-20T19:32:02.7698367Z
2026-09-26 – 2026-09-2612026-10-20T19:32:02.7698367Z
2026-09-23 – 2026-09-2312026-10-20T19:32:02.7698367Z
2026-09-20 – 2026-09-2022026-10-20T19:32:02.7698367Z
2026-09-18 – 2026-09-1822026-10-20T19:32:02.7698367Z
2026-09-16 – 2026-09-1612026-10-20T19:32:02.7698367Z
2026-09-12 – 2026-09-1212026-10-20T19:32:02.7698367Z
2026-09-10 – 2026-09-1012026-10-20T19:32:02.7698367Z
2026-09-09 – 2026-09-0912026-10-20T19:32:02.7698367Z
2026-09-07 – 2026-09-0732026-10-20T19:32:02.7698367Z
2026-09-05 – 2026-09-0512026-10-20T19:32:02.7698367Z
2026-09-04 – 2026-09-0412026-10-20T19:32:02.7698367Z
2026-09-03 – 2026-09-0312026-10-20T19:32:02.7698367Z
2026-09-01 – 2026-09-0112026-10-20T19:32:02.7698367Z
2026-08-31 – 2026-08-3132026-10-20T19:32:02.7698367Z
2026-08-28 – 2026-08-2832026-10-20T19:32:02.7698367Z
2026-08-24 – 2026-08-2492026-10-20T19:32:02.7698367Z
2026-08-23 – 2026-08-2382026-10-20T19:32:02.7698367Z
2026-08-21 – 2026-08-2122026-10-20T19:32:02.7698367Z
2026-08-20 – 2026-08-2032026-10-20T19:32:02.7698367Z
2026-08-19 – 2026-08-1922026-10-20T19:32:02.7698367Z
2026-08-18 – 2026-08-18202026-10-20T19:32:02.7698367Z
2026-08-17 – 2026-08-1752026-10-20T19:32:02.7698367Z
2026-08-16 – 2026-08-1612026-10-20T19:32:02.7698367Z
2026-08-15 – 2026-08-1512026-10-20T19:32:02.7698367Z
2026-08-14 – 2026-08-1452026-10-20T19:32:02.7698367Z
2026-08-13 – 2026-08-1362026-10-20T19:32:02.7698367Z
2026-08-09 – 2026-08-0912026-10-20T19:32:02.7698367Z
2026-08-06 – 2026-08-0622026-10-20T19:32:02.7698367Z
2026-08-04 – 2026-08-0442026-10-20T19:32:02.7698367Z
2026-08-03 – 2026-08-0362026-10-20T19:32:02.7698367Z
2026-08-02 – 2026-08-0212026-10-20T19:32:02.7698367Z
2026-08-01 – 2026-08-0112026-10-20T19:32:02.7698367Z
2026-07-29 – 2026-07-29112026-10-20T19:32:02.7698367Z
2026-07-27 – 2026-07-2712026-10-20T19:32:02.7698367Z
2026-07-25 – 2026-07-2522026-10-20T19:32:02.7698367Z
2026-07-23 – 2026-07-2322026-10-20T19:32:02.7698367Z
2026-07-22 – 2026-07-2272026-10-20T19:32:02.7698367Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.017 Jun 20268

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
meaetin/2nd-opinion

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 15:26 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:21a0f7d304317087b5bd5fcf46b338493cb273ab340d26c4505f6b4707593108