원클릭으로
setup-workspace
Initialise a workspace, register projects under it, or sync upstream changes. Single entry point for workspace lifecycle.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Initialise a workspace, register projects under it, or sync upstream changes. Single entry point for workspace lifecycle.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Definitive reference for how Claude Code works — disambiguates skills vs hooks vs subagents vs MCPs vs slash commands vs memory vs settings. Use when asked "how does Claude Code X work", "what's the difference between X and Y", "where should this live", "build me a [skill|hook|agent|mcp|slash command]", "configure Claude Code", or when picking the right surface for a new capability.
Scribe — the project-documentation skill. Generate or maintain a project's Claude-facing documentation (CLAUDE.md, .claude/docs/*, project-context.md, README) from verified facts. Use when the user says "document this project", "write the docs for X", "the docs are stale", "fill in the .claude docs", or "/scribe". Detects existing doc state and routes between from-scratch and update. Verify-before-assert is the core discipline — confirmed facts go to committed docs, inferred/uncertain ones go to a separate hazards artifact, never silently into the repo.
Speak content aloud via Kokoro neural TTS (local, offline). Use when the user says "read it for me", "read it to me", "play it in audio", "say it", "speak it", "read that aloud", "/say-it", or asks to hear something spoken instead of reading it.
Install a local neural voice interface for Claude Code on macOS Apple Silicon. Wires mlx-whisper (STT) + Kokoro TTS (offline neural voices) into voice-claude and vtranscribe CLI scripts. Two voice contexts — personal (af_heart) and tech (af_bella). Multi-session safe — concurrent sessions speak in turn (global lock) and announce their name. No cloud APIs, no API keys.
Collect the user's daily work activity from Slack, Jira, Confluence, GitHub, and Google Drive with source links
Collect a team member's daily work activity from Slack, Jira, Confluence, and GitHub
| name | setup-workspace |
| description | Initialise a workspace, register projects under it, or sync upstream changes. Single entry point for workspace lifecycle. |
| user_invocable | true |
| args | Pick a mode based on user intent: - `init --workspace <path> [--source <path>] [--dry-run]` — first-time workspace setup. Run from inside the cloned boilerplate folder; pass `--workspace` to point at the target. `--source` defaults to cwd when cwd is a v2 boilerplate; pass it explicitly only when running from elsewhere. `--dry-run` previews what would be created/skipped without writing anything. - `add-project <slug> [description]` — scaffold a project under `<workspace>/projects/<slug>/` and register it via `/project-registry add`. Run from the workspace root. - `sync` — pull upstream skill/agent updates from source. Diff-detects local changes and asks before overwriting. |
Owns workspace lifecycle: init (first-time setup), add-project (register a project), and sync (update from source).
~/src/memnyx/ and ~/workspace/. Source must NOT live inside the workspace, and the workspace must NOT live inside the source. init refuses if the layout is wrong./setup-workspace sync (upstream updates).cwd for add-project, sync, and ongoing work.init --workspace <path> [--source <path>]First-time workspace setup.
Before init, the workspace's .claude/skills/ is empty — /setup-workspace doesn't exist there yet. So init is invoked from a Claude session started inside the cloned boilerplate, where the skill is already present. Init then deploys the skill (and everything else) into the target workspace. After init, the user starts fresh sessions from the workspace.
cd ~/src/memnyx # or wherever you cloned it
claude
/setup-workspace init --workspace ~/workspace
--source defaults to cwd. Pass --source <path> only when running from somewhere other than the source clone.
A v2 boilerplate is identified by the marker file .claude/skills/setup-workspace/templates/workspace-CLAUDE.md.tmpl. init refuses if cwd is not a v2 boilerplate and --source is not provided.
~/src/memnyx/).Pass --dry-run to preview what init would do without writing anything. The script prints the same created/skipped summary, prefixed with [DRY RUN]. Useful when the user wants to verify the plan before committing. The agent should default to running --dry-run first when paths haven't been confirmed, then re-run without it.
The init action is idempotent. Re-running is safe:
agent-guardrails.md are overwritten from source (always fresh — these are upstream-owned).architecture.md, conventions.md, cognee-usage.md, etc.) are deployed only if missing in the workspace (templates, evolved by the user after init).CLAUDE.md, MEMORY.md, lessons-learned.md, project-context.md, me/*.md, .gitignore, settings.json are deployed only if missing — never overwritten.<workspace>/shell/memnyx.sh (the mmn launcher) is a derived artifact — overwritten on every init and sync. The user's shell profile is edited only with explicit consent, and only via an idempotent managed block (a one-time .memnyx-backup of the profile is saved before the first edit).--workspace is required; --source defaults to cwd when cwd is a v2 boilerplate. The script validates the sibling layout (refuses if source and workspace overlap) and prints both paths — confirm with the user before proceeding.workstreams/, sessions/active/, artifacts/, me/..claude/: memory/, skills/, agents/, docs/.<source>/.claude/skills/* → <workspace>/.claude/skills/ (overwrite).<source>/.claude/agents/* → <workspace>/.claude/agents/ (overwrite, if source has agents).<source>/.claude/docs/agent-guardrails.md → <workspace>/.claude/docs/agent-guardrails.md (overwrite).<source>/.claude/docs/* → <workspace>/.claude/docs/ (deploy only if missing — these are templates).<workspace>/CLAUDE.md from templates/workspace-CLAUDE.md.tmpl (skip if exists).<workspace>/.claude/memory/MEMORY.md — empty header.<workspace>/.claude/memory/lessons-learned.md — empty header.<workspace>/.claude/memory/project-context.md — workspace-level domain context template (user fills in).<workspace>/me/identity.md — placeholder profile (user fills in).<workspace>/me/brag-log.md — empty header.<workspace>/me/growth.md — empty header.<workspace>/.gitignore — gitignores per-engineer working state.<workspace>/.claude/settings.json is missing. If exists, skip with a note suggesting /setup-workspace sync for future updates./setup-workspace add-project, /setup-cognee).init.py has already written <workspace>/shell/memnyx.sh (the mmn command — see Shell launcher below); that file is safe and unconditional. The only thing left is editing the user's shell profile so it sources that file — which init.py deliberately does NOT do. Show the user the detected profile and the managed source block, ask for explicit consent, and only then run launcher.py --wire-profile. If they decline, the block is theirs to add by hand. Offer this; never wire a profile silently.The init action is delegated to scripts/init.py:
python3 .claude/skills/setup-workspace/scripts/init.py --workspace <path> [--source <path>] [--dry-run]
When run from cwd = source clone (the recommended flow), the relative path above works. From elsewhere, use the absolute path to the script in the source. init.py writes <workspace>/shell/memnyx.sh itself (step 8) — so the launcher always exists after init, no separate write step needed.
Only the profile wiring is a separate, consent-gated call (step 8). After the user consents:
python3 .claude/skills/setup-workspace/scripts/launcher.py --workspace <path> --wire-profile [--profile <path>] [--shell <name>]
--profile overrides shell-based detection — use it when the user's setup differs (e.g. macOS login bash that reads ~/.bash_profile, not ~/.bashrc). Run with --dry-run first to preview the exact profile edit.
add-project <slug> [description]Scaffold a project under <workspace>/projects/<slug>/ and register it via /project-registry add.
<slug> — required. Lowercase + hyphens; must start with a letter. Same shape as /project-registry add.<description> — optional one-line. Stored on the registry entry and substituted into the project's CLAUDE.md.cwd = workspace. The user is at the workspace root.<workspace>/projects/<slug>/ already exists. add-project does NOT create the project root — the user creates it first, either as a fresh dir or as a symlink to an existing repo:
mkdir <workspace>/projects/<slug> # fresh project
ln -s /path/to/repo <workspace>/projects/<slug> # symlink existing
Keeps Memnyx out of physical placement decisions.Pass --dry-run to preview what would be created/skipped without writing anything. Particularly useful when the project dir is a symlink to an existing repo: confirms whether an existing CLAUDE.md or .gitignore would be preserved, and which gitignore patterns would be appended.
The action is idempotent. Re-running is safe:
CLAUDE.md, MEMORY.md, lessons-learned.md, project-context.md, settings.json) are preserved — never overwritten..gitignore is created fresh if missing, or appended in-place with only the patterns it lacks (line-by-line check)./project-registry add is skipped when the slug is already registered..claude/skills/setup-workspace/).^[a-z][a-z0-9-]*$.<workspace>/projects/<slug>/ exists (real dir or symlink).workstreams/, sessions/active/, artifacts/, .claude/memory/. Skip if exists..claude/memory/MEMORY.md — empty header..claude/memory/lessons-learned.md — empty header..claude/memory/project-context.md — project-level domain context template (user fills in: business domain, users, constraints, what "done" looks like)..claude/settings.json — empty {}. Project-level allowlists evolve here as the project's needs surface; user-specific layers go into settings.local.json (gitignored).CLAUDE.md from templates/project-CLAUDE.md.tmpl with {{project_name}} and {{description}} substituted. Skip if exists (typical when symlinking to a real repo that already has its own CLAUDE.md)..gitignore at the project root: append workstreams/, sessions/, collected/, artifacts/, contributions/. Idempotent — line-by-line check; only missing patterns are added./project-registry add — the registry receives <slug> [description]. Skipped when the slug is already registered.collected/ and contributions/ aren't scaffoldedThese dirs are created by their owning skills on first use (mirrors the init pattern at the workspace level). Pre-creating empty dirs pollutes git status until something actually lands in them; deferring keeps the project clean until the dir is actually needed.
The add-project action is delegated to scripts/add_project.py:
python3 .claude/skills/setup-workspace/scripts/add_project.py <slug> [description] [--dry-run]
The script handles validation, idempotent scaffolding, template substitution, and the registry call. Output goes to stdout in human-readable form.
syncUpdate upstream-owned content in the workspace from the source clone, and surface any new starter files (memory entries, identity templates, etc.) that have been added to Memnyx since init. Conservative — detects local changes and asks for consent before overwriting.
After the user pulls upstream changes into the source clone (e.g., cd ~/src/memnyx && git pull) and wants those changes reflected in the workspace.
--workspace <path> — required. The target workspace.--source <path> — optional. Defaults to the path stored in <workspace>/.claude/.source by init. Pass explicitly only if the source clone has moved or if .source is missing.Walks two surfaces and reports them in separate sections:
.claude/skills/**, .claude/agents/**, .claude/docs/agent-guardrails.md. Bucketed as unchanged, update, new, local-only. update and new are actionable; local-only is never touched.templates/starters/workspace/** mapped to workspace paths plus, for each registered project, templates/starters/project/** mapped to the project's paths. Bucketed the same way but the update bucket is suppressed — it surfaces as divergent (informational only). Starters are user-evolved after init; sync never offers to overwrite a workspace copy that has diverged.Only new starters are actionable. When a starter feedback_*.md lands under .claude/memory/, sync emits a hint reminding the user that the matching index line in MEMORY.md was not added automatically (because the user's MEMORY.md is itself a starter that's diverged).
Does NOT touch CLAUDE.md, workstreams, sessions, settings.json, or other docs/* templates. The starter walk reports divergence for memory/identity files but never overwrites.
.claude/.workspace present). Resolve source via --source or .claude/.source.python3 .claude/skills/setup-workspace/scripts/sync.py --workspace <path> [--source <path>]. The script prints a structured plan with file paths grouped by category, with separate sections for upstream-owned content and starters.update, new, and starter new sections, ask:
--apply-all)?diff on the actual source/workspace paths)?sync.py with --apply-all or --apply <relpath>.... The script copies source-version files to the workspace and prints what was applied. If a feedback_*.md starter landed, also surface the hint so the user can manually add the index line to their MEMORY.md.local-only or starter divergent (so the user knows their custom additions are preserved).sync.py regenerates <workspace>/shell/memnyx.sh from the (possibly updated) template automatically on every apply — a derived artifact, no separate step. Only if the profile's managed block is missing (or the user asks) do you offer launcher.py --wire-profile (consent-gated, exactly as in init). Never edit the profile without consent.python3 .claude/skills/setup-workspace/scripts/sync.py --workspace <path> [--source <path>] [--apply <relpath>...] [--apply-all]
Default mode (no --apply flags) prints the plan only; apply mode also regenerates shell/memnyx.sh (it imports launcher.write_memnyx_sh).
mmn)init and sync write <workspace>/shell/memnyx.sh and — with explicit consent — wire it into the user's shell profile via an idempotent managed block. It defines one command, mmn, for engineers who prefer launching from a project clone over the workspace root:
mmn — launch Claude in the current folder with --add-dir <workspace>, so the workspace's skills load.mmn <slug> — cd to the real clone of the registered project <slug> (resolving the projects/<slug> symlink via cd + pwd -P), then launch. The project's own .mcp.json/settings load; an unrecognised slug is refused, not guessed.Before launching, mmn prints a banner showing the directory it will cd into and the exact command it runs (the CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir … line) — no hidden behaviour. Colour is used only on a TTY.
This is the supported secondary launch flow in docs/v2-design-principles.md: /hello binds such a session by matching realpath(cwd) to a registered project. memnyx.sh is POSIX-safe (sh/bash/zsh) and derived — never hand-edit it; change templates/memnyx.sh.tmpl instead. The launcher exports MEMNYX_WORKSPACE and scopes CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 to the command, so the workspace CLAUDE.md loads via --add-dir without affecting other claude invocations.
init overwrites them unconditionally (first-time setup, no local edits to protect). sync is conservative: detects local edits and asks the user before overwriting (workspace has evolved since init)./setup-workspace add-project's job, not init's.