create-egregore 0.20.0 → 0.20.2
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/assets/egregore-launcher.js +80 -15
- package/lib/local.js +4 -20
- package/lib/setup.js +21 -4
- package/package.json +2 -2
- package/runtime/codex/.codex/config.toml +3 -0
- package/runtime/codex/.codex/skills/archive/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/branch/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/checkup/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/commit/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/contribute/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/delete-user/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/ingest/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/ingest-corpus/SKILL.md +29 -0
- package/runtime/codex/.codex/skills/ingest-notion/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/issue/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/me/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/meeting/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/note/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/notion-connect/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/onboarding/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/pr/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/push/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/reflect/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/review-pr/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/save/SKILL.md +3 -1
- package/runtime/codex/.codex/skills/slack-connect/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/sync-repos/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/teams-connect/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/telegram-connect/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/test/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/tutorial/SKILL.md +1 -1
- package/runtime/codex/.codex/skills/update/SKILL.md +1 -1
- package/runtime/codex/.codex/spec-manifest.json +4 -4
- package/runtime/codex/AGENTS.md +52 -39
- package/runtime/codex/bin/agent.sh +32 -8
- package/runtime/codex/bin/codex-render-spec.mjs +31 -34
- package/runtime/codex/bin/codex-sync-skills.sh +6 -1
- package/runtime/codex/bin/contribute-guard.sh +79 -0
- package/runtime/codex/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/codex/bin/handoff-run.sh +8 -3
- package/runtime/codex/bin/handoff-save-egregore.sh +20 -8
- package/runtime/codex/bin/ingest.py +260 -5
- package/runtime/codex/bin/lib/git-message.sh +37 -0
- package/runtime/codex/bin/lib/git-sync.sh +26 -2
- package/runtime/codex/bin/lib/greeting.sh +2 -2
- package/runtime/codex/bin/search.sh +46 -4
- package/runtime/codex/bin/session-autosave.sh +13 -2
- package/runtime/codex/bin/settings.sh +63 -4
- package/runtime/codex/bin/worktree-create.sh +4 -1
- package/runtime/codex/manifest.json +5 -1
- package/runtime/pi/.codex/config.toml +3 -0
- package/runtime/pi/.codex/skills/archive/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/branch/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/checkup/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/commit/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/contribute/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/delete-user/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/ingest/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/ingest-corpus/SKILL.md +29 -0
- package/runtime/pi/.codex/skills/ingest-notion/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/issue/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/me/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/meeting/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/note/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/notion-connect/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/onboarding/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/pr/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/push/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/reflect/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/review-pr/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/save/SKILL.md +3 -1
- package/runtime/pi/.codex/skills/slack-connect/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/sync-repos/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/teams-connect/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/telegram-connect/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/test/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/tutorial/SKILL.md +1 -1
- package/runtime/pi/.codex/skills/update/SKILL.md +1 -1
- package/runtime/pi/.codex/spec-manifest.json +4 -4
- package/runtime/pi/.pi/APPEND_SYSTEM.md +76 -39
- package/runtime/pi/.pi/spec-manifest.json +2 -2
- package/runtime/pi/AGENTS.md +52 -39
- package/runtime/pi/bin/agent.sh +32 -8
- package/runtime/pi/bin/codex-render-spec.mjs +31 -34
- package/runtime/pi/bin/codex-sync-skills.sh +6 -1
- package/runtime/pi/bin/contribute-guard.sh +79 -0
- package/runtime/pi/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/pi/bin/handoff-run.sh +8 -3
- package/runtime/pi/bin/handoff-save-egregore.sh +20 -8
- package/runtime/pi/bin/ingest.py +260 -5
- package/runtime/pi/bin/lib/git-message.sh +37 -0
- package/runtime/pi/bin/lib/git-sync.sh +26 -2
- package/runtime/pi/bin/lib/greeting.sh +2 -2
- package/runtime/pi/bin/pi-render-spec.mjs +52 -26
- package/runtime/pi/bin/search.sh +46 -4
- package/runtime/pi/bin/session-autosave.sh +13 -2
- package/runtime/pi/bin/settings.sh +63 -4
- package/runtime/pi/bin/worktree-create.sh +4 -1
- package/runtime/pi/manifest.json +5 -1
- package/runtime/prime/.codex/config.toml +3 -0
- package/runtime/prime/.codex/skills/archive/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/branch/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/checkup/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/commit/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/contribute/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/delete-user/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/ingest/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/ingest-corpus/SKILL.md +29 -0
- package/runtime/prime/.codex/skills/ingest-notion/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/ingest-user-interview/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/issue/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/me/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/meeting/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/note/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/notion-connect/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/onboarding/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/pr/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/pull/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/push/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/reflect/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/review-pr/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/save/SKILL.md +3 -1
- package/runtime/prime/.codex/skills/slack-connect/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/summon/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/sync-repos/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/teams-connect/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/telegram-connect/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/telemetry/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/test/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/tutorial/SKILL.md +1 -1
- package/runtime/prime/.codex/skills/update/SKILL.md +1 -1
- package/runtime/prime/.codex/spec-manifest.json +4 -4
- package/runtime/prime/.prime/agent/APPEND_SYSTEM.md +77 -40
- package/runtime/prime/.prime/agent/spec-manifest.json +2 -2
- package/runtime/prime/AGENTS.md +52 -39
- package/runtime/prime/bin/agent.sh +32 -8
- package/runtime/prime/bin/codex-render-spec.mjs +31 -34
- package/runtime/prime/bin/codex-sync-skills.sh +6 -1
- package/runtime/prime/bin/contribute-guard.sh +79 -0
- package/runtime/prime/bin/handoff-pr-backfill.sh +1 -1
- package/runtime/prime/bin/handoff-run.sh +8 -3
- package/runtime/prime/bin/handoff-save-egregore.sh +20 -8
- package/runtime/prime/bin/ingest.py +260 -5
- package/runtime/prime/bin/lib/git-message.sh +37 -0
- package/runtime/prime/bin/lib/git-sync.sh +26 -2
- package/runtime/prime/bin/lib/greeting.sh +2 -2
- package/runtime/prime/bin/prime-render-spec.mjs +52 -28
- package/runtime/prime/bin/search.sh +46 -4
- package/runtime/prime/bin/session-autosave.sh +13 -2
- package/runtime/prime/bin/settings.sh +63 -4
- package/runtime/prime/bin/worktree-create.sh +4 -1
- package/runtime/prime/manifest.json +5 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// egregore-launcher-version: 0.20.
|
|
2
|
+
// egregore-launcher-version: 0.20.2
|
|
3
3
|
//
|
|
4
4
|
// egregore — launch and browse Egregore instances from your terminal.
|
|
5
5
|
// Installed by create-egregore. Reads ~/.egregore/instances.json.
|
|
@@ -33,7 +33,7 @@ const crypto = require("node:crypto");
|
|
|
33
33
|
const { spawnSync, spawn } = require("node:child_process");
|
|
34
34
|
const readline = require("node:readline");
|
|
35
35
|
|
|
36
|
-
const VERSION = "0.20.
|
|
36
|
+
const VERSION = "0.20.2";
|
|
37
37
|
const REGISTRY = path.join(os.homedir(), ".egregore", "instances.json");
|
|
38
38
|
const DEFAULT_FILE = path.join(os.homedir(), ".egregore", "default");
|
|
39
39
|
const UPDATE_CACHE_FILE = path.join(os.homedir(), ".egregore", "update-check.json");
|
|
@@ -702,7 +702,9 @@ function codexSupportMessage(egregoreDir) {
|
|
|
702
702
|
" .codex/hooks.json",
|
|
703
703
|
" .codex/hooks/",
|
|
704
704
|
"",
|
|
705
|
-
"
|
|
705
|
+
"Automatic repair did not complete. Retry with:",
|
|
706
|
+
" npx -y create-egregore@latest --refresh-launcher",
|
|
707
|
+
"Then rerun egregore.",
|
|
706
708
|
"Egregore workflows appear as slash commands. In Codex, invoke them with the matching $skill token or ask in natural language.",
|
|
707
709
|
].join("\n");
|
|
708
710
|
}
|
|
@@ -756,6 +758,27 @@ function primeSupportMessage(egregoreDir) {
|
|
|
756
758
|
].join("\n");
|
|
757
759
|
}
|
|
758
760
|
|
|
761
|
+
function repairPortableRuntime(egregoreDir, runtime) {
|
|
762
|
+
const label = runtimeLabel(runtime);
|
|
763
|
+
process.stdout.write(`\n ${CYAN}↻${RESET} ${BOLD}Repairing ${label} support${RESET}${DIM} — updating this checkout${RESET}\n`);
|
|
764
|
+
const result = spawnSync(
|
|
765
|
+
"npx",
|
|
766
|
+
["-y", `${PUBLIC_NPX_PACKAGE}@latest`, "--refresh-launcher"],
|
|
767
|
+
{
|
|
768
|
+
cwd: egregoreDir,
|
|
769
|
+
stdio: "inherit",
|
|
770
|
+
env: { ...process.env, EGREGORE_RUNTIME_REPAIR: runtime },
|
|
771
|
+
timeout: 3 * 60 * 1000,
|
|
772
|
+
},
|
|
773
|
+
);
|
|
774
|
+
if (result.error || result.status !== 0) {
|
|
775
|
+
process.stderr.write(` ${YELLOW}!${RESET} Automatic ${label} repair failed; the checkout was left in place.\n`);
|
|
776
|
+
return false;
|
|
777
|
+
}
|
|
778
|
+
process.stdout.write(` ${GREEN}✓${RESET} ${label} support repaired\n\n`);
|
|
779
|
+
return true;
|
|
780
|
+
}
|
|
781
|
+
|
|
759
782
|
// Minimal y/N line prompt for pre-launch decisions (the TUI select machinery
|
|
760
783
|
// is torn down by the time launch() runs).
|
|
761
784
|
function confirmLine(question) {
|
|
@@ -886,7 +909,9 @@ async function launch(inst, runtimeOverride) {
|
|
|
886
909
|
}
|
|
887
910
|
if (runtime === "codex") {
|
|
888
911
|
if (!hasCodexCoreSupport(inst.path)) {
|
|
889
|
-
|
|
912
|
+
if (!repairPortableRuntime(inst.path, runtime) || !hasCodexCoreSupport(inst.path)) {
|
|
913
|
+
die(codexSupportMessage(inst.path));
|
|
914
|
+
}
|
|
890
915
|
}
|
|
891
916
|
const skillsInstalled = installCodexSkills(inst.path);
|
|
892
917
|
const cardRendered = await renderCodexStartupCard(inst.path);
|
|
@@ -894,7 +919,10 @@ async function launch(inst, runtimeOverride) {
|
|
|
894
919
|
die(codexSupportMessage(inst.path));
|
|
895
920
|
}
|
|
896
921
|
} else if (runtime === "pi") {
|
|
897
|
-
if (!hasPiCoreSupport(inst.path)
|
|
922
|
+
if (!hasPiCoreSupport(inst.path) &&
|
|
923
|
+
(!repairPortableRuntime(inst.path, runtime) || !hasPiCoreSupport(inst.path))) {
|
|
924
|
+
die(piSupportMessage(inst.path));
|
|
925
|
+
}
|
|
898
926
|
}
|
|
899
927
|
let launchArgs = null;
|
|
900
928
|
if (runtime === "prime") {
|
|
@@ -903,7 +931,10 @@ async function launch(inst, runtimeOverride) {
|
|
|
903
931
|
// check + the trust-flag probe, which shells out to the binary), then a
|
|
904
932
|
// single handoff line explains the remaining in-harness startup.
|
|
905
933
|
const stopLoader = startSpinner("Starting Prime Agent");
|
|
906
|
-
|
|
934
|
+
let coreOk = hasPrimeCoreSupport(inst.path);
|
|
935
|
+
if (!coreOk && repairPortableRuntime(inst.path, runtime)) {
|
|
936
|
+
coreOk = hasPrimeCoreSupport(inst.path);
|
|
937
|
+
}
|
|
907
938
|
launchArgs = coreOk ? runtimeLaunchArgs(runtime, inst.path) : null;
|
|
908
939
|
stopLoader();
|
|
909
940
|
if (!coreOk) die(primeSupportMessage(inst.path));
|
|
@@ -1532,9 +1563,31 @@ async function cmdConnect(args) {
|
|
|
1532
1563
|
}
|
|
1533
1564
|
const activation = state.connected_activation || {};
|
|
1534
1565
|
if (cfg.mode === "connected" && activation.status === "connected") {
|
|
1566
|
+
if (activation.intent_id) {
|
|
1567
|
+
const repaired = await connectedApiRequest(
|
|
1568
|
+
githubToken,
|
|
1569
|
+
"POST",
|
|
1570
|
+
`/api/billing/connect/${encodeURIComponent(activation.intent_id)}/claim`,
|
|
1571
|
+
{},
|
|
1572
|
+
);
|
|
1573
|
+
if (repaired.status !== 200 || repaired.data?.status !== "connected") {
|
|
1574
|
+
die(
|
|
1575
|
+
`Connected is active, but its shared configuration could not be published: ${connectError(repaired, `HTTP ${repaired.status}`)}`,
|
|
1576
|
+
);
|
|
1577
|
+
}
|
|
1578
|
+
writeJsonFileAtomic(path.join(inst.path, "egregore.json"), {
|
|
1579
|
+
...cfg,
|
|
1580
|
+
mode: "connected",
|
|
1581
|
+
api_url: repaired.data.api_url,
|
|
1582
|
+
});
|
|
1583
|
+
if (repaired.data.api_key) {
|
|
1584
|
+
writeEnvValueAtomic(path.join(inst.path, ".env"), "EGREGORE_API_KEY", repaired.data.api_key);
|
|
1585
|
+
}
|
|
1586
|
+
}
|
|
1535
1587
|
normalizeClaudeDenyRules(inst.path);
|
|
1536
1588
|
ensureClaudeModeStatusLine(inst.path);
|
|
1537
|
-
|
|
1589
|
+
const detail = activation.intent_id ? "shared configuration published" : "already connected";
|
|
1590
|
+
console.log(`\n ${GREEN}✓${RESET} ${BOLD}${inst.slug}${RESET} is connected · ${detail}.\n`);
|
|
1538
1591
|
return;
|
|
1539
1592
|
}
|
|
1540
1593
|
|
|
@@ -2080,7 +2133,7 @@ function runSettings(inst, args) {
|
|
|
2080
2133
|
return { status: 127, stdout: "", stderr: "bin/settings.sh not found — update this egregore (run /pull) to get settings.\n", missing: true };
|
|
2081
2134
|
}
|
|
2082
2135
|
try {
|
|
2083
|
-
return spawnSync("bash", [script, ...args], { cwd: inst.path, stdio: "pipe", encoding: "utf-8", timeout:
|
|
2136
|
+
return spawnSync("bash", [script, ...args], { cwd: inst.path, stdio: "pipe", encoding: "utf-8", timeout: 45000 });
|
|
2084
2137
|
} catch (err) {
|
|
2085
2138
|
return { status: 1, stdout: "", stderr: String(err) };
|
|
2086
2139
|
}
|
|
@@ -2095,13 +2148,13 @@ function settingsDump(inst) {
|
|
|
2095
2148
|
async function cmdSettings(args) {
|
|
2096
2149
|
const registry = readRegistry();
|
|
2097
2150
|
if (registry.length === 0) die("no egregores installed yet.\n run: npx -y create-egregore@latest");
|
|
2098
|
-
const DOMAINS = new Set(["hosting", "repo", "admin", "people", "dump"]);
|
|
2151
|
+
const DOMAINS = new Set(["hosting", "workflow", "repo", "admin", "people", "dump"]);
|
|
2099
2152
|
let rest = args.slice();
|
|
2100
2153
|
let slug = "";
|
|
2101
2154
|
if (rest.length && !DOMAINS.has(rest[0])) { slug = rest[0]; rest = rest.slice(1); }
|
|
2102
2155
|
const inst = resolveInviteInstance(registry, slug);
|
|
2103
2156
|
if (!inst) {
|
|
2104
|
-
die(`multiple egregores installed; choose one:\n egregore settings <slug> [hosting|repo|admin]\n run: egregore ls`);
|
|
2157
|
+
die(`multiple egregores installed; choose one:\n egregore settings <slug> [hosting|workflow|repo|admin|people]\n run: egregore ls`);
|
|
2105
2158
|
}
|
|
2106
2159
|
// Interactive editing lives in the launcher (press `s`). With no verb, print
|
|
2107
2160
|
// the snapshot; otherwise forward straight to the deterministic verb.
|
|
@@ -2399,6 +2452,14 @@ function renderSettingsPanel({ inst, data, cursor, view, domain, items, listCurs
|
|
|
2399
2452
|
} else {
|
|
2400
2453
|
const rows = [
|
|
2401
2454
|
{ name: "Hosted Artifacts", value: (d.hosting !== false) ? `${GREEN}ON${RESET}` : `${YELLOW}OFF${RESET}` },
|
|
2455
|
+
{
|
|
2456
|
+
name: "Git workflow",
|
|
2457
|
+
value: d.workflow === "simple"
|
|
2458
|
+
? `${DIM}PRs → main${RESET}`
|
|
2459
|
+
: d.workflow === "staged"
|
|
2460
|
+
? `${DIM}PRs → develop → main${RESET}`
|
|
2461
|
+
: `${DIM}PRs → ${d.base_branch || "custom"}${RESET}`,
|
|
2462
|
+
},
|
|
2402
2463
|
{ name: "Managed repos", value: `${DIM}${(d.repos || []).length}${RESET}` },
|
|
2403
2464
|
{ name: "Admins", value: `${DIM}${(d.admins || []).length}${RESET}` },
|
|
2404
2465
|
{ name: "People", value: `${DIM}${(d.people || []).length}${RESET}` },
|
|
@@ -2411,7 +2472,7 @@ function renderSettingsPanel({ inst, data, cursor, view, domain, items, listCurs
|
|
|
2411
2472
|
});
|
|
2412
2473
|
lines.push(emptyBoxLine(innerWidth, margin));
|
|
2413
2474
|
if (notice) lines.push(boxLine(notice, innerWidth, margin));
|
|
2414
|
-
lines.push(boxLine(`${DIM}↑↓ nav · ${RESET}${BOLD}enter${RESET}${DIM} ${cursor
|
|
2475
|
+
lines.push(boxLine(`${DIM}↑↓ nav · ${RESET}${BOLD}enter${RESET}${DIM} ${cursor < 2 ? "toggle" : "open"} · ← back · q quit${RESET}`, innerWidth, margin));
|
|
2415
2476
|
}
|
|
2416
2477
|
|
|
2417
2478
|
lines.push(emptyBoxLine(innerWidth, margin));
|
|
@@ -2869,15 +2930,19 @@ async function browser(args = {}) {
|
|
|
2869
2930
|
|
|
2870
2931
|
// menu view
|
|
2871
2932
|
if (key.name === "escape" || key.name === "left") { S.settingsInst = null; S.settingsNotice = ""; render(); return; }
|
|
2872
|
-
if (key.name === "up" || key.name === "k") { S.settingsCursor = (S.settingsCursor - 1 +
|
|
2873
|
-
if (key.name === "down" || key.name === "j") { S.settingsCursor = (S.settingsCursor + 1) %
|
|
2933
|
+
if (key.name === "up" || key.name === "k") { S.settingsCursor = (S.settingsCursor - 1 + 5) % 5; render(); return; }
|
|
2934
|
+
if (key.name === "down" || key.name === "j") { S.settingsCursor = (S.settingsCursor + 1) % 5; render(); return; }
|
|
2874
2935
|
if (key.name === "return" || chunk === " ") {
|
|
2875
2936
|
if (S.settingsCursor === 0) {
|
|
2876
2937
|
const on = (S.settingsData && S.settingsData.hosting) !== false;
|
|
2877
2938
|
settingsRunVerb(["hosting", on ? "off" : "on"]);
|
|
2878
2939
|
render();
|
|
2940
|
+
} else if (S.settingsCursor === 1) {
|
|
2941
|
+
const simple = (S.settingsData && S.settingsData.workflow) === "simple";
|
|
2942
|
+
settingsRunVerb(["workflow", simple ? "staged" : "simple"]);
|
|
2943
|
+
render();
|
|
2879
2944
|
} else {
|
|
2880
|
-
const domain = S.settingsCursor ===
|
|
2945
|
+
const domain = S.settingsCursor === 2 ? "repo" : S.settingsCursor === 3 ? "admin" : "people";
|
|
2881
2946
|
S.settingsView = "list"; S.settingsDomain = domain;
|
|
2882
2947
|
S.settingsItems = settingsItemsFor(S.settingsData, domain);
|
|
2883
2948
|
S.settingsListCursor = 0; S.settingsMode = "browse"; S.settingsNotice = "";
|
|
@@ -3133,7 +3198,7 @@ async function browser(args = {}) {
|
|
|
3133
3198
|
return;
|
|
3134
3199
|
}
|
|
3135
3200
|
state.settingsInst = pick;
|
|
3136
|
-
state.settingsData = settingsDump(pick) || { hosting: true, repos: [], admins: [], people: [] };
|
|
3201
|
+
state.settingsData = settingsDump(pick) || { hosting: true, workflow: "staged", base_branch: "develop", repos: [], admins: [], people: [] };
|
|
3137
3202
|
state.settingsCursor = 0;
|
|
3138
3203
|
state.settingsView = "menu";
|
|
3139
3204
|
state.settingsNotice = "";
|
package/lib/local.js
CHANGED
|
@@ -31,7 +31,6 @@ const {
|
|
|
31
31
|
configureGitCredentials,
|
|
32
32
|
gitCloneEnv,
|
|
33
33
|
initMemoryDirs,
|
|
34
|
-
ensureDevelop,
|
|
35
34
|
ensurePersonOnboardingWitness,
|
|
36
35
|
ensureInstallerMemberRole,
|
|
37
36
|
run,
|
|
@@ -1031,7 +1030,6 @@ async function localFounderFlow(ui, ctx = {}) {
|
|
|
1031
1030
|
|
|
1032
1031
|
const githubOrg = st.githubOrg;
|
|
1033
1032
|
const isOrg = st.isOrg;
|
|
1034
|
-
const isNewProject = st.isNewProject;
|
|
1035
1033
|
const orgName = st.orgName;
|
|
1036
1034
|
const description = st.description;
|
|
1037
1035
|
let newProjectRepo = st.newProjectRepo;
|
|
@@ -1156,13 +1154,14 @@ async function localFounderFlow(ui, ctx = {}) {
|
|
|
1156
1154
|
const s3 = ui.spinner(`Creating ${newProjectRepo}...`);
|
|
1157
1155
|
const projExists = await repoExists(githubToken, githubOrg, newProjectRepo);
|
|
1158
1156
|
if (projExists) {
|
|
1159
|
-
|
|
1157
|
+
const branchInfo = await detectRepoBranches(githubToken, githubOrg, newProjectRepo).catch(() => null);
|
|
1158
|
+
selectedRepos.push({ name: newProjectRepo, base_branch: branchInfo?.defaultBranch || "main" });
|
|
1160
1159
|
s3.stop(`${newProjectRepo} already exists — added to managed repos`);
|
|
1161
1160
|
} else {
|
|
1162
1161
|
try {
|
|
1163
1162
|
await createRepo(githubToken, githubOrg, newProjectRepo, isOrg, description || "");
|
|
1164
1163
|
if (await waitForRepo(githubToken, githubOrg, newProjectRepo)) {
|
|
1165
|
-
selectedRepos.push({ name: newProjectRepo });
|
|
1164
|
+
selectedRepos.push({ name: newProjectRepo, base_branch: "main" });
|
|
1166
1165
|
s3.stop(`Created ${newProjectRepo}`);
|
|
1167
1166
|
} else {
|
|
1168
1167
|
s3.fail(`${newProjectRepo} creation timed out`);
|
|
@@ -1181,6 +1180,7 @@ async function localFounderFlow(ui, ctx = {}) {
|
|
|
1181
1180
|
memory_repo: `https://github.com/${githubOrg}/${memoryRepoName}.git`,
|
|
1182
1181
|
slug: slug,
|
|
1183
1182
|
repo_name: repoName,
|
|
1183
|
+
base_branch: "main",
|
|
1184
1184
|
repos: selectedRepos,
|
|
1185
1185
|
upstream_url: "https://github.com/egregore-labs/egregore.git",
|
|
1186
1186
|
report_url: "https://xgksfrirtdumacvmfkzj.supabase.co",
|
|
@@ -1241,18 +1241,6 @@ async function localFounderFlow(ui, ctx = {}) {
|
|
|
1241
1241
|
ui.step(1, totalSteps, "Cloning egregore...");
|
|
1242
1242
|
cloneRepo(forkUrl, egregoreDir, githubToken, ui, "egregore");
|
|
1243
1243
|
setGitIdentity(egregoreDir, user);
|
|
1244
|
-
ensureDevelop(egregoreDir);
|
|
1245
|
-
// ensureDevelop only creates develop on the REMOTE (git branch, no checkout),
|
|
1246
|
-
// so the clone is still on main. The egregore operates on develop, so switch
|
|
1247
|
-
// to it now — otherwise local overlays (the codex runtime) get committed to
|
|
1248
|
-
// main and are orphaned when session-start later checks out develop.
|
|
1249
|
-
try {
|
|
1250
|
-
execFileSync("git", ["-C", egregoreDir, "checkout", "develop"], { stdio: "pipe" });
|
|
1251
|
-
} catch {
|
|
1252
|
-
try {
|
|
1253
|
-
execFileSync("git", ["-C", egregoreDir, "checkout", "-b", "develop", "origin/develop"], { stdio: "pipe" });
|
|
1254
|
-
} catch {}
|
|
1255
|
-
}
|
|
1256
1244
|
|
|
1257
1245
|
ui.step(2, totalSteps, "Cloning shared memory...");
|
|
1258
1246
|
cloneRepo(memoryUrl, memoryDir, githubToken, ui, "memory");
|
|
@@ -1356,10 +1344,6 @@ async function localFounderFlow(ui, ctx = {}) {
|
|
|
1356
1344
|
const repoUrl = `https://github.com/${githubOrg}/${mrName}.git`;
|
|
1357
1345
|
cloneRepo(repoUrl, repoDir, githubToken, ui, mrName);
|
|
1358
1346
|
setGitIdentity(repoDir, user);
|
|
1359
|
-
// New repos get develop branch (our workflow). Existing repos keep their default.
|
|
1360
|
-
if (isNewProject) {
|
|
1361
|
-
ensureDevelop(repoDir);
|
|
1362
|
-
}
|
|
1363
1347
|
} catch {
|
|
1364
1348
|
ui.warn(`Could not clone ${mrName} — you may not have access.`);
|
|
1365
1349
|
}
|
package/lib/setup.js
CHANGED
|
@@ -435,7 +435,6 @@ async function install(data, ui, targetDir, opts = {}) {
|
|
|
435
435
|
}
|
|
436
436
|
}
|
|
437
437
|
try { run("git config credential.helper store", { cwd: egregoreDir }); } catch {}
|
|
438
|
-
ensureDevelop(egregoreDir);
|
|
439
438
|
ui.success("Cloned egregore");
|
|
440
439
|
|
|
441
440
|
// Set repo-local git identity from GitHub user (not machine-global config)
|
|
@@ -587,7 +586,6 @@ async function install(data, ui, targetDir, opts = {}) {
|
|
|
587
586
|
}
|
|
588
587
|
}
|
|
589
588
|
try { run("git config credential.helper store", { cwd: repoDir }); } catch {}
|
|
590
|
-
ensureDevelop(repoDir);
|
|
591
589
|
clonedRepos.push(repoName);
|
|
592
590
|
ui.success(`Cloned ${repoName}`);
|
|
593
591
|
} catch {
|
|
@@ -695,8 +693,9 @@ function ensureConnectedConfig(repoDir, data, ui) {
|
|
|
695
693
|
}
|
|
696
694
|
|
|
697
695
|
const required = ["org_name", "github_org", "memory_repo", "api_url", "slug"];
|
|
698
|
-
|
|
699
|
-
|
|
696
|
+
let missing = required.filter((key) => !config[key]);
|
|
697
|
+
const missingIdentity = missing.filter((key) => key !== "api_url");
|
|
698
|
+
if (missingIdentity.length) {
|
|
700
699
|
throw new Error(
|
|
701
700
|
`Connected setup is incomplete: egregore.json is missing ${missing.join(", ")}. Retry setup from egregore.xyz/setup.`
|
|
702
701
|
);
|
|
@@ -712,8 +711,26 @@ function ensureConnectedConfig(repoDir, data, ui) {
|
|
|
712
711
|
);
|
|
713
712
|
}
|
|
714
713
|
|
|
714
|
+
let changed = false;
|
|
715
|
+
const tokenApiUrl = data.api_url ? String(data.api_url).replace(/\/$/, "") : "";
|
|
716
|
+
if (tokenApiUrl && config.api_url !== tokenApiUrl) {
|
|
717
|
+
config.api_url = tokenApiUrl;
|
|
718
|
+
changed = true;
|
|
719
|
+
if (ui && typeof ui.warn === "function") {
|
|
720
|
+
ui.warn("Reconciled Connected configuration from the authenticated setup token");
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
missing = required.filter((key) => !config[key]);
|
|
724
|
+
if (missing.length) {
|
|
725
|
+
throw new Error(
|
|
726
|
+
`Connected setup is incomplete: egregore.json is missing ${missing.join(", ")}. Retry setup from egregore.xyz/setup.`
|
|
727
|
+
);
|
|
728
|
+
}
|
|
715
729
|
if (config.mode !== "connected") {
|
|
716
730
|
config.mode = "connected";
|
|
731
|
+
changed = true;
|
|
732
|
+
}
|
|
733
|
+
if (changed) {
|
|
717
734
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
718
735
|
}
|
|
719
736
|
return config;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-egregore",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.2",
|
|
4
4
|
"description": "Set up Egregore for your team in one command \u2014 installs the egregore launcher and your choice of Claude Code, Codex, or Pi.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bin": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"build:runtime": "node ../../bin/capability-distribution.mjs generate-skill-view --root ../.. && node scripts/build-runtime-bundle.mjs && node scripts/build-pi-runtime-bundle.mjs && node scripts/build-prime-runtime-bundle.mjs && node ../../api/scripts/build-connect-runtime-pack.mjs",
|
|
14
14
|
"build:pi-runtime": "node scripts/build-pi-runtime-bundle.mjs",
|
|
15
15
|
"build:prime-runtime": "node scripts/build-prime-runtime-bundle.mjs",
|
|
16
|
-
"test": "node ../../bin/capability-distribution.mjs validate --root ../.. && node scripts/build-runtime-bundle.mjs --check && node scripts/build-pi-runtime-bundle.mjs --check && node scripts/build-prime-runtime-bundle.mjs --check && node ../../bin/prime-render-spec.mjs --check && node ../../bin/pi-render-spec.mjs --check && node ../../api/scripts/build-connect-runtime-pack.mjs --check && node --test test/capability-distribution.test.js test/connect-runtime.test.js test/context.test.js test/path-lookup.test.js test/nixos-portability.test.js test/parse-join-target.test.js test/skip-repos.test.js test/install-origin-guard.test.js test/onboarding-shortcircuit.test.js test/welcome-screen.test.js test/runtime-selection.test.js test/command-generation.test.js test/auth-gh.test.js test/gauntlet-fixes.test.js test/codex-runtime.test.js test/pi-runtime.test.js test/prime-runtime.test.js test/prime-branch-policy.test.js test/prime-bridge-skill.test.js test/prime-session-smoke.test.js test/pi-product-workflows.test.js test/installer-runtime-source.test.js test/scroll-repro.test.js test/launcher-refocus-redraw.test.js test/multiselect-remote-search.test.js test/back-navigation.test.js test/manifest-form.test.js test/launcher-delete.test.js test/launcher-connect.test.js test/installer-connect-choice.test.js test/launcher-connected-status.test.js test/launcher-permissions.test.js test/launcher-update.test.js test/connected-config.test.js",
|
|
16
|
+
"test": "node ../../bin/capability-distribution.mjs validate --root ../.. && node scripts/build-runtime-bundle.mjs --check && node scripts/build-pi-runtime-bundle.mjs --check && node scripts/build-prime-runtime-bundle.mjs --check && node ../../bin/prime-render-spec.mjs --check && node ../../bin/pi-render-spec.mjs --check && node ../../api/scripts/build-connect-runtime-pack.mjs --check && node --test test/capability-distribution.test.js test/connect-runtime.test.js test/context.test.js test/path-lookup.test.js test/nixos-portability.test.js test/parse-join-target.test.js test/skip-repos.test.js test/install-origin-guard.test.js test/onboarding-shortcircuit.test.js test/welcome-screen.test.js test/runtime-selection.test.js test/command-generation.test.js test/auth-gh.test.js test/gauntlet-fixes.test.js test/codex-runtime.test.js test/pi-runtime.test.js test/prime-runtime.test.js test/prime-branch-policy.test.js test/prime-bridge-skill.test.js test/prime-session-smoke.test.js test/pi-product-workflows.test.js test/installer-runtime-source.test.js test/scroll-repro.test.js test/launcher-refocus-redraw.test.js test/multiselect-remote-search.test.js test/back-navigation.test.js test/manifest-form.test.js test/launcher-delete.test.js test/launcher-connect.test.js test/installer-connect-choice.test.js test/launcher-connected-status.test.js test/launcher-permissions.test.js test/launcher-update.test.js test/connected-config.test.js test/workflow-settings.test.js",
|
|
17
17
|
"test:e2e": "node --test test/e2e-local.test.js",
|
|
18
18
|
"test:all": "node scripts/build-runtime-bundle.mjs --check && node scripts/build-pi-runtime-bundle.mjs --check && node --test test/"
|
|
19
19
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: archive
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Capture an effective prompting technique or steering pattern as reusable knowledge. Use for /archive, or when a prompt worked especially well and is worth reusing — not insight about the work itself (/reflect).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: branch
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Create a working branch from what you are about to work on. Use for /branch, or any request to start a new branch before making changes.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: checkup
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Run diagnostics on your Egregore environment and render a health report, auto-fixing what it can. Use for /checkup, a health check, or when something is broken and the root cause is unclear.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: commit
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Stage changes and create a commit with a properly formatted message. Use for /commit, or saving work locally — not sharing it (/push) or opening a pull request (/pr).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contribute
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Contribute an improvement back to the upstream Egregore framework as a cross-fork pull request. Use for /contribute, or submitting a framework fix upstream — not saving org work (/save) or filing a bug (/issue).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: delete-user
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Remove a member from this Egregore, revoking access across GitHub, Supabase, and Neo4j. Use for /delete-user, removing or kicking someone — not inviting (/invite) or viewing members (/dashboard).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ingest
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Unified ingestion entry point — brings files, meetings, Google Workspace, Notion, or bulk corpora into intake, then promotes useful material into curated memory. Say ''ingest'', ''bring this into Egregore''.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ingest-corpus
|
|
3
|
+
description: 'Turn a large folder of documents into a Connect-only knowledge base that answers questions with sources. Say ''build a knowledge base''. Not a few files (/ingest) or a meeting/Notion/Google source.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
7
|
+
|
|
8
|
+
# Egregore ingest-corpus Adapter
|
|
9
|
+
|
|
10
|
+
This is fallback coverage for a long-tail Egregore workflow that has not been
|
|
11
|
+
ported to a hand-written Codex-native skill yet.
|
|
12
|
+
|
|
13
|
+
Use the project shell and filesystem directly. Do not invoke Claude Code
|
|
14
|
+
commands. Translate interactive choices to structured Codex question tooling
|
|
15
|
+
when it is available; otherwise render compact numbered choices with an
|
|
16
|
+
`Other:` option and wait for the user.
|
|
17
|
+
|
|
18
|
+
1. Read `.claude/skills/ingest-corpus/SKILL.md` for the workflow details.
|
|
19
|
+
2. Run the referenced `bin/` scripts directly from Codex.
|
|
20
|
+
3. Treat graph and publish steps as best-effort unless that workflow explicitly
|
|
21
|
+
says they are required.
|
|
22
|
+
4. For every external notification, follow
|
|
23
|
+
`.claude/context/notification-consent.md`: plan without sending, then show
|
|
24
|
+
a separate exact Send / Edit / Cancel checkpoint. Never infer notification
|
|
25
|
+
consent from the workflow request or a batch approval.
|
|
26
|
+
5. Keep local-mode behavior filesystem-first and avoid graph or notification
|
|
27
|
+
calls when `egregore.json` declares `"mode": "local"`.
|
|
28
|
+
6. Never call the deprecated `egregore-handoff` CLI for Egregore project
|
|
29
|
+
handoffs.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ingest-notion
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Bring selected Notion pages into shared Egregore memory via Notion''s official MCP. Routed from /ingest when the source is Notion — say ''/ingest notion''. Selected pages only, not a full-workspace sync.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ingest-user-interview
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Analyze user interview transcripts (Granola, pasted text, or a file) through a 3-analyst-agent plus Opus-synthesis pipeline. Say ''process the interview'', ''onboarding interview'', ''research call''.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: issue
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Report an issue — captures context and routes it to the right place. Say ''this is broken'', ''bug in'', ''file an issue'', ''report a problem''. Not a personal task (/todo) or team exploration (/quest).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: me
|
|
3
|
-
description: '
|
|
3
|
+
description: 'View or change your member identity — display name, email — shared across Claude Code, Codex, and Pi. Say ''who am I'', ''call me <name>'', ''change my name to X'', or run ''/me''.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: meeting
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use for /meeting, /meeting sync, /meeting backfill, or a search term — adaptively analyzes a Granola meeting into decisions, findings, actions, and continuity in shared memory.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: note
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use when the user says ''jot this down'', ''note to self'', ''just thinking out loud'', or ''park this thought'' — saves a private personal note, never shared or pushed until explicitly promoted.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: notion-connect
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use for ''connect notion'', ''notion status'', or ''disconnect notion'' — connects the current agent runtime directly to Notion''s official hosted MCP for search and fetch, or checks/revokes that connection.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: onboarding
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use for /onboarding, or when a new member''s onboarding is not yet complete — runs the deterministic VERIFY, ORIENT, INVITE, FIRST_HANDOFF welcome flow.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pr
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use for /pr, or ''create a PR'' / ''open a pull request'' — creates a pull request for the current branch against the repo''s base branch with a formatted title and body. Not for reviewing an existing PR (review-pr).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pull
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use for /pull when you need to sync the current branch and shared memory without also viewing activity (/activity auto-syncs already).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: push
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use for /push, or ''push my branch'' — pushes the current branch to origin, setting upstream on first push, before opening a PR with /pr.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: reflect
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use when the user says ''we decided'', ''I realized'', or ''that''s a pattern'' — captures decisions, findings, or patterns in shared memory. Not a private half-baked thought (/note) or cross-referencing (/deep-reflect).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-pr
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Use when the user says ''review PR'', ''is this PR safe to merge'', or ''audit PR'' — runs a CTO-level 10-point review checklist on one or more pull requests. Not creating a PR (/pr) or validating local changes (/test).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -81,7 +81,9 @@ Where should {name} live?
|
|
|
81
81
|
twice.
|
|
82
82
|
5. Synthesize:
|
|
83
83
|
- a short topic from the work,
|
|
84
|
-
- a
|
|
84
|
+
- a commit message per `.claude/context/commit-format.md` — subject
|
|
85
|
+
`type(scope): imperative summary`, type/scope derived from the work
|
|
86
|
+
itself (never `chore(save):` for real work),
|
|
85
87
|
- a one-line user-facing scope summary,
|
|
86
88
|
- a PR description following `.claude/context/pr-format.md`:
|
|
87
89
|
`## What` (1–4 bullets), `## Why` (1–3 sentences), and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: slack-connect
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Set up Slack as a notification channel for your Egregore — creates the workspace app, invites the bot, and binds a channel. Use for /slack-connect, ''connect slack'', or ''set up slack notifications''.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: summon
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Design and launch a persistent agent (a spirit) that runs on a schedule or watches for conditions, via adaptive questioning that produces a reviewable spec before launch.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sync-repos
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Smart sync of all Egregore repos (memory + managed repos + current repo) — fetches first, only pulls if behind. Use for /sync-repos or ''sync all repos''.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: teams-connect
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Set up Microsoft Teams as a notification channel for your Egregore — registers an Azure bot, uploads the app, and binds a channel. Use for /teams-connect, ''connect teams'', or ''set up teams notifications''.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- generated-by: bin/codex-sync-skills.sh -->
|