Add Context Studio Wizard — project scaffolding CLI
- wizard.sh: interactive bash wizard that scaffolds new CS projects - lib/: utils, core install, project structure, workflow generation - templates/: Dockerfile, devcontainer.json, agent presets (minimal/standard), system.json, roles, hook rules - README: setup, usage, mobility workflow Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
cd5b28919c
commit
09ff27be92
19 changed files with 1132 additions and 1 deletions
166
lib/workflow.sh
Normal file
166
lib/workflow.sh
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
#!/usr/bin/env bash
|
||||
# workflow.sh — generate or clone workflow config
|
||||
|
||||
WIZARD_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
|
||||
# generate_workflow PROJECT_DIR PROJECT_NAME PROJECT_DESC TECH_STACK PRESET
|
||||
generate_workflow() {
|
||||
local project_dir="$1"
|
||||
local project_name="$2"
|
||||
local project_desc="$3"
|
||||
local tech_stack="$4"
|
||||
local preset="$5"
|
||||
local workflow_dir="$project_dir/workflow"
|
||||
|
||||
info "Generating workflow config ($preset preset)..."
|
||||
|
||||
mkdir -p "$workflow_dir/agents"
|
||||
mkdir -p "$workflow_dir/roles"
|
||||
mkdir -p "$workflow_dir/hooks/rules"
|
||||
mkdir -p "$workflow_dir/project-docs/tasks"
|
||||
mkdir -p "$workflow_dir/users/default/tasks"
|
||||
mkdir -p "$workflow_dir/data"
|
||||
|
||||
# workflow.json
|
||||
cat > "$workflow_dir/workflow.json" <<EOF
|
||||
{
|
||||
"name": "$(slugify "$project_name")",
|
||||
"version": "1.0.0",
|
||||
"description": "$project_desc",
|
||||
"techStack": "$tech_stack",
|
||||
"requirements": {
|
||||
"tools": [],
|
||||
"cliProviders": [
|
||||
{
|
||||
"name": "claude-code",
|
||||
"command": "claude",
|
||||
"versionFlag": "--version",
|
||||
"installHint": "npm install -g @anthropic-ai/claude-code"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# system.json
|
||||
cp "$WIZARD_DIR/templates/system.json" "$workflow_dir/system.json"
|
||||
|
||||
# agents.json — based on preset
|
||||
local agents_template
|
||||
case "$preset" in
|
||||
standard) agents_template="$WIZARD_DIR/templates/agents-standard.json" ;;
|
||||
*) agents_template="$WIZARD_DIR/templates/agents-minimal.json" ;;
|
||||
esac
|
||||
|
||||
sed "s/{{PROJECT_NAME}}/$project_name/g; s/{{PROJECT_DESC}}/$project_desc/g" \
|
||||
"$agents_template" > "$workflow_dir/agents.json"
|
||||
|
||||
# Create agent directories from agents.json
|
||||
local agent_ids
|
||||
agent_ids=$(grep '"id"' "$workflow_dir/agents.json" | sed 's/.*"id": *"\([^"]*\)".*/\1/')
|
||||
for agent_id in $agent_ids; do
|
||||
_create_agent_dir "$workflow_dir" "$agent_id"
|
||||
done
|
||||
|
||||
# Copy role files
|
||||
cp "$WIZARD_DIR/templates/roles/"*.md "$workflow_dir/roles/" 2>/dev/null || true
|
||||
|
||||
# Copy hook rules
|
||||
cp "$WIZARD_DIR/templates/hooks/rules/"*.json "$workflow_dir/hooks/rules/" 2>/dev/null || true
|
||||
|
||||
# project-docs/project-vision.md
|
||||
cat > "$workflow_dir/project-docs/project-vision.md" <<EOF
|
||||
# $project_name — Project Vision
|
||||
|
||||
## Description
|
||||
$project_desc
|
||||
|
||||
## Tech Stack
|
||||
$tech_stack
|
||||
|
||||
## Goals
|
||||
- [ ] Define requirements
|
||||
- [ ] Implement core features
|
||||
- [ ] Test and review
|
||||
|
||||
## Roadmap
|
||||
- Phase 1: Project setup and scaffolding
|
||||
- Phase 2: Core implementation
|
||||
- Phase 3: Testing and hardening
|
||||
EOF
|
||||
|
||||
# CLAUDE.md
|
||||
cat > "$workflow_dir/CLAUDE.md" <<EOF
|
||||
# $project_name
|
||||
|
||||
## Project Overview
|
||||
$project_desc
|
||||
|
||||
**Tech Stack**: $tech_stack
|
||||
|
||||
## Context Studio Setup
|
||||
- Workflow directory: \`CS_WORKFLOW_DIR\`
|
||||
- Core directory: \`CS_CORE_DIR\`
|
||||
- Start system: \`node \$CS_CORE_DIR/core/start.js\`
|
||||
|
||||
## Agent Roles
|
||||
See \`roles/\` directory for agent role definitions.
|
||||
Read \`project-docs/project-vision.md\` for project goals.
|
||||
|
||||
## Communication
|
||||
Use \`/sm <agent> "message"\` to send messages between agents.
|
||||
EOF
|
||||
|
||||
success "Workflow generated at $workflow_dir"
|
||||
}
|
||||
|
||||
_create_agent_dir() {
|
||||
local workflow_dir="$1"
|
||||
local agent_id="$2"
|
||||
local agent_dir="$workflow_dir/agents/$agent_id/.claude"
|
||||
|
||||
mkdir -p "$agent_dir/hooks"
|
||||
mkdir -p "$agent_dir/commands"
|
||||
|
||||
# settings.json
|
||||
cat > "$agent_dir/settings.json" <<EOF
|
||||
{
|
||||
"model": "sonnet",
|
||||
"spinnerTipsEnabled": false,
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(*)",
|
||||
"Read(*)",
|
||||
"Write(*)",
|
||||
"Edit(*)",
|
||||
"Glob(*)",
|
||||
"Grep(*)",
|
||||
"Task",
|
||||
"SlashCommand:/prime:*",
|
||||
"SlashCommand:/sm:*"
|
||||
],
|
||||
"deny": [
|
||||
"Bash(node \$CS_CORE_DIR/core/stop.js:*)"
|
||||
]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# CLAUDE.md per agent
|
||||
cat > "$workflow_dir/agents/$agent_id/CLAUDE.md" <<EOF
|
||||
# Agent: $agent_id
|
||||
|
||||
Load your role with \`/prime\` at session start.
|
||||
EOF
|
||||
}
|
||||
|
||||
clone_workflow() {
|
||||
local project_dir="$1"
|
||||
local repo_url="$2"
|
||||
local workflow_dir="$project_dir/workflow"
|
||||
|
||||
info "Cloning workflow from $repo_url..."
|
||||
git clone "$repo_url" "$workflow_dir" \
|
||||
|| die "Failed to clone workflow repo: $repo_url"
|
||||
success "Workflow cloned to $workflow_dir"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue