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.

~180 wordsv1.0Recovery block forward-compat

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.

working-with-shrike.txt
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.

Python
from shrike_guard import system_prompt
 
# Returns the block string above
prompt = system_prompt()
TypeScript
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.

  1. Archetype role (top of prompt) — "You are a customer support agent for…"
  2. Working with Shrike block (this page, verbatim) — teach the model the governance contract
  3. 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"
  4. 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

Working with Shrike (shared floor)
This page. The invariant floor under every archetype.shipped
Support agent
Customer support flows — refund, account, tier questions.planned
Code generation agent
Code-gen with file-write governance and repo-scoped path recovery.planned
RAG agent
Retrieval pipelines — chunk scans, blocked-chunk clarifying questions.planned
Research agent
Web search + summarization with domain and query governance.planned
Multi-agent orchestrator
Delegation-tree scope inheritance + child-agent quarantine.planned
Internal copilot
Enterprise flows with SSO, policy overrides, approval routing.planned

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.

Layer 1System prompt — this page.
Layer 2MCP tools — 8 scan channels the model can invoke.
Layer 3SDK guard — deterministic scan_* calls in developer control flow.
Layer 4Block-feedback injection — format_block_feedback / formatBlockFeedback renders the prefix this block teaches the model to recognize.

Version

v1.02026-07-06

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.