From pappardelle
Interactively configure Pappardelle by editing .pappardelle.yml and .pappardelle.local.yml to add profiles, keybindings, hooks, watchlists, providers, and workspace commands.
npx claudepluginhub chardigio/pappardelle --plugin pappardelleThis skill uses the workspace's default tool permissions.
Help the user configure their Pappardelle setup by editing `.pappardelle.yml` (shared, checked into git) and/or `.pappardelle.local.yml` (personal, gitignored).
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.
Configures Plan-Build-Run settings: workflow depth, model profiles, features, git branching/mode, and gates. Interactive or direct args like 'depth standard' or 'feature auto_continue on'.
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.
Share bugs, ideas, or general feedback.
Help the user configure their Pappardelle setup by editing .pappardelle.yml (shared, checked into git) and/or .pappardelle.local.yml (personal, gitignored).
REPO_ROOT=$(git rev-parse --show-toplevel)
echo "Repo root: $REPO_ROOT"
ls -la "$REPO_ROOT/.pappardelle.yml" "$REPO_ROOT/.pappardelle.local.yml" 2>/dev/null
Read the existing config (if it exists). If no .pappardelle.yml exists, suggest running /init-pappardelle first.
Ask what the user wants to configure using AskUserQuestion:
Options:
post_workspace_init)pre_workspace_deinit).pappardelle.local.ymlThen follow the appropriate section below based on their choice.
Profiles define project-specific workspace behavior. Ask these questions with AskUserQuestion:
my-app, backend-api)My iOS App, Backend API)ios, app, swift). Include the issue prefix with hyphen if applicable (e.g., MOB-)team_prefixvars and commands for xcodegen/xcodebuildprofiles:
my-profile:
keywords: [keyword1, keyword2]
display_name: 'My Profile'
team_prefix: PREFIX # Optional per-profile override
claude:
initialization_command: '/do' # Optional per-profile override
vars: # Custom template variables
KEY: 'value'
vcs:
label: 'github_label' # Label applied to PRs/MRs
links:
- url: '${ISSUE_URL}'
title: 'Issue'
- url: '${PR_URL}'
title: 'PR'
if_set: 'PR_URL'
apps:
- name: 'Xcode'
path: '${WORKTREE_PATH}/path/to/project.xcodeproj'
if_set: 'SOME_VAR'
commands:
- name: 'Build project'
run: 'cd ${WORKTREE_PATH} && make build'
continue_on_error: false
background: false
post_workspace_init: # Profile-specific init commands (run after global)
- name: 'Setup step'
run: 'some command'
pre_workspace_deinit: # Profile-specific deinit commands (run after global)
- name: 'Cleanup step'
run: 'some command'
continue_on_error: true
Keybindings are single-key shortcuts in the Pappardelle TUI. Ask with AskUserQuestion:
j, k, g, i, d, o, n, e, p, q, ?run) or send text to Claude (send_to_claude).pappardelle.yml, personal goes in .pappardelle.local.ymlkeybindings:
- key: 'b'
name: 'Build app'
run: 'cd ${WORKTREE_PATH} && make build'
- key: 'a'
name: 'Address PR feedback'
send_to_claude: '/address-pr-feedback'
.pappardelle.local.yml)The local file can add, override, or disable keybindings:
keybindings:
- key: 'V' # Add new personal binding
name: 'Open in VS Code'
run: 'code ${WORKTREE_PATH}'
- key: 'X' # Override a shared binding
name: 'Open in Nova'
run: 'nova ${WORKTREE_PATH}'
- key: 'r' # Disable a shared binding
disabled: true
post_workspace_init runs after worktree creation. Common patterns:
# Copy environment files
post_workspace_init:
- name: 'Copy .env'
run: 'cp -n ${REPO_ROOT}/.env ${WORKTREE_PATH}/.env 2>/dev/null || true'
- name: 'Install dependencies'
run: 'cd ${WORKTREE_PATH} && npm install'
continue_on_error: true
- name: 'Background task'
run: 'long-running-setup.sh'
background: true
Ask with AskUserQuestion:
continue_on_error: true)background: true)Note:
post_worktree_initis accepted as a backwards-compatible alias. Usepost_workspace_initfor new configs.
pre_workspace_deinit runs before workspace deletion. If a command fails (without continue_on_error), deletion is aborted.
pre_workspace_deinit:
- name: 'Close issue'
run: 'linctl issue update ${ISSUE_KEY} --state Done'
continue_on_error: true
- name: 'Remove worktree'
run: 'git worktree remove ${WORKTREE_PATH} --force'
continue_on_error: true
Ask with AskUserQuestion:
Auto-create workspaces for issues assigned to you.
issue_watchlist:
assignee: me # 'me' auto-detects, or use explicit username
statuses:
- To Do
- In Progress
labels: # Optional: filter by label
- pappardelle
Ask with AskUserQuestion:
me (auto-detect) or a specific username?issue_tracker:
provider: linear # or 'jira'
# base_url: https://mycompany.atlassian.net # Required for Jira
vcs_host:
provider: github # or 'gitlab'
# host: gitlab.mycompany.com # Optional for self-hosted GitLab
claude:
initialization_command: '/do' # Skill to run on new sessions
dangerously_skip_permissions: false # 'yolo mode'
Per-profile overrides take precedence:
profiles:
my-profile:
claude:
initialization_command: '/do-custom'
Available in all command templates, link URLs, and app paths:
| Variable | Description | Example |
|---|---|---|
${ISSUE_KEY} | Issue key | STA-361 |
${ISSUE_NUMBER} | Numeric part | 361 |
${ISSUE_URL} | Full issue URL | https://linear.app/... |
${TITLE} | Issue title | Add dark mode |
${DESCRIPTION} | Issue description | (full text) |
${WORKTREE_PATH} | Worktree path | /Users/.../STA-361 |
${REPO_ROOT} | Git repo root | /Users/.../stardust-labs |
${REPO_NAME} | Repo directory name | stardust-labs |
${PR_URL} | GitHub PR URL | https://github.com/... |
${MR_URL} | GitLab MR URL | https://gitlab.com/... |
${SCRIPT_DIR} | Pappardelle scripts dir | /path/to/scripts |
${VCS_LABEL} | VCS label from profile | stardust_jams |
${TRACKER_PROVIDER} | Issue tracker | linear or jira |
${VCS_PROVIDER} | VCS host | github or gitlab |
Profile vars keys also become template variables (e.g., vars: { APP_DIR: "src" } → ${APP_DIR}).
AskUserQuestion liberally — don't guess what the user wants, ask.pappardelle.yml affect everyone on the team; .pappardelle.local.yml is gitignored and personalj, k, g, i, d, o, n, e, p, q, ? — never assign thesename (string) and run (string). Optional: continue_on_error (bool), background (bool)/configure-pappardelle add a keybinding for running tests), skip the initial "what do you want to configure" question and jump directly to the relevant sectionq to quit, then re-launch with pappardelle