From workspace-skills
Initializes or updates multi-repo workspaces from dev-config-template by collecting project info, filling CLAUDE.md placeholders, cloning sub-repos, configuring dev environments, and syncing template files.
npx claudepluginhub niracler/skill --plugin workspace-skillsThis skill uses the workspace's default tool permissions.
Interactive initialization for workspaces created from
Interactive wizard configures repositories for Claude Code best practices by creating CLAUDE.md, slash commands, agents, hooks, and permissions. Activates on 'setup claude', 'init claude', or repo setup requests.
Scaffolds full projects from PRD + stack templates: directory structure, configs, CLAUDE.md, git repo init, GitHub push. Studies existing projects via SoloGraph, uses Context7 for library versions.
Initializes new Python, Rust, or TypeScript projects interactively with git repo, GitHub workflows, pre-commit hooks, Makefile, and standard configs. Updates existing projects too.
Share bugs, ideas, or general feedback.
Interactive initialization for workspaces created from dev-config-template. Takes a blank template to a fully working multi-repo workspace in one session.
| Tool | Required | Install |
|---|---|---|
| git | Yes | Pre-installed on most systems |
| jq | Yes | brew install jq (macOS) / sudo apt install jq (Ubuntu) |
| openspec | Yes | npm install -g openspec |
Do NOT verify prerequisites on skill load. Check them at the start of Phase 2 (before execution begins). If a tool is missing, provide install instructions and wait for the user to confirm before continuing.
Phase 1: Collect ──► Phase 2: Scaffold ──► Phase 3: OpenSpec
│
Phase 5: Finalize ◄── Phase 4: Environments
All information is collected in Phase 1 (interactive). Phases 2-5 execute without further prompts -- errors are reported with remediation steps.
Ask the user for the following, one at a time. Wait for each answer before asking the next question.
[ROLE].
Example: "a backend developer", "a full-stack engineer"[LEVEL].[YOUR_LANGUAGE].
Example: "English", "简体中文", "日本語"After selection, present defaults and ask user to confirm or override:
| Python | TypeScript | |
|---|---|---|
| Formatter | ruff format . | prettier --write . |
| Linter | ruff check . | eslint . |
| Type checker | mypy . | tsc --noEmit |
| Test runner | pytest | vitest |
| Style guide | PEP 8 | Google TypeScript Style Guide |
Say something like:
Based on your tech stack, here are the suggested tools:
- Formatter:
ruff format .- Linter:
ruff check .- Type checker:
mypy .- Test runner:
pytestWant to keep these, or change any of them?
For "mixed", show both sets.
Collect repos one at a time in a loop:
git@github.com:org/repo.gitAfter each repo, ask: "Add another repo, or done?"
Continue until user says "done" (or equivalent like "完了", "没了", "that's all").
Summarize all collected info and ask for confirmation:
Project: my-project
Description: A multi-repo IoT platform
Role: backend developer
Level: learning while developing
Language: 简体中文
Stack: Python (ruff format / ruff check / mypy / pytest)
Repos:
1. iot-backend (git@github.com:org/iot-backend.git) -- Backend API
2. iot-docs (git@github.com:org/iot-docs.git) -- Documentation
Proceed with setup?
Before making any changes, verify required tools:
which git && which jq && which openspec
If any tool is missing, stop and provide install instructions. Do not proceed until all tools are available.
Generate repos.json in the workspace root:
{
"repos": [
{
"name": "{name}",
"url": "{git_url}",
"path": "repos/{name}"
}
]
}
Read the template CLAUDE.md and replace all placeholders. For the complete
mapping of placeholders to collected values, read references/claude-md-fields.md.
Key replacements:
[ROLE: e.g., ...] -> collected role[LEVEL: e.g., ...] -> collected level[YOUR_LANGUAGE: e.g., ...] -> collected language (appears twice)[YOUR_FORMAT_COMMAND] -> confirmed formatter[YOUR_LINT_COMMAND] -> confirmed linter[YOUR_TYPE_CHECK_COMMAND] -> confirmed type checker[YOUR_TEST_COMMAND] -> confirmed test runner[PROJECT_STYLE_GUIDE: e.g., ...] -> style guide based on tech stackRun script/setup to clone all repositories:
./script/setup
If this fails (e.g., authentication issues, network errors), report the error and suggest the user fix it manually, then re-run.
openspec init
Read references/config-template.yaml and populate it with:
{project_name} -> collected project name{description} -> collected description{repos_list} -> formatted repo list, one per line: - **{name}**: {description}
Write the result to openspec/config.yaml.
For each cloned sub-repo under repos/, detect project type and configure:
cd repos/{name}
python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]" 2>/dev/null || pip install -e .
If venv creation fails, report the error and continue with the next repo.
cd repos/{name}
# Use bun if bun.lockb exists, otherwise npm
if [ -f bun.lockb ]; then
bun install
else
npm install
fi
cd repos/{name}
pre-commit install
Skip silently if pre-commit is not installed.
If a repo has no pyproject.toml, package.json, or setup.py, skip it and note:
"No pyproject.toml or package.json found in {name}. You may need to set up the environment manually."
Generate {project-name}.code-workspace:
{
"folders": [
{ "path": ".", "name": "Config" },
{ "path": "repos/{name1}", "name": "{Name1}" },
{ "path": "repos/{name2}", "name": "{Name2}" }
]
}
Write the template commit SHA to .workspace-init-version for future updates:
gh api repos/niracler/dev-config-template/commits/main --jq '.sha' > .workspace-init-version
If gh is not available, write unknown -- update will still work but will
show all template changes instead of just the diff.
Stage and commit all generated/modified files:
git add repos.json CLAUDE.md openspec/ *.code-workspace .workspace-init-version
git commit -m "chore: initialize workspace"
Do NOT push -- let the user decide when to push.
Run the bundled validation script to verify everything is in place:
python3 <skill-path>/scripts/validate.py .
This checks: repos.json structure, CLAUDE.md placeholder replacement, sub-repo cloning, OpenSpec config, environment setup, and VSCode workspace file.
If any ERROR-level checks fail, show the output and help the user fix the issues before proceeding. WARNING-level items are informational -- note them but continue.
Display a checklist:
Workspace initialized! Here's what to do next:
1. Open the workspace in VSCode:
code {project-name}.code-workspace
2. Start Claude Code and try a conversation:
claude
3. Create your first change:
/opsx:new
4. Set up project scheduling (optional):
Ask Claude: "planning init {project-name}"
5. Push when ready:
git push -u origin main
| Error | Cause | Fix |
|---|---|---|
| script/setup fails | jq not installed | brew install jq or sudo apt install jq |
| openspec init fails | openspec CLI missing | npm install -g openspec |
| Clone fails | SSH key not configured | Check SSH access to the git host |
| venv creation fails | Python not installed or wrong version | Install Python 3.10+ |
| CLAUDE.md placeholders remain | Placeholder format mismatch | Check references/claude-md-fields.md for exact tokens |
| Update shows no changes | .workspace-init-version missing | Run update anyway -- it compares against all template history |
When the user asks to update the workspace template, follow this flow.
Trigger phrases: "update workspace", "update template", "sync template", "更新工作区模板", "模板有更新吗", "template changed"
Read .workspace-init-version to get the local template SHA.
cat .workspace-init-version 2>/dev/null || echo "unknown"
gh api repos/niracler/dev-config-template/commits/main --jq '.sha'
If local SHA matches remote HEAD, report "Already up to date" and stop.
Fetch the diff between local version and remote HEAD:
gh api "repos/niracler/dev-config-template/compare/{local_sha}...main" \
--jq '.files[] | "\(.status)\t\(.filename)"'
If local SHA is unknown, fetch the full file list instead and compare
against local files.
Display a summary:
Template updates available (3 files changed):
modified script/setup -- Updated clone logic
modified CLAUDE.md -- Added new section 10
added .editorconfig -- New file
Files that will NOT be touched (your customizations):
repos.json
openspec/config.yaml
CLAUDE.md filled values ([ROLE], [LEVEL], etc.)
Ask the user to confirm before applying.
For each changed template file:
script/setup, .gitignore, .editorconfig (non-customized files):
CLAUDE.md (partially customized):
Files to NEVER touch:
repos.json -- user's repo configurationopenspec/ -- user's change management datarepos/ -- sub-repo contents.claude/ -- user's Claude settings and skillsgh api repos/niracler/dev-config-template/commits/main --jq '.sha' > .workspace-init-version
git add -A
git commit -m "chore: update workspace template"
Run scripts/validate.py to confirm the update didn't break anything.