From pappardelle
Installs and initializes Pappardelle in a Git repository: runs interactive wizard to configure VCS host, issue tracker, team prefix, profiles; generates .pappardelle.yml and local overrides. Use for initial setup or config updates.
npx claudepluginhub chardigio/pappardelle --plugin pappardelleThis skill uses the workspace's default tool permissions.
Interactive setup wizard that installs Pappardelle, gathers your configuration preferences, checks prerequisites, and generates a `.pappardelle.yml` file.
Interactively configure Pappardelle by editing .pappardelle.yml and .pappardelle.local.yml to add profiles, keybindings, hooks, watchlists, providers, and workspace commands.
Interviews user to create GitHub projects, labels, and CLAUDE.md config for AI-agent-driven project management. Triggers on 'init project' or setup requests.
Initializes new projects: checks setup, inits git, detects brownfield code (TS/JS/Py/Go/Rust/Swift/Java), offers codebase mapping, gathers context for PROJECT.md/config.json.
Share bugs, ideas, or general feedback.
Interactive setup wizard that installs Pappardelle, gathers your configuration preferences, checks prerequisites, and generates a .pappardelle.yml file.
Before starting the wizard, check if a .pappardelle.yml already exists:
test -f "$(git rev-parse --show-toplevel)/.pappardelle.yml" && echo "EXISTS" || echo "NOT_FOUND"
If NOT_FOUND, skip to Step 1.
If EXISTS, read and parse the config file to extract the current configuration, then walk the user through personalization. Use AskUserQuestion for each sub-step — ask them one at a time, don't bundle questions.
Present a summary of the existing config:
Pappardelle is already configured in this repository.
Current configuration:
- VCS Host: {provider}
- Issue Tracker: {provider}
- Team Prefix: {prefix}
- Profiles:
- {display_name} — keywords: {comma-separated keywords}
- {display_name} — keywords: {comma-separated keywords}
- (repeat for each profile)
Ask: "Do any of the existing profiles fit your use case, or would you like to add a new one?"
.pappardelle.yml.Ask: "Which profile should be your default? (This is the profile used when no keywords match your issue.)"
List the available profiles by name. If they pick one that differs from the current default_profile, write/update .pappardelle.local.yml with the override:
default_profile: their-choice
If they pick the one that's already the default, skip writing.
Show the current dangerously_skip_permissions value and ask: "Should Claude start in 'yolo mode' — automatically approving all tool calls? (Currently: {yes/no})"
.pappardelle.local.yml with the override:
claude:
dangerously_skip_permissions: true # or false
If any local overrides were collected in 0c–0d, write or update .pappardelle.local.yml. Preserve any existing content (e.g., keybindings, issue_watchlist) — only add/update the fields that changed.
After this, skip to Step 6 (Summary) — print a summary of what was configured and launch instructions.
Use AskUserQuestion for each of these. Ask them one at a time — don't bundle questions.
Ask: "Which VCS host do you use?"
Options:
gh CLIglab CLI. If selected, follow up asking if it's gitlab.com or self-hosted (get the host value).Ask: "Which issue tracker do you use?"
Options:
linctl CLIacli CLI. If selected, follow up asking for their Jira base URL (e.g., https://mycompany.atlassian.net).Ask: "What are your issue key prefixes? For example, if your issues look like PROJ-123, the prefix is PROJ. If you have multiple teams/projects with different prefixes (e.g., FE-123, BE-456), list them all."
Single prefix (e.g., they say just "PROJ"):
team_prefix: PROJkeywords (it catches everything)display_name and commandsMultiple prefixes (e.g., they say "FE for frontend, BE for backend, MOB for mobile"):
team_prefix to whichever prefix they use most (ask if unclear)frontend, backend, mobile)display_name: human-readable name they gavekeywords: include the prefix with hyphen (e.g., ["FE-"]) — this is how Pappardelle auto-selects the profile when the user enters an issue key like FE-123team_prefix: set per-profile to override the global prefix for issue creationcommands: reasonable setup commands based on project type (e.g., npm install for Node.js, xcodegen generate for iOS)default_profile to the most common oneAsk: "Would you like Claude to run a skill automatically when a new workspace is created? The default is /do which starts planning and implementing the issue."
Options:
/do (default) — set initialization_command: '/do'claude sectionIf they chose /do, also offer to install the starter /do skill:
mkdir -p .claude/skills/do && curl -fsSL https://raw.githubusercontent.com/chardigio/pappardelle/main/examples/skills/do/SKILL.md -o .claude/skills/do/SKILL.md
Ask: "Should Claude start in 'yolo mode' — automatically approving all tool calls without asking for permission? (This sets dangerously_skip_permissions: true in your config)"
Options:
dangerously_skip_permissions: falsedangerously_skip_permissions: true. Warn the user: "This means Claude can read, write, and execute anything without confirmation. Only enable this if you trust the skills and prompts being used in your workspaces."This setting is only relevant if a claude section exists (i.e., the user chose an initialization command in 1d). If they opted out of claude in 1d, skip this question.
Check if Pappardelle is already installed:
command -v pappardelle &>/dev/null && echo "INSTALLED" || echo "NOT_INSTALLED"
curl -fsSL https://raw.githubusercontent.com/chardigio/pappardelle/main/install.sh | bash
The install script checks base prerequisites (Node.js >= 18, npm, git, tmux, jq), clones the repo, builds it, and makes pappardelle and idow available globally. If it fails due to missing prerequisites, help the user install them (e.g., brew install node tmux jq) and re-run.
Now that you know which providers they chose, check the required tools and provider-specific CLIs. Run these checks in a single bash command:
echo "=== Required ===" && \
for cmd in node npm git tmux jq yq claude; do printf "%-10s %s\n" "$cmd" "$(command -v $cmd >/dev/null 2>&1 && echo '✓' || echo '✗ MISSING')"; done && \
echo "=== Provider CLIs ===" && \
for cmd in <VCS_CLI> <TRACKER_CLI> lazygit; do printf "%-10s %s\n" "$cmd" "$(command -v $cmd >/dev/null 2>&1 && echo '✓' || echo '✗ MISSING')"; done
Replace <VCS_CLI> with gh (GitHub) or glab (GitLab), and <TRACKER_CLI> with linctl (Linear) or acli (Jira) based on the answers from Step 1.
brew install <tool> (or the appropriate install command for Claude Code: curl -fsSL https://claude.ai/install.sh | bash). Use AskUserQuestion to confirm before installing. Re-run the check after installation and only proceed once all required tools pass.Ask: "Would you like me to add the recommended tmux config? It enables mouse support, pane navigation with Ctrl+Shift+arrow keys, and a clean status bar. (I'll append to ~/.tmux.conf)"
If yes, fetch the recommended config and append it to ~/.tmux.conf (skip any settings that already exist):
curl -fsSL https://raw.githubusercontent.com/chardigio/pappardelle/main/examples/tmux.conf >> ~/.tmux.conf
Check if ~/.tmux.conf exists first and read it — if settings already exist, skip the duplicates rather than appending blindly.
If they decline, move on.
Based on the answers, generate a .pappardelle.yml file at the repository root. Use the full config format from the configuration reference.
Rules:
version: 1issue_trackervcs_hostteam_prefixkeywords, set as default_profilekeywords: ["PREFIX-"] (include the hyphen) and a per-profile team_prefix override. Set default_profile to the most common oneAfter writing the file, print a summary:
pappardelleversion: 1
# Issue key prefix (e.g., PROJ-123)
team_prefix: PROJ
# VCS host
vcs_host:
provider: github
# Issue tracker
issue_tracker:
provider: linear
# Claude configuration
claude:
initialization_command: '/do'
dangerously_skip_permissions: false
# Commands to run after git worktree is created
post_workspace_init:
- name: 'Copy .env'
run: 'cp -n ${REPO_ROOT}/.env ${WORKTREE_PATH}/.env 2>/dev/null || true'
# Custom keybindings
keybindings:
- key: 'c'
name: 'Clear context'
send_to_claude: '/clear'
# Profiles
profiles:
default:
display_name: 'Default'
links:
- url: '${ISSUE_URL}'
title: 'Linear Issue'
- url: '${PR_URL}'
title: 'GitHub PR'
if_set: 'PR_URL'
version: 1
# Issue key prefix (most common one — FE is the default for bare numbers)
team_prefix: FE
# VCS host
vcs_host:
provider: gitlab
host: gitlab.mycompany.com
# Issue tracker
issue_tracker:
provider: jira
base_url: https://mycompany.atlassian.net
# Claude configuration
claude:
initialization_command: '/do'
dangerously_skip_permissions: false
# Commands to run after git worktree is created
post_workspace_init:
- name: 'Copy .env'
run: 'cp -n ${REPO_ROOT}/.env ${WORKTREE_PATH}/.env 2>/dev/null || true'
# Custom keybindings
keybindings:
- key: 'c'
name: 'Clear context'
send_to_claude: '/clear'
# Profiles
profiles:
frontend:
display_name: 'Frontend'
team_prefix: FE
keywords:
- FE-
- frontend
links:
- url: '${ISSUE_URL}'
title: 'Jira Issue'
- url: '${MR_URL}'
title: 'GitLab MR'
if_set: 'MR_URL'
backend:
display_name: 'Backend'
team_prefix: BE
keywords:
- BE-
- backend
links:
- url: '${ISSUE_URL}'
title: 'Jira Issue'
- url: '${MR_URL}'
title: 'GitLab MR'
if_set: 'MR_URL'
mobile:
display_name: 'Mobile'
team_prefix: MOB
keywords:
- MOB-
- mobile
links:
- url: '${ISSUE_URL}'
title: 'Jira Issue'
- url: '${MR_URL}'
title: 'GitLab MR'
if_set: 'MR_URL'