Skip to content
Back to skills

Setup

ASecurity

Prepares a project for viber - seeds .claude/viber.yml, .gitignore and the recommended .claude/settings.json permissions (asking whether to merge into or reset an existing one that differs from them), checks the gh CLI is installed, checks whether CLAUDE.md names the build and test commands, and opens the usage guide in the browser.

  • 8 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 16, 2026
ai-agentsrustbashgit

Works with

  • cli

Security analysis

A100/100

Pro scans all 10 files and shows the line behind each finding

Scanned October 16, 2026

npx -y skills add p2p2sp/viber --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: A — Skills Directory](https://www.skillsdirectory.com/api/skills/p2p2sp-setup-574a3ff9/badge)](https://www.skillsdirectory.com/skills/p2p2sp-setup-574a3ff9)

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: Prepares a project for viber - seeds .claude/viber.yml, .gitignore and the recommended .claude/settings.json permissions (asking whether to merge into or reset an existing one that differs from them), checks the gh CLI is installed, checks whether CLAUDE.md names the build and test commands, and opens the usage guide in the browser.
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/bootstrap.sh:*), Bash(${CLAUDE_PLUGIN_ROOT}/skills/setup/scripts/merge-settings.sh:*), Bash(${CLAUDE_PLUGIN_ROOT}/scripts/open-page.sh:*), Read
user-invocable: true
disable-model-invocation: true
model: haiku
---

# setup

```!
"${CLAUDE_SKILL_DIR}/scripts/bootstrap.sh"
```

The lines above are the result. They are idempotent and self-verifying: report them as they stand, never re-check them.

The settings file is the one choice. On `settings.json: present`, ask with `AskUserQuestion` (a prose question ends the turn and the script's pre-approval with it) whether to:

- merge - fill in what is missing: the template's value wins a conflict, lists only gain entries, a template entry in `permissions.ask` leaves the host's `permissions.deny`, a key the template lacks is never touched.
- reset - replace the file with the template; the old one is kept in `.temp/viber/setup/`.

On `settings.json: absent` ask nothing and run the merge form, which creates the file.

On `settings.json: matches the template` ask nothing and run neither form: that preload line is the settings line.

Otherwise run the chosen form once. Its line is carried into the close literally, never re-verified, never retried; a non-zero exit is trusted the same way:

```
"${CLAUDE_PLUGIN_ROOT}/skills/setup/scripts/merge-settings.sh" "${CLAUDE_PLUGIN_ROOT}/skills/setup/templates/settings.json"
"${CLAUDE_PLUGIN_ROOT}/skills/setup/scripts/merge-settings.sh" --reset "${CLAUDE_PLUGIN_ROOT}/skills/setup/templates/settings.json"
```

Then check the project's `CLAUDE.md` against the preload's `CLAUDE.md:` line:

- Never edit `CLAUDE.md`.
- `CLAUDE.md: present - <path>` - read that file with `Read`, fresh, never from session context. Five items count. The build, the whole test suite, a single test file and the fast command (every test but the integration and end-to-end ones) each count as named only when the file contains its literal command. The layer marker convention counts as named when the file states how a test is tagged with its layer.
- All five named - the line is `CLAUDE.md: names the build, test, single-test-file and fast commands and the layer marker convention`.
- Any item not named - the line is `CLAUDE.md: missing <the missing items> - paste this prompt:`, followed by the content of `${CLAUDE_SKILL_DIR}/templates/claude-md-prompt.txt`, read with `Read`, verbatim in a code block.
- `CLAUDE.md: missing` - read no `CLAUDE.md`; the line is `CLAUDE.md: missing - run /viber:memory, which writes the short root`, with no prompt block.

Then open the onboarding page in the user's browser, its line trusted like the settings line:

```
"${CLAUDE_PLUGIN_ROOT}/scripts/open-page.sh" "${CLAUDE_SKILL_DIR}/assets/help.html"
```

Close with one line per item: the preload's lines except its `settings.json:` and `CLAUDE.md:` ones, the settings line (the script's, or the preload's on a match), the `CLAUDE.md:` check line with its prompt block when it has one, and the page line. Never read or restate the page's content in the reply.

Files in this skill

  • SKILL.md3.4 KB
  • assets/viber-flow-en.svg33.9 KB
  • assets/viber-flow-pl.svg34.3 KB
  • scripts/bootstrap.sh19 KB
  • scripts/merge-settings.js4.5 KB
  • scripts/merge-settings.sh6.1 KB
  • templates/claude-md-prompt.txt615 B
  • templates/gitignore.txt728 B
  • templates/settings.json2.7 KB
  • templates/viber.yml5.9 KB

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.