paircode 0.7.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- paircode/__init__.py +5 -0
- paircode/__main__.py +4 -0
- paircode/cli.py +419 -0
- paircode/detect.py +52 -0
- paircode/drive.py +385 -0
- paircode/gates.py +62 -0
- paircode/handshake.py +55 -0
- paircode/installer.py +161 -0
- paircode/journey.py +63 -0
- paircode/runner.py +114 -0
- paircode/seal.py +52 -0
- paircode/state.py +162 -0
- paircode/templates/FOCUS.md +35 -0
- paircode/templates/JOURNEY.md +21 -0
- paircode/templates/claude_slash_command.md +23 -0
- paircode/templates/codex_rules.md +13 -0
- paircode/templates/peers.yaml +20 -0
- paircode-0.7.1.data/data/paircode/templates/FOCUS.md +35 -0
- paircode-0.7.1.data/data/paircode/templates/JOURNEY.md +21 -0
- paircode-0.7.1.data/data/paircode/templates/claude_slash_command.md +23 -0
- paircode-0.7.1.data/data/paircode/templates/codex_rules.md +13 -0
- paircode-0.7.1.data/data/paircode/templates/peers.yaml +20 -0
- paircode-0.7.1.dist-info/METADATA +146 -0
- paircode-0.7.1.dist-info/RECORD +27 -0
- paircode-0.7.1.dist-info/WHEEL +4 -0
- paircode-0.7.1.dist-info/entry_points.txt +2 -0
- paircode-0.7.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: paircode
|
|
3
|
+
Version: 0.7.1
|
|
4
|
+
Summary: Adversarial journey framework — orchestrate multiple LLM peers through research, plan, and execute stages with file-trace peer review.
|
|
5
|
+
Project-URL: Homepage, https://github.com/tsomerville2/paircode
|
|
6
|
+
Project-URL: Repository, https://github.com/tsomerville2/paircode
|
|
7
|
+
Project-URL: Issues, https://github.com/tsomerville2/paircode/issues
|
|
8
|
+
Author-email: Travis Somerville <travis.somerville@gmail.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agents,claude,codex,gemini,llm,multi-agent,ollama,orchestration,peer-review
|
|
12
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Requires-Dist: click>=8.1
|
|
24
|
+
Requires-Dist: pyyaml>=6.0
|
|
25
|
+
Requires-Dist: rich>=13.0
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
|
|
28
|
+
# paircode
|
|
29
|
+
|
|
30
|
+
**Multi-LLM peer review for your code, with file-traces on disk.** One primary LLM (alpha) + any number of peer LLMs (Codex, Gemini, Ollama, …) running independent research, plans, and code, with structured cross-review rounds stored entirely as Markdown on disk.
|
|
31
|
+
|
|
32
|
+
> Born from 31 iterations of dual-LLM silent-agreement hunting on a real ML project. See `diary/001-step-a-architecture.md` for the full design rationale.
|
|
33
|
+
|
|
34
|
+
## Install
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pipx install paircode # or: pip install --user paircode
|
|
38
|
+
paircode install # registers /paircode in Claude / Codex / Gemini
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Then open Claude Code, Codex, or Gemini and you'll see `/paircode` available globally.
|
|
42
|
+
|
|
43
|
+
## Use it — three entry points
|
|
44
|
+
|
|
45
|
+
### 1. From Claude Code (or any supported LLM) as a slash command
|
|
46
|
+
|
|
47
|
+
Inside a Claude Code session:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
/paircode drive "build a KISS PHQ-9 depression risk engine"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Claude relays that to the CLI. paircode opens a focus, runs research → plan → execute with peer-reviewed rounds, writes everything to `.paircode/` as Markdown.
|
|
54
|
+
|
|
55
|
+
### 2. From the shell directly
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
paircode init # bootstrap .paircode/ in cwd
|
|
59
|
+
paircode handshake --write # detect CLIs + write peer roster
|
|
60
|
+
paircode drive "refactor the auth middleware" # full loop
|
|
61
|
+
paircode status # see where you are
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 3. Piece by piece
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
paircode focus "try GitHub Actions migration"
|
|
68
|
+
paircode stage research --rounds 2 # cold v1 + one review/revise round
|
|
69
|
+
paircode seal research # mark research FINAL
|
|
70
|
+
paircode stage plan --rounds 3
|
|
71
|
+
paircode seal plan
|
|
72
|
+
paircode stage execute
|
|
73
|
+
paircode seal execute
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## What ends up on disk
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
your-project/
|
|
80
|
+
.paircode/
|
|
81
|
+
JOURNEY.md # fleet log (auto-updated)
|
|
82
|
+
peers.yaml # who's on the team
|
|
83
|
+
peers/
|
|
84
|
+
peer-a-codex/ # peer's profile (and code if full-fork mode)
|
|
85
|
+
focus-01-<slug>/
|
|
86
|
+
FOCUS.md # this focus's goal, roster override, gate config
|
|
87
|
+
research/
|
|
88
|
+
alpha-v1.md ... alpha-vN.md
|
|
89
|
+
peer-a-codex-v1.md ...
|
|
90
|
+
reviews/round-01-peer-a-codex-critiques-alpha.md
|
|
91
|
+
alpha-FINAL.md # sealed exit artifact
|
|
92
|
+
peer-a-codex-FINAL.md
|
|
93
|
+
plan/
|
|
94
|
+
(same shape)
|
|
95
|
+
execute/
|
|
96
|
+
(same shape)
|
|
97
|
+
focus-02-<slug>/
|
|
98
|
+
...
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Every LLM's every thought lands as a Markdown file. That's how heterogeneous LLM tools communicate reliably across vendors, sessions, and days.
|
|
102
|
+
|
|
103
|
+
## Three peer modes
|
|
104
|
+
|
|
105
|
+
| Mode | What the peer does | When to use |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| **full-fork** | Writes its own cold codebase + markdown artifacts | Silent-agreement hunting, safety-critical code |
|
|
108
|
+
| **pair-code** | Contributes directly to alpha's codebase via patches + reviews | Feature work, regular dev |
|
|
109
|
+
| **opinion-only** | Reads alpha's work, writes reviews, never touches code | Budget peers, quick sanity checks |
|
|
110
|
+
|
|
111
|
+
Configured per peer in `.paircode/peers.yaml`.
|
|
112
|
+
|
|
113
|
+
## Model compatibility
|
|
114
|
+
|
|
115
|
+
| CLI | Slash command | Subprocess driver | Status |
|
|
116
|
+
|---|---|---|---|
|
|
117
|
+
| Claude Code (`claude`) | ✓ `/paircode` via `~/.claude/commands/paircode.md` | ✓ `claude -p <prompt>` | stable |
|
|
118
|
+
| Codex (`codex`) | ✓ context rule via `~/.codex/rules/paircode.rules` | ✓ `codex exec <prompt>` | stable |
|
|
119
|
+
| Gemini CLI (`gemini`) | ✓ reference file at `~/.gemini/paircode.md` | ✓ `gemini -p <prompt>` | stable |
|
|
120
|
+
| Ollama (`ollama`) | — (local models, no slash-cmd primitive) | ✓ `ollama run <model> <prompt>` | stable |
|
|
121
|
+
| Aider / others | — | best-effort, PRs welcome | planned |
|
|
122
|
+
|
|
123
|
+
## Commands
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
paircode --help full command list
|
|
127
|
+
paircode install register /paircode in all detected LLM CLIs
|
|
128
|
+
paircode uninstall remove /paircode from LLM CLIs (idempotent)
|
|
129
|
+
paircode handshake detect CLIs, propose peer roster
|
|
130
|
+
paircode handshake --write save roster to .paircode/peers.yaml
|
|
131
|
+
paircode init bootstrap .paircode/ in cwd
|
|
132
|
+
paircode status summarize current state
|
|
133
|
+
paircode focus <name> open a new focus
|
|
134
|
+
paircode focus list existing focuses
|
|
135
|
+
paircode stage <name> run one stage N rounds on active focus
|
|
136
|
+
paircode seal <stage> seal stage — copy each peer's latest vN to {peer}-FINAL.md
|
|
137
|
+
paircode drive <topic> full loop: research → plan → execute
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Why this exists
|
|
141
|
+
|
|
142
|
+
See [`diary/001-step-a-architecture.md`](diary/001-step-a-architecture.md) for the full backstory. The short version: running two LLMs adversarially surfaces silent-agreement bug classes that neither engine alone can catch, because cross-engine agreement is not the same as correctness when both share the same blind spot.
|
|
143
|
+
|
|
144
|
+
## License
|
|
145
|
+
|
|
146
|
+
MIT. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
paircode/__init__.py,sha256=YT0HqvBvBPL25b5sHLwWlakhxcvIl5MZlhrFDuHIBkc,166
|
|
2
|
+
paircode/__main__.py,sha256=nj3xFbNqz8UN8UQJSJ1mDyPTD2PZ-7PZ1TF-eTyBbgA,69
|
|
3
|
+
paircode/cli.py,sha256=0FQAq2sEJ_3xY_SvwvYugj_4SSY6_e2ZE0rCyoDOwQE,15858
|
|
4
|
+
paircode/detect.py,sha256=41XxPw7sTRdxieLPc9L2zsxFteIPBr59ObYj13kUVl0,1426
|
|
5
|
+
paircode/drive.py,sha256=Qr7az8L4iXOWRZx6PrRdqX7v-yXVfEFSSczOan35dNM,12405
|
|
6
|
+
paircode/gates.py,sha256=FGKyerAfE5XU0p35kjK030SzEACnSNcfT0lPaYSp-Zw,2301
|
|
7
|
+
paircode/handshake.py,sha256=tgrtqFieH4oqWNjNzJuSBfjQhiP7YaKrxDatou6H_nU,1841
|
|
8
|
+
paircode/installer.py,sha256=xawRpM2Idj2jMVSvc5T6pDVC_SsfujxcHv5m5FDDJRs,5711
|
|
9
|
+
paircode/journey.py,sha256=IXhLzTM_zhNPLpusC7GW4HmEBnRv09Z1doZYYoUwBGA,2146
|
|
10
|
+
paircode/runner.py,sha256=bIcMeUJ6Hjs8CZGNDBXGwqnK934IvsuUQKZButUuIFc,3586
|
|
11
|
+
paircode/seal.py,sha256=HrTnkmA2kgszJLeWG23RklXUy3uCJ2IZR3y33vyRGPY,1742
|
|
12
|
+
paircode/state.py,sha256=5eWw5JSTW_ie1RuSXIFVt0j3mUv3HyKud2yhuy3-tx4,4977
|
|
13
|
+
paircode/templates/FOCUS.md,sha256=BL3I6bjwezqzBSksRb2aYXY_L8Ff4vqZfhvGAPb9r9E,689
|
|
14
|
+
paircode/templates/JOURNEY.md,sha256=GAM2RJ42T5JElFYPiv0nIUCG0vr5q7csXoRsrm4VMwY,464
|
|
15
|
+
paircode/templates/claude_slash_command.md,sha256=jNRqnge_fQ3tK_nLIli_jTZTtyF9MMfAnyajnRnyL_s,1708
|
|
16
|
+
paircode/templates/codex_rules.md,sha256=5LkX4vGbuSwLRyQeTfh_fvnQv8tIk47EDyr1MlHE2zo,858
|
|
17
|
+
paircode/templates/peers.yaml,sha256=wZRxx_ylNtM15HvNNjBMtxqFyW1G7ihLFdteuDtNEYY,898
|
|
18
|
+
paircode-0.7.1.data/data/paircode/templates/FOCUS.md,sha256=BL3I6bjwezqzBSksRb2aYXY_L8Ff4vqZfhvGAPb9r9E,689
|
|
19
|
+
paircode-0.7.1.data/data/paircode/templates/JOURNEY.md,sha256=GAM2RJ42T5JElFYPiv0nIUCG0vr5q7csXoRsrm4VMwY,464
|
|
20
|
+
paircode-0.7.1.data/data/paircode/templates/claude_slash_command.md,sha256=jNRqnge_fQ3tK_nLIli_jTZTtyF9MMfAnyajnRnyL_s,1708
|
|
21
|
+
paircode-0.7.1.data/data/paircode/templates/codex_rules.md,sha256=5LkX4vGbuSwLRyQeTfh_fvnQv8tIk47EDyr1MlHE2zo,858
|
|
22
|
+
paircode-0.7.1.data/data/paircode/templates/peers.yaml,sha256=wZRxx_ylNtM15HvNNjBMtxqFyW1G7ihLFdteuDtNEYY,898
|
|
23
|
+
paircode-0.7.1.dist-info/METADATA,sha256=5EpwCV9J63T-eMM66VXF29LMoiiKN9vlsRcMo_tl_7c,5978
|
|
24
|
+
paircode-0.7.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
25
|
+
paircode-0.7.1.dist-info/entry_points.txt,sha256=Xws2Px0qjasysoJikWE8LokoojG2_7qwOh8vTF-v9K0,47
|
|
26
|
+
paircode-0.7.1.dist-info/licenses/LICENSE,sha256=2z2DTvqat4kmyHNEC8ehgOC5fBtyENHg2-Z0MiY_rxM,1074
|
|
27
|
+
paircode-0.7.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Travis Somerville
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|