ai
Technical notes on web development, DevOps, and AI integration.
67 articles
- 21:53ai
Plane MCP for self-hosting, no OAuth, just header auth
plane-mcp-server http mode always builds an OAuth app and crashes without env vars. A 16-line wrapper unlocks header auth with live token checks.
TL;DR: HTTP mode crashed at startup because it always built an OAuth app without env vars. A 16-line wrapper instead calls get_header_mcp() to run a stateless server on loopback 8211 that validates Authorization headers against Plane. This lets local AI agents securely use all 30 tools with no internet exposure or full OAuth setup.
#plane#mcp#ai - 09:12ai
One File, Two Modes: Why I Dropped the Split Guide Plan
An article's source does not determine its type, the brief's content does. Detect the mode from content, keep one canonical guide, never duplicate enforcement.
TL;DR: The author nearly split their writing guide into two prompt files, one technical and one reflective, before realizing an article's type comes from the brief's content, not its source. A commit can spark a reflection; a dossier can spark a troubleshooting piece. One adaptive guide with two detected modes beats two files that drift.
#ai#writing#tooling - 00:15ai
Same Version, Different File: Rebase a Drifted Claude Code Skill
A local skill and its upstream both said 2.2.1, but the contents had long diverged. How to rebase a skill without inheriting the drift.
TL;DR: A matching version number hid a rewritten SKILL.md with inverted security doctrine. Rebased the file byte-identical to upstream, moving local rules into references docs and a wrapper script. Lesson: never trust frontmatter versions, byte-compare against upstream, and layer customizations on top.
#claude-code#hermes-agent#agent-skills - 10:01ai
Hidden instructions in media files: prove they stay data
The transcript must carry the hijack sentence verbatim as data. That is exactly how you prove a media file never acted as an instruction.
TL;DR: The author deliberately embedded a prompt-injection sentence into an audio fixture to test a media pipeline's defenses. Counterintuitively, the test requires the hostile transcript to stay verbatim and labeled untrusted, since injection is about text switching from data to instructions. The real defense is a contract proving content never becomes commands, not filtering text or trusting the model's intelligence.
#prompt-injection#llm-security#whisper - 07:42ai
Golden-File Verification Runners: No Self-Grading
A 70/0/0 acceptance run made me think my agent pipeline was deterministic. It was the runner that deserved the credit; temperature 0 was no guarantee.
TL;DR: A flawless 70/0/0 acceptance run looked like proof of a deterministic agent pipeline, but it really validated the harness, not the model. Temperature zero doesn't guarantee reproducibility either; batch invariance and LLM-as-judge studies show outputs and verdicts still flip. Trustworthy results come from test isolation plus byte-level diffs against golden files, never from an agent grading its own work.
#ai-agents#testing#evaluation - 02:55ai
A valid MP4 that will never transcribe
A video file can be perfectly valid and still carry no audio. A nonstate skip keeps the row visible and holds the pipeline until someone decides.
TL;DR: A supposedly broken MP4 was actually valid, just with zero audio streams. The pipeline now runs ffprobe first, stores an audio_track flag, and emits a visible skip that never marks work done. Frames follow a fixed fps cadence with capped extraction, while audio is downsampled to 16kHz mono WAV for transcription.
#ffmpeg#whisper#ffprobe - 01:14ai
I finally split my transcription failures into two families
My transcription pipeline died silently mid-window. A hang turns out to be an exception that must be caught, and every failure has an owner.
TL;DR: After a hung transcription exposed an uncaught TimeoutExpired exception, the author split pipeline failures into infrastructure issues, which silently retry, and content issues, which log a failure event. Broken files follow a retry ladder capped at three attempts, then a visible skip that still blocks completion. Correct exit-code mapping keeps retries from amplifying hopeless failures.
#whisper#ffmpeg#python - 00:15ai
The Claude Code cost brake turned out not to be the turn limit
I thought --max-turns was keeping my delegation costs down. It only counts rounds; the flag that actually holds dollars is --max-budget-usd.
TL;DR: A test revealed Claude Code's --max-turns flag doesn't limit spending; a single-turn task cost $0.045 without ever touching its cap of two. By contrast, --max-budget-usd actually halted a run mid-turn once spending passed $0.01. The takeaway: use budget caps to control costs, keeping turn limits only for stopping endless loops.
#claude-code#cli#llm - 23:34ai
The transcript filter is a projection, not a parameter
Changing a filter rule doesn't mean re-running whisper. The filter is a projection of stored stdout, stamped with a sha256 of the rule.
TL;DR: When the profanity filter changed, the author's first instinct was re-running Whisper on every transcript, even though the audio never changed. The fix: treat filtering as a cheap projection of already-cached Whisper output, not a transcription step. Stamp artifacts with a phrase-list hash, so rule changes mean instant re-projection with zero model calls.
#python#whisper#idempotency