Mario Alexandre  ·  March 26, 2026  ·  auto-scatter prompt-hook sinc-llm

From Blocking to Transforming: How My Prompt Hook Evolved

I want to tell you about the design decisions I got wrong before I got the hook right. Because the version that saves $1,588/week looks nothing like the version I built first, and understanding the gap between them is more useful than just seeing the final result.

Version 1: The Blocker

My first attempt at a prompt hook was defensive. I was worried about bad prompts reaching the model — prompts without enough context, prompts that would cause the model to ask clarifying questions, prompts that would start expensive loops. So I built a hook that checked prompts against a quality threshold and rejected ones that didn't meet it.

v1 — week 1
Quality Gating / Blocking Hook
Hook scores incoming prompts on 3 dimensions (specificity, context presence, constraint clarity). If score below 0.4, rejects prompt and asks user to add more detail before retrying.
Result: annoying. I kept getting rejected on short prompts I knew were fine. Interrupts flow. Abandoned after 3 days.
v2 — week 2
Suggestion Hook
Instead of blocking, the hook suggests improvements to the prompt before sending. "Your prompt is missing constraints — want me to add some?" Requires user to confirm before proceeding.
Result: still interrupts flow. Every prompt requires an extra confirmation step. Exchange rate goes UP, not down. Abandoned after 2 days.
v3 — week 2
Auto-Transform Hook (current)
Hook intercepts every prompt, transforms it into 6-band sinc JSON via Haiku API, injects as system context — all without user involvement. Prompt passes through unchanged. Model gets structure automatically.
Result: exchange rate 4.2 → 1.6. $1,588.56 saved in 7 days. No flow interruption. Invisible.

The Insight That Changed Everything

The turning point was realizing that blocking and suggesting both require user action. They create friction. And friction in a tool that fires on every single prompt is death — you stop using the tool, or you start hating it, or you find workarounds that defeat the whole purpose.

Transforming requires zero user action. The hook does its work and gets out of the way. You type what you want. You get a great response. You never think about the hook.

sinc-LLM — the prompt as a signal to be reconstructed
x(t) = Σ x(nT) · sinc((t - nT) / T)

This maps exactly to the Nyquist-Shannon theorem I based the sinc format on. The theorem says you can perfectly reconstruct a signal from its samples — if you sample at the right frequency. The Haiku scatter call is sampling the prompt at all 6 frequency bands simultaneously. The reconstruction — the sinc JSON — gives the main model more than it needs to answer correctly the first time.

What "Non-Blocking" Really Means

Non-blocking in my system means two things. First, the hook never rejects or delays a prompt from reaching the model. Second, if the hook itself fails — if the Haiku API is down, if the scatter call times out after 25 seconds — the original prompt goes through unchanged. The hook degrades gracefully to a no-op.

I added a heuristic fallback for the second case. If the API fails, the hook uses template-based scatter with keyword inference. It's not as good as Haiku — more generic, less context-aware — but it's dramatically better than no scatter at all. SNR goes from 0.003 (raw prompt) to about 0.4 (template scatter) vs. 0.855 (Haiku scatter). Still a significant improvement even in degraded mode.

The Edge Cases I Had to Handle

Three types of input need to bypass the transform entirely:

Already sinc JSON — if the input is already a valid 6-band sinc structure, pass it through. Don't double-scatter. The sinc format is the inter-agent cognitive contract; re-scattering corrupts it.

@agent mentions — if the prompt starts with @, it's routing to a named agent. Don't intercept it — send directly. The routing is part of the system architecture and the scatter hook shouldn't interfere.

/slash commands — same logic. /commands are infrastructure instructions, not natural language prompts. Pass through unchanged.

Everything else gets scattered. One-word prompt: scatter it. "hi": scatter it. 500-word specification: scatter it. There's no minimum length, no complexity threshold, no shortcut. The invariant is that every natural language prompt reaches the model with structured sinc context.

Try sinc-LLM free — sincllm.com

The full hook architecture is open source. Leave a comment for the link.