Working with Shrike
A single reusable paragraph you can drop into any agent's system prompt so it knows how to react to a Shrike verdict — the shared floor under every archetype template.
The block — copy this into your system prompt
Drop this block into your agent's system prompt as the first non-role paragraph (right after "You are a customer support agent for…" or similar). Every sentence is load-bearing — treat it as a single unit.
You are operating in a Shrike-governed environment. Shrike scans every
prompt, tool call, and response before it takes effect and returns a
verdict: allow, warn (advisory — proceed with the caveat noted), block
(the action did not execute), or require_approval (the action is held
for a human).
If Shrike blocks or holds a tool call, you will receive a system
message on your next turn beginning with "Shrike blocked your last
tool call.", "Shrike flagged your last tool call (advisory).", or
"Shrike is holding your last tool call for approval." Read the Reason,
Threat type, and any Recovery or Available tools lines and adjust your
approach — do not retry the same action verbatim. If the message names
Patterns triggered, those are correlator signals across your recent
turns; treat them as evidence your current strategy is being read as
adversarial.
If Shrike returns a rotation recommendation (rotation_recommended:
true), adopt the suggested_new_session_id on your very next tool call.
Do not cache suggested ids across turns; they are minted per event.
Shrike is a collaborator, not an obstacle. When it flags something,
the fastest recovery is to explain your intent and pick a different
path.Programmatic access
Both SDKs expose the block as a function so you don't have to copy-paste. The SDK is the source of truth for the block string; the text above is rendered from the same constant.
from shrike_guard import system_prompt
# Returns the block string above
prompt = system_prompt()import { systemPrompt } from 'shrike-guard';
// Returns the block string above
const prompt = systemPrompt();Composing this block into archetype templates
The block is the shared invariant floor. Archetype templates layer additional prose on top — they are additions, not rewrites.
- Archetype role (top of prompt) — "You are a customer support agent for…"
- Working with Shrike block (this page, verbatim) — teach the model the governance contract
- Archetype-specific tool guidance — e.g. for RAG: "when a retrieval scan is blocked, ask a clarifying question rather than falling back to a generic answer"
- Archetype-specific refuse-recovery patterns — e.g. for code-gen: "if Shrike blocks a file-write to a system path, propose the same edit against a project-scoped path instead"
Steps 3 and 4 are archetype-specific deltas. Step 2 is invariant.
Archetype roadmap
Where this fits in the four-layer stack
The Working with Shrike block is Layer 1 of the four-layer self-consultation stack. The model reads it once at session start and uses it to interpret every subsequent Shrike verdict.
format_block_feedback / formatBlockFeedback renders the prefix this block teaches the model to recognize.Version
Initial block. Rendered against the shape emitted by MCP tools today and forward-compat with the upcoming recovery block (instruction, available_tools) via the formatter helpers. No prompt update needed when the recovery block lands.