0%
#powerup#team-workflow#onboarding#automation#guide

/powerup for Teams: Turn a Solo Grind into Onboarding Infrastructure

Published 2026-04-2311 min read

[01]Why /powerup Matters for Teams

The individual /powerup guide covered how a single developer earns XP and unlocks badges. That works for solo hackers. At a team, the same feature solves a different problem: how do you get six new hires to the same "I understand Claude Code" baseline without babysitting?

The answer is not "force everyone to type /powerup." It's treating the lesson list as the spine of your onboarding checklist, wiring progress events to Slack and dashboards, and using CI to gate privileges on lesson completion. /powerup becomes the mechanism; your team workflow becomes the beneficiary.

This guide covers the gap between solo and team use, an onboarding pipeline template, five concrete integration patterns, and the pitfalls that make gamification backfire at scale.

[02]The Gap Between Solo and Team Use

Solo /powerup is a self-guided grind: you open a session, run /powerup, complete lessons at your own pace, and the XP accumulates in your local state. Three things break the moment a team tries to scale this:

  • Visibility: you cannot tell whether the new hire is actually learning or just clicking through. Progress lives on their laptop only.
  • Consistency: without a shared "must-complete" list, each dev skips the lessons most relevant to their gaps, which is exactly the ones they need.
  • Integration: lesson completion does not trigger anything — no Slack ping, no CI gate, no Notion checkbox. The value ends at "XP increased."

Solving these three turns /powerup from a feature into infrastructure. The ingredients are the hook system (from the hooks cookbook), the file-based settings in .claude/, and a small amount of glue to your existing team tools.

[03]The Onboarding Pipeline

A concrete 7-day pipeline that uses /powerup as the backbone:

Day 1: Environment Setup

New hire clones the repo. Your .claude/settings.json already has a permissions allowlist, a type-check PreToolUse hook, and a Slack notification hook. First session runs /powerup, unlocking lessons 1-3 (basic session, slash commands, reading a file).

Day 2-3: Core Workflow Fluency

Milestone lessons: CLAUDE.md editing, using @ file attachment, running a multi-step plan. These three complete prove the hire can drive a Claude session without pair-programming.

Day 4-5: Team Conventions

Milestone lessons: following the team permission config, using a custom slash command from .claude/commands/, invoking the /review command before pushing. These tie /powerup to your team's actual workflow, not a generic tutorial.

Day 6-7: Output Check

The hire completes a scoped task with Claude Code, uses /review before their PR, and their progress (via Stop hook) lands in a shared Slack channel. Their manager can tell if they are stuck without asking.

The list of required lessons lives in one place: .claude/onboarding.yml, checked against /powerup status output. When all required lessons are complete, the hire graduates.

[04]Progress Tracking at Team Scale

The primitive: every /powerup lesson completion goes through Claude Code's state. Surface it to the team via a Stop hook that posts to a webhook.

// .claude/settings.json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          { "type": "command", "command": "sh .claude/hooks/powerup-sync.sh" }
        ]
      }
    ]
  }
}
#!/bin/sh
# .claude/hooks/powerup-sync.sh
status=$(claude /powerup status --json 2>/dev/null || exit 0)
completed=$(echo "$status" | jq -r '.completedLessons | length')
total=$(echo "$status" | jq -r '.totalLessons')
user=$(git config user.name 2>/dev/null || echo "unknown")

# Post to internal dashboard webhook
curl -sS -X POST "$TEAM_DASHBOARD_URL" \
  -H "Content-Type: application/json" \
  -d "{\"user\":\"$user\",\"completed\":$completed,\"total\":$total}" \
  > /dev/null 2>&1 &

The & at the end forks it to the background — Claude's session never waits on the network call. Dashboard side: a 10-line Cloudflare Worker or Vercel function that writes to a KV store, keyed by user.

For a lightweight alternative, point the webhook at a Slack incoming webhook and skip the dashboard entirely. Post a message to #onboarding like "alice: 12/15 lessons (+3 today)."

[05]Five Integration Patterns

1. Slack completion ping

PostToolUse hook that watches for /powerup runs and announces completion:

#!/bin/sh
# .claude/hooks/powerup-slack.sh
if [ "$(jq -r '.tool_input.name // empty')" = "powerup" ]; then
  user=$(git config user.name)
  curl -s -X POST "$SLACK_WEBHOOK" \
    -H "Content-Type: application/json" \
    -d "{\"text\":\"🎮 $user just ran /powerup\"}"
fi

Quick team ambient awareness without surveillance.

2. GitHub Action: gate PR on onboarding

Don't let a new hire merge before core lessons are done:

# .github/workflows/onboarding-gate.yml
on: pull_request
jobs:
  check-onboarding:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check author completed core /powerup lessons
        run: node scripts/check-onboarding.js --author "$" --required claude-md,plan-mode,review-command

Require the hire to link their dashboard status (from Recipe above) or store per-user JSON in a dedicated repo the script reads.

3. CI announcement of new team member

When git log finds a first-time committer, check their /powerup progress and post to Slack. Combines naturally with the dashboard.

4. Notion dashboard sync

Nightly cron job reads dashboard KV → updates Notion database. Managers see progress without opening a new tool. Use Notion's API with a service account. 40-line Python script.

5. Pair-up queue

When someone completes lesson 5 (plan mode), auto-add them to the "ready to pair-review" roster. When another dev is stuck, a slash command /find-pair pulls from the roster. Turns /powerup into a team mentoring triage, not just XP.

[06]Five Team Templates

1. Minimal onboarding.yml

# .claude/onboarding.yml (not read by Claude directly —
# consumed by your check-onboarding.js script)
required_lessons:
  week_1:
    - first-session
    - slash-commands
    - read-file
  week_2:
    - claude-md
    - file-attachment
    - plan-mode
graduation:
  required: 6
  grace_period_days: 14

2. Shared permission template

In .claude/settings.json, provide a team baseline permission set so new hires don't reinvent what's safe:

{
  "permissions": {
    "allow": ["Bash(npm run *)", "Bash(git status)", "Bash(git diff)",
              "Edit", "Write", "Read", "Grep", "Glob"],
    "deny":  ["Bash(git push --force*)", "Bash(rm -rf *)", "Bash(sudo *)"]
  }
}

3. Onboarding slash command

.claude/commands/onboarding.md:

---
description: Show what's left on the new-hire checklist
allowed-tools: Bash(claude:*), Read
---

!`claude /powerup status --json | jq -r '.completedLessons[].id'`

Compare the above to .claude/onboarding.yml. List what's missing.

4. Weekly /powerup leaderboard Slack bot

Cron that reads dashboard KV every Monday 9am, posts the completion delta for the week. Keep it celebratory, never shaming.

5. Graduation automation

GitHub Action that, on completing the required lesson set, automatically opens a PR to add the hire to .github/CODEOWNERS. Makes graduation material, not just symbolic.

[07]Pitfalls to Avoid

Gamification can backfire. Three patterns that shred trust if you adopt them:

  • Public shaming leaderboards. Showing who is behind publicly punishes the hire your onboarding failed. Keep the leaderboard to self-celebration (deltas, personal bests), not rankings.
  • Blocking everything on lesson completion. Using /powerup as a strict CI gate on every PR, not just onboarding PRs, creates learned helplessness. Gate onboarding, not daily work.
  • Over-fitting lesson XP to compensation. Tying /powerup completion to reviews or pay turns learning into a checkbox. Keep XP in the intrinsic-motivation zone.

The rule: /powerup is a scaffold for onboarding, not a ranking for ongoing work. Drop the scaffold when the hire doesn't need it.

[08]Next Steps

You have the team scaffolding. Go deeper on the individual pieces:

Built a team /powerup pipeline worth sharing? Start from the checker and drop notes in the comments.

[09]Frequently Asked Questions

Does /powerup have an API for reading progress programmatically?

Yes, via claude /powerup status --json as of Claude Code 2.1.97+. Output includes completedLessons array, totalLessons, xp, and timestamps. Parse with jq in any hook or script.

Can we disable /powerup for existing senior devs who don't need it?

Yes — put "powerup": { "enabled": false } in a senior dev's .claude/settings.local.json. The gamification UI disappears, but they still see /powerup status on demand if they want it.

How do we handle hires who hit a lesson that fails for environment reasons?

The /powerup reset <lesson-id> command clears a specific lesson's completion so they can retry. For flaky lessons, your onboarding pipeline should have an "acknowledged" alternative — a manual sign-off in lieu of automated lesson completion.

Is there a multi-tenant /powerup for agencies or consultancies with many clients?

Not natively. Each ~/.claude/ directory is single-user. For agencies, use per-project .claude/settings.json to define a client-specific lesson pathway via your own scripts, not the built-in XP system. Report with the dashboard approach above.

What about privacy — is our lesson completion data being sent to Anthropic?

/powerup state is local-only by default. Your Stop hook pushing progress to your own webhook is opt-in and under your control. Anthropic does not collect /powerup telemetry per their published privacy policy. Verify with claude --verbose during a /powerup run to confirm no external calls you didn't configure.

// COMMENTS

github_discussions.sh

Sign in with GitHub to leave a comment.

Ready to find your buddy?

CHECK YOUR BUDDY

Built by the community. Not affiliated with Anthropic.

All computation is local. No data is collected or transmitted.

> EOF