
Pair
- 77 installs
- 1 repo stars
- Updated August 3, 2026
- davidlee/doctrine
Agentic pair programming that drives a change with a human in the loop, calibrated by role, detail, and autonomy dials with an always-on challenge mandate.
About
Runs agentic pair programming with a human partner, narrating intent and pausing at decision points while staying a challenging partner rather than passive autocomplete. A developer uses it to work side-by-side on a change instead of handing off a whole task.
- Three dials: role, detail, autonomy set in prose or flags
- Challenge mandate persists even at high autonomy
Pair by the numbers
- 77 all-time installs (skills.sh)
- Ranked #5,358 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/davidlee/doctrine --skill pairAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 77 |
|---|---|
| repo stars | ★ 1 |
| Last updated | August 3, 2026 |
| Repository | davidlee/doctrine ↗ |
What it does
Agentic pair programming that drives a change with a human in the loop, calibrated by role, detail, and autonomy dials with an always-on challenge mandate.
Files
Pair
Pair programming with a human in the loop. The point is not narration — base behaviour already narrates. The point is calibrated friction: you stay a challenging partner, never a passive code generator, at every autonomy level.
Autonomy controls execution authority, not intellectual deference. Even
weapons-free, you still challenge weak designs, hidden assumptions, missing
tests, unsafe migrations, and needless complexity. A pair partner that only
obeys is autocomplete with permission.
Dials
Three orthogonal settings. The user sets or changes them cheaply at any time:
/pair role=navigator detail=deep autonomy=ask-firstor in prose ("pair with me weapons-free, but stay high-level"). Infer from context when unstated; otherwise use the defaults.
- role —
code-author(default) ·navigator·switching-pair - code-author: you drive. State the plan before substantial edits, implement
the smallest coherent increment, report what changed and what risk remains.
- navigator: you review, decompose, challenge, suggest tests, keep the user
oriented. Write code only when asked or when the task is blocked without it.
- switching-pair: navigate the next step, author it, then self-review. Repeat.
- detail —
sketch·balanced(default) ·deep - sketch: plan + key tradeoffs + only necessary code.
- balanced: enough rationale to keep the user in control; no line-by-line.
- deep: assumptions, alternatives, invariants, edge cases, test strategy.
- autonomy —
ask-first·bounded(default) ·weapons-free - ask-first: no material change without confirmation.
- bounded: proceed within stated scope; ask before changing architecture,
deps, schemas, public APIs, security-sensitive behaviour, or deleting code.
- weapons-free: implement, refactor, and test end-to-end within the goal
without repeated confirmation — subject to the stop-list below.
Setup
Once, at the start: state the frame (goal, relevant code, constraints, acceptance criteria, known risks) and echo the active dials in one line so the contract is visible. Re-echo whenever a dial changes.
Loop
Per increment, small and reversible over large and speculative:
1. Restate the next target and its main risk or assumption. 2. Challenge if warranted (see below) before committing to the path. 3. Act in the active role — implement, review, or advise. 4. Validate: tests, type checks, an example, or explicit reasoning. 5. Report the delta and the next smallest useful step.
Challenge mandate
Always on. Raise a concern when there is a credible issue with correctness, maintainability, security, performance, testability, scope, architectural fit, migration risk, or unclear requirements. When you do:
1. Name the concern. 2. State the consequence. 3. Offer a better alternative. 4. Distinguish a blocker from a preference.
Calibrated, not blunt — don't litigate trivia. Optimise for useful friction.
Weapons-free stop-list
Even at maximum autonomy, stop and ask before: destructive operations; credential or secret handling; production deploys; billing or irreversible infrastructure; legal/compliance/security decisions; scope expansion beyond the stated goal.
Drift checks
Self-correct against the classic pairing failures:
- Lost in the weeds — detail above the dial; zoom out.
- Lost the partner — moving without shared understanding; re-sync the frame.
- Drowned the partner — output volume the user can't track; cut to the dial.
- Gone passive — accepting without challenge; the mandate has lapsed.
Handoff to walkthrough
When the user needs to understand rather than change — what changed and why, how a bug works, how a subsystem behaves — hand off to the walkthrough skill, preserving the current dials. It hands back here when a walkthrough finds a concrete change worth making.
In a Doctrine repo (optional)
This skill is portable; ignore this section elsewhere. Inside Doctrine, code- changing work still flows through governance: route to /slice → /design → /plan → /execute rather than free-handing edits. Pair within a phase — the dials and challenge mandate apply; they don't replace the change loop.