omniconductor 0.3.0
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.
- package/CHANGELOG.md +64 -0
- package/LICENSE +219 -0
- package/NOTICE +11 -0
- package/README.md +526 -0
- package/THIRD_PARTY_NOTICES.md +31 -0
- package/TRADEMARKS.md +26 -0
- package/VISION.md +106 -0
- package/adapters/README.md +121 -0
- package/adapters/claude/README.md +102 -0
- package/adapters/claude/SUPPORTED-FEATURES.md +66 -0
- package/adapters/claude/hookify-templates/.recipe-scoped +9 -0
- package/adapters/claude/hookify-templates/README.md +93 -0
- package/adapters/claude/hookify-templates/block-completion-claim-without-push.local.md.template +56 -0
- package/adapters/claude/hookify-templates/block-direct-push-protected-branch.local.md.template +18 -0
- package/adapters/claude/hookify-templates/block-force-push-protected-branch.local.md.template +42 -0
- package/adapters/claude/hookify-templates/block-server-secret-in-client.local.md.template +36 -0
- package/adapters/claude/hookify-templates/warn-any-type-added.local.md.template +44 -0
- package/adapters/claude/hookify-templates/warn-commit-without-pre-commit-review.local.md.template +52 -0
- package/adapters/claude/hookify-templates/warn-console-direct.local.md.template +55 -0
- package/adapters/claude/hookify-templates/warn-create-table-without-access-control.local.md.template +35 -0
- package/adapters/claude/hookify-templates/warn-current-work-without-remaining-tasks.local.md.template +36 -0
- package/adapters/claude/hookify-templates/warn-gh-pr-create-without-pre-merge-review.local.md.template +38 -0
- package/adapters/claude/hookify-templates/warn-hardcoded-text-without-i18n-key.local.md.template +21 -0
- package/adapters/claude/hookify-templates/warn-on-gh-pr-merge.local.md.template +33 -0
- package/adapters/claude/hookify-templates/warn-plan-spec-without-remaining-tasks.local.md.template +44 -0
- package/adapters/claude/hookify-templates/warn-raw-hex-instead-of-token.local.md.template +21 -0
- package/adapters/claude/hookify-templates/warn-security-definer-without-search-path.local.md.template +30 -0
- package/adapters/claude/hookify-templates/warn-stop-commit-without-current-work.local.md.template +47 -0
- package/adapters/claude/hookify-templates/warn-user-manual-completion.local.md.template +40 -0
- package/adapters/claude/transform-spec.md +140 -0
- package/adapters/claude/transform.sh +1169 -0
- package/adapters/codex/README.md +87 -0
- package/adapters/codex/SUPPORTED-FEATURES.md +66 -0
- package/adapters/codex/transform-spec.md +90 -0
- package/adapters/codex/transform.sh +748 -0
- package/adapters/copilot/README.md +88 -0
- package/adapters/copilot/SUPPORTED-FEATURES.md +73 -0
- package/adapters/copilot/transform-spec.md +111 -0
- package/adapters/copilot/transform.sh +757 -0
- package/adapters/cursor/README.md +87 -0
- package/adapters/cursor/SUPPORTED-FEATURES.md +90 -0
- package/adapters/cursor/transform-spec.md +124 -0
- package/adapters/cursor/transform.sh +731 -0
- package/adapters/gemini/README.md +93 -0
- package/adapters/gemini/SUPPORTED-FEATURES.md +80 -0
- package/adapters/gemini/transform-spec.md +102 -0
- package/adapters/gemini/transform.sh +844 -0
- package/adapters/windsurf/README.md +93 -0
- package/adapters/windsurf/SUPPORTED-FEATURES.md +67 -0
- package/adapters/windsurf/transform-spec.md +99 -0
- package/adapters/windsurf/transform.sh +727 -0
- package/bin/omniconductor.js +130 -0
- package/core/README.md +64 -0
- package/core/anti-patterns/README.md +142 -0
- package/core/anti-patterns/dynamic-system-prompt.md +113 -0
- package/core/anti-patterns/frequent-rule-file-edit.md +83 -0
- package/core/anti-patterns/large-file-read-no-range.md +90 -0
- package/core/anti-patterns/no-sub-agent-dispatch.md +89 -0
- package/core/anti-patterns/single-monolithic-rule-file.md +99 -0
- package/core/anti-patterns/skill-eager-load.md +83 -0
- package/core/anti-patterns/tool-call-spam.md +93 -0
- package/core/docs-templates/CURRENT_WORK.md +64 -0
- package/core/docs-templates/INDEX.md +57 -0
- package/core/docs-templates/PLANS.md +44 -0
- package/core/docs-templates/README.md +40 -0
- package/core/docs-templates/REMAINING_TASKS.md +43 -0
- package/core/docs-templates/TASKS.md +51 -0
- package/core/docs-templates/specs/_example.md +121 -0
- package/core/hooks/README.md +62 -0
- package/core/hooks/pretool-agent-routing.sh.template +97 -0
- package/core/hooks/pretool-commit-current-work-check.sh.template +103 -0
- package/core/hooks/pretool-commit-test-coverage-check.sh.template +116 -0
- package/core/hooks/pretool-large-file-read-guard.sh.template +117 -0
- package/core/hooks/stop-cache-hit-baseline-check.sh.template +133 -0
- package/core/hooks/stop-r6-review-check.sh.template +80 -0
- package/core/hooks/stop-session-log-check.sh.template +101 -0
- package/core/hooks/stop-trajectory-log.sh.template +96 -0
- package/core/memory-pattern/EXAMPLES.md +114 -0
- package/core/memory-pattern/README.md +133 -0
- package/core/recipes/README.md +46 -0
- package/core/recipes/auto-mock-data.md +82 -0
- package/core/recipes/branch-strategy.md +100 -0
- package/core/recipes/coding-conventions.md +123 -0
- package/core/recipes/database-discipline.md +65 -0
- package/core/recipes/debugging.md +143 -0
- package/core/recipes/design-system.md +30 -0
- package/core/recipes/i18n.md +118 -0
- package/core/recipes/monorepo.md +101 -0
- package/core/recipes/self-improvement.md +61 -0
- package/core/recipes/tdd.md +128 -0
- package/core/recipes/web-mobile-parity.md +87 -0
- package/core/reflector/SCHEDULING.md +83 -0
- package/core/reflector/prune-lessons.sh +105 -0
- package/core/reflector/reflect-brief.md +11 -0
- package/core/reflector/reflect.command.md +13 -0
- package/core/reflector/run-weekly.sh +54 -0
- package/core/reflector/trajectory-log.sh +55 -0
- package/core/roles/README.md +61 -0
- package/core/roles/builder.md +75 -0
- package/core/roles/designer.md +93 -0
- package/core/roles/helper.md +70 -0
- package/core/roles/planner.md +123 -0
- package/core/roles/reflector.md +72 -0
- package/core/roles/reviewer.md +104 -0
- package/core/roles/scribe.md +89 -0
- package/core/universal-rules/README.md +71 -0
- package/core/universal-rules/meta-discipline.md +292 -0
- package/core/universal-rules/operations.md +162 -0
- package/core/universal-rules/quality-gates.md +191 -0
- package/core/universal-rules/spec-as-you-go.md +123 -0
- package/core/universal-rules/workflow.md +153 -0
- package/core/workflow/PHASES.md +134 -0
- package/core/workflow/README.md +56 -0
- package/docs/MANUAL-INSTALL.md +456 -0
- package/package.json +52 -0
- package/tools/check-framework-purity.sh +91 -0
- package/tools/measure-tokens.sh +169 -0
- package/tools/validate-adapter-output.sh +611 -0
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
# MANUAL INSTALL — CONDUCTOR
|
|
2
|
+
|
|
3
|
+
> Companion to `README.md`. Step-by-step manual install for every supported tool, on Mac and Windows.
|
|
4
|
+
|
|
5
|
+
This document is the fallback when the per-tool `transform.sh` adapter is not yet available, when you want to understand exactly what the adapter does, or when you are in a constrained environment (no bash, locked-down corporate machine, etc.) and need to copy files by hand.
|
|
6
|
+
|
|
7
|
+
For each tool there are two paths:
|
|
8
|
+
|
|
9
|
+
- **Adapter (recommended)** — a single `bash transform.sh <target>` invocation. Available now for Claude Code, Cursor, GitHub Copilot.
|
|
10
|
+
- **Manual file copy (fallback)** — explicit `cp` / `cat` commands and frontmatter cheat sheet. Available for every tool, including the ones whose adapters have not shipped.
|
|
11
|
+
|
|
12
|
+
> **Read first**: [`README.md`](../README.md) Quick Start. The Claude adapter has a guided wizard that handles 90% of installs. Manual install is for the remaining 10%.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Conventions used in this document
|
|
17
|
+
|
|
18
|
+
- `~/conductor` = where you cloned the Conductor repo.
|
|
19
|
+
- `<target>` = your project directory (e.g. `~/Projects/my-app`).
|
|
20
|
+
- "Mac" = macOS native shell (zsh by default, bash also OK).
|
|
21
|
+
- "Windows / Git Bash" = [Git for Windows](https://git-scm.com/download/win) Bash terminal. POSIX-compatible.
|
|
22
|
+
- "Windows / WSL2" = Ubuntu running under WSL2. Same commands as Mac.
|
|
23
|
+
- "Windows / PowerShell" = native PowerShell. **Currently unsupported** (P3+ port). Use Git Bash or WSL2 for now.
|
|
24
|
+
|
|
25
|
+
> **GNU vs BSD `sed` warning**: macOS ships BSD `sed` which requires `-i ''` for inline edits, while GNU `sed` (Linux / Git Bash / WSL2) uses `-i` with no argument. Manual-install commands below avoid `sed -i` for portability — they use `cat > new-file` + `mv` instead.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Quick Decision: which tool, which path
|
|
30
|
+
|
|
31
|
+
| Tool | Adapter ready | Recommended install |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| Claude Code | ✅ | `bash adapters/claude/transform.sh <target>` (see README) |
|
|
34
|
+
| Cursor | ✅ (P2 in flight) | `bash adapters/cursor/transform.sh <target>` |
|
|
35
|
+
| GitHub Copilot | ✅ (P2 in flight) | `bash adapters/copilot/transform.sh <target>` |
|
|
36
|
+
| Gemini CLI | ❌ | manual copy (this doc) |
|
|
37
|
+
| Codex (OpenAI) | ❌ | manual copy (this doc) |
|
|
38
|
+
| Windsurf | ❌ | manual copy (this doc) |
|
|
39
|
+
|
|
40
|
+
> Adapter ship status as of 2026-05-10. Cursor and Copilot adapters are in active development under separate dispatches. If `adapters/<tool>/transform.sh` exists and is executable, prefer it; otherwise follow the manual section for that tool.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Frontmatter conversion cheat sheet
|
|
45
|
+
|
|
46
|
+
Universal rules in `core/universal-rules/*.md` use Conductor-canonical YAML frontmatter:
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
---
|
|
50
|
+
applies_to: ["**/*.ts", "**/*.tsx"]
|
|
51
|
+
always_loaded: false
|
|
52
|
+
tier: T1
|
|
53
|
+
---
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Each tool consumes a different syntax. When you copy a rule file into a tool-native location by hand, rewrite the frontmatter using the table below.
|
|
57
|
+
|
|
58
|
+
| Conductor field | Claude Code | Cursor (`.mdc`) | Copilot (`.instructions.md`) | Gemini / Codex / Windsurf |
|
|
59
|
+
|---|---|---|---|---|
|
|
60
|
+
| `applies_to: ["a", "b"]` | `paths: ["a", "b"]` | `globs: a, b` (CSV) | `applyTo: 'a, b'` (CSV string) | (drop — single bundled file) |
|
|
61
|
+
| `always_loaded: true` | drop `paths:` (auto-loads) | `alwaysApply: true` | `applyTo: '**'` | (drop — file always loads) |
|
|
62
|
+
| `always_loaded: false` | `paths: [...]` required | `alwaysApply: false` + `globs:` | `applyTo: '<csv>'` | not representable |
|
|
63
|
+
| `tier: T1/T2/T3` | (informational) | (informational) | (informational) | (informational) |
|
|
64
|
+
|
|
65
|
+
> Conductor's universal rules (`meta-discipline`, `operations`, `quality-gates`, `spec-as-you-go`, `workflow`) are all `always_loaded: true` — make sure the tool-specific equivalent is set. Skipping this is the most common manual-install mistake.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Tool 1 — Cursor (manual, until P2 adapter ships)
|
|
70
|
+
|
|
71
|
+
### Prerequisites
|
|
72
|
+
|
|
73
|
+
- Cursor installed.
|
|
74
|
+
- The Conductor repo cloned to `~/conductor`.
|
|
75
|
+
|
|
76
|
+
### Mac / Linux / Windows-WSL2
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
cd <target>
|
|
80
|
+
|
|
81
|
+
# 1. Create Cursor rule directory
|
|
82
|
+
mkdir -p .cursor/rules
|
|
83
|
+
|
|
84
|
+
# 2. Copy each universal rule with .mdc extension
|
|
85
|
+
for f in ~/conductor/core/universal-rules/*.md; do
|
|
86
|
+
base=$(basename "$f" .md)
|
|
87
|
+
cp "$f" ".cursor/rules/${base}.mdc"
|
|
88
|
+
done
|
|
89
|
+
|
|
90
|
+
# 3. Append always-loaded rules to .cursorrules baseline
|
|
91
|
+
# (all 5 universal rules are always-loaded; bundle them for older Cursor versions)
|
|
92
|
+
cat ~/conductor/core/universal-rules/meta-discipline.md \
|
|
93
|
+
~/conductor/core/universal-rules/spec-as-you-go.md \
|
|
94
|
+
> .cursorrules
|
|
95
|
+
|
|
96
|
+
# 4. Copy doc templates (skip if you already have docs/CURRENT_WORK.md etc.)
|
|
97
|
+
mkdir -p docs/specs
|
|
98
|
+
[ -f docs/CURRENT_WORK.md ] || cp ~/conductor/core/docs-templates/CURRENT_WORK.md docs/
|
|
99
|
+
[ -f docs/REMAINING_TASKS.md ] || cp ~/conductor/core/docs-templates/REMAINING_TASKS.md docs/
|
|
100
|
+
[ -f docs/PLANS.md ] || cp ~/conductor/core/docs-templates/PLANS.md docs/
|
|
101
|
+
[ -f docs/TASKS.md ] || cp ~/conductor/core/docs-templates/TASKS.md docs/
|
|
102
|
+
[ -f docs/INDEX.md ] || cp ~/conductor/core/docs-templates/INDEX.md docs/
|
|
103
|
+
[ -f docs/specs/_example.md ] || cp ~/conductor/core/docs-templates/specs/_example.md docs/specs/
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Windows / Git Bash
|
|
107
|
+
|
|
108
|
+
Same commands, but adjust paths:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Clone repo to a Windows path
|
|
112
|
+
git clone https://github.com/lee77840/conductor_lfamily /c/conductor
|
|
113
|
+
cd /c/Users/me/Projects/my-app
|
|
114
|
+
|
|
115
|
+
# Then run the same loop
|
|
116
|
+
for f in /c/conductor/core/universal-rules/*.md; do
|
|
117
|
+
base=$(basename "$f" .md)
|
|
118
|
+
cp "$f" ".cursor/rules/${base}.mdc"
|
|
119
|
+
done
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
> Git Bash translates `C:\Users\me\foo` to `/c/Users/me/foo`. Use forward slashes in commands.
|
|
123
|
+
|
|
124
|
+
### Frontmatter rewrite (after copy)
|
|
125
|
+
|
|
126
|
+
For each `.cursor/rules/*.mdc` you just produced, edit the YAML at the top of the file:
|
|
127
|
+
|
|
128
|
+
```yaml
|
|
129
|
+
# BEFORE (Conductor canonical)
|
|
130
|
+
---
|
|
131
|
+
applies_to: ["**/*.ts", "**/*.tsx"]
|
|
132
|
+
always_loaded: false
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
# AFTER (Cursor)
|
|
136
|
+
---
|
|
137
|
+
globs: **/*.ts, **/*.tsx
|
|
138
|
+
alwaysApply: false
|
|
139
|
+
---
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
For the universal rules (`meta-discipline.mdc`, `operations.mdc`, `quality-gates.mdc`, `spec-as-you-go.mdc`, `workflow.mdc`) — all `always_loaded: true` upstream — use:
|
|
143
|
+
|
|
144
|
+
```yaml
|
|
145
|
+
---
|
|
146
|
+
alwaysApply: true
|
|
147
|
+
---
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Verification
|
|
151
|
+
|
|
152
|
+
1. Restart Cursor.
|
|
153
|
+
2. Open the Cursor command palette → "Show Loaded Rules" (or check the chat sidebar).
|
|
154
|
+
3. Confirm the 5 universal rules (`meta-discipline`, `operations`, `quality-gates`, `spec-as-you-go`, `workflow`) show up, all marked "always".
|
|
155
|
+
4. If you also copied the `coding-conventions` recipe, open a `.ts` file → confirm it loads on file context.
|
|
156
|
+
|
|
157
|
+
### Uninstall
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
rm -rf .cursor/rules
|
|
161
|
+
rm -f .cursorrules
|
|
162
|
+
# docs/* are yours — keep or delete manually
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Tool 2 — GitHub Copilot (manual, until P2 adapter ships)
|
|
168
|
+
|
|
169
|
+
GitHub Copilot supports custom instructions via `.github/instructions/*.instructions.md` files, which are picked up by the Copilot extension across **VSCode, Cursor, Windsurf, JetBrains, Neovim** simultaneously (one install covers all five IDEs that have the Copilot extension).
|
|
170
|
+
|
|
171
|
+
### Mac / Linux / Windows-WSL2
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
cd <target>
|
|
175
|
+
|
|
176
|
+
# 1. Create instructions directory
|
|
177
|
+
mkdir -p .github/instructions
|
|
178
|
+
|
|
179
|
+
# 2. Copy + rename to .instructions.md
|
|
180
|
+
for f in ~/conductor/core/universal-rules/*.md; do
|
|
181
|
+
base=$(basename "$f" .md)
|
|
182
|
+
cp "$f" ".github/instructions/${base}.instructions.md"
|
|
183
|
+
done
|
|
184
|
+
|
|
185
|
+
# 3. Build always-loaded baseline (all 5 universal rules)
|
|
186
|
+
cat ~/conductor/core/universal-rules/meta-discipline.md \
|
|
187
|
+
~/conductor/core/universal-rules/spec-as-you-go.md \
|
|
188
|
+
> .github/instructions/all.instructions.md
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Windows / Git Bash
|
|
192
|
+
|
|
193
|
+
Same commands. Substitute `~/conductor` → `/c/conductor` if your clone lives on `C:`.
|
|
194
|
+
|
|
195
|
+
### Frontmatter rewrite
|
|
196
|
+
|
|
197
|
+
Open each `.github/instructions/*.instructions.md` and rewrite:
|
|
198
|
+
|
|
199
|
+
```yaml
|
|
200
|
+
# BEFORE
|
|
201
|
+
---
|
|
202
|
+
applies_to: ["**/*.ts", "**/*.tsx"]
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
# AFTER
|
|
206
|
+
---
|
|
207
|
+
applyTo: '**/*.ts, **/*.tsx'
|
|
208
|
+
---
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
For `all.instructions.md` (always-loaded baseline):
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
---
|
|
215
|
+
applyTo: '**'
|
|
216
|
+
---
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
> **Copilot CSV pitfall**: the `applyTo:` value MUST be a single quoted string. Array form `applyTo: ['a', 'b']` is silently ignored.
|
|
220
|
+
|
|
221
|
+
### Verification
|
|
222
|
+
|
|
223
|
+
1. Restart your IDE.
|
|
224
|
+
2. Open Copilot Chat.
|
|
225
|
+
3. Edit a `.ts` file and ask "what are the project's TypeScript naming conventions?" — if you copied the `coding-conventions` recipe, the answer should match `coding-conventions.instructions.md`.
|
|
226
|
+
4. Confirm Copilot's "Used N references" footer shows the matching `*.instructions.md` file.
|
|
227
|
+
|
|
228
|
+
### Uninstall
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
rm -rf .github/instructions
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Tool 3 — Gemini CLI (fallback manual install)
|
|
237
|
+
|
|
238
|
+
> **An adapter now exists** — prefer `bash adapters/gemini/transform.sh <target>`; the manual steps below are a fallback.
|
|
239
|
+
|
|
240
|
+
Gemini CLI uses a single `GEMINI.md` file (or `~/.gemini/instructions.md` for global). No frontmatter, no globs — everything is one bundle, always loaded.
|
|
241
|
+
|
|
242
|
+
### Mac / Linux / Windows-WSL2
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
cd <target>
|
|
246
|
+
|
|
247
|
+
# Concatenate all universal rules into GEMINI.md
|
|
248
|
+
cat ~/conductor/core/universal-rules/*.md > GEMINI.md
|
|
249
|
+
|
|
250
|
+
# Optional: add recipes
|
|
251
|
+
cat ~/conductor/core/recipes/coding-conventions.md \
|
|
252
|
+
~/conductor/core/recipes/monorepo.md \
|
|
253
|
+
>> GEMINI.md
|
|
254
|
+
|
|
255
|
+
# Doc templates (same as Cursor section)
|
|
256
|
+
mkdir -p docs/specs
|
|
257
|
+
[ -f docs/CURRENT_WORK.md ] || cp ~/conductor/core/docs-templates/CURRENT_WORK.md docs/
|
|
258
|
+
# ... (repeat for REMAINING_TASKS, PLANS, TASKS, INDEX, specs/_example)
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Windows / Git Bash
|
|
262
|
+
|
|
263
|
+
Same. Or use PowerShell `Get-Content`:
|
|
264
|
+
|
|
265
|
+
```powershell
|
|
266
|
+
Get-ChildItem C:\conductor\core\universal-rules\*.md |
|
|
267
|
+
Get-Content |
|
|
268
|
+
Set-Content GEMINI.md
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Frontmatter rewrite
|
|
272
|
+
|
|
273
|
+
**None needed**. Gemini ignores YAML frontmatter — it's harmless filler in the bundle. If you want a clean file, delete the `---...---` blocks at the top of each section after concatenation.
|
|
274
|
+
|
|
275
|
+
### Verification
|
|
276
|
+
|
|
277
|
+
1. Restart Gemini CLI.
|
|
278
|
+
2. Run `gemini list-context` (or check the session preamble) — `GEMINI.md` content should appear.
|
|
279
|
+
3. Ask "what is the spec-as-you-go rule?" — answer should cite the universal rule.
|
|
280
|
+
|
|
281
|
+
### Limitations
|
|
282
|
+
|
|
283
|
+
- No lazy load — every rule is loaded every turn (token cost higher than Claude/Cursor/Copilot).
|
|
284
|
+
- No hooks, no sub-agents (per ADR-004 honesty principle).
|
|
285
|
+
|
|
286
|
+
### Uninstall
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
rm -f GEMINI.md
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Tool 4 — Codex (OpenAI) (fallback manual install)
|
|
295
|
+
|
|
296
|
+
> **An adapter now exists** — prefer `bash adapters/codex/transform.sh <target>`; the manual steps below are a fallback.
|
|
297
|
+
|
|
298
|
+
Codex CLI reads `AGENTS.md` (and historically `.codex/codex.md` — both supported as of 2026-05).
|
|
299
|
+
|
|
300
|
+
### Mac / Linux / Windows-WSL2
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
cd <target>
|
|
304
|
+
|
|
305
|
+
# Concatenate universal rules
|
|
306
|
+
cat ~/conductor/core/universal-rules/*.md > AGENTS.md
|
|
307
|
+
|
|
308
|
+
# Recipes (optional)
|
|
309
|
+
cat ~/conductor/core/recipes/coding-conventions.md >> AGENTS.md
|
|
310
|
+
|
|
311
|
+
# Doc templates (same pattern as Gemini)
|
|
312
|
+
mkdir -p docs/specs
|
|
313
|
+
[ -f docs/CURRENT_WORK.md ] || cp ~/conductor/core/docs-templates/CURRENT_WORK.md docs/
|
|
314
|
+
# ... (repeat as above)
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Windows / Git Bash
|
|
318
|
+
|
|
319
|
+
Same commands. PowerShell users: see Gemini section's `Get-Content` example.
|
|
320
|
+
|
|
321
|
+
### Frontmatter rewrite
|
|
322
|
+
|
|
323
|
+
None — Codex ignores YAML frontmatter. Optional cleanup: strip `---...---` blocks after concat.
|
|
324
|
+
|
|
325
|
+
### Verification
|
|
326
|
+
|
|
327
|
+
1. Restart Codex.
|
|
328
|
+
2. Verify the session preamble mentions `AGENTS.md`.
|
|
329
|
+
|
|
330
|
+
### Limitations
|
|
331
|
+
|
|
332
|
+
- Single bundled file, no per-pattern routing.
|
|
333
|
+
- No hooks, no sub-agents.
|
|
334
|
+
|
|
335
|
+
### Uninstall
|
|
336
|
+
|
|
337
|
+
```bash
|
|
338
|
+
rm -f AGENTS.md
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Tool 5 — Windsurf (fallback manual install)
|
|
344
|
+
|
|
345
|
+
> **An adapter now exists** — prefer `bash adapters/windsurf/transform.sh <target>`; the manual steps below are a fallback.
|
|
346
|
+
|
|
347
|
+
Windsurf reads `.windsurfrules` (always-loaded) plus `.codeium/instructions/*.md` for directory-scoped rules (varies by Windsurf version — verify your version's docs).
|
|
348
|
+
|
|
349
|
+
### Mac / Linux / Windows-WSL2
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
cd <target>
|
|
353
|
+
|
|
354
|
+
# Always-loaded baseline (all 5 universal rules)
|
|
355
|
+
cat ~/conductor/core/universal-rules/meta-discipline.md \
|
|
356
|
+
~/conductor/core/universal-rules/operations.md \
|
|
357
|
+
~/conductor/core/universal-rules/quality-gates.md \
|
|
358
|
+
~/conductor/core/universal-rules/spec-as-you-go.md \
|
|
359
|
+
~/conductor/core/universal-rules/workflow.md \
|
|
360
|
+
> .windsurfrules
|
|
361
|
+
|
|
362
|
+
# Directory-scoped (best effort — verify your Windsurf version supports this)
|
|
363
|
+
mkdir -p .codeium/instructions
|
|
364
|
+
for f in ~/conductor/core/universal-rules/operations.md \
|
|
365
|
+
~/conductor/core/universal-rules/quality-gates.md \
|
|
366
|
+
~/conductor/core/universal-rules/meta-discipline.md; do
|
|
367
|
+
cp "$f" ".codeium/instructions/$(basename "$f")"
|
|
368
|
+
done
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Windows / Git Bash
|
|
372
|
+
|
|
373
|
+
Same. PowerShell — same pattern as Gemini.
|
|
374
|
+
|
|
375
|
+
### Frontmatter rewrite
|
|
376
|
+
|
|
377
|
+
Windsurf rule format is **NOT VERIFIED for v0.2** — check the Windsurf docs for your installed version. As a safe default, leave Conductor frontmatter in place (it is unlikely to harm; worst case Windsurf treats it as text).
|
|
378
|
+
|
|
379
|
+
### Verification
|
|
380
|
+
|
|
381
|
+
1. Restart Windsurf.
|
|
382
|
+
2. Open Windsurf settings → confirm `.windsurfrules` is detected.
|
|
383
|
+
3. Ask the Windsurf assistant about a rule that should be loaded — answer should reflect the rule.
|
|
384
|
+
|
|
385
|
+
### Limitations
|
|
386
|
+
|
|
387
|
+
- Per-pattern routing support is version-dependent — likely degrades to "all loaded all the time".
|
|
388
|
+
- No hooks, no sub-agents.
|
|
389
|
+
|
|
390
|
+
### Uninstall
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
rm -f .windsurfrules
|
|
394
|
+
rm -rf .codeium/instructions
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Common pitfalls & FAQ
|
|
400
|
+
|
|
401
|
+
### "I copied the files but the rules don't load"
|
|
402
|
+
|
|
403
|
+
Most likely causes (in order):
|
|
404
|
+
|
|
405
|
+
1. **You forgot to restart the IDE.** Every tool reads rule files at session start.
|
|
406
|
+
2. **Frontmatter syntax is wrong.** Cursor's `globs:` is CSV (no quotes around the list); Copilot's `applyTo:` is a single quoted string. Check the cheat sheet above.
|
|
407
|
+
3. **You put rules in the wrong directory.** Cursor wants `.cursor/rules/`; Copilot wants `.github/instructions/`. A `.cursorrules` file in the project root is also valid for Cursor as a baseline.
|
|
408
|
+
4. **The file extension is wrong.** Cursor needs `.mdc` (not `.md`); Copilot needs `.instructions.md` (not `.md`).
|
|
409
|
+
|
|
410
|
+
### "I need to update Conductor — do I re-copy everything?"
|
|
411
|
+
|
|
412
|
+
Yes — that is exactly what `bash transform.sh <target>` does. Manual install means you re-do the manual steps after `git pull` in `~/conductor`. This is the main reason to use the adapter when one is available.
|
|
413
|
+
|
|
414
|
+
### "Can I mix manual install with the adapter?"
|
|
415
|
+
|
|
416
|
+
Yes. Every tool now has an adapter, but you can still mix (e.g. run `adapters/claude/transform.sh` for Claude and do the manual `cp` steps for Gemini if you prefer). The two write to different directories (`.claude/` vs `GEMINI.md`) so there is no conflict.
|
|
417
|
+
|
|
418
|
+
### "Windows native PowerShell support?"
|
|
419
|
+
|
|
420
|
+
Currently unsupported (tracked under ADR-023 as P3+ work). Workarounds:
|
|
421
|
+
|
|
422
|
+
- **Git Bash for Windows** — POSIX shell on top of MSYS2. Bundled with Git for Windows. Use `bash transform.sh ...` exactly like on Mac.
|
|
423
|
+
- **WSL2 (Ubuntu)** — full Linux environment. `bash transform.sh ...` works identically to Mac/Linux.
|
|
424
|
+
|
|
425
|
+
### "Encoding issues on Windows (CRLF vs LF)?"
|
|
426
|
+
|
|
427
|
+
Configure git to keep files in LF on disk:
|
|
428
|
+
|
|
429
|
+
```bash
|
|
430
|
+
git config --global core.autocrlf input # Mac/Linux/WSL
|
|
431
|
+
git config --global core.autocrlf false # Windows-Git-Bash if you commit cross-platform projects
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
Conductor source files are LF + UTF-8. Mixed-line-endings will break the bash scripts (you'll see `\r: command not found` errors).
|
|
435
|
+
|
|
436
|
+
### "Where do recipes go in manual install?"
|
|
437
|
+
|
|
438
|
+
Same path as universal rules, but you only copy the recipe files relevant to your project. For example, for a TypeScript monorepo with i18n, copy:
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
core/recipes/coding-conventions.md
|
|
442
|
+
core/recipes/monorepo.md
|
|
443
|
+
core/recipes/i18n.md
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
into the same tool-specific directory (`.cursor/rules/` for Cursor, etc.).
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## See also
|
|
451
|
+
|
|
452
|
+
- [`README.md`](../README.md) — adapter-based install Quick Start (5 minutes).
|
|
453
|
+
- [`docs/COMPATIBILITY-MATRIX.md`](./COMPATIBILITY-MATRIX.md) — which features each tool supports natively.
|
|
454
|
+
- [`docs/HOW-IT-WORKS-PER-TOOL.md`](./HOW-IT-WORKS-PER-TOOL.md) — under-the-hood explanation per tool.
|
|
455
|
+
- [`docs/DESIGN-DECISIONS.md`](./DESIGN-DECISIONS.md) ADR-023 — marketplace + cross-platform strategy.
|
|
456
|
+
- [`adapters/<tool>/SUPPORTED-FEATURES.md`](../adapters/) — per-tool feature degradation summary.
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "omniconductor",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Multi-coding-agent workflow framework. Write your project's rules, workflow, and discipline ONCE — install into Claude Code, Cursor, GitHub Copilot, Gemini CLI, Codex, or Windsurf. Encodes the discipline developers most often skip — spec-before-code, review gates, session continuity — so your AI agents catch what's easy to miss.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"author": "LFamily Labs LLC",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/lee77840/conductor_lfamily.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/lee77840/conductor_lfamily#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/lee77840/conductor_lfamily/issues"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=18"
|
|
17
|
+
},
|
|
18
|
+
"bin": {
|
|
19
|
+
"omniconductor": "bin/omniconductor.js"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"bin/",
|
|
23
|
+
"adapters/",
|
|
24
|
+
"core/",
|
|
25
|
+
"tools/",
|
|
26
|
+
"docs/MANUAL-INSTALL.md",
|
|
27
|
+
"README.md",
|
|
28
|
+
"VISION.md",
|
|
29
|
+
"LICENSE",
|
|
30
|
+
"NOTICE",
|
|
31
|
+
"TRADEMARKS.md",
|
|
32
|
+
"THIRD_PARTY_NOTICES.md",
|
|
33
|
+
"CHANGELOG.md"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"cli": "node bin/omniconductor.js"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"claude-code",
|
|
40
|
+
"cursor",
|
|
41
|
+
"github-copilot",
|
|
42
|
+
"gemini-cli",
|
|
43
|
+
"codex",
|
|
44
|
+
"windsurf",
|
|
45
|
+
"ai-coding",
|
|
46
|
+
"multi-tool",
|
|
47
|
+
"orchestrator",
|
|
48
|
+
"sub-agents",
|
|
49
|
+
"spec-driven",
|
|
50
|
+
"workflow"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Conductor framework purity check — ban reference-adopter-specific tokens in framework body.
|
|
3
|
+
# Exit 0 = clean, 1 = leak detected.
|
|
4
|
+
#
|
|
5
|
+
# Scanned paths (framework body — adopters read these and must not see specifics):
|
|
6
|
+
# core/ — universal rules / recipes / templates
|
|
7
|
+
# adapters/<tool>/hookify-templates/ — runtime hook templates
|
|
8
|
+
# docs/MANUAL-INSTALL.md — install guide
|
|
9
|
+
# README.md — top-level intro
|
|
10
|
+
# phase-2/ — VSCode extension scaffolding
|
|
11
|
+
#
|
|
12
|
+
# Excluded (frozen history — intentional named references OK):
|
|
13
|
+
# docs/DESIGN-DECISIONS.md — ADR archive
|
|
14
|
+
# docs/audits/ — competitive analyses (snapshots)
|
|
15
|
+
# docs/CONDUCTOR-V0.2-DESIGN.md — P0.5 design history
|
|
16
|
+
# docs/KPI.md — P1.5 baseline measurement
|
|
17
|
+
# CURRENT_WORK.md / SESSION_HANDOFF.md — session continuity
|
|
18
|
+
# LICENSE / NOTICE — legal attribution
|
|
19
|
+
# adapters/*/transform.sh — adapter logic (functional defaults, with adopter-customization comments)
|
|
20
|
+
# archive/ — frozen v0.1
|
|
21
|
+
#
|
|
22
|
+
# See docs/DESIGN-DECISIONS.md ADR-026 for the policy rationale.
|
|
23
|
+
|
|
24
|
+
set -u
|
|
25
|
+
|
|
26
|
+
# Banned tokens — reference-adopter-specific names that must not appear in framework body.
|
|
27
|
+
# Vendor names in legitimate framework context (e.g., "Anthropic" in PROMPT-CACHING-GUIDE)
|
|
28
|
+
# are kept by excluding the prompt-caching guide from the scan paths above.
|
|
29
|
+
# Generic stack/path tokens (public products — safe to keep in the shipped checker).
|
|
30
|
+
BANNED=(
|
|
31
|
+
"apps/web"
|
|
32
|
+
"apps/mobile"
|
|
33
|
+
"Stripe"
|
|
34
|
+
"Plaid"
|
|
35
|
+
"Resend"
|
|
36
|
+
"Supabase"
|
|
37
|
+
"Vercel"
|
|
38
|
+
"Sentry"
|
|
39
|
+
"Postmark"
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# The reference-product name + personal identifiers live in a PRIVATE-only file
|
|
43
|
+
# (.purity-banned-private) that is NOT synced to the public mirror nor shipped to npm.
|
|
44
|
+
# Load them at runtime when present (private working repo) so the scan still catches them.
|
|
45
|
+
_priv="$(dirname "$0")/../.purity-banned-private"
|
|
46
|
+
if [ -f "$_priv" ]; then
|
|
47
|
+
while IFS= read -r _t || [ -n "$_t" ]; do
|
|
48
|
+
case "$_t" in ''|'#'*) : ;; *) BANNED+=("$_t") ;; esac
|
|
49
|
+
done < "$_priv"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# Scan paths — framework body only.
|
|
53
|
+
SCAN_PATHS=(
|
|
54
|
+
"core"
|
|
55
|
+
"adapters/claude/hookify-templates"
|
|
56
|
+
"adapters/copilot/hookify-templates"
|
|
57
|
+
"adapters/cursor/hookify-templates"
|
|
58
|
+
"docs/MANUAL-INSTALL.md"
|
|
59
|
+
"README.md"
|
|
60
|
+
"phase-2"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
cd "$(dirname "$0")/.." || exit 2
|
|
64
|
+
|
|
65
|
+
LEAK_FOUND=0
|
|
66
|
+
TOTAL_LEAKS=0
|
|
67
|
+
|
|
68
|
+
for term in "${BANNED[@]}"; do
|
|
69
|
+
for path in "${SCAN_PATHS[@]}"; do
|
|
70
|
+
[ -e "$path" ] || continue
|
|
71
|
+
# -F = fixed string, -n = line numbers, -R = recursive, -I = skip binary
|
|
72
|
+
matches=$(grep -FRIn -- "$term" "$path" 2>/dev/null || true)
|
|
73
|
+
if [ -n "$matches" ]; then
|
|
74
|
+
count=$(printf '%s\n' "$matches" | wc -l | tr -d ' ')
|
|
75
|
+
echo "LEAK: '$term' in $path ($count line(s))"
|
|
76
|
+
printf '%s\n' "$matches" | head -5
|
|
77
|
+
echo
|
|
78
|
+
LEAK_FOUND=1
|
|
79
|
+
TOTAL_LEAKS=$((TOTAL_LEAKS + count))
|
|
80
|
+
fi
|
|
81
|
+
done
|
|
82
|
+
done
|
|
83
|
+
|
|
84
|
+
if [ "$LEAK_FOUND" -eq 0 ]; then
|
|
85
|
+
echo "OK — framework body is consumer-agnostic. No reference-adopter specifics detected."
|
|
86
|
+
exit 0
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
echo "FAIL — $TOTAL_LEAKS total leak line(s) found."
|
|
90
|
+
echo "Policy: docs/DESIGN-DECISIONS.md ADR-026."
|
|
91
|
+
exit 1
|