diff --git a/README.md b/README.md
index 294b83e..6361524 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
# GitGuardex — Guardian T-Rex for your repo
-[](https://www.npmjs.com/package/@imdeadpool/gitguardex)
-[](https://www.npmjs.com/package/@imdeadpool/gitguardex)
+[](https://www.npmjs.com/package/@imdeadpool/guardex)
+[](https://www.npmjs.com/package/@imdeadpool/guardex)
[](https://github.com/recodeee/gitguardex/stargazers)
-[](./LICENSE)
+[](./LICENSE)
[](https://github.com/recodeee/gitguardex/actions/workflows/ci.yml)
[](https://github.com/recodeee/gitguardex/actions/workflows/release.yml)
@@ -44,7 +44,7 @@ GitGuardex exists to stop that loop. Every agent gets its own worktree, claims t
Install in one line
```bash
-npm i -g @imdeadpool/gitguardex
+npm i -g @imdeadpool/guardex
```
@@ -55,8 +55,8 @@ npm i -g @imdeadpool/gitguardex
-
-
+
+
@@ -83,12 +83,12 @@ Coming soon: [recodee.com](https://recodee.com) — live account health, usage,
## Quick start
```sh
-npm i -g @imdeadpool/gitguardex
+npm i -g @imdeadpool/guardex
cd /path/to/your/repo
gx setup
```
-That's it. New installs should use `@imdeadpool/gitguardex` so the published package matches the GitGuardex name. Setup installs hooks, scripts, templates, and scaffolds OpenSpec/caveman/OMX wiring. Aliases: `gx` (preferred), `gitguardex` (full), `guardex` (legacy compatibility).
+That's it. Install and update via `@imdeadpool/guardex`. Setup installs hooks, scripts, templates, and scaffolds OpenSpec/caveman/OMX wiring. Aliases: `gx` (preferred), `gitguardex` (full), `guardex` (legacy compatibility).
---
@@ -641,6 +641,11 @@ npm pack --dry-run
v7.x
+### v7.0.17
+- Restored the published npm package name to `@imdeadpool/guardex` after the `@imdeadpool/gitguardex` rename only changed the package identity locally and could not rename the existing npm registry entry.
+- README/install/tutorial/self-update surfaces now point back at `@imdeadpool/guardex` while keeping GitGuardex as the product/repo brand and `gitguardex` as the long-form command.
+- Bumped the release from `7.0.16` → `7.0.17` because `@imdeadpool/guardex@7.0.16` is already published on npm.
+
### v7.0.16
- GitGuardex now publishes under the matching npm package name `@imdeadpool/gitguardex`, and install/help/docs surfaces point at the renamed package instead of the older `@imdeadpool/guardex` scope.
- `gx doctor` now keeps nested repo repair runs visibly progressing, and overlapping integration work stays off the protected base branch instead of trying to merge back on `main`.
diff --git a/docs/images/install-hero.svg b/docs/images/install-hero.svg
index 783bb27..668691b 100644
--- a/docs/images/install-hero.svg
+++ b/docs/images/install-hero.svg
@@ -16,12 +16,12 @@
❯
npm i -g
-@imdeadpool/gitguardex
+@imdeadpool/guardex
added 47 packages in 3.2s
-+ @imdeadpool/gitguardex@
-7.0.16
++ @imdeadpool/guardex@
+7.0.17
❯
diff --git a/docs/images/setup-success.svg b/docs/images/setup-success.svg
index 1dac87a..83f0cc8 100644
--- a/docs/images/setup-success.svg
+++ b/docs/images/setup-success.svg
@@ -16,7 +16,7 @@
deadpool@recodee:~/Documents/testguardex$ gx
- [gitguardex] CLI: @imdeadpool/gitguardex/5.0.0 linux-x64 node-v22.22.0
+ [gitguardex] CLI: @imdeadpool/guardex/5.0.0 linux-x64 node-v22.22.0
[gitguardex] Global services:
- ● oh-my-codex: active
- ● @fission-ai/openspec: active
@@ -29,7 +29,7 @@
fatal: not a git repository (or any of the parent directories): .git
deadpool@recodee:~/Documents/testguardex$ gx
- [gitguardex] CLI: @imdeadpool/gitguardex/5.0.0 linux-x64 node-v22.22.0
+ [gitguardex] CLI: @imdeadpool/guardex/5.0.0 linux-x64 node-v22.22.0
[gitguardex] Global services:
- ● oh-my-codex: active
- ● @fission-ai/openspec: active
diff --git a/docs/images/status-tools-logs.svg b/docs/images/status-tools-logs.svg
index 36b1c34..077a060 100644
--- a/docs/images/status-tools-logs.svg
+++ b/docs/images/status-tools-logs.svg
@@ -15,7 +15,7 @@
gx status
- [gitguardex] CLI: @imdeadpool/gitguardex/5.0.2 linux-x64 node-v22.22.0
+ [gitguardex] CLI: @imdeadpool/guardex/5.0.2 linux-x64 node-v22.22.0
[gitguardex] Global services:
- ● oh-my-codex: active
- ● @fission-ai/openspec: active
diff --git a/docs/images/workflow-gx-terminal-status.svg b/docs/images/workflow-gx-terminal-status.svg
index ac68d76..bf402d9 100644
--- a/docs/images/workflow-gx-terminal-status.svg
+++ b/docs/images/workflow-gx-terminal-status.svg
@@ -16,7 +16,7 @@
- [gitguardex] CLI: @imdeadpool/gitguardex/7.0.16 linux-x64 node-v22.22.0
+ [gitguardex] CLI: @imdeadpool/guardex/7.0.17 linux-x64 node-v22.22.0
[gitguardex] Global services:
-
diff --git a/docs/redditpost.md b/docs/redditpost.md
index 254b5db..57c7cdc 100644
--- a/docs/redditpost.md
+++ b/docs/redditpost.md
@@ -4,7 +4,7 @@ Source baseline: [`README.md`](../README.md)
Project links:
- GitHub: https://github.com/recodeecom/multiagent-safety
-- npm: https://www.npmjs.com/package/@imdeadpool/gitguardex
+- npm: https://www.npmjs.com/package/@imdeadpool/guardex
## Recommended Title Options
@@ -29,7 +29,7 @@ What it does:
Quick start:
```bash
-npm i -g @imdeadpool/gitguardex
+npm i -g @imdeadpool/guardex
gx setup
```
@@ -45,7 +45,7 @@ bash scripts/agent-branch-finish.sh --branch "$(git rev-parse --abbrev-ref HEAD)
If you run Codex/Claude-style parallel workflows, I would value feedback on edge cases your team hits in production.
GitHub: https://github.com/recodeecom/multiagent-safety
-npm: https://www.npmjs.com/package/@imdeadpool/gitguardex
+npm: https://www.npmjs.com/package/@imdeadpool/guardex
## Copy-Ready Reddit Post (short)
@@ -54,12 +54,12 @@ I open-sourced **GitGuardex** for safer multi-agent Git workflows.
It adds branch/worktree guardrails, protected-branch enforcement, file-lock ownership, and repair scripts (`gx setup` / `gx doctor`) so parallel agent execution is safer by default.
```bash
-npm i -g @imdeadpool/gitguardex
+npm i -g @imdeadpool/guardex
gx setup
```
GitHub: https://github.com/recodeecom/multiagent-safety
-npm: https://www.npmjs.com/package/@imdeadpool/gitguardex
+npm: https://www.npmjs.com/package/@imdeadpool/guardex
## Images to include in the Reddit post
diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx
index 7856df2..63b0f1c 100644
--- a/frontend/app/page.tsx
+++ b/frontend/app/page.tsx
@@ -126,7 +126,7 @@ interface ModeGuide {
}
const MODE_ORDER: ModeKey[] = ['execute', 'plan', 'merge', 'installation']
-const INSTALL_COMMAND = 'npm i -g @imdeadpool/gitguardex'
+const INSTALL_COMMAND = 'npm i -g @imdeadpool/guardex'
const PRODUCT_LABEL = 'Recodee'
const EDITOR_LABEL = 'recodee — VS Code'
@@ -1697,7 +1697,7 @@ const INSTALL_STEPS: TutorialStep[] = [
sub: '· global install',
elapsed: '3.8s',
rows: [
- { kind: 'shell', label: 'bash:', value: 'npm i -g @imdeadpool/gitguardex' },
+ { kind: 'shell', label: 'bash:', value: 'npm i -g @imdeadpool/guardex' },
],
},
],
@@ -1712,7 +1712,7 @@ const INSTALL_STEPS: TutorialStep[] = [
],
worktrees: [],
codeLines: [
- { parts: [c('$ npm i -g @imdeadpool/gitguardex', 'c')] },
+ { parts: [c('$ npm i -g @imdeadpool/guardex', 'c')] },
{ parts: [c('added 1 package in 3.8s')] },
{ parts: [c('')] },
{ parts: [c('$ gx --version')] },
diff --git a/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/proposal.md b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/proposal.md
new file mode 100644
index 0000000..4f3b7c2
--- /dev/null
+++ b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/proposal.md
@@ -0,0 +1,17 @@
+## Why
+
+- The repo changed `package.json.name` to `@imdeadpool/gitguardex`, but npm treats a package name change as a different package identity, not a rename of the existing registry entry.
+- The live npm registry still serves `@imdeadpool/guardex@7.0.16`, while `npm view @imdeadpool/gitguardex version` returns `404`.
+- README, tutorial, Reddit kit, and self-update expectations now point at a package name that is not the install target users actually have.
+
+## What Changes
+
+- Restore the published package metadata to `@imdeadpool/guardex`.
+- Bump the package version from `7.0.16` to `7.0.17` so the next publish is valid against the existing `@imdeadpool/guardex@7.0.16` release.
+- Refresh install, self-update, tutorial, and README-linked asset surfaces to reference `@imdeadpool/guardex`.
+
+## Compatibility
+
+- Keep `gx` as the preferred short command.
+- Keep `gitguardex` as the long-form command and product/repo brand.
+- Keep `guardex` as the legacy compatibility bin alias.
diff --git a/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/specs/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/spec.md b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/specs/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/spec.md
new file mode 100644
index 0000000..a79ee14
--- /dev/null
+++ b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/specs/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/spec.md
@@ -0,0 +1,27 @@
+## ADDED Requirements
+
+### Requirement: Published npm package name stays on the existing guardex registry entry
+The system SHALL publish and document the primary npm package as `@imdeadpool/guardex`.
+
+#### Scenario: package metadata advertises the existing package
+- **WHEN** the root `package.json` metadata is inspected
+- **THEN** `name` equals `@imdeadpool/guardex`
+- **AND** downstream package metadata snapshots use the same package name.
+
+#### Scenario: the next release stays publishable on npm
+- **WHEN** the package metadata is prepared for the next publish
+- **THEN** the version is greater than the already-published `@imdeadpool/guardex@7.0.16`
+- **AND** the package can publish without colliding with the existing registry version.
+
+### Requirement: Install and update guidance references the real npm package
+The README, tutorial UI, and self-update/install guidance SHALL use `@imdeadpool/guardex` while keeping GitGuardex as the product brand.
+
+#### Scenario: install and self-update prompts use the restored package
+- **WHEN** a user reads CLI install/setup guidance or the self-update flow
+- **THEN** the npm command examples reference `@imdeadpool/guardex`
+- **AND** the CLI keeps `gx`, `gitguardex`, and `guardex` command compatibility.
+
+#### Scenario: docs and README-linked assets are aligned
+- **WHEN** the README, tutorial page, Reddit kit, or README-linked SVG assets are inspected
+- **THEN** install commands, npm badges, and package-name callouts reference `@imdeadpool/guardex`
+- **AND** GitGuardex remains the visible product/repo name.
diff --git a/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/tasks.md b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/tasks.md
new file mode 100644
index 0000000..8dc09af
--- /dev/null
+++ b/openspec/changes/agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02/tasks.md
@@ -0,0 +1,23 @@
+## 1. Spec
+
+- [x] 1.1 Capture why the npm package rename has to revert and the versioning constraint for the next publish.
+
+## 2. Tests
+
+- [x] 2.1 Update the package-name-dependent install/self-update/status assertions back to `@imdeadpool/guardex`.
+
+## 3. Implementation
+
+- [x] 3.1 Restore package metadata to `@imdeadpool/guardex` and bump the package version to `7.0.17`.
+- [x] 3.2 Refresh README, tutorial, Reddit kit, and README-linked assets to reference `@imdeadpool/guardex`.
+
+## 4. Verification
+
+- [x] 4.1 Run targeted package-name verification (`node --test --test-name-pattern "(default invocation checks for update and can auto-approve latest install|self-update verifies on-disk version after @latest install and retries with pinned version when stale|self-update restarts into the installed CLI after a successful on-disk upgrade|status --json returns cli, services, and repo summary|prompt outputs AI setup instructions|prompt --exec outputs command-only checklist|deprecated copy-commands alias still works and warns)" test/install.test.js`, `node --check bin/multiagent-safety.js`, `npm pack --dry-run`) and record the results. Result: targeted package-name verification passed `7/7`; `node --check bin/multiagent-safety.js` passed; `npm pack --dry-run` produced `imdeadpool-guardex-7.0.17.tgz`.
+- [x] 4.2 Run `openspec validate agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02 --type change --strict`. Result: `Change 'agent-codex-restore-guardex-npm-package-name-2026-04-22-00-02' is valid`.
+- [x] 4.3 Run `openspec validate --specs`. Result: `No items found to validate.`
+- [x] 4.4 Run `npm test` after the package-name revert to confirm broader repo integrity. Result: full suite passed `163/163`.
+
+## 5. Cleanup
+
+- [ ] 5.1 Finish branch via PR merge + cleanup and record final `MERGED` evidence.
diff --git a/package-lock.json b/package-lock.json
index 1601785..e6ae4fb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
- "name": "@imdeadpool/gitguardex",
- "version": "7.0.16",
+ "name": "@imdeadpool/guardex",
+ "version": "7.0.17",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "@imdeadpool/gitguardex",
- "version": "7.0.16",
+ "name": "@imdeadpool/guardex",
+ "version": "7.0.17",
"license": "MIT",
"bin": {
"gitguardex": "bin/multiagent-safety.js",
diff --git a/package.json b/package.json
index 8864ff6..1503f8f 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
- "name": "@imdeadpool/gitguardex",
- "version": "7.0.16",
+ "name": "@imdeadpool/guardex",
+ "version": "7.0.17",
"description": "Guardian T-Rex for your multi-agent repo. Isolated worktrees, file locks, and PR-only merges stop parallel Codex & Claude agents from overwriting each other's work. Auto-wires Oh My Codex, Oh My Claude, OpenSpec, and Caveman.",
"license": "MIT",
"preferGlobal": true,
diff --git a/test/install.test.js b/test/install.test.js
index 65cd18f..80455ac 100644
--- a/test/install.test.js
+++ b/test/install.test.js
@@ -191,7 +191,7 @@ function seedReleasePackageManifest(repoDir, overrides = {}) {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
const mergedPackageJson = {
...packageJson,
- name: packageJson.name || '@imdeadpool/gitguardex',
+ name: packageJson.name || '@imdeadpool/guardex',
version: cliVersion,
repository: {
type: 'git',
@@ -2447,7 +2447,7 @@ if [[ "$1" == "list" ]]; then
echo '{"dependencies":{"oh-my-codex":{},"@fission-ai/openspec":{}}}'
exit 0
fi
-if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@latest" ]]; then
+if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@latest" ]]; then
echo "updated" > "${markerPath}"
exit 0
fi
@@ -2472,11 +2472,11 @@ exit 1
test('self-update verifies on-disk version after @latest install and retries with pinned version when stale', () => {
const repoDir = initRepo();
const fakeGlobalRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'guardex-fake-global-root-'));
- const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'gitguardex');
+ const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'guardex');
fs.mkdirSync(installedPkgDir, { recursive: true });
fs.writeFileSync(
path.join(installedPkgDir, 'package.json'),
- JSON.stringify({ name: '@imdeadpool/gitguardex', version: cliVersion }),
+ JSON.stringify({ name: '@imdeadpool/guardex', version: cliVersion }),
'utf8',
);
const markerLatest = path.join(repoDir, '.npm-at-latest-called');
@@ -2494,15 +2494,15 @@ if [[ "$1" == "root" && "$2" == "-g" ]]; then
echo "${fakeGlobalRoot}"
exit 0
fi
-if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@latest" ]]; then
+if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@latest" ]]; then
touch "${markerLatest}"
# Simulate the npm quirk: report success without rewriting the on-disk package.json.
exit 0
fi
-if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@9.9.9" ]]; then
+if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@9.9.9" ]]; then
touch "${markerPinned}"
# Pinned retry actually advances the on-disk version.
- printf '%s' '{"name":"@imdeadpool/gitguardex","version":"9.9.9"}' > "${installedPkgDir}/package.json"
+ printf '%s' '{"name":"@imdeadpool/guardex","version":"9.9.9"}' > "${installedPkgDir}/package.json"
exit 0
fi
echo "unexpected npm args: $*" >&2
@@ -2527,14 +2527,14 @@ exit 1
test('self-update restarts into the installed CLI after a successful on-disk upgrade', () => {
const repoDir = initRepo();
const fakeGlobalRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'guardex-fake-global-root-'));
- const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'gitguardex');
+ const installedPkgDir = path.join(fakeGlobalRoot, '@imdeadpool', 'guardex');
const installedBinDir = path.join(installedPkgDir, 'bin');
const reexecMarker = path.join(repoDir, '.self-update-reexec-called');
fs.mkdirSync(installedBinDir, { recursive: true });
fs.writeFileSync(
path.join(installedPkgDir, 'package.json'),
JSON.stringify({
- name: '@imdeadpool/gitguardex',
+ name: '@imdeadpool/guardex',
version: '9.9.9',
bin: { gx: 'bin/multiagent-safety.js' },
}),
@@ -2562,7 +2562,7 @@ if [[ "$1" == "root" && "$2" == "-g" ]]; then
echo "${fakeGlobalRoot}"
exit 0
fi
-if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/gitguardex@latest" ]]; then
+if [[ "$1" == "i" && "$2" == "-g" && "$3" == "@imdeadpool/guardex@latest" ]]; then
exit 0
fi
echo "unexpected npm args: $*" >&2
@@ -2651,7 +2651,7 @@ test('status --json returns cli, services, and repo summary', () => {
assert.equal(result.status, 0, result.stderr || result.stdout);
const parsed = JSON.parse(result.stdout);
- assert.equal(parsed.cli.name, '@imdeadpool/gitguardex');
+ assert.equal(parsed.cli.name, '@imdeadpool/guardex');
assert.equal(typeof parsed.cli.version, 'string');
assert.equal(Array.isArray(parsed.services), true);
const claudeService = parsed.services.find((service) => service.name === 'oh-my-claudecode');
@@ -4601,7 +4601,7 @@ test('prompt outputs AI setup instructions', () => {
const repoDir = initRepo();
const result = runNode(['prompt'], repoDir);
assert.equal(result.status, 0, result.stderr || result.stdout);
- assert.match(result.stdout, /npm i -g @imdeadpool\/gitguardex/);
+ assert.match(result.stdout, /npm i -g @imdeadpool\/guardex/);
assert.match(result.stdout, /GitGuardex \(gx\) setup checklist/);
assert.match(result.stdout, /gx setup/);
assert.match(result.stdout, /gx doctor/);
@@ -4618,7 +4618,7 @@ test('prompt --exec outputs command-only checklist', () => {
const repoDir = initRepo();
const result = runNode(['prompt', '--exec'], repoDir);
assert.equal(result.status, 0, result.stderr || result.stdout);
- assert.match(result.stdout, /^npm i -g @imdeadpool\/gitguardex/m);
+ assert.match(result.stdout, /^npm i -g @imdeadpool\/guardex/m);
assert.match(result.stdout, /^gh --version/m);
assert.match(result.stdout, /^gx setup$/m);
assert.match(result.stdout, /^gx doctor$/m);
@@ -4641,7 +4641,7 @@ test('deprecated copy-commands alias still works and warns', () => {
const repoDir = initRepo();
const result = runNode(['copy-commands'], repoDir);
assert.equal(result.status, 0, result.stderr || result.stdout);
- assert.match(result.stdout, /^npm i -g @imdeadpool\/gitguardex/m);
+ assert.match(result.stdout, /^npm i -g @imdeadpool\/guardex/m);
assert.match(result.stderr, /'copy-commands' is deprecated/);
assert.match(result.stderr, /gx prompt --exec/);
});