blurt: Skill for Claude Code

.claude/skills/project-guardrails/SKILL.md

project-guardrails is a skill for Claude Code from AssemblyAI/blurt. It costs 49 tokens per session (3,743 once invoked), scanned A, original, MIT.

A set of settled engineering rules for Blurt that records architectural decisions the project should not accidentally reintroduce. It covers code, audio capture, builds, and tests, with some rules checked automatically.

In plain words
What is it for?
Load it before changing Blurt's engine, app, build, or test code so new work follows the project's established constraints.
Why use it?
It prevents previously rejected approaches from returning during later changes. This reduces repeated design debates and catches violations through the project's health checks.

Skill for Claude Code

Written for Claude Code: user-invocable in frontmatter. Also seen: mentions AGENTS.md.

This is AssemblyAI/blurt's own configuration. It tells Claude Code how to work on blurt itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything blurt configures →

Reuse

Borrowing it

Nothing to install: this file belongs to AssemblyAI/blurt. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/AssemblyAI/blurt/main/.claude/skills/project-guardrails/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/AssemblyAI/blurt

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for project-guardrails

README.md
[![agentmods](https://agentmods.dev/badge/skills/assemblyai/blurt/project-guardrails/github.svg)](https://agentmods.dev/skills/assemblyai/blurt/project-guardrails)
Your own site
<a href="https://agentmods.dev/skills/assemblyai/blurt/project-guardrails"><img src="https://agentmods.dev/badge/skills/assemblyai/blurt/project-guardrails/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for project-guardrails

Your own site · 80×15
<a href="https://agentmods.dev/skills/assemblyai/blurt/project-guardrails"><img src="https://agentmods.dev/badge/skills/assemblyai/blurt/project-guardrails.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 49 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,743 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00049 $0.03743
Opus 5.5 $0.00020 $0.01497
Sonnet 5.5 $0.00010 $0.00749
Haiku 4.5 $0.00005 $0.00374

Measured today against content hash 10b0eedafde4, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

project-guardrails scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/project-guardrails/SKILL.md · 219 lines

How it starts

The opening of the file, as written. The whole thing — 219 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Blurt guardrails

These are settled decisions. Don't reintroduce them; if a task seems to require one, stop and ask the user first. This is the fast "don't" list; AGENTS.md's "Settled decisions" table is the fuller reference and the source of truth.

Many of these are also enforced mechanically — scripts/check-invariants.sh (run by check.sh, including --portable) greps for the constructs that give each one away, so reintroducing one fails the health check rather than depending on this list being read. Those rules also pin a verbatim slice of the bullet they come from in this file, so rewording or deleting one fails the gate until someone decides whether the rule survives the edit — edit these entries knowing that, and fix the anchor in the same change. Treat that as a backstop, not the boundary: the rules it can't express are still here, still binding, and the reasons in this file are what let you tell an intended exception from a mistake. Never silence a finding with // invariant-ok: to get a build green — that marker is for a line that is genuinely correct, and reaching for it means it's time to stop and ask.

Audio

  • No AVAudioEngine / installTap capture path. MicCapture builds a fresh AVCaptureSession recorder per capture (CaptureSessionRecorder; owner-directed move from AVAudioRecorder, 2026-08-25) — a long-lived engine bound its input graph to one device and went stale on a mic↔built-in switch (-10868, all-zero buffers), so no recorder survives across a device change. Keep the data output converting to 16 kHz mono 16-bit S16LE (the Sync API's geometry), published straight onto the feed start() returns with no resample pass. stop() answers a byte count, not the audio (owner-directed, 2026-09-08): the recording is uploaded in chunks as it is captured, and accumulating the blob as well copied every byte a second time inside the capture lock and held a duplicate of the whole utterance until release.
  • One copy of the recording exists, for one reason. The transcriber keeps it (relay, AssemblyAITranscriber+LiveCapFallback.swift), on the upload's task and never in MicCapture's capture lock, solely to back the documented /v1/transcribe fallback when /v1/transcribe/live refuses a recording past its 120 s cap (413 with error_code: "audio_too_large"). That narrowed the 2026-09-08 "no retry-from-buffer path" rule on 2026-10-29; it did not open a general one. Don't read the copy back for a retry, a replay, a cache or any other second request, don't trigger the fallback on any other error, and don't move the copy into MicCapture. check-invariants.sh keeps the buffered route's path in that one file.
  • (macOS shell) Don't pre-open the mic to make presses feel faster. MicCapture.warmUp() is stateless on purpose — build a session, drop it — and there is no warm or prepared recorder to reuse. Measured on hardware: building a session (or the retired prepareToRecord()) leaves the device closed and costs ~15 ms, while record()'s startRunning() opens it and costs 180–600 ms, so nothing can pre-pay the bring-up. A warm-recorder lifecycle was tried, and its device-identity check, pin check, 60 s expiry and bring-up flag all existed to protect ~15 ms. If you want the press to feel faster, the liveness gate's polling is where the remaining latency actually is.

Read the full file on GitHub · 219 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +8 lines 10b0eedafde4
  2. 14d ago Changed 36db4953ed5a
  3. 27d ago Changed · +29 lines f77e4a1fcbb5
  4. 28d ago Changed · +4 lines e871b167b37f
  5. 1mo ago Changed · -1 lines 73f12400ba2b
  6. 1mo ago Changed · +29 lines 3be86a7af654
  7. 1mo ago Changed · +14 lines 5ef4766e4aca
  8. 1mo ago Changed · +5 lines 6bda216ea0dc
  9. 2mo ago First seen · 131 lines · 49 tokens per session scan A 7fcb76ea629e

Subscribe to this mod's changes

project-guardrails is a skill published in the GitHub repository AssemblyAI/blurt (65 stars, last pushed today), licensed MIT. It adds 49 tokens to every session and 3,743 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories