diff --git a/README.md b/README.md
index 21db9cc2..21c4b464 100644
--- a/README.md
+++ b/README.md
@@ -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
@@ -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. | [](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. | [](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. | [](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. | [](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`. | [](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. | [](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. | [](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. | [](https://github.com/recodeecom/codex-account-switcher-cli) |
diff --git a/docs/images/workflow-gx-terminal-status.svg b/docs/images/workflow-gx-terminal-status.svg
index bf402d9c..309d42ac 100644
--- a/docs/images/workflow-gx-terminal-status.svg
+++ b/docs/images/workflow-gx-terminal-status.svg
@@ -30,7 +30,7 @@
@fission-ai/openspec: active
-
- cavemem: active
+ colony: active
-
@imdeadpool/codex-account-switcher: active
diff --git a/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/proposal.md b/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/proposal.md
new file mode 100644
index 00000000..01cfc24d
--- /dev/null
+++ b/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/proposal.md
@@ -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.
diff --git a/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/specs/companion-tooling/spec.md b/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/specs/companion-tooling/spec.md
new file mode 100644
index 00000000..1e64962e
--- /dev/null
+++ b/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/specs/companion-tooling/spec.md
@@ -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`
diff --git a/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/tasks.md b/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/tasks.md
new file mode 100644
index 00000000..58a91496
--- /dev/null
+++ b/openspec/changes/agent-codex-replace-cavemem-with-colony-companion-2026-04-28-20-34/tasks.md
@@ -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.
diff --git a/src/context.js b/src/context.js
index 181578ba..475674e0 100644
--- a/src/context.js
+++ b/src/context.js
@@ -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 = [
@@ -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',
@@ -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,
diff --git a/test/setup.test.js b/test/setup.test.js
index a63d38cb..8b615d15 100644
--- a/test/setup.test.js
+++ b/test/setup.test.js
@@ -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
@@ -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');
});
@@ -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
@@ -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
@@ -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
diff --git a/test/status.test.js b/test/status.test.js
index 2ec7d289..a21d8350 100644
--- a/test/status.test.js
+++ b/test/status.test.js
@@ -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);
@@ -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
@@ -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