Ticketvoice — Development skill for Claude Code
A Claude Code PreToolUse hook that gates ticket prose through cope and basanite before it posts, with a word budget as backstop.
How to install Ticketvoice
This entry records only its repository, not the path inside it, so there is no
exact command to give. Open justinstimatze/ticketvoice and copy the folder into
~/.claude/skills/, or the file into ~/.claude/agents/.
What Ticketvoice does
A Claude Code PreToolUse hook that gates ticket prose through cope and basanite before it posts, with a word budget as backstop.
Alternatives in Development
- Brainstorm Requirements — Use this prompt to systematically brainstorm and refine initial requirements through structured discovery and 85 ★
- Burn — SLO burn rate — multi-window alerting that catches budget exhaustion before it happens 83 ★
- Fire 1d Discuss — Gather implementation context through adaptive questioning before planning 77 ★
README
ticketvoice
[](https://github.com/justinstimatze/ticketvoice/actions/workflows/ci.yml)
A Claude Code `PreToolUse` hook that gates ticket prose through [cope](https://github.com/justinstimatze/cope) (voicing and structure) and [basanite](https://github.com/justinstimatze/basanite) (vocabulary tics) before it posts. Behind both sits a word budget — 150 words for an issue or PR description, 120 for a comment, fenced code excluded — as a narrower backstop: neither cope nor basanite is built to score sheer length, independent of register or vocabulary. Any of the checks flagging a body returns `permissionDecision: "deny"` — the reason goes to Claude, not a human, so it rewrites and retries on its own instead of paging anyone. No prompt when a body clears every check — on Linear it still tags the body as agent-authored before letting it through; see [Agent tag](#agent-tag).
Two more checks, both first-party (built here, not delegated to a sibling binary): an issue description must state its user-facing impact in plain language — see [Impact line](#impact-line) — and any ticket-id, file:line, or commit SHA a ticket cites gets verified against Linear, the local filesystem, and the local git repo, not trusted at face value — see [Ground-truth citations](#ground-truth-citations).
Covers two surfaces: Linear, via its MCP tools' structured `description`/`body` fields — issues, comments, and PR-review-thread ("diff") comments and reviews — and GitHub issues/PRs, via [`gh-write`](#gh-write-github-issues-and-prs) — a thin wrapper this repo also builds, which is the only way this hook can see a GitHub body at all (see that section for why a plain `gh issue create --body "..."` can't be gated).
Deliberately not covered on the Linear side: project/initiative descriptions, status updates, documents, milestones, release notes. Same reasoning as GitHub's release notes below — a different genre
Related Skills
Pursue
Hand Kimi an objective to pursue AUTONOMOUSLY across multiple turns (experimental goal mode), bounded by a har
Plugin Better Tools
Better Tools is a Codex plugin that observes supported tool calls through a PreToolUse hook and turns that loc
Claude Code Permissions Hook
A PreToolUse hook for Claude Code for more granular permission controls
Overleaf Sync Now
Stops Claude Code and Codex CLI from silently overwriting your Overleaf web edits with a stale local Dropbox c
Freeze
Freeze files matching a pattern — blocks Edit/Write to matched files via a session-scoped PreToolUse hook. Use
Narthex
Prompt-injection defenses for Claude Code. A PreToolUse Bash hook blocks compositional credential-exfiltration
Related Agents
PR Commenter Batch
Posts sanitized batches of PR review comments or replies through configured review tooling. Use after review-t
Mf Editor
motion-forge social editor. Reads a word-timed transcript (words.json) and a goal (platform, length, tone) and
Ghost Writer
Write compelling, human-sounding content — landing pages, marketing copy, user docs, social media, email seque