Skip to content
Back to skills

Setup

BSecurity

First-run onboarding for nyann. Creates the user config directory, collects preferences through AskUserQuestion interactive pickers, and writes ~/.claude/nyann/preferences.json. TRIGGER when the user says "set up nyann", "configure nyann", "nyann setup", "onboard me", "first time using nyann", "initialize nyann", "nyann first run", "get nyann ready", "/nyann:setup". ALSO trigger when: the user runs any nyann command for the first time and ~/.claude/nyann/preferences.json does not exist — sugg...

  • 6 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 26, 2026
developmenttypescriptpythonrustgoswiftkotlinshellbashreactnextjs

Works with

  • claude code
  • cli
  • api

Security analysis

B88/100
  • criticalPipes output to a shell interpreter

Pro shows the line behind each finding and how to fix it

Scanned May 27, 2026

npx -y skills add thettwe/nyann --skill setup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Setup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Setup
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/thettwe-setup/badge)](https://www.skillsdirectory.com/skills/thettwe-setup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: setup
description: >
  First-run onboarding for nyann. Creates the user config directory,
  collects preferences through AskUserQuestion interactive pickers, and
  writes ~/.claude/nyann/preferences.json.
  TRIGGER when the user says "set up nyann", "configure nyann",
  "nyann setup", "onboard me", "first time using nyann", "initialize
  nyann", "nyann first run", "get nyann ready", "/nyann:setup".
  ALSO trigger when: the user runs any nyann command for the first time
  and ~/.claude/nyann/preferences.json does not exist — suggest running
  setup first, but don't block them.
  Do NOT trigger on "set up this project" or "bootstrap this repo" —
  those are bootstrap-project. Do NOT trigger on "check prereqs" — that
  is check-prereqs. This skill configures nyann itself, not a repo.
---

# setup

> **CRITICAL**: This skill uses the `AskUserQuestion` tool for ALL user
> choices. **NEVER ask questions as plain text.** Every user choice goes
> through `AskUserQuestion` with the exact JSON shown below.

**Script paths:** nyann is a Claude Code plugin, NOT a CLI tool. Do NOT
search for it via `which`, `npm list`, `pip list`, or `brew list`. All
scripts are at the plugin root. Determine the plugin root from this
SKILL.md's path (`<plugin_root>/skills/setup/SKILL.md`) — the scripts
are at `<plugin_root>/bin/`. Use `bash <plugin_root>/bin/<script>` for
all commands below.

Re-runnable: if preferences already exist, show current values and
offer to update them.

## Step 1: Status + prereqs (parallel, one turn)

Run both commands **in parallel** (single tool-call turn):

- `bash <plugin_root>/bin/setup.sh --check --json`
- `bash <plugin_root>/bin/check-prereqs.sh --json`

**Do NOT show the raw JSON to the user.** Parse the `prereqs` array
and build **separate small tables by category**. Use pipe-delimited
markdown (NO box-drawing characters, NO manual padding). Shorten
version strings (e.g., `git version 2.50.1 (Apple Git-155)` → `2.50.1`).

Example output:

```
**Required**

| Tool | Status | Version |
|---|---|---|
| git | ok | 2.50.1 |
| jq | ok | 1.7.1 |
| bash | ok | 3.2.57 |

**JS / TS**

| Tool | Status | Version |
|---|---|---|
| node | ok | v25.9.0 |
| pnpm | ok | 10.13.1 |

**Python**

| Tool | Status | Version |
|---|---|---|
| python3 | ok | 3.14.4 |
| pre-commit | ok | 4.6.0 |
| uv | ok | 0.9.15 |

**Other**

| Tool | Status | Version |
|---|---|---|
| go | ok | 1.26.2 |
| cargo | missing | https://rustup.rs |
| gh | ok | 2.83.1 |
| gitleaks | ok | 8.30.1 |
| shellcheck | ok | 0.11.0 |

All hard prerequisites satisfied.
```

Group tools by: **Required** (kind=hard), **JS / TS** (node, npm,
pnpm, yarn, bun), **Python** (python3, pre-commit, uv),
**Other** (everything else). Skip empty groups. For missing tools,
show the `hint` field instead of a version.

Then display a single combined message:

- If `status == "configured"`: show current preferences as a table,
  then ask "Want to update any of these?" If no, skip to Step 4.
- If `status == "not_configured"`: show the welcome greeting, then
  the prereqs table, then continue to Step 2 immediately:

  > **Welcome to nyann!** Let's get you set up.

Continue to Step 2 — do NOT pause for prereqs.

## Step 2: Quick or custom setup

**Call `AskUserQuestion`** — this is the first and possibly only picker:

```json
{
  "questions": [
    {
      "question": "How would you like to configure nyann?",
      "header": "Setup",
      "multiSelect": false,
      "options": [
        { "label": "Quick setup (Recommended)", "description": "Use smart defaults: auto-detect stack & branching, conventional commits, GitHub CLI enabled, local docs" },
        { "label": "Customize", "description": "Choose each setting individually" }
      ]
    }
  ]
}
```

- **Quick setup** → skip to Step 3 with all defaults.
- **Customize** → continue to Step 2b.

### Step 2b: Custom preferences (only if Customize)

Check `command -v gh` first. If gh is NOT installed, skip the GitHub CLI
question and default to `--no-gh-integration`.

**Call `AskUserQuestion`** with up to 4 questions:

```json
{
  "questions": [
    {
      "question": "What stack do you work with most often?",
      "header": "Stack",
      "multiSelect": false,
      "options": [
        { "label": "Auto-detect (Recommended)", "description": "nyann inspects the repo each time and picks the right profile" },
        { "label": "Next.js", "description": "nextjs-prototype profile — React + Next.js projects" },
        { "label": "FastAPI", "description": "fastapi-service profile — Python FastAPI services" },
        { "label": "Python CLI", "description": "python-cli profile — command-line Python tools" }
      ]
    },
    {
      "question": "Which branching strategy should nyann default to?",
      "header": "Branching",
      "multiSelect": false,
      "options": [
        { "label": "Auto-detect (Recommended)", "description": "nyann picks based on project size and type" },
        { "label": "GitHub Flow", "description": "Simple: main + feature branches" },
        { "label": "GitFlow", "description": "main + develop + feature/release/hotfix branches" },
        { "label": "Trunk-based", "description": "Short-lived branches, frequent merges to main" }
      ]
    },
    {
      "question": "Which commit message format should nyann enforce?",
      "header": "Commits",
      "multiSelect": false,
      "options": [
        { "label": "Conventional Commits (Recommended)", "description": "Enforces feat:, fix:, chore: etc. in commit hooks" },
        { "label": "Custom", "description": "No commit format enforcement" }
      ]
    },
    {
      "question": "Enable GitHub CLI integration for branch protection and PR helpers?",
      "header": "GitHub CLI",
      "multiSelect": false,
      "options": [
        { "label": "Yes (Recommended)", "description": "Enable branch protection audit and PR helpers via gh" },
        { "label": "No", "description": "Skip all gh-dependent features" }
      ]
    }
  ]
}
```

Docs and team sync use defaults (`local`, `no`). These are rarely
changed and not worth an extra picker round-trip. Users who need
non-default values can re-run `/nyann:setup` or use
`/nyann:route-docs`.

## Step 3: Write preferences

### Value mapping

| Picker label | Flag | Value |
|---|---|---|
| Auto-detect (Stack) | `--default-profile` | `auto-detect` |
| Next.js | `--default-profile` | `nextjs-prototype` |
| FastAPI | `--default-profile` | `fastapi-service` |
| Python CLI | `--default-profile` | `python-cli` |
| Auto-detect (Branching) | `--branching-strategy` | `auto-detect` |
| GitHub Flow | `--branching-strategy` | `github-flow` |
| GitFlow | `--branching-strategy` | `gitflow` |
| Trunk-based | `--branching-strategy` | `trunk-based` |
| Conventional Commits (Recommended) | `--commit-format` | `conventional-commits` |
| Custom | `--commit-format` | `custom` |
| Yes (GitHub CLI) | `--gh-integration` | _(flag only)_ |
| No (GitHub CLI) | `--no-gh-integration` | _(flag only)_ |

If user picked "Other" for Stack, map to the matching profile name
(`react-vite`, `node-api`, `typescript-library`, `django-app`,
`go-service`, `rust-cli`, `swift-ios`, `kotlin-android`, `shell-cli`,
`default`).

**Use the exact values above.** Never abbreviate (`conventional-commits`
not `conventional`).

### Quick setup defaults

```
bash <plugin_root>/bin/setup.sh \
  --default-profile auto-detect \
  --branching-strategy auto-detect \
  --commit-format conventional-commits \
  --gh-integration \
  --documentation-storage local \
  --no-auto-sync-team-profiles
```

If `gh` is not installed, use `--no-gh-integration` instead.

### Custom setup

```
bash <plugin_root>/bin/setup.sh \
  --default-profile <mapped-value> \
  --branching-strategy <mapped-value> \
  --commit-format <mapped-value> \
  --gh-integration | --no-gh-integration \
  --documentation-storage local \
  --no-auto-sync-team-profiles
```

## Step 3b: Optional simulation (v1.7.0+)

After preferences are written but before showing the final summary,
ask the user if they want to see what `/nyann:bootstrap` would do
in their current project. This is a no-mutation preview.

**Call `AskUserQuestion`:**

```json
{
  "questions": [{
    "question": "Want to see what /nyann:bootstrap would do in your current repo?",
    "header": "Simulate",
    "multiSelect": false,
    "options": [
      { "label": "Yes",  "description": "Detect stack + suggest profile + plan writes; no changes" },
      { "label": "Skip", "description": "Move on to the summary" }
    ]
  }]
}
```

If the user picks **Yes**, run:

```
bash <plugin_root>/bin/setup.sh \
  --simulate "$PWD" \
  --default-profile <chosen-or-auto-detect> \
  --branching-strategy <chosen-or-auto-detect> \
  --commit-format <chosen> \
  --documentation-storage local
```

Echo the simulator's stderr verbatim — it's already formatted for
human reading. Then proceed to Step 4.

If `simulation: "partial"` appears (monorepo case), tell the user the
plan covers the base writes only and that running `/nyann:bootstrap`
will add per-workspace lint-staged + commit scopes on top.

## Step 4: Summary

Show a rich summary table and a clear next action:

```
**nyann configured!**

| Setting    | Value                |
|------------|----------------------|
| Stack      | auto-detect          |
| Branching  | auto-detect          |
| Commits    | conventional-commits |
| GitHub CLI | enabled              |
| Docs       | local                |
| Team sync  | off                  |

**Next:** run `/nyann:bootstrap` in a project to set it up.
Run `/nyann:setup` anytime to change these.
```

## When to hand off

- "Now bootstrap this repo" → `bootstrap-project` skill.
- "Check my tools" → `check-prereqs` skill.
- "Add team profiles" → `add-team-source` skill.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.