Skip to content
Back to skills

Activate

ASecurity

One-shot idempotent anti-hall setup. Checks statusline installation, reports model-routing state, writes a sentinel so it doesn't repeat. Use when the user says "activate anti-hall", "set up anti-hall", "run first-time setup", or "anti-hall activate". NOT auto-run — user-invoked only.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 2, 2026
ai-agentsnodegitapi

Works with

  • claude code
  • api
  • mcp

Security analysis

A100/100

Scanned October 3, 2026

npx -y skills add talas9/anti-hall --skill activate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Activate?

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

Security grade badge for Activate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/talas9-activate/badge)](https://www.skillsdirectory.com/skills/talas9-activate)

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: activate
description: One-shot idempotent anti-hall setup. Checks statusline installation, reports model-routing state, writes a sentinel so it doesn't repeat. Use when the user says "activate anti-hall", "set up anti-hall", "run first-time setup", or "anti-hall activate". NOT auto-run — user-invoked only.
---

# anti-hall:activate

One-shot, idempotent first-time setup for anti-hall. Run this once after installing the
plugin. It is **never** auto-invoked — always user-triggered. Re-running is safe (idempotent).

## What it does

1. **Statusline check** — reads `~/.claude/settings.json` for an existing `statusLine`.
   - If none: installs the anti-hall statusline at user scope (delegates to the
     `install-statusline.js` script, same as `/anti-hall:install-statusline --user`).
   - If one exists (conflict): reports the existing command and offers two choices:
     - Accept: the existing line becomes **line 1** (anti-hall wraps it) — run the
       installer and it will auto-wrap the current value.
     - Skip: keep the existing statusline and install anti-hall at **project scope**
       instead (`--project` into `.claude/settings.local.json`).

2. **Model-routing state** — strict mode is now the **default** (v0.35.0+). No action
   needed. Reports: `ANTIHALL_MODEL_ROUTING` is unset (strict) or set to `advisory`
   (opt-out). Strict blocks omitted-model mechanical spawns unconditionally.
   To opt out: set `ANTIHALL_MODEL_ROUTING=advisory` in the project's
   `.claude/settings.json` env block.

3. **Sentinel write** — writes `~/.anti-hall/activated.json` with the activation
   timestamp and installed version so future runs report "already activated" and exit 0
   immediately. The sentinel is advisory — resetting it does not change any real config.

4. **Restart reminder** — prints a single "restart Claude Code to apply" note when the
   statusline was changed; skipped if already installed or no statusline change was made.

## Steps

1. **Check sentinel.** If `~/.anti-hall/activated.json` exists and is valid JSON,
   report the previous activation date + installed version and exit 0 (idempotent).

2. **Check statusline.** Delegate a subagent to read `~/.claude/settings.json` and
   report the current `statusLine` value (if any).

   - **No existing statusLine:** delegate a subagent to run:
     ```
     node "${CLAUDE_PLUGIN_ROOT}/statusline/install-statusline.js" --user
     ```
     Report its stdout verbatim. Set `statusline_changed = true`.

   - **Existing statusLine present:** report it to the user and ask:
     > "anti-hall can wrap this as line 1 (run the installer — it auto-wraps). Or
     > install anti-hall at project scope only (settings.local.json, this repo). Or
     > skip statusline setup entirely. Which do you prefer?"
     
     Depending on user's choice, delegate the appropriate installer invocation.
     If user says "wrap" or "install globally": run `--user`. If "project scope": run
     `--project`. If "skip": skip — set `statusline_changed = false`.

3. **Report model-routing.** No action required. Print:
   > "Model-routing: STRICT (default, v0.35.0+). Omitted-model mechanical spawns are
   > blocked. Set ANTIHALL_MODEL_ROUTING=advisory in your project's .claude/settings.json
   > env block to opt out."
   
   If `ANTIHALL_MODEL_ROUTING=advisory` is already set in the environment, print:
   > "Model-routing: ADVISORY (opted out). Set ANTIHALL_MODEL_ROUTING=advisory detected.
   > Remove it to restore strict-default blocking."

4. **Write sentinel.** Delegate a subagent to run:
   ```js
   const os = require('os');
   const fs = require('fs');
   const path = require('path');
   const dir = path.join(os.homedir(), '.anti-hall');
   fs.mkdirSync(dir, { recursive: true });
   fs.writeFileSync(
     path.join(dir, 'activated.json'),
     JSON.stringify({ activatedAt: new Date().toISOString(), version: '0.35.0' }, null, 2) + '\n'
   );
   console.log('Sentinel written.');
   ```

5. **Restart reminder.** If `statusline_changed = true`:
   > "**Restart Claude Code** (close and reopen) for the statusline to take effect.
   > statusLine is read only at startup — there is no hot-reload."

## What stays opt-in (unchanged)

These are NOT touched by activate — they remain opt-in and require explicit user action:

| Feature | How to enable |
|---------|--------------|
| `mcp-reaper` companion | `node plugins/anti-hall/companion/install-reaper.js` |
| `ANTIHALL_API_GUARD_THIRDPARTY` | Set env var to `1` in project settings |
| `ANTIHALL_SHIPIT_GATE` | Set env var to `1` in project settings |
| `ANTIHALL_MERGE_GATE` | Set env var to `1` in project settings |
| Semantic judge | Set `jev.semanticJudge` to true (or `ANTIHALL_SEMANTIC_JUDGE=1`) + store `anthropic_api_key` in the plugin options |

## Important constraints

- **Never auto-run as a SessionStart side-effect.** This skill is user-invoked only.
  The always-on hooks (git-guard, api-guard, command-guard, model-routing-guard, etc.)
  are active from the moment the plugin is installed — no activation step needed for
  them. This skill only covers the statusline (which requires writing settings) and
  first-run orientation.
- **Delegate all file I/O to subagents.** The coordinator (main thread) must not run
  the installer directly — `command-guard` blocks heavy commands inline.
- **Reuse install-statusline.js** — do not reimplement its logic. The installer
  handles precedence checks, backup, gitignore, and the "already installed" exit-0
  case itself.

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.