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.
curl -O https://raw.githubusercontent.com/AssemblyAI/blurt/main/.claude/skills/project-guardrails/SKILL.mdgit clone --depth 1 https://github.com/AssemblyAI/blurtWrote 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.
[](https://agentmods.dev/skills/assemblyai/blurt/project-guardrails)<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.
<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>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.
| Model | Per session | Once 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 |
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.
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/installTapcapture path.MicCapturebuilds a freshAVCaptureSessionrecorder per capture (CaptureSessionRecorder; owner-directed move fromAVAudioRecorder, 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 feedstart()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 inMicCapture's capture lock, solely to back the documented/v1/transcribefallback when/v1/transcribe/liverefuses a recording past its 120 s cap (413witherror_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 intoMicCapture.check-invariants.shkeeps 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 retiredprepareToRecord()) leaves the device closed and costs ~15 ms, whilerecord()'sstartRunning()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.
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.
- today Changed · +8 lines 10b0eedafde4
- 14d ago Changed 36db4953ed5a
- 27d ago Changed · +29 lines f77e4a1fcbb5
- 28d ago Changed · +4 lines e871b167b37f
- 1mo ago Changed · -1 lines 73f12400ba2b
- 1mo ago Changed · +29 lines 3be86a7af654
- 1mo ago Changed · +14 lines 5ef4766e4aca
- 1mo ago Changed · +5 lines 6bda216ea0dc
- 2mo ago First seen · 131 lines · 49 tokens per session scan A 7fcb76ea629e
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.
Other skills, from other repositories
swift-concurrency-pro
Reviews Swift code for concurrency correctness, modern API usage, and common async/await pitfalls. Use when reading, writing, or reviewing Swift concurrency code.
scarf-template-author
Scaffold a new Scarf project OR enrich an existing one after a Scarf "Upgrade Project" — dashboard, optional configuration schema, optional cron job, AGENTS.md, and (via the scarf-miniapp-author skill) a starter mini-app — from a short conversational interview. Output is immediately usable locally and cleanly…
scarf-miniapp-author
Author a Scarf mini-app — a small sandboxed web surface (HTML/CSS/JS) that renders inside a project's cockpit and talks to the bound Hermes session + project data through the versioned window.scarf bridge. Use to build a bespoke panel (a task board, an approval queue, a chart, a data table) for a project.
macos-harness
Read and operate the apps on this Mac from the shell. Use it when a task needs an app's UI and no API, CLI or purpose-built tool can do it.
pr-review
Review pull requests: diffs, comments, context and written review docs.
review-preflight
Review tooling for a PR: review-preflight prints REVIEW.md's criteria and the PR's live gate state before a review; ci-triage maps a PR's failing checks to already-filed issues.