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
- Nopus — Deterministic prose checks for clearer coding-agent responses 239 ★
- Claude Code Leaderboard — This CLI automatically monitors your token usage and posts your stats to the leaderboard after each Claude Cod 191 ★
- Content OS — A self-improving daily content system — pulls from high-quality sources every morning and drafts posts in your 103 ★
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
Corrections
Review captured prose-correction candidates and codify approved ones into the project CLAUDE.md word-level dis
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
Agent Approval Gate
PreToolUse hook for Claude Code: blocks agent spending, account creation and fund moves, queues them for human
Related Agents
PR Commenter Batch
Posts sanitized batches of PR review comments or replies through configured review tooling. Use after review-t
Quick Fix
End-to-end bug fix agent — opens a Jira bug, writes the fix with tests, verifies build/format/tests pass, comm
Wsp Reviewer
Dedicated reviewer for wsp ticket branches and PRs. Reads the wsp-review skill's checklist, reviews the diff a