You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Getting Nexus into a repo — single or multi — is structural work that happens before a Claude
session has anything to run. Today it is a manual shell step (nxs.update.claude.sh), and for a
multi-repo product there is a further act no single-repo command can perform: deciding which
checkout is the hub and which are members, authoring the hub manifest, stamping each member's hub
pointer, and distributing .claude/ across sibling checkouts. A command confined to one repo's cwd
has no vantage point from which to do that.
This epic gives the structural half a single home: a deterministic, portable nexus CLI. Its
foundation is one component-deploy primitive — copy the Nexus components (slash commands, agents,
skills, the rest of .claude/) into a repo — exposed directly as nexus deploy for the single-repo
case and reused by nexus workspace init to fan out across every checkout. On top of that primitive
the CLI declares a workspace, adds a member later, and reports status. It runs on a bare
Node runtime with no in-repo tooling installed — it ships on the portable distributable already built
for the concept validator and atlas generator (portable-tooling, epic #44) —
so it can bootstrap a repo before that repo is scaffolded. The manual nxs.update.claude.sh script
is retired; nexus deploy replaces it.
Everything the CLI writes for a workspace is exactly what the one deterministic resolver
(workspace-resolution, epic #38) already reads; the CLI is the writer
for the manifest and pointer artifacts the resolver owns on the read side, never a second definition
of workspace shape.
This draws a clean seam through Nexus setup: the CLI owns structure and deployment — getting
components in place, whether into one repo or a whole workspace — and /nxs.setup owns judgment —
stack docs, standards, the product-context interview, run inside each repo once its components are
present. /nxs.setup is re-scoped accordingly: it detects an existing hub pointer or manifest through
the resolver and skips any placement prompt. Single-repo projects stay simple — nexus deploy then /nxs.setup, with no manifest or pointer ever written.
Scope note: this epic covers the Claude agent surface only. Support for other agents (e.g. Gemini)
is out of scope, and their update scripts are not addressed here.
Success Metrics
Getting Nexus into a fresh single repo is one nexus deploy invocation (replacing the removed nxs.update.claude.sh step), after which /nxs.setup runs — the legacy Claude update script no
longer exists in the distribution.
Declaring a new N-repo workspace (one hub + N−1 members) is a singlenexus workspace init
invocation whose output the existing workspace resolver accepts with zero follow-up edits —
resolution from the hub and from every member yields the identical workspace description (the
resolver parity guarantee).
Adding one member to an existing workspace mutates exactly two files: the hub manifest and the
new member's pointer — no third file in any repo changes.
Every CLI verb runs to completion on a checkout with no in-repo Node tooling installed (bare
runtime, no install step).
After the CLI has placed a repo, a /nxs.setup run in that repo issues no hub/member placement
prompt and creates or modifies no manifest or pointer file.
Personas
Per docs/product/context.md, with one addition specific to this epic:
Team lead standing up a Nexus product — deploys the components into a single repo, or makes the
hub/member placement decision once and runs the CLI to make it real across every checkout, then
hands each repo to /nxs.setup for its own per-repo judgment pass.
Assumptions
The component-deploy primitive introduced in Story 1 is the single distribution mechanism for
Nexus Claude components; the legacy nxs.update.claude.sh script is removed rather than kept as a
parallel path. The exact copy implementation (what the primitive treats as the component source of
truth) is an HLD decision, but it produces the same component set the old script installed.
The manifest/pointer writer this epic introduces is the counterpart to the epic Workspace Manifest & Resolution #38resolver
(the reader). The resolver stays the single authority on workspace shape; the CLI writes artifacts
in that shape and never re-derives or re-defines it.
Ongoing, idempotent hub-pointer stamping on repeat component updates, the per-engineer self-gating
scratch-capture hook, and a one-time engineer installer remain a separate concern from this
epic's one-time deploy/declare/add CLI — they stay with the engineer-install backlog stub (still proposed), not folded in here.
Out of Scope
Non-Claude agent support. This epic covers the Claude component surface only; Gemini (and any
other agent) deployment and their update scripts are untouched.
Manifest-skeleton auto-generation — the CLI proposing which sibling is the hub and which are
members, versus listing the discovered siblings for the user to designate. Deferred: it pushes
against the workspace-manifest epic's (Workspace Manifest & Resolution #38) deliberate "no manifest-generation tooling" posture and
would push Story 2 past M. Re-triage under the workspace-setup-cli stub if picked up later.
The engineer-install stub's self-gating scratch-capture hook, one-time engineer installer, and
update-script hub-pointer extension (docs/features/multi-repo-workspaces/backlog.md) — separate,
not-yet-promoted scope.
Cross-repo range recording for epics implemented across multiple member repos — tracked under the cross-repo-range-recording backlog stub.
Epic: Nexus Setup CLI
Description
Getting Nexus into a repo — single or multi — is structural work that happens before a Claude
session has anything to run. Today it is a manual shell step (
nxs.update.claude.sh), and for amulti-repo product there is a further act no single-repo command can perform: deciding which
checkout is the hub and which are members, authoring the hub manifest, stamping each member's hub
pointer, and distributing
.claude/across sibling checkouts. A command confined to one repo's cwdhas no vantage point from which to do that.
This epic gives the structural half a single home: a deterministic, portable
nexusCLI. Itsfoundation is one component-deploy primitive — copy the Nexus components (slash commands, agents,
skills, the rest of
.claude/) into a repo — exposed directly asnexus deployfor the single-repocase and reused by
nexus workspace initto fan out across every checkout. On top of that primitivethe CLI declares a workspace, adds a member later, and reports status. It runs on a bare
Node runtime with no in-repo tooling installed — it ships on the portable distributable already built
for the concept validator and atlas generator (portable-tooling, epic #44) —
so it can bootstrap a repo before that repo is scaffolded. The manual
nxs.update.claude.shscriptis retired;
nexus deployreplaces it.Everything the CLI writes for a workspace is exactly what the one deterministic resolver
(workspace-resolution, epic #38) already reads; the CLI is the writer
for the manifest and pointer artifacts the resolver owns on the read side, never a second definition
of workspace shape.
This draws a clean seam through Nexus setup: the CLI owns structure and deployment — getting
components in place, whether into one repo or a whole workspace — and
/nxs.setupowns judgment —stack docs, standards, the product-context interview, run inside each repo once its components are
present.
/nxs.setupis re-scoped accordingly: it detects an existing hub pointer or manifest throughthe resolver and skips any placement prompt. Single-repo projects stay simple —
nexus deploythen/nxs.setup, with no manifest or pointer ever written.Scope note: this epic covers the Claude agent surface only. Support for other agents (e.g. Gemini)
is out of scope, and their update scripts are not addressed here.
Success Metrics
nexus deployinvocation (replacing the removednxs.update.claude.shstep), after which/nxs.setupruns — the legacy Claude update script nolonger exists in the distribution.
nexus workspace initinvocation whose output the existing workspace resolver accepts with zero follow-up edits —
resolution from the hub and from every member yields the identical workspace description (the
resolver parity guarantee).
new member's pointer — no third file in any repo changes.
runtime, no
installstep)./nxs.setuprun in that repo issues no hub/member placementprompt and creates or modifies no manifest or pointer file.
Personas
Per
docs/product/context.md, with one addition specific to this epic:hub/member placement decision once and runs the CLI to make it real across every checkout, then
hands each repo to
/nxs.setupfor its own per-repo judgment pass.Assumptions
Nexus Claude components; the legacy
nxs.update.claude.shscript is removed rather than kept as aparallel path. The exact copy implementation (what the primitive treats as the component source of
truth) is an HLD decision, but it produces the same component set the old script installed.
(the reader). The resolver stays the single authority on workspace shape; the CLI writes artifacts
in that shape and never re-derives or re-defines it.
scratch-capture hook, and a one-time engineer installer remain a separate concern from this
epic's one-time deploy/declare/add CLI — they stay with the
engineer-installbacklog stub (stillproposed), not folded in here.Out of Scope
other agent) deployment and their update scripts are untouched.
members, versus listing the discovered siblings for the user to designate. Deferred: it pushes
against the workspace-manifest epic's (Workspace Manifest & Resolution #38) deliberate "no manifest-generation tooling" posture and
would push Story 2 past M. Re-triage under the
workspace-setup-clistub if picked up later.engineer-installstub's self-gating scratch-capture hook, one-time engineer installer, andupdate-script hub-pointer extension (
docs/features/multi-repo-workspaces/backlog.md) — separate,not-yet-promoted scope.
cross-repo-range-recordingbacklog stub.Open Questions
None.