К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot

printing-press-score — скилл для Claude Code: установка

Скилл оценивает сгенерированный CLI по планке Steinberger и сопоставляет два CLI. Нужен для проверки результата cli-printing-press.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mvanhorn/cli-printing-press --skill printing-press-score -a claude-code
Открыть на GitHub

Что делает printing-press-score

printing-press-score запускает повторную оценку текущего CLI, проверяет CLI по имени или пути и сравнивает два CLI. Вход свободный: скилл различает режимы по числу аргументов после команды /printing-press-score, а при неоднозначном выборе задаёт вопрос через AskUserQuestion.

Перед работой скилл проверяет бинарник cli-printing-press, определяет его абсолютный путь и сверяет версию с минимумом 4.0.0. Для установки бинарника нужен Go 1.26.10 или новее; сам cli-printing-press должен находиться в PATH. Это повод проверить окружение до запуска: без бинарника настройка останавливается.

Какие задачи решает

  • оценить сгенерированный CLI по планке Steinberger
  • повторно проверить текущий CLI
  • найти CLI по имени или пути
  • сопоставить два CLI рядом

Примеры запросов агенту

  • `/printing-press-score`
  • `/printing-press-score notion-pp-cli-4`
  • `/printing-press-score notion-pp-cli-4 vs notion-pp-cli-2`

Как установить printing-press-score

1Через Skills CLI (Vercel)

npx skills add mvanhorn/cli-printing-press --skill printing-press-score -a claude-code

2Вручную: положить файлы

~/.claude/skills/printing-press-score/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/printing-press-score/

Из того же набора7

Весь набор →
printing-press mvanhorn Автоматизирует создание готовых CLI-утилит на Go по спецификациям OpenAPI, HAR или Postman через цепочку из 21 этапа проверки и сборки. Claude Code CX Codex Cursor +1 7 600установок printing-press-publish mvanhorn Публикует сгенерированный локальный CLI в mvanhorn/printing-press-library через запрос на слияние. При блокировке тестирования скилл останавливается и сообщает причину. Claude Code CX Codex Cursor +1 6 800установок printing-press-retro mvanhorn Скилл проводит ретроспективу после сборки CLI в Printing Press. Он находит дефекты генератора и оформляет отчёт с черновиками задач для GitHub. Claude Code CX Codex Cursor +1 6 500установок printing-press-output-review mvanhorn Внутренний скилл-рецензент для printed CLI. Ловит правдоподобные баги в выводе команд, которые не видят правила и живые проверки. Claude Code CX Codex Cursor +1 6 400установок printing-press-reprint mvanhorn Перегенерирует CLI с нуля в Printing Press с сохранением прошлых правок и контекста исследований. Пригодится при обновлении генератора или расширении MCP. Claude Code CX Codex Cursor +1 6 400установок printing-press-amend mvanhorn Дорабатывает опубликованные CLI-утилиты по логам сессии или запросам пользователя, убирает конфиденциальные данные и отправляет пулл-реквест. Claude Code CX Codex Cursor +1 5 500установок

Похожие

test-driven-development Hermes Agent (adapted from obra/superpowers) Скилл для встраивания TDD в рабочий процесс: тест сначала, потом код. Заставляет видеть падение теста, прежде чем писать реализацию, что снижает вероятность багов и облегчает рефакторинг. Claude Code CX Codex Cursor +1 477установок dfm earthtojake Проверяет детали на технологичность для гибки листового металла, обработки на ЧПУ и литья пластмасс под давлением. Помогает найти ошибки до отправки на производство. Claude Code CX Codex Cursor +1 2 000установок systematic-debugging Hermes Agent (adapted from obra/superpowers) Скилл ведёт от воспроизводимого симптома к корневой причине через четыре фазы. Пригодится для ошибок тестов, сборки, интеграций и неожиданного поведения. Claude Code CX Codex Cursor +1 470установок python-debugpy openclaw Помогает отлаживать Python-код через pdb и удалённое подключение debugpy. Пригодится при падении тестов, мутациях состояния и отладке фоновых процессов. Claude Code CX Codex Cursor +1 332установок ce-riffrec-feedback-analysis EveryInc Превращает записанный продуктовый фидбек в структурированные баги и требования. Берёт видео, скрины или заметки из Riffrec и выдаёт готовый отчёт для других агентов. Claude Code CX Codex Cursor +1 2 800установок requesting-code-review Hermes Agent (adapted from obra/superpowers + MorAlekss) Конвейер проверки кода перед коммитом: статический аудит безопасности, контроль регрессий по тестам, запуск субагента-ревьюера и цикл автоисправления. Claude Code CX Codex Cursor +1 467установок improve-codebase-architecture Matt Pocock Скилл ищет архитектурные узкие места в кодовой базе и показывает варианты углубления модулей в HTML-отчёте. Подойдёт для ревью перед рефакторингом. Claude Code 1 163 035установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. Claude Code CX Codex Cursor +1 673 100установок

Вопросы о printing-press-score

Как установить printing-press-score в Claude Code?

Выполните npx skills add mvanhorn/cli-printing-press --skill printing-press-score -a claude-code, затем повторите эту команду и откройте файл ~/.claude/skills/printing-press-score/SKILL.md.

Что делает printing-press-score?

Скилл оценивает сгенерированный CLI по планке Steinberger. Он также умеет повторно оценивать текущий CLI, принимать имя или путь и сравнивать два CLI.

Что нужно подготовить для работы printing-press-score?

Нужны Go 1.26.10 или новее и бинарник cli-printing-press в PATH. Скилл проверяет, что версия бинарника не ниже 4.0.0.

Исходный текст

SKILL.md · MIT
---
name: printing-press-score
description: Score a generated CLI against the Steinberger bar, compare two CLIs side-by-side
version: 0.1.0
min-binary-version: "4.0.0"
allowed-tools:
  - Bash
  - Read
  - Glob
  - Grep
  - AskUserQuestion
created_by: user
---

# /printing-press-score

Score generated CLIs against the Steinberger bar. Supports rescoring, scoring by name/path, and comparing two CLIs.

## Quick Start

```
/printing-press-score                              # rescore current CLI
/printing-press-score notion-pp-cli-4              # score by name
/printing-press-score ~/my-cli                     # score by path
/printing-press-score notion-pp-cli-4 vs notion-pp-cli-2  # compare two
```

## Prerequisites

- Go 1.26.10 or newer installed
- `cli-printing-press` binary on PATH (install with `go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest`)

## Step 0: Setup

Before any other commands, run the setup contract to verify the cli-printing-press binary is on PATH and initialize scope variables:

<!-- PRESS_SETUP_CONTRACT_START -->
```bash
# min-binary-version: 4.0.0

# Derive scope first — needed for local build detection
_scope_dir="$(git rev-parse --show-toplevel 2>/dev/null || echo "$PWD")"
_scope_dir="$(cd "$_scope_dir" && pwd -P)"

# Prefer local build when running from inside the printing-press repo.
_press_repo=false
if [ -x "$_scope_dir/cli-printing-press" ] && [ -d "$_scope_dir/cmd/cli-printing-press" ]; then
  _press_repo=true
  export PATH="$_scope_dir:$PATH"
  echo "Using local build: $_scope_dir/cli-printing-press"
elif ! command -v cli-printing-press >/dev/null 2>&1; then
  if [ -x "$HOME/go/bin/cli-printing-press" ]; then
    echo "cli-printing-press found at ~/go/bin/cli-printing-press but not on PATH."
    echo "Add GOPATH/bin to your PATH:  export PATH=\"\$HOME/go/bin:\$PATH\""
  else
    echo "cli-printing-press binary not found."
    echo "Install with:  go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest"
  fi
  return 1 2>/dev/null || exit 1
fi

# Resolve and emit the absolute path the agent must use for every later
# `cli-printing-press` invocation. `export PATH` above only affects this one
# Bash tool call; subsequent calls open a fresh shell and resolve bare
# `cli-printing-press` against the user's default PATH, where a stale global
# can silently shadow the local build. The agent captures this marker and
# substitutes the absolute path into every later invocation.
if [ "$_press_repo" = "true" ]; then
  PRINTING_PRESS_BIN="$_scope_dir/cli-printing-press"
else
  PRINTING_PRESS_BIN="$(command -v cli-printing-press 2>/dev/null || true)"
fi
echo "PRINTING_PRESS_BIN=$PRINTING_PRESS_BIN"

PRESS_BASE="$(basename "$_scope_dir" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9_-]/-/g; s/^-+//; s/-+$//')"
if [ -z "$PRESS_BASE" ]; then
  PRESS_BASE="workspace"
fi

PRESS_SCOPE="$PRESS_BASE-$(printf '%s' "$_scope_dir" | shasum -a 256 | cut -c1-8)"
PRESS_HOME="${PRINTING_PRESS_HOME:-$HOME/printing-press}"
PRESS_RUNSTATE="$PRESS_HOME/.runstate/$PRESS_SCOPE"
PRESS_LIBRARY="$PRESS_HOME/library"
PRESS_MANUSCRIPTS="$PRESS_HOME/manuscripts"
PRESS_CURRENT="$PRESS_RUNSTATE/current"

mkdir -p "$PRESS_RUNSTATE" "$PRESS_LIBRARY" "$PRESS_MANUSCRIPTS" "$PRESS_CURRENT"
```
<!-- PRESS_SETUP_CONTRACT_END -->

After running the setup contract, capture the `PRINTING_PRESS_BIN=<abs-path>` line from stdout. **Every subsequent `cli-printing-press ...` invocation in this skill must use that absolute path** (substitute the value, not the literal `$PRINTING_PRESS_BIN` token) — `export PATH` above only affects the single Bash tool call it runs in, so later calls open a fresh shell where bare `cli-printing-press` resolves against the user's default `PATH` and a stale global can shadow the local build.

After capturing the binary path, check binary version compatibility. Read the `min-binary-version` field from this skill's YAML frontmatter. Run `<PRINTING_PRESS_BIN> version --json` and parse the version from the output. Compare it to `min-binary-version` using semver rules. If the installed binary is older than the minimum, stop immediately and tell the user: "cli-printing-press binary vX.Y.Z is older than the minimum required vA.B.C. Run `go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest` to update."

Current-run state is resolved from `$PRESS_RUNSTATE`. Published CLIs are resolved from `$PRESS_LIBRARY`. Archived manuscripts are resolved from `$PRESS_MANUSCRIPTS`.

## Step 1: Parse Arguments

Read the user's input after `/printing-press-score`. The input is **free-form** — interpret intent, don't enforce syntax.

**Noise words to strip:** `compare`, `vs`, `versus`, `and`, `against`, `with`, `to`

After stripping noise words, count the remaining tokens:

- **0 tokens** → Rescore Current mode
- **1 token** → Score Single mode
- **2 tokens** → Compare mode

## Step 2: Resolve CLI Directories

For each CLI identifier, resolve it to a directory path:

### If the token contains `/` or `.`
Treat it as a path (absolute or relative). Verify the directory exists.

### If the token is a plain name
Try these locations in order:
1. `$PRESS_LIBRARY/<name>/` — exact match
2. `$PRESS_LIBRARY/<name>-pp-cli/` — with -pp-cli suffix
3. If neither exists, Glob `$PRESS_LIBRARY/<name>-pp-cli*`
4. If exactly one glob match exists and is a directory, use it
5. If multiple glob matches exist, present a numbered menu using AskUserQuestion

If neither exists, scan current-run and archived state:
6. Use Glob to find `$PRESS_RUNSTATE/runs/*/state.json` files
7. Read each, look for an `output_dir` or `working_dir` value whose basename contains the name
8. If found and the directory exists, use it

If nothing resolves, report the error: "Could not find CLI '<name>'. Provide a path or check the name."

### Rescore Current (0 tokens)
1. Use Glob to find all `$PRESS_CURRENT/*.json` files
2. Read each to get `api_name`, `state_path`, and `working_dir`
3. Filter to those whose `working_dir` actually exists on disk
4. If none are found, Glob `$PRESS_LIBRARY/*-pp-cli*` and use those directories instead
5. If exactly one → use it automatically
6. If multiple → present a numbered menu using AskUserQuestion:
   ```
   Multiple CLIs found. Which one to score?
   1. stripe-pp-cli ($PRESS_LIBRARY/stripe-pp-cli)
   2. notion-pp-cli ($PRESS_LIBRARY/notion-pp-cli)
   3. linear-pp-cli ($PRESS_LIBRARY/linear-pp-cli)
   ```
7. If none found → report: "No generated CLIs found. Provide a name or path."

## Step 3: Find Spec for Tier 2 Scoring

For each resolved CLI directory, find the OpenAPI spec:

1. Check `<cli-dir>/spec.json` — the pipeline converts YAML specs to JSON during generation
2. If not found, scan `$PRESS_RUNSTATE/runs/*/state.json` files for one matching this CLI's directory. Read its `spec_path` field. If that file exists on disk, use it.
3. If no spec found, **proceed without `--spec`**. Note to the user: "No spec found — spec-derived dimensions will be marked N/A and omitted from the denominator. Provide a spec path for full scoring."

## Step 4: Run Scorecard

### Single Score Mode

Run the scorecard command:

```bash
cli-printing-press scorecard --dir <resolved-path> --json
```

If a spec was found, add `--spec <spec-path>`.

Parse the JSON output. The structure is:

```json
{
  "api_name": "...",
  "steinberger": {
    "output_modes": 8,
    "auth": 7,
    "error_handling": 6,
    "terminal_ux": 9,
    "readme": 5,
    "doctor": 10,
    "agent_native": 7,
    "local_cache": 4,
    "breadth": 7,
    "vision": 6,
    "workflows": 3,
    "insight": 5,
    "path_validity": 0,
    "auth_protocol": 0,
    "data_pipeline_integrity": 7,
    "sync_correctness": 6,
    "type_fidelity": 4,
    "dead_code": 3,
    "total": 72,
    "percentage": 72
  },
  "overall_grade": "B",
  "gap_report": ["..."],
  "unscored_dimensions": ["path_validity", "auth_protocol"]
}
```

If `unscored_dimensions` is present, those dimensions should be rendered as `N/A`, not `0/x`, and should be described as omitted from the denominator rather than as fixable CLI defects. For backward compatibility, JSON still encodes the numeric fields as `0`; consumers must use `unscored_dimensions` to distinguish `N/A` from a real zero.

Learn-loop credit is static-behavioral, never presence-based: the scorecard credits `teach`/`recall`/`learnings` registration on the root command and non-empty entity lookup seeds (or the spec's recorded no-entities escape). The learn loop is default-on, so `internal/learn/` existing earns nothing; when explaining a learn gap, point at missing seeds or unregistered commands, not missing files. Execution proof (verify matrix, `learnings stats`) belongs to verify and dogfood; the scorecard runs no binaries.

### Compare Mode

Run **both** scorecard commands in **parallel** using two simultaneous Bash tool calls:

```bash
# Call 1:
cli-printing-press scorecard --dir <path1> --spec <spec1> --json

# Call 2:
cli-printing-press scorecard --dir <path2> --spec <spec2> --json
```

Parse both JSON outputs.

## Step 5: Render Output

### Single Score Table

Render a rich markdown table. Note: Tier 1 dimensions are all /10. Tier 2 dimensions are /10 except TypeFidelity and DeadCode which are /5.

```
Scorecard: <api_name>

Infrastructure (Tier 1)
| Dimension      | Score |
|----------------|-------|
| Output Modes   | 8/10  |
| Auth           | 7/10  |
| Error Handling | 6/10  |
| Terminal UX    | 9/10  |
| README         | 5/10  |
| Doctor         | 10/10 |
| Agent Native   | 7/10  |
| Local Cache    | 4/10  |
| Breadth        | 7/10  |
| Vision         | 6/10  |
| Workflows      | 3/10  |
| Insight        | 5/10  |

Domain Correctness (Tier 2)
| Dimension               | Score |
|--------------------------|-------|
| Path Validity            | 9/10  |
| Auth Protocol            | 8/10  |
| Data Pipeline Integrity  | 7/10  |
| Sync Correctness         | 6/10  |
| Type Fidelity            | 4/5   |
| Dead Code                | 3/5   |

**Total: 72/100 — Grade B**
```

If `gap_report` is non-empty, list the gaps:

```
Gaps:
- <gap 1>
- <gap 2>
```

If `unscored_dimensions` is non-empty, add a note after the table:

```
Note: path_validity, auth_protocol were unscored and omitted from the denominator. Provide a spec path for full scoring.
```

### Compare Table

Render a side-by-side table with a delta column. Show the first CLI name and second CLI name as column headers. Calculate delta as (CLI 1 score - CLI 2 score). Show `+N` for positive, `-N` for negative, `—` for zero.

```
Scorecard Comparison: <name1> vs <name2>

Infrastructure (Tier 1)
| Dimension      | <name1> | <name2> | Delta |
|----------------|---------|---------|-------|
| Output Modes   | 8/10    | 5/10    | +3    |
| Auth           | 7/10    | 7/10    | —     |
| ...            |         |         |       |

Domain Correctness (Tier 2)
| Dimension               | <name1> | <name2> | Delta |
|--------------------------|---------|---------|-------|
| Path Validity            | 9/10    | 6/10    | +3    |
| ...                      |         |         |       |

| **Total**  | **72/100 (B)** | **56/100 (C)** | **+16** |
```

## Error Handling

- If the cli-printing-press binary is not on PATH → show install instructions: `go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest`
- If the scorecard command fails → report the error with the full stderr output
- If a CLI directory doesn't exist → report which name couldn't be resolved
- If JSON parsing fails → show the raw output and report the parsing error

© mvanhorn · MIT · mvanhorn/cli-printing-press

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой