Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ $ gx
● oh-my-codex active
● oh-my-claude-sisyphus active
● @fission-ai/openspec active
cavemem active
colony active
● cavekit optional · not installed
● gh authenticated

Expand Down Expand Up @@ -320,7 +320,7 @@ Install repo skills with `npx skills add recodee/gitguardex`; `npx skills add re
| [**oh-my-codex**](https://github.com/Yeachan-Heo/oh-my-codex) — `npm i -g oh-my-codex` | Codex config + skills framework. Merged into every agent worktree so each spawned Codex starts with the same tuned config. | [![stars](https://img.shields.io/github/stars/Yeachan-Heo/oh-my-codex?style=social)](https://github.com/Yeachan-Heo/oh-my-codex) |
| [**oh-my-claudecode**](https://github.com/Yeachan-Heo/oh-my-claudecode) — `npm i -g oh-my-claude-sisyphus@latest` | Claude-side mirror of oh-my-codex. Skills, commands, and defaults for every Claude Code session. | [![stars](https://img.shields.io/github/stars/Yeachan-Heo/oh-my-claudecode?style=social)](https://github.com/Yeachan-Heo/oh-my-claudecode) |
| [**OpenSpec**](https://github.com/Fission-AI/OpenSpec) — `npm i -g @fission-ai/openspec` | Structured plan / change / apply / archive flow so long agent runs don't drift off-task. | [![stars](https://img.shields.io/github/stars/Fission-AI/OpenSpec?style=social)](https://github.com/Fission-AI/OpenSpec) |
| [**cavemem**](https://github.com/JuliusBrussee/cavemem) — `npm i -g cavemem` | Local persistent memory for agents via SQLite + MCP. Retains compressed history across runs. | [![stars](https://img.shields.io/github/stars/JuliusBrussee/cavemem?style=social)](https://github.com/JuliusBrussee/cavemem) |
| [**Colony**](https://github.com/recodeee/colony) — `npm i -g @imdeadpool/colony-cli` | Multi-agent task coordination and handoff routing. After install, register runtimes with `colony install --ide codex`, `colony install --ide claude-code`, `colony install --ide cursor`, `colony install --ide gemini-cli`, or `colony install --ide opencode`, then verify with `colony status`. | [![stars](https://img.shields.io/github/stars/recodeee/colony?style=social)](https://github.com/recodeee/colony) |
| [**cavekit**](https://github.com/JuliusBrussee/cavekit) — `npx skills add JuliusBrussee/cavekit` | Spec-driven build loop with `spec`, `build`, `check`, `caveman`, `backprop` skills bundled in. | [![stars](https://img.shields.io/github/stars/JuliusBrussee/cavekit?style=social)](https://github.com/JuliusBrussee/cavekit) |
| [**caveman**](https://github.com/JuliusBrussee/caveman) — `npx skills add JuliusBrussee/caveman` | Ultra-compressed response mode for Claude / Codex. Less output-token churn on long reviews and debug loops. | [![stars](https://img.shields.io/github/stars/JuliusBrussee/caveman?style=social)](https://github.com/JuliusBrussee/caveman) |
| [**codex-account-switcher**](https://github.com/recodeecom/codex-account-switcher-cli) — `npm i -g @imdeadpool/codex-account-switcher` | Multi-identity Codex account switcher. Auto-registers accounts on `codex login`; switch with one command. | [![stars](https://img.shields.io/github/stars/recodeecom/codex-account-switcher-cli?style=social)](https://github.com/recodeecom/codex-account-switcher-cli) |
Expand Down
2 changes: 1 addition & 1 deletion docs/images/workflow-gx-terminal-status.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## Why

- Guardex currently prompts for `cavemem` as a global companion, but the active coordination direction is Colony-first.
- Users should see and install the Colony CLI from Guardex setup/status surfaces instead of being prompted for the older cavemem memory tool.
- README companion guidance should include the Colony runtime registration commands and `colony status` check.

## What Changes

- Replace the global companion package mapping from `cavemem` to `@imdeadpool/colony-cli`, displayed as `colony`.
- Update setup/status regression fixtures so missing companion prompts install `@imdeadpool/colony-cli`.
- Update README companion examples to show `colony`, `npm i -g @imdeadpool/colony-cli`, `colony install --ide ...`, and `colony status`.

## Impact

- `gx` and `gx setup` stop asking users to install `cavemem`.
- Colony becomes the detected global companion for multi-agent coordination.
- Existing cavekit/caveman optional local companion handling is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
## ADDED Requirements

### Requirement: Colony replaces cavemem as the global coordination companion

Guardex SHALL detect and prompt for the Colony CLI package `@imdeadpool/colony-cli` as the global multi-agent coordination companion instead of `cavemem`.

#### Scenario: `gx status --json` reports the Colony companion

- **WHEN** the user runs `gx status --json`
- **THEN** the `services` array contains an entry named `colony`
- **AND** that entry exposes `packageName` as `@imdeadpool/colony-cli`
- **AND** the services array does not require a `cavemem` entry

#### Scenario: setup installs missing global companions

- **GIVEN** `@imdeadpool/colony-cli` is absent from detected global npm packages
- **WHEN** the user approves companion installation
- **THEN** Guardex includes `@imdeadpool/colony-cli` in the global npm install command
- **AND** Guardex does not install `cavemem` as part of the global companion set

### Requirement: README shows Colony runtime registration

Guardex documentation SHALL show users how to install Colony and register one or more agent runtimes.

#### Scenario: user reads companion tooling docs

- **WHEN** the README companion tools table is inspected
- **THEN** the Colony row includes `npm i -g @imdeadpool/colony-cli`
- **AND** it lists `colony install --ide codex`, `colony install --ide claude-code`, `colony install --ide cursor`, `colony install --ide gemini-cli`, and `colony install --ide opencode`
- **AND** it tells users to verify with `colony status`
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
- [x] 1.1 Define the companion-tooling scope for replacing `cavemem` with Colony.
- [x] 1.2 Add normative spec coverage for status and setup install behavior.
- [x] 2.1 Replace the global companion package mapping with `@imdeadpool/colony-cli`.
- [x] 2.2 Update README companion install and runtime registration guidance.
- [x] 2.3 Update setup/status regression fixtures for Colony.
- [x] 3.1 Run targeted setup/status verification. Evidence: `node --test --test-name-pattern "setup skips global install when companion npm tools are already installed|setup installs only missing global tools|setup warns when user declines oh-my-claudecode dependency install|setup installs missing local companion tools with explicit approval|setup warns when gh dependency is missing" test/setup.test.js` passed 5/5; `node --test test/status.test.js` passed 19/19.
- [x] 3.2 Run `node --check` for the CLI entrypoint. Evidence: `node --check bin/multiagent-safety.js` exited 0.
- [x] 3.3 Run OpenSpec validation. Evidence: `openspec validate agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34 --type change --strict` passed.
- [ ] 4.1 Finish the guarded branch via PR merge and cleanup.
6 changes: 3 additions & 3 deletions src/context.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const GLOBAL_INSTALL_COMMAND = `npm i -g ${packageJson.name}`;
const OPENSPEC_PACKAGE = '@fission-ai/openspec';
const OMC_PACKAGE = 'oh-my-claude-sisyphus';
const OMC_REPO_URL = 'https://github.com/Yeachan-Heo/oh-my-claudecode';
const CAVEMEM_PACKAGE = 'cavemem';
const COLONY_PACKAGE = '@imdeadpool/colony-cli';
const NPX_BIN = process.env.GUARDEX_NPX_BIN || 'npx';
const GUARDEX_HOME_DIR = path.resolve(process.env.GUARDEX_HOME_DIR || os.homedir());
const GLOBAL_TOOLCHAIN_SERVICES = [
Expand All @@ -32,7 +32,7 @@ const GLOBAL_TOOLCHAIN_SERVICES = [
dependencyUrl: OMC_REPO_URL,
},
{ name: OPENSPEC_PACKAGE, packageName: OPENSPEC_PACKAGE },
{ name: CAVEMEM_PACKAGE, packageName: CAVEMEM_PACKAGE },
{ name: 'colony', packageName: COLONY_PACKAGE },
{
name: '@imdeadpool/codex-account-switcher',
packageName: '@imdeadpool/codex-account-switcher',
Expand Down Expand Up @@ -674,7 +674,7 @@ module.exports = {
OPENSPEC_PACKAGE,
OMC_PACKAGE,
OMC_REPO_URL,
CAVEMEM_PACKAGE,
COLONY_PACKAGE,
NPX_BIN,
GUARDEX_HOME_DIR,
GLOBAL_TOOLCHAIN_SERVICES,
Expand Down
10 changes: 5 additions & 5 deletions test/setup.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1274,7 +1274,7 @@ test('setup skips global install when companion npm tools are already installed'
const fakeNpm = createFakeNpmScript(`
if [[ "$1" == "list" ]]; then
cat <<'JSON'
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"cavemem":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"@imdeadpool/colony-cli":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
JSON
exit 0
fi
Expand Down Expand Up @@ -1326,7 +1326,7 @@ exit 1
assert.equal(result.status, 0, result.stderr || result.stdout);
assert.equal(fs.existsSync(marker), true, 'global install should run for missing package');
const args = fs.readFileSync(marker, 'utf8').trim();
assert.equal(args, 'i -g oh-my-claude-sisyphus @fission-ai/openspec cavemem @imdeadpool/codex-account-switcher');
assert.equal(args, 'i -g oh-my-claude-sisyphus @fission-ai/openspec @imdeadpool/colony-cli @imdeadpool/codex-account-switcher');
});


Expand All @@ -1337,7 +1337,7 @@ test('setup warns when user declines oh-my-claudecode dependency install', () =>
const fakeNpm = createFakeNpmScript(`
if [[ "$1" == "list" ]]; then
cat <<'JSON'
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"cavemem":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"@imdeadpool/colony-cli":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
JSON
exit 0
fi
Expand Down Expand Up @@ -1368,7 +1368,7 @@ test('setup installs missing local companion tools with explicit approval', () =
const fakeNpm = createFakeNpmScript(`
if [[ "$1" == "list" ]]; then
cat <<'JSON'
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"cavemem":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"@imdeadpool/colony-cli":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
JSON
exit 0
fi
Expand Down Expand Up @@ -1419,7 +1419,7 @@ test('setup warns when gh dependency is missing', () => {
const fakeNpm = createFakeNpmScript(`
if [[ "$1" == "list" ]]; then
cat <<'JSON'
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"cavemem":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"@imdeadpool/colony-cli":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
JSON
exit 0
fi
Expand Down
8 changes: 5 additions & 3 deletions test/status.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,9 @@ test('status --json returns cli, services, and repo summary', () => {
claudeService.dependencyUrl,
'https://github.com/Yeachan-Heo/oh-my-claudecode',
);
assert.ok(parsed.services.some((service) => service.name === 'cavemem'));
const colonyService = parsed.services.find((service) => service.name === 'colony');
assert.ok(colonyService, 'colony service should be included');
assert.equal(colonyService.packageName, '@imdeadpool/colony-cli');
assert.ok(parsed.services.some((service) => service.name === 'cavekit'));
assert.ok(parsed.services.some((service) => service.name === 'caveman'));
assert.equal(parsed.repo.inGitRepo, true);
Expand All @@ -496,7 +498,7 @@ test('status warns when oh-my-claudecode dependency is inactive', () => {
const fakeNpm = createFakeNpmScript(`
if [[ "$1" == "list" ]]; then
cat <<'JSON'
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"cavemem":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"@imdeadpool/colony-cli":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
JSON
exit 0
fi
Expand Down Expand Up @@ -524,7 +526,7 @@ test('status detects local cavekit and caveman companion installs', () => {
const fakeNpm = createFakeNpmScript(`
if [[ "$1" == "list" ]]; then
cat <<'JSON'
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"cavemem":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
{"dependencies":{"oh-my-codex":{"version":"1.0.0"},"oh-my-claude-sisyphus":{"version":"1.0.0"},"@fission-ai/openspec":{"version":"1.0.0"},"@imdeadpool/colony-cli":{"version":"1.0.0"},"@imdeadpool/codex-account-switcher":{"version":"1.0.0"}}}
JSON
exit 0
fi
Expand Down
Loading