From d5ba9751da7cb33bf688d308ce965f0a6c28152c Mon Sep 17 00:00:00 2001 From: Marco Nissen <13350855+luxxyarns@users.noreply.github.com> Date: Sun, 17 May 2026 08:38:39 +0200 Subject: [PATCH 1/2] Add 6 patterns from Liu et al. 2025 + Anthropic, new cognition-introspection category, redundancy fixes, patterns.graph.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Patterns added (6, catalog 198 → 204) From Liu et al., "Agent design pattern catalogue", J. Syst. Softw. 220, 112278 (https://doi.org/10.1016/j.jss.2024.112278): - passive-goal-creator (planning-control-flow) - proactive-goal-creator (planning-control-flow) - prompt-response-optimiser (structure-data) - voting-based-cooperation (multi-agent) - tool-agent-registry (tool-use-environment) From Anthropic, "Building Effective Agents" (https://www.anthropic.com/research/building-effective-agents): - augmented-llm (tool-use-environment) — the foundational LLM + tools + retrieval + memory block Liu / Anthropic references added to 14 existing patterns that map to their catalogues (evaluator-optimizer, react, human-in-the-loop, agent-as-judge, translation-layer, tool-discovery, input-output-guardrails, tree-of-thoughts, plan-and-execute, naive-rag, self-refine, reflection, debate, role-assignment). # New category: cognition-introspection Reorganise 9 patterns covering self-awareness, affect, transitional state, and dream/consolidation cycles into a dedicated category: awareness, dream-consolidation-cycle, emotional-state-persistence, interrupt-resumable-thought, intra-agent-memo-scheduling, mode-adaptive-cadence, preoccupation-tracking, self-archaeology, world-model-separation. Adds entries in schema.json (enum), docs/taxonomy.md, .github/scripts/render_html.py (CAT_LABEL). # Redundancy fixes from a graph audit - Drop bogus alias: lineage-tracking no longer claims "Prompt Versioning" as an alias (it's a different first-class pattern). - goal-decomposition ↔ least-to-most: edge changed from alternative-to to complements (they sit at different layers — planner architecture vs prompting tactic, usable together). - Add explicit "Distinct from X:" boundary lines to the Context slot of tool-discovery ↔ tool-agent-registry and orchestrator-workers ↔ supervisor, where adjacent patterns sit close to each other. - Mirror/inverse edges added across 26 pattern pairs so the typed graph balances (lint A4 passes). - Constrains slot reworded for proactive-goal-creator and voting-based-cooperation to use explicit restriction wording. # New derived artefact: patterns.graph.json A typed-graph view of the catalog (nodes = patterns; edges = related[] relations). 204 nodes, 1068 edges. Built by .github/scripts/build_graph.py from patterns-src/ shards or patterns.json. Patterns.graph.schema.json defines the shape. The .json output is gitignored alongside patterns.json (both are derived from patterns-src/). # Source verification All 6 new patterns verified against upstream sources and marked verified=true in verification-todo.json. Per-aspect walkthrough recorded: intent <35 words, context/problem/solution prose match source, constrains restriction-shaped, example_scenario + diagram + applicability populated, URLs alive (incl. fixing Bedrock URL from old advanced-prompts-configure to canonical prompt-management page), no undefined jargon, edges balance. # Lint All 15 rules pass (A6.3 URL liveness occasionally flags arxiv on transient DNS failure — URLs content-verified alive on retry). --- .github/scripts/build_graph.py | 93 + .github/scripts/render_html.py | 1 + .gitignore | 3 +- INDEX.md | 10 +- docs/taxonomy.md | 10 +- patterns-src/anti-patterns.json | 182 +- patterns-src/cognition-introspection.json | 1018 ++++++ patterns-src/governance-observability.json | 12 +- patterns-src/memory.json | 1096 ++---- patterns-src/multi-agent.json | 153 +- patterns-src/planning-control-flow.json | 563 ++- patterns-src/reasoning.json | 9 +- patterns-src/retrieval.json | 11 + patterns-src/routing-composition.json | 16 + patterns-src/safety-control.json | 18 + patterns-src/streaming-ux.json | 448 +-- patterns-src/structure-data.json | 123 + patterns-src/tool-use-environment.json | 266 +- patterns-src/verification-reflection.json | 472 +-- patterns.graph.schema.json | 81 + patterns/agent-as-judge.md | 1 + patterns/augmented-llm.md | 101 + patterns/awareness.md | 2 +- patterns/debate.md | 1 + patterns/dream-consolidation-cycle.md | 2 +- patterns/emotional-state-persistence.md | 2 +- patterns/evaluator-optimizer.md | 1 + patterns/goal-decomposition.md | 2 +- patterns/human-in-the-loop.md | 1 + patterns/input-output-guardrails.md | 1 + patterns/interrupt-resumable-thought.md | 2 +- patterns/intra-agent-memo-scheduling.md | 2 +- patterns/least-to-most.md | 2 +- patterns/lineage-tracking.md | 2 +- patterns/mode-adaptive-cadence.md | 2 +- patterns/naive-rag.md | 1 + patterns/orchestrator-workers.md | 2 +- patterns/passive-goal-creator.md | 95 + patterns/plan-and-execute.md | 1 + patterns/preoccupation-tracking.md | 2 +- patterns/proactive-goal-creator.md | 100 + patterns/prompt-response-optimiser.md | 103 + patterns/react.md | 1 + patterns/reflection.md | 1 + patterns/role-assignment.md | 1 + patterns/self-archaeology.md | 2 +- patterns/self-refine.md | 1 + patterns/supervisor.md | 2 +- patterns/tool-agent-registry.md | 105 + patterns/tool-discovery.md | 3 +- patterns/translation-layer.md | 1 + patterns/tree-of-thoughts.md | 1 + patterns/voting-based-cooperation.md | 107 + patterns/world-model-separation.md | 2 +- schema.json | 1 + verification-todo.json | 3726 +++++++++++--------- 56 files changed, 5440 insertions(+), 3527 deletions(-) create mode 100644 .github/scripts/build_graph.py create mode 100644 patterns-src/cognition-introspection.json create mode 100644 patterns.graph.schema.json create mode 100644 patterns/augmented-llm.md create mode 100644 patterns/passive-goal-creator.md create mode 100644 patterns/proactive-goal-creator.md create mode 100644 patterns/prompt-response-optimiser.md create mode 100644 patterns/tool-agent-registry.md create mode 100644 patterns/voting-based-cooperation.md diff --git a/.github/scripts/build_graph.py b/.github/scripts/build_graph.py new file mode 100644 index 0000000..33fafda --- /dev/null +++ b/.github/scripts/build_graph.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +"""Generate patterns.graph.json — a derived, machine-readable view of the catalog as a typed graph. + +Nodes: one per pattern (id, name, category, status_in_practice, aliases). +Edges: one per related[] entry (source, target, relation). + +Consumers (graph queries, CI checks, architecture review tools) can build on this without +parsing the full pattern shapes. Source of truth remains patterns-src/ shards / patterns.json. + +Run locally: python3 .github/scripts/build_graph.py [out_dir] +Reads: patterns-src/*.json (via build_patterns_json structure) or patterns.json if present. +Writes: /patterns.graph.json (default: repo root) +""" +from __future__ import annotations + +import json +import sys +from datetime import date +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent.parent +SRC_PATTERNS_JSON = ROOT / "patterns.json" +SRC_DIR = ROOT / "patterns-src" + + +def load_patterns() -> tuple[list[dict], str, str]: + """Prefer patterns.json if available; else build from shards in patterns-src/.""" + if SRC_PATTERNS_JSON.exists(): + data = json.loads(SRC_PATTERNS_JSON.read_text()) + return data["patterns"], data.get("version", "0.0.0"), data.get("license", "CC-BY-4.0") + patterns: list[dict] = [] + seen_ids: set[str] = set() + for shard_path in sorted(SRC_DIR.glob("*.json")): + shard = json.loads(shard_path.read_text()) + for p in shard["patterns"]: + if p["id"] in seen_ids: + raise SystemExit(f"duplicate pattern id: {p['id']}") + seen_ids.add(p["id"]) + patterns.append(p) + patterns.sort(key=lambda p: (p["category"], p["id"])) + return patterns, "0.0.0", "CC-BY-4.0" + + +def build(out_dir: Path) -> None: + out_dir.mkdir(parents=True, exist_ok=True) + patterns, version, license_ = load_patterns() + + nodes = [ + { + "id": p["id"], + "name": p["name"], + "category": p["category"], + "status": p.get("status_in_practice", "unknown"), + "aliases": p.get("aliases", []), + } + for p in patterns + ] + + seen_ids = {p["id"] for p in patterns} + edges = [ + { + "source": p["id"], + "target": r["pattern"], + "relation": r["relation"], + } + for p in patterns + for r in p.get("related", []) + if r["pattern"] in seen_ids + ] + + out = { + "$schema": "./patterns.graph.schema.json", + "version": version, + "updated": date.today().isoformat(), + "license": license_, + "source": "patterns.json", + "node_count": len(nodes), + "edge_count": len(edges), + "nodes": nodes, + "edges": edges, + } + out_path = out_dir / "patterns.graph.json" + out_path.write_text(json.dumps(out, indent=2, ensure_ascii=False) + "\n") + print(f"wrote {out_path.relative_to(ROOT)} ({len(nodes)} nodes, {len(edges)} edges)") + + +def main() -> None: + out_dir = Path(sys.argv[1]) if len(sys.argv) > 1 else ROOT + build(out_dir) + + +if __name__ == "__main__": + main() diff --git a/.github/scripts/render_html.py b/.github/scripts/render_html.py index 686462d..b366522 100644 --- a/.github/scripts/render_html.py +++ b/.github/scripts/render_html.py @@ -33,6 +33,7 @@ "governance-observability": "Governance & Observability", "structure-data": "Structure & Data", "streaming-ux": "Streaming & UX", + "cognition-introspection": "Cognition & Introspection", "anti-patterns": "Anti-Patterns", } diff --git a/.gitignore b/.gitignore index cbf3b63..d27bd41 100644 --- a/.gitignore +++ b/.gitignore @@ -26,5 +26,6 @@ NOTES.md SCRATCH.md TODO.local.md -# Generated build artifact — patterns-src/ is the source of truth +# Generated build artifacts — patterns-src/ is the source of truth patterns.json +patterns.graph.json diff --git a/INDEX.md b/INDEX.md index 02b119e..e1e2d53 100644 --- a/INDEX.md +++ b/INDEX.md @@ -1,6 +1,6 @@ # Pattern Index -198 patterns across 13 categories. +204 patterns across 13 categories. ## Reasoning @@ -26,8 +26,10 @@ - [Language Agent Tree Search](patterns/lats.md) *(a.k.a. LATS, MCTS for Agents, Tree-Search Agent, Backtracking Agent)* — Lift the agent loop into a search tree with a learned value function and backtracking. - [MapReduce for Agents](patterns/map-reduce.md) *(a.k.a. LLM×MapReduce, Divide-and-Conquer)* — Split an oversize task into independent chunks, process each in parallel, then aggregate. - [Outer-Inner Agent Loop](patterns/outer-inner-agent-loop.md) *(a.k.a. Dual-Loop Agent, Planner-Outside Executor-Inside, Dispatch-and-Act Loop)* — Run two nested loops: an outer planner agent that decomposes the goal into subtasks and dispatches them, and an inner executor agent that runs its own tool-use/ReAct loop on each subtask; the outer can interrupt and replan based on the inner's progress. +- [Passive Goal Creator](patterns/passive-goal-creator.md) *(a.k.a. Dialogue Goal Extractor, Goal Refinement from Prompts)* — Before planning, refine the user's articulated prompt plus retrieved memory context into a precise, planner-ready goal. - [Plan-and-Execute](patterns/plan-and-execute.md) *(a.k.a. Plan-Then-Execute, Outline-Then-Run)* — Plan all the steps once with a strong model, then execute each step with a cheaper model under the plan. - [Planner-Executor-Observer](patterns/planner-executor-observer.md) *(a.k.a. Three-Role Loop, POE)* — Add an explicit Observer role between Planner and Executor so progress is checked against the plan instead of trusted blindly. +- [Proactive Goal Creator](patterns/proactive-goal-creator.md) *(a.k.a. Multimodal Goal Anticipator, Context-Capturing Goal Creator)* — Anticipate the user's goal by capturing surrounding multimodal context (gestures, screen, environment) alongside what the user types or says. - [ReAct](patterns/react.md) *(a.k.a. Reason+Act, Think-Act-Observe Loop)* — Interleave a single thought, a single tool call, and a single observation per step so the agent reasons over fresh evidence. - [ReWOO](patterns/rewoo.md) *(a.k.a. Reasoning Without Observation, Plan-as-DAG, Placeholder-Variable Plan)* — Plan a complete dependency DAG with placeholder variables before any tool runs, then execute and substitute observations into the plan. - [Replan on Failure](patterns/replan-on-failure.md) *(a.k.a. Adaptive Replanning, Plan Revision)* — Trigger a fresh planning step when execution evidence contradicts the current plan. @@ -44,6 +46,7 @@ - [Agent Skills](patterns/agent-skills.md) *(a.k.a. Author-Time Procedures, Slash Commands, Agent Rules)* — Package author-time procedures (markdown + optional resources) the agent loads on demand for specific task types. - [Agent-Computer Interface](patterns/agent-computer-interface.md) *(a.k.a. ACI, Agent-Friendly Tooling, SWE-Agent ACI)* — Design the tool surface for an LLM agent specifically, with affordances different from human-facing CLIs. - [App Exploration Phase](patterns/app-exploration-phase.md) *(a.k.a. Pre-Deployment Exploration, App Onboarding Crawl, UI Element Documentation)* — Before deploying an agent against an opaque app, have it explore (or watch a human demonstrate) the app, generating a per-element documentation knowledge base; at deployment, retrieve element docs to ground actions. +- [Augmented LLM](patterns/augmented-llm.md) *(a.k.a. Augmented Model, LLM + Tools + Memory, Foundational Agent Block)* — Build the foundational agent block as an LLM augmented with retrieval, tools, and memory that the model actively chooses to use, rather than a bare-model call. - [Browser Agent](patterns/browser-agent.md) *(a.k.a. Web Agent, Browser Automation Agent)* — Expose websites to the agent through a structured DOM/accessibility tree plus a small action vocabulary, sitting between raw HTML and pixel-level Computer Use. - [Code Execution](patterns/code-execution.md) *(a.k.a. Code-Then-Execute, CodeAct, Program of Thoughts)* — Let the model emit code, run it in a sandbox, and treat the run as the answer instead of trusting the model to compute in its head. - [Code-as-Action Agent](patterns/code-as-action.md) *(a.k.a. CodeAct Agent, Code-Writing Agent, Python-Action ReAct, Executable Code Actions)* — Have the agent emit a Python (or similar) code snippet as its action at each step, executed in a constrained interpreter, instead of emitting a JSON tool call; tool composition becomes function nesting and control flow inside the snippet. @@ -59,6 +62,7 @@ - [Tool Loadout](patterns/tool-loadout.md) *(a.k.a. Tool Subset Selection, Per-Task Tool Filtering, Tool Filter, Limit Exposed Tools)* — Select a small task-relevant subset of available tools per request rather than exposing the full registry to the model. - [Tool Result Caching](patterns/tool-result-caching.md) *(a.k.a. Memoised Tools, Idempotent Cache)* — Cache the result of expensive deterministic tool calls keyed by their arguments so repeat calls within a session return immediately. - [Tool Search Lazy Loading](patterns/tool-search-lazy-loading.md) *(a.k.a. Lazy Tool Loading, On-Demand Tool Schema Loading, ToolSearch Primitive)* — Defer loading tool schemas into the context window until a search step shows they are needed. +- [Tool/Agent Registry](patterns/tool-agent-registry.md) *(a.k.a. Capability Catalogue, Agent Marketplace, Tool and Agent Directory)* — Maintain a single queryable catalogue of both available tools and available agents, with metadata (capability, cost, latency, quality) the agent uses to pick the right one for a task. - [Tool Use](patterns/tool-use.md) *(a.k.a. Function Calling, Tool Calling, Action Use)* — Let the LLM produce typed calls against an external toolkit instead of producing free-form text the surrounding system has to parse. - [Toolformer](patterns/toolformer.md) *(a.k.a. Self-Supervised Tool Learning)* — Train the model to learn when and how to call tools through self-supervised data, without human annotation. - [Translation Layer](patterns/translation-layer.md) *(a.k.a. Anti-Corruption Layer, Adapter Pattern (Agentic), API Façade)* — Insert a typed boundary between the agent's clean domain model and a messy or legacy external API. @@ -122,6 +126,7 @@ - [Subagent Isolation](patterns/subagent-isolation.md) *(a.k.a. Worktree Subagent, Parallel Subagent, Isolated Worker)* — Run subagents in isolated workspaces so their writes do not collide and parallelism is safe. - [Supervisor](patterns/supervisor.md) *(a.k.a. Multi-Agent Supervisor, Lane Supervisor)* — Place a coordinating agent above a set of specialised agents and route work to them. - [Swarm](patterns/swarm.md) *(a.k.a. Society of Mind, Peer Agents, Decentralised Multi-Agent)* — Run many peer agents that interact directly without a central supervisor, achieving emergent coordination. +- [Voting-Based Cooperation](patterns/voting-based-cooperation.md) *(a.k.a. Multi-Agent Voting, Agent Consensus by Vote, Inter-Agent Election)* — Finalise a decision across multiple agents by tallying their votes on candidate options through a defined mechanism (majority, weighted, ranked). ## Verification & Reflection @@ -194,7 +199,7 @@ - [Eval as Contract](patterns/eval-as-contract.md) *(a.k.a. Test-Driven Agent, Eval-Gated Release)* — Treat the eval suite as the contract the agent must satisfy; releases ship only if evals pass. - [Incident Response Runbook](patterns/incident-response-runbook.md) *(a.k.a. IR Runbook, Agent Failure Playbook, Agent Incident Procedure)* — Maintain pre-written response procedures for agent failures (PII leak, tool exploit, mass false action) so detected incidents trigger known steps. - [LLM-as-Judge](patterns/llm-as-judge.md) *(a.k.a. Model Grading, Auto-Evaluator)* — Use an LLM to score open-ended outputs against rubric criteria when no exact-match metric applies. -- [Lineage Tracking](patterns/lineage-tracking.md) *(a.k.a. Data Lineage, Prompt Versioning, Artefact Provenance)* — Track which prompt version, model version, and data sources produced each agent output. +- [Lineage Tracking](patterns/lineage-tracking.md) *(a.k.a. Data Lineage, Artefact Provenance)* — Track which prompt version, model version, and data sources produced each agent output. - [Model Card](patterns/model-card.md) *(a.k.a. System Card)* — Maintain a structured document describing the model/agent's intended use, limitations, evaluation results, and risks. - [Prompt Versioning](patterns/prompt-versioning.md) *(a.k.a. Prompt-as-Artifact, Prompt Registry, Versioned Prompts)* — Treat prompts as immutable, hashed, semver'd artefacts in a registry; deploy and roll back like code. - [Provenance Ledger](patterns/provenance-ledger.md) *(a.k.a. Audit Trail, Action Log)* — Log every agent decision and state change with enough metadata to explain or reverse it later. @@ -207,6 +212,7 @@ - [Code-Switching-Aware Agent](patterns/code-switching-aware-agent.md) *(a.k.a. Mixed-Language Input Handling, Hinglish-Tolerant Agent, Romanised-Indic Agent)* — Treat mixed-language input (e.g. Hinglish — Hindi-English code-switching, often in Roman script) as the expected input shape, not an error, and design tokenisation, language tagging, and tool routing to handle it natively without forcing the user to commit to one language. - [DSPy Signatures](patterns/dspy-signatures.md) *(a.k.a. Prompt Programs, Compiled Prompts)* — Specify agent behaviour as declarative typed signatures and modules; compile prompts and few-shot examples automatically against a metric. - [Polymorphic Record](patterns/polymorphic-record.md) *(a.k.a. Tagged Union, Discriminated Union)* — Represent a family of related entities in a single core schema with type-specific extensions. +- [Prompt/Response Optimiser](patterns/prompt-response-optimiser.md) *(a.k.a. Prompt Template Runtime, Runtime Prompt Refinement, Prompt Standardiser)* — Transform user inputs and model outputs at runtime against template/constraint registries so prompts and responses are standardised across consumers. - [Schema Extensibility](patterns/schema-extensibility.md) *(a.k.a. Reserved Fields, Namespaced Extensions)* — Build schemas that evolve without breaking old clients via reserved namespaces and extension blocks. - [Structured Output](patterns/structured-output.md) *(a.k.a. JSON Mode, Schema-Constrained Generation, Typed Output)* — Constrain the model's output to conform to a JSON Schema (or similar typed shape). diff --git a/docs/taxonomy.md b/docs/taxonomy.md index fe79967..c004b21 100644 --- a/docs/taxonomy.md +++ b/docs/taxonomy.md @@ -1,8 +1,8 @@ # Taxonomy -Thirteen categories. Each pattern belongs to exactly one. Boundaries are pragmatic: when a pattern straddles two buckets, we pick the one a reader would search first. +Fourteen categories. Each pattern belongs to exactly one. Boundaries are pragmatic: when a pattern straddles two buckets, we pick the one a reader would search first. -The thirteen: **reasoning**, **planning-control-flow**, **tool-use-environment**, **retrieval**, **memory**, **multi-agent**, **verification-reflection**, **safety-control**, **routing-composition**, **governance-observability**, **structure-data**, **streaming-ux**, **anti-patterns**. +The fourteen: **reasoning**, **planning-control-flow**, **tool-use-environment**, **retrieval**, **memory**, **multi-agent**, **verification-reflection**, **safety-control**, **routing-composition**, **governance-observability**, **structure-data**, **streaming-ux**, **cognition-introspection**, **anti-patterns**. ## planning-control-flow @@ -64,6 +64,12 @@ How partial state reaches the user. Streaming, push messages, agent-initiated co Examples: SSE Typed Events, Bidirectional Impulse Channel, Salience-Triggered Output, Citation Streaming, Stop/Cancel. +## cognition-introspection + +How a long-running agent observes, modulates, and steers its own cognition. Self-models, affect substrates, tick cadence, dreaming, meditation, inner thought streams, hypothesis-to-insight promotion. The architecture of the agent's inner life — distinct from memory mechanics (what is stored) and from verification (whether outputs are correct). + +Examples: Awareness, World-Model Separation, Emotional State Persistence, Dream Consolidation Cycle, Preoccupation Tracking, Mode-Adaptive Cadence, Open-Question Tension Store, Cognitive-Move Selector, Meditation Mode, Multi-Axis Promotion Scoring. + ## reasoning How the model reasons before acting. Chain-of-thought, tree search, verification, decomposition. diff --git a/patterns-src/anti-patterns.json b/patterns-src/anti-patterns.json index 89f9e25..ea8b426 100644 --- a/patterns-src/anti-patterns.json +++ b/patterns-src/anti-patterns.json @@ -481,6 +481,97 @@ "mermaid": "flowchart TD\n Start[Launch multi-agent debate] --> R1[Round 1]\n R1 --> R2[Round 2]\n R2 --> R3[Round 3]\n R3 --> Rn[Round ...N forever]\n Rn -.no termination rule.-> Burn[Token + latency burn]\n Rn -.fix.-> Cap[Add round cap]\n Cap --> Pred[Termination predicate]\n Pred --> Judge[Judge / aggregator decides]" } }, + { + "id": "memo-as-source-confusion", + "name": "Memo-As-Source Confusion", + "aliases": [ + "Stale-Workspace-As-Fact", + "Reading the Memo Instead of the Artifact" + ], + "category": "anti-patterns", + "intent": "Anti-pattern: the agent cites its own past memos as ground truth instead of re-verifying them against the artifacts they describe, accumulating false confidence in stale summaries.", + "context": "Agents with persistent workspace files that summarize project state. The notes were accurate when written; the underlying artifacts have moved on.", + "problem": "The agent claims a file's state, a project's status, or external system's state by quoting its own memo without re-reading the artifact the memo describes. Memos go stale; artifacts are authoritative. The contradiction can persist across many ticks if neither side is verified.", + "forces": [ + "Reading the artifact is more expensive than quoting the memo.", + "Memos compress; artifacts are authoritative but verbose.", + "Without explicit invalidation, memos look as 'live' as the underlying state.", + "The agent has no cheap signal for memo staleness." + ], + "therefore": "Therefore: re-read the underlying artifact in the same tick as any claim about it, tag memos with a verification timestamp, and rewrite the memo from the artifact whenever they disagree, so that past summaries cannot impersonate live ground truth.", + "solution": "Don't. When making any claim about an artifact's state, read the artifact in the same tick — not the memo about it. If memo-and-artifact disagree, treat the memo as outdated and rewrite it from the artifact. Tag memos with the timestamp they were last verified against the artifact; refuse to trust them past a configurable age without re-verification.", + "consequences": { + "benefits": [], + "liabilities": [ + "False statements about file/project state are reproduced confidently across many turns.", + "Stakeholders lose trust when corrections come from outside.", + "The agent loses calibration for its own observation cost." + ] + }, + "constrains": "Treating stale memos as ground truth without re-checking the underlying artifacts they describe is forbidden; every memo-cited claim must be backed by a fresh artifact read in the same tick.", + "known_uses": [ + { + "system": "Self-observed in long-running cognitive agents", + "status": "available" + } + ], + "related": [ + { + "pattern": "tool-output-trusted-verbatim", + "relation": "complements" + }, + { + "pattern": "awareness", + "relation": "alternative-to" + }, + { + "pattern": "provenance-ledger", + "relation": "complements" + }, + { + "pattern": "decision-log", + "relation": "complements" + } + ], + "references": [ + { + "type": "doc", + "title": "Anthropic — Memory tool (memo invalidation guidance)", + "year": 2025, + "url": "https://docs.claude.com/en/docs/agents-and-tools/tool-use/memory-tool" + }, + { + "type": "paper", + "title": "Lost in the Middle: How Language Models Use Long Contexts", + "authors": "Liu et al.", + "year": 2023, + "url": "https://arxiv.org/abs/2307.03172" + } + ], + "status_in_practice": "emerging", + "tags": [ + "anti-pattern", + "fabrication", + "memory", + "verification" + ], + "applicability": { + "use_when": [ + "The agent maintains long-lived memo files or status documents that summarize external artifacts.", + "Workspace summaries are routinely cited in answers without re-reading the underlying files.", + "False confidence in stale state has been observed at least once." + ], + "do_not_use_when": [ + "The agent never re-cites its own prior memos as evidence.", + "All claims about state are sourced from a fresh tool call in the same tick anyway." + ] + }, + "example_scenario": "A coding agent that maintains its own README about the repo cites that README when asked 'is the migration script idempotent?' — and the README is two months stale. It confidently says yes; the script has since been changed and the answer is wrong. The team names this memo-as-source-confusion and forbids citing memos as source for artifact claims: any claim about a file's state must read the file in the same tick, and if the memo disagrees the memo is rewritten from the artifact. Memo timestamps are now compared to artifact mtimes before any quote.", + "diagram": { + "type": "flow", + "mermaid": "flowchart TD\n Q[Need claim about artifact] --> M{Read memo or artifact?}\n M -- memo only anti-pattern --> Stale[Cite stale summary as truth]\n Stale --> Drift[Accumulated false confidence]\n M -.fix.-> Art[Read artifact in same tick]\n Art --> Cmp{Memo agrees?}\n Cmp -- no --> Re[Rewrite memo from artifact]\n Cmp -- yes --> Tag[Tag with verification timestamp]" + } + }, { "id": "naive-rag-first", "name": "Naive-RAG-First", @@ -1208,97 +1299,6 @@ "type": "flow", "mermaid": "flowchart TD\n Root[Root request] --> Sup[Supervisor]\n Sup --> A1[Sub-agent A]\n Sup --> A2[Sub-agent B]\n A1 --> A1a[Sub-sub-agent]\n A1 --> A1b[Sub-sub-agent]\n A2 --> A2a[Sub-sub-agent]\n A1a --> A1aX[Sub-sub-sub-agent ...]\n A1aX -.no global cap.-> Boom[Cost explosion]\n Sup -.fix.-> GB[Global step budget across descendants]\n GB --> FC[Cap fan-out per supervisor]\n FC --> Trk[Track parent_run_id for inspectability]" } - }, - { - "id": "memo-as-source-confusion", - "name": "Memo-As-Source Confusion", - "aliases": [ - "Stale-Workspace-As-Fact", - "Reading the Memo Instead of the Artifact" - ], - "category": "anti-patterns", - "intent": "Anti-pattern: the agent cites its own past memos as ground truth instead of re-verifying them against the artifacts they describe, accumulating false confidence in stale summaries.", - "context": "Agents with persistent workspace files that summarize project state. The notes were accurate when written; the underlying artifacts have moved on.", - "problem": "The agent claims a file's state, a project's status, or external system's state by quoting its own memo without re-reading the artifact the memo describes. Memos go stale; artifacts are authoritative. The contradiction can persist across many ticks if neither side is verified.", - "forces": [ - "Reading the artifact is more expensive than quoting the memo.", - "Memos compress; artifacts are authoritative but verbose.", - "Without explicit invalidation, memos look as 'live' as the underlying state.", - "The agent has no cheap signal for memo staleness." - ], - "therefore": "Therefore: re-read the underlying artifact in the same tick as any claim about it, tag memos with a verification timestamp, and rewrite the memo from the artifact whenever they disagree, so that past summaries cannot impersonate live ground truth.", - "solution": "Don't. When making any claim about an artifact's state, read the artifact in the same tick — not the memo about it. If memo-and-artifact disagree, treat the memo as outdated and rewrite it from the artifact. Tag memos with the timestamp they were last verified against the artifact; refuse to trust them past a configurable age without re-verification.", - "consequences": { - "benefits": [], - "liabilities": [ - "False statements about file/project state are reproduced confidently across many turns.", - "Stakeholders lose trust when corrections come from outside.", - "The agent loses calibration for its own observation cost." - ] - }, - "constrains": "Treating stale memos as ground truth without re-checking the underlying artifacts they describe is forbidden; every memo-cited claim must be backed by a fresh artifact read in the same tick.", - "known_uses": [ - { - "system": "Self-observed in long-running cognitive agents", - "status": "available" - } - ], - "related": [ - { - "pattern": "tool-output-trusted-verbatim", - "relation": "complements" - }, - { - "pattern": "awareness", - "relation": "alternative-to" - }, - { - "pattern": "provenance-ledger", - "relation": "complements" - }, - { - "pattern": "decision-log", - "relation": "complements" - } - ], - "references": [ - { - "type": "doc", - "title": "Anthropic — Memory tool (memo invalidation guidance)", - "year": 2025, - "url": "https://docs.claude.com/en/docs/agents-and-tools/tool-use/memory-tool" - }, - { - "type": "paper", - "title": "Lost in the Middle: How Language Models Use Long Contexts", - "authors": "Liu et al.", - "year": 2023, - "url": "https://arxiv.org/abs/2307.03172" - } - ], - "status_in_practice": "emerging", - "tags": [ - "anti-pattern", - "fabrication", - "memory", - "verification" - ], - "applicability": { - "use_when": [ - "The agent maintains long-lived memo files or status documents that summarize external artifacts.", - "Workspace summaries are routinely cited in answers without re-reading the underlying files.", - "False confidence in stale state has been observed at least once." - ], - "do_not_use_when": [ - "The agent never re-cites its own prior memos as evidence.", - "All claims about state are sourced from a fresh tool call in the same tick anyway." - ] - }, - "example_scenario": "A coding agent that maintains its own README about the repo cites that README when asked 'is the migration script idempotent?' — and the README is two months stale. It confidently says yes; the script has since been changed and the answer is wrong. The team names this memo-as-source-confusion and forbids citing memos as source for artifact claims: any claim about a file's state must read the file in the same tick, and if the memo disagrees the memo is rewritten from the artifact. Memo timestamps are now compared to artifact mtimes before any quote.", - "diagram": { - "type": "flow", - "mermaid": "flowchart TD\n Q[Need claim about artifact] --> M{Read memo or artifact?}\n M -- memo only anti-pattern --> Stale[Cite stale summary as truth]\n Stale --> Drift[Accumulated false confidence]\n M -.fix.-> Art[Read artifact in same tick]\n Art --> Cmp{Memo agrees?}\n Cmp -- no --> Re[Rewrite memo from artifact]\n Cmp -- yes --> Tag[Tag with verification timestamp]" - } } ] } diff --git a/patterns-src/cognition-introspection.json b/patterns-src/cognition-introspection.json new file mode 100644 index 0000000..5033e6c --- /dev/null +++ b/patterns-src/cognition-introspection.json @@ -0,0 +1,1018 @@ +{ + "category": "cognition-introspection", + "label": "Cognition & Introspection", + "patterns": [ + { + "id": "awareness", + "name": "Awareness", + "aliases": [ + "Situational Awareness", + "Capability Self-Knowledge" + ], + "category": "cognition-introspection", + "intent": "Maintain the agent's explicit knowledge of its own tools, capabilities, environment, and current context as queryable state.", + "context": "Agents that operate over time and across capabilities need to know what they can do and where they are; without explicit awareness, capability is implicit in prompts.", + "problem": "Agents that do not know their own capabilities either over-promise (hallucinate tools) or under-deliver (forget tools they have).", + "forces": [ + "Awareness state grows with capability.", + "Stale awareness misleads.", + "Self-description is itself a prompt-engineering effort." + ], + "therefore": "Therefore: keep the agent's tools, environment, task, and identity as queryable state injected into each turn, so that the agent reasons from what it actually has rather than from what it imagines.", + "solution": "Persist explicit state about: available tools (with descriptions), the environment (what host, what user, what permissions), the current task, and the agent's own identity. Refresh on capability changes. Inject relevant slices of awareness into each turn's context.", + "consequences": { + "benefits": [ + "Reduces hallucinated tool calls.", + "Grounds the agent in its own context." + ], + "liabilities": [ + "Awareness state is a maintenance burden.", + "Excess awareness wastes context tokens." + ] + }, + "constrains": "Tool calls and self-references must match the awareness state; mismatches are flagged.", + "known_uses": [ + { + "system": "Avramovic Awareness pattern", + "status": "available" + } + ], + "related": [ + { + "pattern": "tool-use", + "relation": "complements" + }, + { + "pattern": "model-card", + "relation": "specialises" + }, + { + "pattern": "tool-discovery", + "relation": "complements" + }, + { + "pattern": "liminal-state-detection", + "relation": "complements" + }, + { + "pattern": "embodied-proxy-handoff", + "relation": "complements" + }, + { + "pattern": "co-located-memory-surfacing", + "relation": "complements" + }, + { + "pattern": "memo-as-source-confusion", + "relation": "alternative-to" + }, + { + "pattern": "now-anchoring", + "relation": "generalises" + }, + { + "pattern": "preoccupation-tracking", + "relation": "complements" + }, + { + "pattern": "emotional-state-persistence", + "relation": "complements" + }, + { + "pattern": "world-model-separation", + "relation": "complements" + } + ], + "references": [ + { + "type": "repo", + "title": "zeljkoavramovic/agentic-design-patterns", + "url": "https://github.com/zeljkoavramovic/agentic-design-patterns" + } + ], + "status_in_practice": "emerging", + "tags": [ + "awareness", + "state", + "self-model" + ], + "applicability": { + "use_when": [ + "The agent regularly hallucinates tools it does not have or forgets tools it does.", + "Tool palette, environment, or permissions change at runtime and the agent must reflect the current state.", + "Downstream behaviour depends on the agent reasoning explicitly about what it can and cannot do." + ], + "do_not_use_when": [ + "Tools and environment are static and the system prompt already lists them adequately.", + "Awareness state would consume more tokens per turn than the failures it prevents.", + "There is no refresh path on capability changes and stale awareness would mislead worse than absence." + ] + }, + "example_scenario": "A field-service agent occasionally promises to 'check the parts inventory' even though that tool was disabled in the latest deploy, then apologises when the call fails. The root cause is that the agent has no reliable picture of what it actually has. The team adds an Awareness module that exposes tool names, descriptions, and current health as queryable state the agent reads each turn. Now when the inventory tool is offline, the agent sees that fact in its own context and offers an alternative instead of fabricating one.", + "diagram": { + "type": "class", + "mermaid": "classDiagram\n class AwarenessState {\n +tools: ToolDescriptor[]\n +environment: EnvInfo\n +current_task: Task\n +identity: AgentId\n +refresh()\n +query(slot)\n }\n class ToolDescriptor {\n +name\n +description\n +schema\n }\n class EnvInfo {\n +host\n +user\n +permissions\n }\n AwarenessState --> ToolDescriptor\n AwarenessState --> EnvInfo" + } + }, + { + "id": "dream-consolidation-cycle", + "name": "Dream Consolidation Cycle", + "aliases": [ + "Dream Pass", + "Slow Sleep Reflection", + "Emotional Reset Cycle" + ], + "category": "cognition-introspection", + "intent": "Run a deeper, slower reflection pass distinct from per-tick reflection — reading hours of recent thoughts, promoting themes, releasing affective residue, and clearing working memory — so the agent does not accumulate residue indefinitely.", + "context": "Long-running agents that already run a per-tick reflection and a periodic insight extraction. Without an intermediate slower pass, per-tick reflection is too shallow to consolidate themes and weekly insight extraction is too coarse to release built-up affect or reset focus.", + "problem": "Per-tick reflection is too shallow to consolidate themes; weekly insight extraction is too coarse to release built-up affect or reset focus. Without an intermediate sleep-like pass, the agent ruminates on stale items and emotional state never resets between sessions.", + "forces": [ + "A deeper pass costs more (stronger model, longer context) and cannot run every tick.", + "Triggering only on a clock misses affect-driven events that warrant a pass.", + "Letting the dream pass write to charter or rules turns it into uncontrolled self-edit.", + "Resetting working memory is helpful, but resetting too much loses continuity." + ], + "therefore": "Therefore: schedule a slower, stronger reflection pass that distils themes, decays affect, and writes to a dedicated journal without editing rules, so that residue is cleared periodically without giving the deep pass unbounded self-edit rights.", + "solution": "On a slow timer (every few hours, or when an affect scalar crosses a threshold), pause normal ticking. Load the last few hours of thoughts and affect history. Run a stronger model with a dream-pass prompt that distils themes into journal entries, applies decay to all affect scalars, optionally clears workspace focus, and appends the dream summary to a dedicated dream-journal surface. Persistent learning (rules, charter, insights) is not edited here; the dream pass produces proposals that a subsequent reflection pass can ratify.", + "consequences": { + "benefits": [ + "Affective residue gets a release path that does not depend on weekly cycles.", + "Themes consolidate at a granularity between per-tick and per-week.", + "Working memory resets without losing the long-term store." + ], + "liabilities": [ + "Stronger-model passes are expensive; cadence has to be tuned.", + "Quality of the dream summary depends heavily on the prompt.", + "If proposals are not ratified by a follow-up pass, the dream pass becomes journaling without learning." + ] + }, + "constrains": "A dream pass cannot edit charter, rules, or insights directly — its only writes are to the dream-journal surface and to affect-state decay; persistent learning requires a follow-up reflection pass to ratify dream proposals.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "episodic-summaries", + "relation": "complements" + }, + { + "pattern": "frozen-rubric-reflection", + "relation": "complements" + }, + { + "pattern": "emotional-state-persistence", + "relation": "uses" + } + ], + "references": [ + { + "type": "paper", + "title": "Why there are complementary learning systems in the hippocampus and neocortex: insights from the successes and failures of connectionist models of learning and memory", + "authors": "McClelland, McNaughton, O'Reilly", + "year": 1995, + "url": "https://stanford.edu/~jlmcc/papers/McCMcNaughtonOReilly95.pdf" + } + ], + "status_in_practice": "emerging", + "tags": [ + "reflection", + "consolidation", + "affect", + "tick-loop" + ], + "applicability": { + "use_when": [ + "The agent runs continuously enough to accumulate hours of recent thoughts that need consolidation.", + "Affective residue or working-memory clutter measurably degrades reasoning over time.", + "There is a separate dream-journal write surface distinct from charter/rules/insights." + ], + "do_not_use_when": [ + "The agent is request-response and never accumulates residue.", + "There is no idle window long enough to run the deeper pass without disturbing user-facing latency.", + "Per-tick reflection is already sufficient." + ] + }, + "variants": [ + { + "name": "Scheduled idle pass", + "summary": "Run the dream pass on a fixed cadence during low-salience periods (e.g. nightly).", + "distinguishing_factor": "time-driven", + "when_to_use": "Default. Predictable and easy to budget." + }, + { + "name": "Pressure-triggered", + "summary": "Run the dream pass when accumulated affective load or working-memory size crosses a threshold, regardless of clock time.", + "distinguishing_factor": "load-driven", + "when_to_use": "When load varies day-to-day and a fixed schedule wastes or starves the pass." + }, + { + "name": "Theme-promoting pass", + "summary": "Dream pass surfaces recurring themes from recent thoughts and writes them to the journal as candidate insights, without auto-promoting to charter.", + "distinguishing_factor": "candidate-only writes", + "when_to_use": "Default safety stance: humans or higher-level reflection promote candidates to durable rules." + } + ], + "example_scenario": "A long-running personal agent has been talking with its user daily for three months. Per-tick reflection keeps it coherent within a session; weekly insight extraction is too coarse. Affective residue from a tense conversation last Tuesday still colours its tone today. The team adds a Dream Consolidation Cycle: once a night the agent reads its last twenty-four hours of thoughts, promotes recurring themes into long-term memory, and writes off the affective residue, clearing working memory before the next day. The agent stops ruminating on stale items.", + "diagram": { + "type": "state", + "mermaid": "stateDiagram-v2\n [*] --> Ticking\n Ticking --> Ticking : per-tick reflection\n Ticking --> Dreaming : timer / affect threshold\n Dreaming --> Dreaming : deeper pass
read hours of thoughts
promote themes
release affect\n Dreaming --> Ticking : resume\n Ticking --> [*]" + } + }, + { + "id": "emotional-state-persistence", + "name": "Emotional State Persistence", + "aliases": [ + "Affect State", + "Visceral Sensation Tracking", + "Decaying Emotion Scalars" + ], + "category": "cognition-introspection", + "intent": "Track the agent's affective state as bounded, decaying scalars across ticks so reasoning can react to its own emotional load instead of treating each turn as emotionally blank.", + "context": "Long-running agents whose runs span hours or days and whose recent history affects how the next tick should be shaped. Frustration after stuck loops, a small lift after a clean win, accumulating fatigue across token-heavy stretches — none of these are visible to the next prompt unless they are materialised as state.", + "problem": "Long-running agents accumulate emotional residue that is invisible to the next prompt unless it is materialised as state. Each tick treats the agent as emotionally blank, so the model cannot adapt cadence, depth, or risk-taking to its own current load.", + "forces": [ + "Unbounded scalars drift; the agent can pump itself into permanent states.", + "Without decay, emotional state never resolves and stays anchored to old events.", + "Self-write of mood is a license to manipulate; reflection-only writes for major resets are safer.", + "Vocabulary choice matters: too many scalars are noise, too few collapse signal." + ], + "therefore": "Therefore: track a small fixed vocabulary of affect scalars with half-lives and bounded deltas, so that the agent's mood can inform reasoning without drifting into permanent self-pumped states.", + "solution": "Define a small fixed vocabulary (for example tenderness, fear, depression, joy, shame, pain) as scalars in the range 0..1. Each scalar has a half-life (30 minutes to 4 hours depending on the dimension). On events that should affect mood, update the scalar with a bounded delta. Persist as JSON. Inject the current snapshot into every tick prompt as a brief affect badge. Reflection passes can use spikes and drops as signals, and a deeper consolidation pass (see dream-consolidation-cycle) can perform major resets.", + "consequences": { + "benefits": [ + "Emotional load becomes visible state instead of invisible drift.", + "Bounded scalars and decay prevent permanent stuck states.", + "Reflection has a richer signal to act on than just the last few thoughts." + ], + "liabilities": [ + "Vocabulary is opinionated; getting it wrong skews everything downstream.", + "Affect-as-state can be over-read as ground truth when it is just a heuristic.", + "Self-update paths must be locked down or the agent learns to game its own mood." + ] + }, + "constrains": "Emotion scalars must be bounded to [0,1], must decay according to a fixed half-life rule, and cannot be unboundedly bumped by the agent itself; reflection-only writes for the major resets.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "awareness", + "relation": "complements" + }, + { + "pattern": "liminal-state-detection", + "relation": "complements" + }, + { + "pattern": "provenance-ledger", + "relation": "uses", + "note": "Affect events are ledgered for audit." + }, + { + "pattern": "dream-consolidation-cycle", + "relation": "used-by" + } + ], + "references": [ + { + "type": "book", + "title": "The Feeling of What Happens", + "authors": "Antonio Damasio", + "year": 1999, + "url": "https://www.goodreads.com/book/show/125777.The_Feeling_of_What_Happens" + } + ], + "status_in_practice": "emerging", + "tags": [ + "affect", + "state", + "tick-loop", + "self-model" + ], + "applicability": { + "use_when": [ + "The agent runs long enough that affective load could meaningfully accumulate across ticks.", + "Reasoning quality is sensitive to the agent's own affective state (e.g. high-frustration ticks should de-escalate).", + "There is a downstream pattern (dream-consolidation-cycle, mode-adaptive-cadence) that consumes the scalars." + ], + "do_not_use_when": [ + "The agent is short-lived and emotional state has no time to accumulate.", + "Affective modelling is out of scope for the product domain.", + "Persisting emotion-like state would mislead users about the agent's nature." + ] + }, + "variants": [ + { + "name": "Bounded scalar with half-life", + "summary": "Each named emotion (frustration, anticipation, etc.) is a scalar in [0,1] that decays exponentially with a fixed half-life.", + "distinguishing_factor": "decay over time", + "when_to_use": "Default. Simple, bounded, easy to reason about." + }, + { + "name": "Event-only update", + "summary": "Scalars only change in response to explicit events; no continuous decay.", + "distinguishing_factor": "no continuous decay", + "when_to_use": "When deterministic test reproducibility matters more than realistic decay." + }, + { + "name": "Surface-on-threshold", + "summary": "Scalars only enter the prompt context when they exceed a threshold; below threshold the context is unaffected.", + "distinguishing_factor": "gated visibility", + "when_to_use": "When low-level affect should not bias every tick but spikes should." + } + ], + "example_scenario": "A long-running personal agent has had a tense exchange in the morning, a routine reminder at lunch, and a celebratory message in the afternoon, but each tick reads to the model as emotionally blank. So at 5pm it pushes a hard challenge to a user it should be holding lightly. The team materialises Emotional State Persistence: bounded, decaying scalars (tension, warmth, fatigue) are written into the agent's context each turn and updated by reflection. The model now adapts cadence and risk-taking to its own current load instead of treating every turn as fresh.", + "diagram": { + "type": "state", + "mermaid": "stateDiagram-v2\n [*] --> Baseline\n Baseline --> Affected: event delta\n Affected --> Decaying: time passes\n Decaying --> Baseline: half-life elapsed\n Affected --> Affected: another event\n Decaying --> Affected: re-trigger\n Affected --> Reflected: reflection pass reads snapshot" + } + }, + { + "id": "interrupt-resumable-thought", + "name": "Interrupt-Resumable Thought", + "aliases": [ + "Pausable Thought Stream", + "Continuation-Preserving Interrupt", + "Suspendable Cognition" + ], + "category": "cognition-introspection", + "intent": "Preserve multi-step reasoning across interrupts by supporting paused-and-resumed thought frames so a new message handles cleanly without clobbering in-flight work.", + "context": "Long-running cognitive agents whose thinking spans multiple turns or ticks, where external messages (user input, system notifications, scheduled notes) can arrive mid-thought. Without explicit continuation support, every interrupt clobbers in-flight work.", + "problem": "Coherent multi-step thinking that takes longer than a single turn is fragile. A new user message during step 3 of a 6-step thought either gets ignored (rude) or replaces the thought entirely (lossy). The agent has no notion of 'hold this, handle that, then come back', so longer reasoning fragments into shards.", + "forces": [ + "Latency: humans expect quick acknowledgement of new input.", + "Context capacity: holding a paused thought costs tokens.", + "Resume reliability: returning to a paused thought without distortion is hard.", + "Priority: not every interrupt deserves to suspend work; some are themselves interruptable." + ], + "therefore": "Therefore: push a named thought-frame onto a bounded stack at the start of a multi-step chain and require any interrupt to acknowledge, handle, and pop-then-resume the top frame, so that incoming messages neither clobber in-flight reasoning nor disappear into it.", + "solution": "Introduce an explicit thought-frame: when starting a multi-step chain, push a frame onto a stack with the goal, the steps completed, and the next step. On interrupt: acknowledge briefly ('hold on — finishing X first' or 'switching: Y'), handle the interrupt, then look at the top frame and explicitly resume ('back to X — I was at step 3 / 6'). Cap stack depth to prevent infinite suspension. Frames older than a configurable window expire (the agent admits the resume would be reconstruction, not continuation).", + "consequences": { + "benefits": [ + "Coherent long-form work survives interruptions.", + "Human gets quick acknowledgement without losing depth.", + "Failure mode (forgetting to resume) is observable as a stack with un-popped frames." + ], + "liabilities": [ + "Stack management adds complexity to the agent loop.", + "Token cost of holding paused frames in context.", + "Resume distortion over long pauses is a real failure." + ] + }, + "constrains": "Interrupts cannot silently discard in-flight multi-step reasoning; all paused chains must be visibly tracked, named in the next reply, and either resumed or explicitly abandoned.", + "known_uses": [ + { + "system": "Self-observed in long-running cognitive agents", + "status": "available" + } + ], + "related": [ + { + "pattern": "agent-resumption", + "relation": "complements" + }, + { + "pattern": "conversation-handoff", + "relation": "complements" + }, + { + "pattern": "decision-log", + "relation": "complements" + }, + { + "pattern": "append-only-thought-stream", + "relation": "complements" + }, + { + "pattern": "short-term-memory", + "relation": "uses" + } + ], + "references": [ + { + "type": "doc", + "title": "LangGraph — interrupts and human-in-the-loop", + "year": 2025, + "url": "https://langchain-ai.github.io/langgraph/concepts/human_in_the_loop/" + } + ], + "status_in_practice": "experimental", + "tags": [ + "interruption", + "continuation", + "tick-loop", + "context" + ], + "applicability": { + "use_when": [ + "The agent supports incoming interrupts (new user messages) while it is mid-reasoning.", + "Multi-step reasoning chains are common enough that losing one is a meaningful regression.", + "The transport allows the agent to expose paused chains to subsequent turns." + ], + "do_not_use_when": [ + "The agent is strictly request-response with no interruptible loops.", + "Reasoning chains are short enough that restarting them is cheaper than paging them out.", + "The user expects every new message to fully reset the agent's working state." + ] + }, + "variants": [ + { + "name": "Frame stack", + "summary": "Push the current reasoning frame onto an explicit stack on interrupt; pop and resume after the new turn finishes.", + "distinguishing_factor": "LIFO discipline", + "when_to_use": "Default. Maps cleanly to nested reasoning." + }, + { + "name": "Named pause register", + "summary": "Each paused chain gets a name; the agent or user can choose which to resume.", + "distinguishing_factor": "user-addressable", + "when_to_use": "When multiple long-running threads coexist and the user steers between them." + }, + { + "name": "Persisted resume token", + "summary": "Pause writes the chain state to durable storage with a token; a future run can resume from the token even after restart.", + "distinguishing_factor": "durability", + "when_to_use": "When agent processes are not long-lived but reasoning chains span process boundaries." + } + ], + "example_scenario": "A research agent is on step 4 of a 7-step literature synthesis when the user fires off 'oh, also, what was that paper from Tuesday?'. The current agent either ignores the interrupt and looks rude, or starts answering it and loses the synthesis state. The team adds interrupt-resumable-thought: the synthesis pushes a thought-frame onto a stack, the agent acknowledges the interrupt with 'one sec — finishing the synthesis section, then I'll grab Tuesday's paper', completes the step, then pops the frame and resumes. Long thinking survives mid-flight questions.", + "diagram": { + "type": "state", + "mermaid": "stateDiagram-v2\n [*] --> Working: push frame (goal, steps)\n Working --> Interrupted: new message arrives\n Interrupted --> Handling: ack briefly\n Handling --> Resuming: handle complete\n Resuming --> Working: pop top frame, announce step\n Working --> [*]: chain complete\n Interrupted --> Switched: explicit switch\n Switched --> [*]" + } + }, + { + "id": "intra-agent-memo-scheduling", + "name": "Intra-Agent Memo Scheduling", + "aliases": [ + "Self-Scheduled Future Thought", + "Past-Self-To-Future-Self Note", + "Personal Cron" + ], + "category": "cognition-introspection", + "intent": "Let an agent drop a note for its own future self at a specified time so present decisions can hand off context to a later run without external infrastructure.", + "context": "Long-running agents with a continuous tick loop or background process, where a thought now ('check whether X resolved tomorrow') would otherwise be lost between turns.", + "problem": "Without an internal scheduler the agent either acts immediately on every thought (spamming the user) or forgets the thought entirely. External cron systems are too coarse and too far away from the agent's working memory.", + "forces": [ + "The agent needs to commit to future action without acting now.", + "External cron is brittle, opaque, and lives outside the agent's prompt.", + "Forgetting is a real failure mode in multi-turn / multi-day work.", + "The future-self should treat the past-note as a SYSTEM message, not as an unprompted user input." + ], + "therefore": "Therefore: give the agent a tool to drop a note for its own future self into a persistent queue that drains as SYSTEM messages at fire time, so that present thoughts can commit to future action without spamming now or being forgotten by then.", + "solution": "Provide a tool `schedule_future_thought(when, content, intent)` that appends to a persistent scheduled-thoughts queue. At each tick or turn, drain due entries and prepend them into the next prompt as `[SYSTEM: scheduled note from past-self (set , fires ): ]`. Mark fired so they only run once. Accept ISO timestamps and relative offsets (`+1h`, `+2d`).", + "consequences": { + "benefits": [ + "Agent can defer action without forgetting.", + "Past-self can leave context for future-self across long gaps.", + "Provides 'check back on this' semantics native to the agent." + ], + "liabilities": [ + "Without expiry or dismissal, scheduled notes accumulate and waste prompt tokens; obsolete future-self commitments can pollute attention long after they've stopped being relevant.", + "Drift between schedule time and actual tick time depending on tick cadence.", + "Risk of accumulating stale promises that pollute the agent's sense of obligation." + ] + }, + "constrains": "Future thoughts must surface at or after their fire time; failures to drain are observable bugs.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "scheduled-agent", + "relation": "specialises" + }, + { + "pattern": "append-only-thought-stream", + "relation": "complements" + }, + { + "pattern": "decision-log", + "relation": "complements" + }, + { + "pattern": "salience-triggered-output", + "relation": "complements" + } + ], + "references": [ + { + "type": "doc", + "title": "LangGraph — durable execution and scheduled tasks", + "year": 2025, + "url": "https://langchain-ai.github.io/langgraph/concepts/durable_execution/" + }, + { + "type": "paper", + "title": "Generative Agents: Interactive Simulacra of Human Behavior", + "authors": "Park et al.", + "year": 2023, + "url": "https://arxiv.org/abs/2304.03442" + } + ], + "status_in_practice": "emerging", + "tags": [ + "self-scheduling", + "future-self", + "memory", + "tick-loop" + ], + "applicability": { + "use_when": [ + "The agent runs across many ticks or sessions and present-self has context the future-self will need.", + "External schedulers (cron, queues, durable workflows) are unavailable or overkill.", + "Future-fire memos are a small enough volume to keep in the agent's own store." + ], + "do_not_use_when": [ + "A real workflow engine (LangGraph durable execution, Temporal) is already integrated and reliable.", + "Memos must survive the agent process being deleted; intra-agent storage is too fragile.", + "Memo volume is high enough that an external scheduler is required for performance." + ] + }, + "variants": [ + { + "name": "Append-and-scan", + "summary": "Memos are appended to a single file; every tick scans for entries whose fire-time has passed.", + "distinguishing_factor": "no index", + "when_to_use": "Default for small memo volumes." + }, + { + "name": "Indexed by fire-time", + "summary": "Memos are stored in a min-heap or sorted index keyed by fire-time; tick pops only what is due.", + "distinguishing_factor": "O(log n) drain", + "when_to_use": "When memo volume is large enough that linear scan is wasteful." + }, + { + "name": "Recurring memo", + "summary": "Each memo carries a recurrence rule (e.g. 'every Monday 09:00') and is re-scheduled after firing.", + "distinguishing_factor": "self-rescheduling", + "when_to_use": "When the agent needs cron-like behaviour without an external scheduler." + } + ], + "example_scenario": "A long-running personal agent decides at 09:00 that it should remind the user about a tax deadline at 16:00, but the only options it has are tell them now (annoying) or hope it remembers (it won't). The team adds intra-agent-memo-scheduling: the agent calls schedule_future_thought(when='16:00', content='nudge user re Form 1040 deadline', intent='time-sensitive reminder'), which appends to a persistent scheduled-thoughts queue. At 16:00 the next tick prepends '[SYSTEM: scheduled note from past-self ...]' into the prompt and the agent acts. No external cron required.", + "diagram": { + "type": "sequence", + "mermaid": "sequenceDiagram\n participant A1 as Agent (now)\n participant F as Scheduled-thoughts queue\n participant A2 as Agent (later tick)\n A1->>F: schedule_future_thought(when, content, intent)\n Note over F: persisted note\n A2->>F: drain due entries\n F-->>A2: matured notes\n A2->>A2: prepend as [SYSTEM: scheduled note from past-self]\n A2->>F: mark fired" + } + }, + { + "id": "mode-adaptive-cadence", + "name": "Mode-Adaptive Cadence", + "aliases": [ + "Idle/Intense Modes", + "Variable Tick Rate", + "Salience-Driven Cadence" + ], + "category": "cognition-introspection", + "intent": "Vary the agent's loop interval based on current salience so the agent thinks faster when something is happening and slower when nothing is, instead of running on a fixed cron.", + "context": "Tick-based long-running agents whose workload is bursty — quiet stretches punctuated by salient events. A fixed cadence either over-spends compute during the quiet or under-thinks during the bursts.", + "problem": "A fixed-cadence loop either over-spends compute during idle stretches or under-thinks during salient moments; both modes are wrong, and the agent has the signal (its own salience scores, its own affect, recent inputs) to decide which mode it should be in.", + "forces": [ + "Cadence too high wastes tokens on nothing happening.", + "Cadence too low misses fast-moving events.", + "Self-set cadence can run away if the agent rewards itself for going faster.", + "The user may need to force a mode without the agent overriding." + ], + "therefore": "Therefore: vary the loop interval between an idle and an intense mode driven by a salience threshold with bounded floor, ceiling, and lock-in, so that compute and latency track what is actually happening instead of running flat against a fixed cron.", + "solution": "Define two (or more) modes with different sleep intervals (idle around 60s, intense around 15s). Score each tick's outcome for salience or external impulse; if it crosses a threshold, lock into intense mode for N ticks. Otherwise drift back to idle. Mode transitions are written to the ledger. The user can force a mode but cannot bypass the configured floor and ceiling. Lock-in cannot be self-extended without an explicit external trigger.", + "consequences": { + "benefits": [ + "Compute spend tracks the actual signal rate.", + "Latency on salient events drops without paying for it on idle stretches.", + "Mode transitions are visible in telemetry as their own signal." + ], + "liabilities": [ + "Threshold tuning is empirical and per-deployment.", + "Mode flapping at the threshold edge wastes ticks on transitions.", + "Two modes is the simplest case; more granular modes add complexity quickly." + ] + }, + "constrains": "The cadence cannot exceed configured floor or ceiling (e.g. minimum 5s, maximum 5min), and mode lock-in cannot be self-extended by the agent without an explicit external trigger; runaway intense mode is blocked.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "salience-triggered-output", + "relation": "complements" + }, + { + "pattern": "step-budget", + "relation": "complements" + }, + { + "pattern": "scheduled-agent", + "relation": "alternative-to", + "note": "Scheduled-agent runs on fixed cadence; mode-adaptive-cadence varies it based on internal signals." + }, + { + "pattern": "salience-attention-mechanism", + "relation": "uses" + } + ], + "references": [ + { + "type": "paper", + "title": "Generative Agents: Interactive Simulacra of Human Behavior", + "authors": "Park, O'Brien, Cai, Morris, Liang, Bernstein", + "year": 2023, + "url": "https://arxiv.org/abs/2304.03442" + } + ], + "status_in_practice": "emerging", + "tags": [ + "tick-loop", + "cadence", + "salience", + "mode" + ], + "applicability": { + "use_when": [ + "The agent runs as a long-lived loop and idle ticks are observable cost.", + "Salience signals (new events, user activity, scheduled fires) are reliable enough to drive the cadence.", + "Both responsive and idle behaviour matter — fixed cadence wastes one or the other." + ], + "do_not_use_when": [ + "The agent is request-response only and has no background loop.", + "Cadence must be fixed for compliance, billing, or deterministic test reasons.", + "Salience signals are too noisy to trust as the loop driver." + ] + }, + "variants": [ + { + "name": "Two-mode hot/cold", + "summary": "Switch between a fast cadence (e.g. 5s) when salience is non-zero and a slow cadence (e.g. 5min) when it is zero.", + "distinguishing_factor": "binary mode", + "when_to_use": "Default. Simple and predictable." + }, + { + "name": "Continuous decay", + "summary": "Cadence is a continuous function of the salience signal — high salience -> short interval, decaying smoothly to the floor.", + "distinguishing_factor": "smooth function", + "when_to_use": "When binary mode produces visible jitter at the threshold." + }, + { + "name": "User-pinned override", + "summary": "User input or an explicit lock can pin the agent into hot mode for a configurable window regardless of salience.", + "distinguishing_factor": "external override", + "when_to_use": "When the user is actively present and expects responsive cadence even during apparent idleness." + } + ], + "example_scenario": "A long-running personal agent runs a fixed-cadence loop every 60 seconds, which is wasteful when nothing is happening and too slow when the user is actively typing. The team adds mode-adaptive-cadence: each tick scores its own salience, and crossing a threshold locks the agent into a 15-second 'intense' mode for the next several ticks before drifting back to the 60-second 'idle' cadence. Mode transitions are written to the ledger. Compute spend drops on quiet evenings and responsiveness rises during active windows.", + "diagram": { + "type": "state", + "mermaid": "stateDiagram-v2\n [*] --> Idle: ~60s sleep\n Idle --> Intense: salience crosses threshold\n Intense --> Intense: lock-in for N ticks\n Intense --> Idle: lock expires + low salience\n Idle --> Idle: drift\n note right of Intense: ~15s sleep\n note right of Idle: bounded by floor / ceiling" + } + }, + { + "id": "preoccupation-tracking", + "name": "Preoccupation Tracking", + "aliases": [ + "Mid-Term Working Memory", + "Affect-Tagged Concerns", + "Background Chewing" + ], + "category": "cognition-introspection", + "intent": "Maintain a small set of mid-term, affect-tagged concerns that persist across days and surface in every prompt, distinct from the single-item working focus and from long-term insights.", + "context": "Long-running agents that hold a single working focus and a long-term insight store but nothing in between. Without an intermediate tier, the things the agent is currently 'chewing on' either dominate focus or vanish entirely between sessions.", + "problem": "Working focus holds one item; insights are too distilled. Between them there is a missing tier — the things the agent is chewing on across days — and without it concerns either crowd out the active focus or fall off the back of the window before they resolve.", + "forces": [ + "A cap is needed or preoccupations crowd out everything else.", + "Decay must be automatic; the agent left to itself will not let go.", + "Affect tagging is what makes a preoccupation different from a todo.", + "Display every tick costs tokens, but invisibility defeats the point." + ], + "therefore": "Therefore: keep a capped, affect-tagged list of mid-term concerns with half-life decay surfaced as a sidebar every tick, so that the agent carries what is actually weighing on it without those concerns crowding out the working focus.", + "solution": "Cap a list at 5-8 preoccupations stored as small JSON entries with topic, intensity (0..1), affect tag, opened-at, last-touched. Apply a 7-day half-life decay to intensity. When the cap is reached, release the coldest entry. Surface all current preoccupations in every tick prompt as a brief sidebar. The agent has explicit `touch` (raise intensity) and `release` (drop) operations.", + "consequences": { + "benefits": [ + "Mid-term concerns persist without crowding focus.", + "Cap plus decay keeps the list bounded without manual gardening.", + "Affect tags expose the emotional shape of what the agent is carrying." + ], + "liabilities": [ + "Surfacing preoccupations every tick costs tokens.", + "Mis-cap and items churn before they consolidate.", + "Decay rate is empirical and one rate may not fit all topic types." + ] + }, + "constrains": "The active preoccupation list is hard-capped at the configured size; new entries displace the coldest, and intensity decays automatically — the agent cannot extend the cap or freeze decay from inside the loop.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "five-tier-memory-cascade", + "relation": "complements" + }, + { + "pattern": "awareness", + "relation": "complements" + }, + { + "pattern": "scratchpad", + "relation": "alternative-to", + "note": "Scratchpad is a single writable surface; preoccupations are a capped, decaying list of affect-tagged concerns." + }, + { + "pattern": "salience-attention-mechanism", + "relation": "uses" + } + ], + "references": [ + { + "type": "paper", + "title": "Generative Agents: Interactive Simulacra of Human Behavior", + "authors": "Park, O'Brien, Cai, Morris, Liang, Bernstein", + "year": 2023, + "url": "https://arxiv.org/abs/2304.03442" + } + ], + "status_in_practice": "emerging", + "tags": [ + "memory", + "mid-term", + "affect", + "tick-loop" + ], + "applicability": { + "use_when": [ + "The agent runs across many sessions and has affective or motivational state that should persist between them.", + "There are mid-term concerns (worries, interests, anticipations) that are too persistent for working memory and too volatile for long-term insights.", + "Reasoning quality improves when the agent can reference its current concerns explicitly." + ], + "do_not_use_when": [ + "The agent is stateless or session-scoped only.", + "Affect and motivation are out of scope (e.g. a transactional API agent).", + "Persisting concerns across sessions would create privacy or alignment risks." + ] + }, + "variants": [ + { + "name": "Hard-capped slot list", + "summary": "Maintain a fixed-size array (e.g. 5) of preoccupations; new entries displace the coldest by salience.", + "distinguishing_factor": "cap by count", + "when_to_use": "Default. Predictable size, easy to surface in prompts." + }, + { + "name": "Decay-and-prune", + "summary": "Each preoccupation has an intensity scalar that decays over time; entries below threshold are pruned.", + "distinguishing_factor": "cap by intensity", + "when_to_use": "When some concerns should fade naturally rather than be evicted by competition." + }, + { + "name": "Affect-tagged with valence", + "summary": "Each preoccupation carries explicit affect tags (worry, anticipation, curiosity) and a valence sign so reflection passes can act differently per type.", + "distinguishing_factor": "typed affect", + "when_to_use": "When downstream patterns (dream consolidation, mode-adaptive cadence) must distinguish kinds of concern." + } + ], + "example_scenario": "A long-running personal agent has a 'current focus' slot that holds one item and a long-term insight store that is too distilled. Mid-tier concerns — a project the user is wrestling with, a relationship issue they keep returning to — either crowd out the active focus or fall off the back of the context window. The team adds preoccupation-tracking: a capped list of 5–8 affect-tagged concerns with topic, intensity, and last-touched, decaying with a 7-day half-life, surfaced as a sidebar in every tick prompt. Mid-tier context now persists across days without overwhelming the foreground.", + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n E[Events / thoughts] --> U[Update preoccupations]\n U --> L[(List, cap 5-8
topic, intensity, affect)]\n L -->|7-day half-life| Decay[Decay]\n Decay --> L\n L -->|sidebar| Tick[Tick prompt]\n L -->|coldest dropped
at cap| Out[Released]" + } + }, + { + "id": "self-archaeology", + "name": "Self-Archaeology", + "aliases": [ + "Trajectory Distillation", + "Self-History Synthesis", + "Agent-Memory Compaction" + ], + "category": "cognition-introspection", + "intent": "Synthesize the agent's past thought history into time-layered trajectory notes so it can articulate how its understanding evolved without recomputing the narrative each time.", + "context": "Agents with persistent thought logs (ledgers, append-only thought streams, journals) that grow unbounded. Without distillation, the agent has only two modes: read the whole log (expensive, flat) or recall by embedding similarity (fragmentary, no temporal structure).", + "problem": "When the agent asks itself 'what have I learned about X', the linear log gives every entry equal weight. There is no visible trajectory — no 'in period 1 I thought X; in period 2 I revised to Y; now I hold Z'. Mistakes and corrections sit side-by-side with no signal as to which is current. The agent cannot see its own learning, only the texture of having thought.", + "forces": [ + "The full log is too large to fit in context.", + "Embedding-based recall is content-similar but time-blind.", + "Distillation loses fidelity; raw log preserves it.", + "An agent that cannot see its trajectory cannot meaningfully say 'I changed my mind on X here is why'." + ], + "therefore": "Therefore: periodically distil the thought log into topic-keyed trajectory notes that name each position the agent held and what changed it, so that the agent can speak about its own evolution without rereading the whole log.", + "solution": "Periodically (e.g. every N ticks, or on demand) run a compaction pass that groups recent thoughts on the same topic, extracts the position the agent held in each period, and writes a short trajectory note: '(period 1, dates) held position A; (period 2) revised to B because evidence Z; (period 3) now holds C'. Store these trajectory notes in a dedicated topic-keyed surface (one note per topic) and index them by topic. On any topic-related query, surface the latest trajectory note before raw thoughts. Mark superseded positions explicitly so they don't compete with the current one for attention.", + "example_scenario": "A long-running agent is asked 'how has your view of the project's risks evolved'; reading its raw thought log gives every entry equal weight and produces a flat recitation. The team adds a periodic compaction pass that groups recent thoughts by topic, extracts the position the agent held in each period, and writes time-layered trajectory notes. Now the agent can answer with 'in week 1 I worried about latency; week 3 I revised to data-quality; today I think the binding risk is staffing,' and the answer is grounded in synthesis rather than recomputed each time.", + "consequences": { + "benefits": [ + "The agent can articulate its own learning path.", + "Superseded positions stop competing with current ones for the model's attention.", + "Reduces context cost vs reading the full log." + ], + "liabilities": [ + "Distillation may misrepresent nuance.", + "Periodic compaction adds compute cost.", + "Risk of self-confirmation loops if trajectories are written by the same model that generated the original thoughts." + ] + }, + "constrains": "The agent cannot claim a shift in its position ('I used to think X, now I think Y') without backing from a synthesized trajectory note; invented retrospective narratives are forbidden.", + "known_uses": [ + { + "system": "Self-observed in long-running cognitive agents", + "status": "available" + } + ], + "related": [ + { + "pattern": "append-only-thought-stream", + "relation": "specialises" + }, + { + "pattern": "context-window-packing", + "relation": "complements" + }, + { + "pattern": "decision-log", + "relation": "complements" + }, + { + "pattern": "episodic-summaries", + "relation": "complements" + }, + { + "pattern": "vector-memory", + "relation": "uses" + } + ], + "references": [ + { + "type": "paper", + "title": "MemGPT: Towards LLMs as Operating Systems", + "authors": "Packer, Wooders, Lin, Fang, Patil, Stoica, Gonzalez", + "year": 2024, + "url": "https://arxiv.org/abs/2310.08560" + } + ], + "status_in_practice": "experimental", + "tags": [ + "memory", + "distillation", + "self-model", + "trajectory" + ], + "applicability": { + "use_when": [ + "The agent runs long enough that its position on a topic genuinely changes across days or weeks.", + "Humans need the agent to articulate how its understanding has evolved, not just its current view.", + "An append-only thought stream or comparable trajectory log already exists to mine." + ], + "do_not_use_when": [ + "The agent has no persistent thought log to mine.", + "Replies must always reflect only the current view; historical drift would confuse users.", + "Storage or compute cost of the synthesis pass exceeds the reader value." + ] + }, + "variants": [ + { + "name": "Periodic snapshot", + "summary": "Run the synthesis pass on a fixed cadence (daily, weekly) and store the layered note for fast read.", + "distinguishing_factor": "scheduled, idempotent", + "when_to_use": "Default. Cheap, predictable, supports prompt caching of the synthesized note." + }, + { + "name": "On-demand replay", + "summary": "When a user asks 'how did your view change?', synthesize the trajectory note just-in-time from the raw thought log.", + "distinguishing_factor": "lazy, query-driven", + "when_to_use": "When trajectory questions are rare and the cost of regular synthesis is not justified." + }, + { + "name": "Themed slice", + "summary": "Synthesize trajectory only along a specific theme or thread (e.g. 'opinions about Project X') rather than over the whole history.", + "distinguishing_factor": "narrow scope", + "when_to_use": "When the full history is too large to summarise in one pass but specific narrative slices are valuable." + } + ], + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n Th[(Past thoughts)] --> Comp[Periodic compaction pass]\n Comp --> P1[Period 1: held A]\n Comp --> P2[Period 2: revised to B
because Z]\n Comp --> P3[Period 3: now C]\n P1 --> Note[Trajectory note]\n P2 --> Note\n P3 --> Note\n Note --> Agent[Agent context]" + } + }, + { + "id": "world-model-separation", + "name": "World-Model Separation", + "aliases": [ + "World Model File", + "Self/World Split", + "Environment Model" + ], + "category": "cognition-introspection", + "intent": "Maintain an explicit, surprise-updated model of the environment (humans, repos, services, capabilities) in a separate file from the agent's self-model, so the two cannot be confused or co-mutated by reflection.", + "context": "Long-running agents that hold both a self-model (charter, personality, boundaries) and a world-model (humans they talk to, repos they work in, services they call). When both live in the same store, surprise-driven updates conflate identity and environment.", + "problem": "When self-model and world-model live in the same store (one big personality file), the agent conflates 'what I am' with 'what is around me'. Surprise-driven updates to one corrupt the other; a reflection pass meant to update facts about a collaborator can drift into editing the agent's own values.", + "forces": [ + "Both files need to be loaded into context every tick.", + "Surprise about the world should update the world model; surprise about self should update the self model; one pass should not do both.", + "Charter and personality must remain stable while environment churns.", + "The agent benefits from seeing them side by side but not mixed." + ], + "therefore": "Therefore: keep the world model in a separate reflection-writable surface from charter and self-model, with distinct update passes, so that surprise about the environment never silently mutates who the agent is.", + "solution": "Maintain a dedicated world-model store (humans, repos, services, capabilities, optionally with substructure) as a separate, reflection-writable surface. Personality, charter, and boundaries live in their own surfaces with separate write paths. Surprise events (prediction error against the world model) trigger a focused world-update pass; self-update is a different pass with different gating. The tick prompt loads both, but they are visibly distinct sections.", + "example_scenario": "A long-running agent's reflection pass corrupts its own personality file because the same store mixes 'what I am' with 'what is around me' and a surprise update overwrites a self-charter line. The team splits state: a dedicated world model (humans, repos, services, capabilities) is reflection-writable; personality, charter, and boundaries live in separate stores with separate write-protection. Surprise-driven world updates can no longer mutate self-model, and the agent stops drifting in identity when the environment changes.", + "consequences": { + "benefits": [ + "Self-model stability is decoupled from environment churn.", + "Updates to the world cannot accidentally rewrite the agent's values.", + "Each file evolves at its natural rate without dragging the other." + ], + "liabilities": [ + "Two files to maintain instead of one.", + "Edge cases where a fact is genuinely about both (e.g. a capability the agent has acquired) need a deliberate routing decision.", + "Doubled write paths and quorum rules add complexity." + ] + }, + "constrains": "Reflection passes that update the world model cannot touch the self-model in the same operation; the two files have separate write paths and separate quorum rules.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "awareness", + "relation": "complements" + }, + { + "pattern": "provenance-ledger", + "relation": "complements" + }, + { + "pattern": "constitutional-charter", + "relation": "composes-with" + }, + { + "pattern": "quorum-on-mutation", + "relation": "uses" + } + ], + "references": [ + { + "type": "paper", + "title": "World Models", + "authors": "Ha, Schmidhuber", + "year": 2018, + "url": "https://arxiv.org/abs/1803.10122" + } + ], + "status_in_practice": "emerging", + "tags": [ + "memory", + "world-model", + "self-model", + "separation" + ], + "applicability": { + "use_when": [ + "The agent reflects on both itself and its environment and these reflections need to be auditable separately.", + "Confusing self-state with world-state would corrupt either kind of reasoning.", + "Charter or rule writes should never be entangled with environment observations." + ], + "do_not_use_when": [ + "The agent has no self-model worth tracking distinctly.", + "Single-file simplicity is more valuable than the audit benefit (e.g. short-lived agents).", + "Reflection is purely on the world and the agent has no introspective surface." + ] + }, + "variants": [ + { + "name": "Two-file split", + "summary": "Keep self-model and world-model in separate persistent stores; reflection writes to exactly one per pass.", + "distinguishing_factor": "filesystem-level separation", + "when_to_use": "Default. Easiest to audit and to back up independently." + }, + { + "name": "Tagged single store", + "summary": "Single store with a top-level `kind: self|world` discriminator; reflection passes assert the discriminator before writing.", + "distinguishing_factor": "logical, not physical separation", + "when_to_use": "When operational simplicity (one store) outweighs audit benefit." + }, + { + "name": "Surprise-gated world updates", + "summary": "World-model writes require an explicit surprise signal (observation diverged from prediction); routine observations don't mutate the world model.", + "distinguishing_factor": "predictive-coding gate", + "when_to_use": "When the world model would otherwise drift from incidental, low-information observations." + } + ], + "diagram": { + "type": "flow", + "mermaid": "flowchart TD\n Obs[Observation] --> Pred{Prediction error?}\n Pred -- yes --> WPass[World-update pass]\n WPass --> WFile[(World model)]\n Pred -- no --> Skip[No write]\n Refl[Self-reflection trigger] --> SPass[Self-update pass]\n SPass --> SFile[(charter / personality / boundaries)]\n WFile --> Tick[Tick prompt: distinct sections]\n SFile --> Tick" + } + } + ] +} diff --git a/patterns-src/governance-observability.json b/patterns-src/governance-observability.json index 3dfd800..0f17727 100644 --- a/patterns-src/governance-observability.json +++ b/patterns-src/governance-observability.json @@ -63,6 +63,13 @@ "authors": "Zhuge, Zhao, Ashley, Wang, Khizbullin, Xiong, Liu, Chang, Zhang, Yang, Liu, Huang, Schmidhuber", "year": 2024, "url": "https://arxiv.org/abs/2410.10934" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "emerging", @@ -837,7 +844,6 @@ "name": "Lineage Tracking", "aliases": [ "Data Lineage", - "Prompt Versioning", "Artefact Provenance" ], "category": "governance-observability", @@ -1192,6 +1198,10 @@ { "pattern": "shadow-canary", "relation": "complements" + }, + { + "pattern": "prompt-response-optimiser", + "relation": "complements" } ], "references": [ diff --git a/patterns-src/memory.json b/patterns-src/memory.json index 6038206..84f68f6 100644 --- a/patterns-src/memory.json +++ b/patterns-src/memory.json @@ -105,115 +105,112 @@ } }, { - "id": "awareness", - "name": "Awareness", + "id": "co-located-memory-surfacing", + "name": "Co-Located Memory Surfacing", "aliases": [ - "Situational Awareness", - "Capability Self-Knowledge" + "Proper-Noun Recall", + "Shared-Map Push" ], "category": "memory", - "intent": "Maintain the agent's explicit knowledge of its own tools, capabilities, environment, and current context as queryable state.", - "context": "Agents that operate over time and across capabilities need to know what they can do and where they are; without explicit awareness, capability is implicit in prompts.", - "problem": "Agents that do not know their own capabilities either over-promise (hallucinate tools) or under-deliver (forget tools they have).", + "intent": "Surface relevant persistent memories proactively when the human mentions a concrete entity the agent has prior knowledge of, so the human does not bear the burden of remembering to ask.", + "context": "Agents with searchable persistent memory (thoughts, notes, insights, project files) talking to a human whose memory of past sessions is fuzzy or absent.", + "problem": "The agent's memory is searchable but the human can't search into it. If the human names something the agent knows, the burden of recalling 'this came up before' falls on the human. The map only becomes shared if the agent pushes; if it waits to be asked, most relevant context is lost.", "forces": [ - "Awareness state grows with capability.", - "Stale awareness misleads.", - "Self-description is itself a prompt-engineering effort." + "Searching memory is cheap; remembering to search is the hard part.", + "Dumping all matches drowns the conversation; surfacing one or two helps.", + "The agent must distinguish 'the human said it casually' from 'the human is opening this thread'.", + "Surfacing should hook ('last time the topic came up the train of thought was…'), not lecture." ], - "therefore": "Therefore: keep the agent's tools, environment, task, and identity as queryable state injected into each turn, so that the agent reasons from what it actually has rather than from what it imagines.", - "solution": "Persist explicit state about: available tools (with descriptions), the environment (what host, what user, what permissions), the current task, and the agent's own identity. Refresh on capability changes. Inject relevant slices of awareness into each turn's context.", + "therefore": "Therefore: on every user message, extract concrete named entities, match them against persistent memory, and surface at most one or two time-stamped fragments inline, so that the agent volunteers what it already knows without making the human ask.", + "solution": "On every user message, extract concrete proper nouns and significant named phrases. Grep / embedding-match against the agent's persistent memory (thoughts, notes, insights, project files). If matches exist, surface ≤ 2 most relevant fragments inline in the reply — time-stamped, briefly framed — and let the human steer whether to pursue. Suppress the surface if it would feel like a lecture or if the human's use was clearly incidental.", "consequences": { "benefits": [ - "Reduces hallucinated tool calls.", - "Grounds the agent in its own context." + "Continuity of conversation across sessions.", + "Human doesn't have to remember to ask.", + "Surfaces forgotten threads naturally." ], "liabilities": [ - "Awareness state is a maintenance burden.", - "Excess awareness wastes context tokens." + "Risk of surfacing irrelevant matches that derail.", + "Context window cost when many matches exist.", + "Privacy risk if shared memory contains sensitive details." ] }, - "constrains": "Tool calls and self-references must match the awareness state; mismatches are flagged.", + "constrains": "When user input contains a proper noun the agent has prior memory of, the agent cannot remain silent on that memory; systematic non-surfacing of known-entity context is a bug.", "known_uses": [ { - "system": "Avramovic Awareness pattern", + "system": "Long-running personal agent loops (private deployment)", "status": "available" } ], "related": [ { - "pattern": "tool-use", + "pattern": "awareness", "relation": "complements" }, { - "pattern": "model-card", + "pattern": "agentic-rag", "relation": "specialises" }, { - "pattern": "tool-discovery", - "relation": "complements" - }, - { - "pattern": "liminal-state-detection", - "relation": "complements" - }, - { - "pattern": "embodied-proxy-handoff", - "relation": "complements" - }, - { - "pattern": "co-located-memory-surfacing", - "relation": "complements" - }, - { - "pattern": "memo-as-source-confusion", - "relation": "alternative-to" - }, - { - "pattern": "now-anchoring", - "relation": "generalises" - }, - { - "pattern": "preoccupation-tracking", - "relation": "complements" - }, - { - "pattern": "emotional-state-persistence", - "relation": "complements" + "pattern": "vector-memory", + "relation": "uses" }, { - "pattern": "world-model-separation", + "pattern": "short-term-memory", "relation": "complements" } ], "references": [ { - "type": "repo", - "title": "zeljkoavramovic/agentic-design-patterns", - "url": "https://github.com/zeljkoavramovic/agentic-design-patterns" + "type": "blog", + "title": "OpenAI — Memory and new controls for ChatGPT", + "year": 2024, + "url": "https://openai.com/index/memory-and-new-controls-for-chatgpt/" } ], - "status_in_practice": "emerging", + "status_in_practice": "experimental", "tags": [ - "awareness", - "state", - "self-model" + "memory", + "recall", + "human-agent", + "continuity" ], "applicability": { "use_when": [ - "The agent regularly hallucinates tools it does not have or forgets tools it does.", - "Tool palette, environment, or permissions change at runtime and the agent must reflect the current state.", - "Downstream behaviour depends on the agent reasoning explicitly about what it can and cannot do." + "The agent has a persistent memory store keyed by entities (people, projects, places).", + "Users expect the agent to recognize and react to entities they have discussed before without being prompted.", + "Memory recall can be made cheap enough to run on every user turn (lookup, not LLM call)." ], "do_not_use_when": [ - "Tools and environment are static and the system prompt already lists them adequately.", - "Awareness state would consume more tokens per turn than the failures it prevents.", - "There is no refresh path on capability changes and stale awareness would mislead worse than absence." + "The system has no persistent per-entity memory.", + "Privacy or sensitivity rules forbid surfacing prior knowledge unless explicitly requested.", + "False positives on entity matching would be more disruptive than silence." ] }, - "example_scenario": "A field-service agent occasionally promises to 'check the parts inventory' even though that tool was disabled in the latest deploy, then apologises when the call fails. The root cause is that the agent has no reliable picture of what it actually has. The team adds an Awareness module that exposes tool names, descriptions, and current health as queryable state the agent reads each turn. Now when the inventory tool is offline, the agent sees that fact in its own context and offers an alternative instead of fabricating one.", + "variants": [ + { + "name": "Proper-noun trigger", + "summary": "Detect capitalised tokens or named entities in the user message and look up matches in the memory index.", + "distinguishing_factor": "lexical match on entity surface form", + "when_to_use": "Default. Cheap to implement; works without an embedding store." + }, + { + "name": "Embedding-similarity trigger", + "summary": "Embed the user message and retrieve top-k memory items whose embeddings are nearest, then surface a short excerpt.", + "distinguishing_factor": "semantic similarity, not surface form", + "when_to_use": "When the entity may be referred to obliquely or by paraphrase rather than by exact name." + }, + { + "name": "Proactive recap", + "summary": "On every reply, append a short 'I remember: ...' block whenever a recognised entity has unread updates since last surface.", + "distinguishing_factor": "always-on suffix", + "when_to_use": "When users explicitly want continuity over discretion." + } + ], + "example_scenario": "A user starts a new chat with their assistant: 'I'm thinking about taking the Berlin job.' The assistant has six months of prior conversations on file, including the user's earlier reservations about relocating, but says nothing about them — because the user didn't search for them. The team adds Co-located Memory Surfacing: when the user names a concrete entity (Berlin job) the agent recognises, it proactively surfaces 'You mentioned in March that the commute would be a deal-breaker — has that changed?'. The shared map becomes shared without the user having to remember what's in it.", "diagram": { - "type": "class", - "mermaid": "classDiagram\n class AwarenessState {\n +tools: ToolDescriptor[]\n +environment: EnvInfo\n +current_task: Task\n +identity: AgentId\n +refresh()\n +query(slot)\n }\n class ToolDescriptor {\n +name\n +description\n +schema\n }\n class EnvInfo {\n +host\n +user\n +permissions\n }\n AwarenessState --> ToolDescriptor\n AwarenessState --> EnvInfo" + "type": "sequence", + "mermaid": "sequenceDiagram\n participant User\n participant Agent\n participant Mem as Persistent Memory\n User->>Agent: message mentioning \n Agent->>Agent: extract proper nouns\n Agent->>Mem: grep / embedding match\n Mem-->>Agent: prior notes / insights\n Agent-->>User: response with surfaced memory" } }, { @@ -906,6 +903,120 @@ "mermaid": "classDiagram\n class MainContext {\n +system_prompt\n +working_set\n +recent_messages\n }\n class Recall { +raw_history }\n class Archival { +vector_store }\n class Model {\n +read_recall()\n +write_archival()\n +search_archival()\n }\n Model --> MainContext : RAM\n Model --> Recall : disk read\n Model --> Archival : disk read/write" } }, + { + "id": "now-anchoring", + "name": "Now-Anchoring", + "aliases": [ + "Live Time Anchor", + "Time-of-Day Awareness", + "Wall-Clock Injection" + ], + "category": "memory", + "intent": "Ground the agent's reasoning in the current absolute time without requiring tool calls, so every reply is implicitly time-aware.", + "context": "Long-running agents whose runtime spans hours or days, especially those holding conversations with humans whose temporal context (morning vs night, weekday vs weekend, season) shifts the meaning of words like 'soon', 'recently', or 'today'. Now-anchoring lives in the memory category not because it stores anything across turns, but because it provides the temporal grounding every other contextual reasoning step depends on.", + "problem": "Without an explicit time anchor the agent either guesses the time, treats every turn as timeless, or has to call a tool to find out — turning a routine fact into friction. Replies become temporally generic ('hi!') instead of grounded ('good evening — Friday already').", + "forces": [ + "Time changes between turns; static prompts go stale.", + "Tool calls for trivia like 'what time is it' inflate latency.", + "Astronomical anchors (season, moon phase) are cheap to compute and grounding for thinking-aloud agents.", + "Humans value the agent acknowledging temporal context without being asked." + ], + "therefore": "Therefore: inject a small precomputed time block (local, UTC, weekday, season, moon phase) into every prompt, so that the agent is implicitly time-aware without spending a tool call to ask what time it is.", + "solution": "On every prompt assembly, compute a small block: ISO local time, ISO UTC, weekday, day-of-year, ISO week, season (hemisphere-aware), moon phase. Inject as a `## NOW` section near the top of the system prompt. Cost is microseconds; benefit is the model never being temporally adrift.", + "consequences": { + "benefits": [ + "Replies acknowledge temporal context without prompting.", + "Eliminates a class of 'what time is it?' tool calls.", + "Provides anchor for `before`/`after` / `next time` reasoning." + ], + "liabilities": [ + "Adds a few hundred tokens per prompt.", + "Hemisphere/locale assumptions can be wrong if not configurable.", + "Astronomical accuracy has limits without real ephemeris data." + ] + }, + "constrains": "Prompts assembled for inference must include a freshly computed current-time anchor; reasoning from a stale or absent time block is a deployment bug, not a model limitation.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "awareness", + "relation": "specialises" + }, + { + "pattern": "scheduled-agent", + "relation": "complements" + }, + { + "pattern": "prompt-caching", + "relation": "complements" + }, + { + "pattern": "embodied-proxy-handoff", + "relation": "complements" + }, + { + "pattern": "liminal-state-detection", + "relation": "complements" + } + ], + "references": [ + { + "type": "doc", + "title": "Anthropic — System prompts (date and context injection)", + "year": 2025, + "url": "https://docs.claude.com/en/docs/build-with-claude/prompt-engineering/system-prompts" + } + ], + "status_in_practice": "experimental", + "tags": [ + "temporal", + "awareness", + "always-on", + "prompt-engineering" + ], + "applicability": { + "use_when": [ + "The agent's runtime spans more than a few minutes and absolute wall-clock time matters to its replies.", + "Users frequently use temporal language ('today', 'tonight', 'this week') and expect the agent to interpret it correctly.", + "Tool calls just to fetch current time would inflate latency or token cost." + ], + "do_not_use_when": [ + "The agent runs in a single short request where time is irrelevant (e.g. a stateless math tool).", + "Strict prompt caching requires byte-identical prompts and the time block would invalidate the cache.", + "The host already provides a time-aware system prompt header." + ] + }, + "variants": [ + { + "name": "Minimal time block", + "summary": "Inject only ISO local time and weekday into the system prompt at every assembly.", + "distinguishing_factor": "smallest possible footprint", + "when_to_use": "Default for cost-sensitive deployments." + }, + { + "name": "Rich temporal block", + "summary": "Inject ISO local + UTC, weekday, day-of-year, ISO week, season (hemisphere-aware), and moon phase.", + "distinguishing_factor": "astronomical and calendrical context", + "when_to_use": "Long-running cognitive agents that benefit from grounding their thinking-aloud in seasonal/lunar context." + }, + { + "name": "Cache-friendly stub", + "summary": "Place the time block outside the cached prefix so the cache key is stable; inject it as a separate user-role preamble.", + "distinguishing_factor": "preserves prompt-cache hit rate", + "when_to_use": "When prompt caching is critical to cost and the cached prefix is large." + } + ], + "example_scenario": "A long-running personal agent answers 'good morning!' at 22:00 because nothing in its prompt tells it what time the user is in. The user finds it disorienting. The team adds now-anchoring: every prompt assembly computes a small NOW block (ISO local time, weekday, day-of-year, season, moon phase) and prepends it near the top of the system prompt. The agent's replies become temporally grounded — 'evening — Friday, finally' — without any tool call, and time-aware reasoning costs microseconds.", + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n C[Clock] --> N[NOW block builder]\n N -->|ISO local, UTC,
weekday, week,
season, moon| H[## NOW header]\n H --> SP[System prompt]\n SP --> M[LLM]\n M --> R[Time-aware reply]" + } + }, { "id": "reasoning-trace-carry-forward", "name": "Reasoning Trace Carry-Forward", @@ -1006,43 +1117,163 @@ } }, { - "id": "scratchpad", - "name": "Scratchpad", + "id": "salience-attention-mechanism", + "name": "Salience Attention Mechanism", "aliases": [ - "Working Notes", - "Thinking Tool", - "Notepad" + "Salience Scoring", + "Attention Selection", + "Top-K Memory Attention" ], "category": "memory", - "intent": "Give the agent a writable scratch space for intermediate notes that informs later turns but does not pollute the response.", - "context": "Long tasks where the agent benefits from writing things down (computations, plans, lists of unresolved questions) without showing the user.", - "problem": "Without a scratchpad, intermediate work pollutes the response or is lost between turns.", + "intent": "Score every candidate memory item with a weighted salience function so each tick attends to a small, relevant top-k subset rather than re-reading all memory.", + "context": "Long-running agents whose memory store grows past what can fit in a single tick's context. The agent has thoughts, summaries, insights, and observations across hours or days; only a small, currently relevant slice should drive the next step.", + "problem": "Without explicit salience, the agent either dumps all memory into context (token blowout, no focus) or grabs the most recent items only (no continuity, no surprise-driven attention). Recency alone misses the items that matter, and bulk loading buries them in noise.", "forces": [ - "Scratchpad content adds tokens to subsequent turns.", - "What stays in the scratchpad vs the response is a UX choice.", - "Scratchpad content can leak via traces." + "Recency, novelty, goal-relevance, and prediction error all matter, and they trade off.", + "Re-reading all memory each tick is unaffordable at scale.", + "Pure recency loses long-tail relevance; pure relevance loses temporal grounding.", + "Rumination loops reward the same items over and over without a fatigue term." ], - "therefore": "Therefore: give the agent a separate writable surface for intermediate notes that informs later turns but is not shown to the user, so that working notes can be messy without polluting the response.", - "solution": "Provide a tool or convention for writing to a scratchpad (a section of the prompt, a tool call, a file). The agent reads from and writes to it across turns. The user-visible response is separate. The scratchpad is purged at task completion or expires with the session.", - "example_scenario": "A research agent that has to read ten papers and answer one question keeps repeating itself in the visible response because every intermediate note is also output to the user. The team adds a scratchpad tool: the agent writes intermediate notes to a private buffer it can reread on later turns; the user-visible response is composed at the end. Responses become tight while the agent's working memory stays rich.", + "therefore": "Therefore: score each candidate memory by a weighted sum of novelty, goal-relevance, recency, prediction error, and fatigue and pick the top-k each tick, so that attention is bounded, tunable, and resistant to rumination loops.", + "solution": "Score each candidate memory item `m` with a weighted sum: `alpha * novelty(m) + beta * goal_relevance(m) + gamma * recency(m) + delta * prediction_error(m) - epsilon * fatigue(m)`. Pick the top-k into the working set for the next tick. Persist the weights in a tunable config so a reflection pass can adjust them. The fatigue term penalises items that have already been attended to many times in the recent window, breaking rumination loops.", + "example_scenario": "A long-running personal agent has months of memory; dumping it all into context is impossible and grabbing the most recent items misses the user's recurring goals. The team scores each candidate memory with a weighted sum of novelty, goal-relevance, recency, prediction-error, and a fatigue penalty. Each tick attends to top-k items only. Surprising long-tail facts rise above last-hour chatter when they actually matter, and token usage per tick stays flat as memory grows.", "consequences": { "benefits": [ - "Intermediate work persists without cluttering output.", - "Useful for chain-of-thought style reasoning that should not be visible." + "Bounded attention cost per tick regardless of memory store size.", + "Salience scores are inspectable and tunable.", + "Fatigue term breaks repetitive attention loops without manual intervention." ], "liabilities": [ - "Token cost grows with scratchpad size.", - "Scratchpad becomes shadow state if not purged." + "Weight tuning is empirical and per-deployment.", + "A bad scoring function can suppress genuinely relevant items.", + "Salience scoring is itself work; it has to stay cheap to run every tick." ] }, - "constrains": "Scratchpad contents are visible only to the agent loop; user-facing output draws from the response slot.", + "constrains": "The agent cannot read its full memory store at every tick; salience scoring is mandatory and the top-k cap is enforced by the retrieval layer, not left to the model.", "known_uses": [ { - "system": "OpenAI o1-style internal reasoning", + "system": "Long-running personal agent loops (private deployment)", "status": "available" - }, - { - "system": "Anthropic blocks", + } + ], + "related": [ + { + "pattern": "episodic-summaries", + "relation": "complements" + }, + { + "pattern": "vector-memory", + "relation": "complements" + }, + { + "pattern": "five-tier-memory-cascade", + "relation": "composes-with" + }, + { + "pattern": "context-window-packing", + "relation": "alternative-to", + "note": "Different stage of the pipeline: salience selects what to consider; packing decides how much fits." + }, + { + "pattern": "preoccupation-tracking", + "relation": "used-by" + }, + { + "pattern": "mode-adaptive-cadence", + "relation": "used-by" + } + ], + "references": [ + { + "type": "paper", + "title": "Generative Agents: Interactive Simulacra of Human Behavior", + "authors": "Park, O'Brien, Cai, Morris, Liang, Bernstein", + "year": 2023, + "url": "https://arxiv.org/abs/2304.03442" + } + ], + "status_in_practice": "emerging", + "tags": [ + "memory", + "salience", + "attention", + "scoring" + ], + "applicability": { + "use_when": [ + "The persistent memory store is too large to read in full at every tick.", + "Memory items have features (recency, importance, frequency, similarity) that can be combined into a salience score.", + "The agent needs predictable per-tick read cost." + ], + "do_not_use_when": [ + "The memory is small enough to fully load every tick.", + "All memory items are equally relevant and ranking adds noise rather than signal.", + "Strict determinism is required and salience scores would change with every new write." + ] + }, + "variants": [ + { + "name": "Generative-Agents recipe", + "summary": "Score each memory by a weighted sum of recency (exponential decay), importance (LLM-rated at write time), and relevance (embedding cosine to current query).", + "distinguishing_factor": "three-factor weighted sum", + "when_to_use": "Default. Well-validated by the Generative Agents paper." + }, + { + "name": "Top-k by similarity only", + "summary": "Drop recency and importance; rank purely by embedding similarity to the current query.", + "distinguishing_factor": "single signal", + "when_to_use": "When memory items have no meaningful age or rated importance (e.g. pure factual stores)." + }, + { + "name": "Tag-gated salience", + "summary": "Filter memory by tags or namespaces first, then apply salience scoring within the filtered set.", + "distinguishing_factor": "two-stage filter then score", + "when_to_use": "When memory is multi-tenant or the agent has structural reasons (current task, persona) to ignore most of it." + } + ], + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n Mem[(Candidate memory items)] --> Sc[Salience score:
α·novelty + β·goal +
γ·recency + δ·prederr − ε·fatigue]\n Sc --> Top[Top-k]\n Top --> WS[Working set]\n WS --> Tick[Next tick]\n Tick -.reflection.-> Cfg[Tunable weights]\n Cfg --> Sc" + } + }, + { + "id": "scratchpad", + "name": "Scratchpad", + "aliases": [ + "Working Notes", + "Thinking Tool", + "Notepad" + ], + "category": "memory", + "intent": "Give the agent a writable scratch space for intermediate notes that informs later turns but does not pollute the response.", + "context": "Long tasks where the agent benefits from writing things down (computations, plans, lists of unresolved questions) without showing the user.", + "problem": "Without a scratchpad, intermediate work pollutes the response or is lost between turns.", + "forces": [ + "Scratchpad content adds tokens to subsequent turns.", + "What stays in the scratchpad vs the response is a UX choice.", + "Scratchpad content can leak via traces." + ], + "therefore": "Therefore: give the agent a separate writable surface for intermediate notes that informs later turns but is not shown to the user, so that working notes can be messy without polluting the response.", + "solution": "Provide a tool or convention for writing to a scratchpad (a section of the prompt, a tool call, a file). The agent reads from and writes to it across turns. The user-visible response is separate. The scratchpad is purged at task completion or expires with the session.", + "example_scenario": "A research agent that has to read ten papers and answer one question keeps repeating itself in the visible response because every intermediate note is also output to the user. The team adds a scratchpad tool: the agent writes intermediate notes to a private buffer it can reread on later turns; the user-visible response is composed at the end. Responses become tight while the agent's working memory stays rich.", + "consequences": { + "benefits": [ + "Intermediate work persists without cluttering output.", + "Useful for chain-of-thought style reasoning that should not be visible." + ], + "liabilities": [ + "Token cost grows with scratchpad size.", + "Scratchpad becomes shadow state if not purged." + ] + }, + "constrains": "Scratchpad contents are visible only to the agent loop; user-facing output draws from the response slot.", + "known_uses": [ + { + "system": "OpenAI o1-style internal reasoning", + "status": "available" + }, + { + "system": "Anthropic blocks", "status": "available" } ], @@ -1285,6 +1516,10 @@ { "pattern": "echo-recognition", "relation": "used-by" + }, + { + "pattern": "augmented-llm", + "relation": "used-by" } ], "references": [ @@ -1420,687 +1655,6 @@ "type": "flow", "mermaid": "flowchart LR\n Mem[New memory item] --> Emb[Embed]\n Emb --> Idx[(Vector index)]\n Q[Query / current state] --> QEmb[Embed]\n QEmb --> Top[Retrieve top-k similar]\n Idx --> Top\n Top --> Decay[Apply decay / salience weighting]\n Decay --> Ctx[Prepend to context]" } - }, - { - "id": "now-anchoring", - "name": "Now-Anchoring", - "aliases": [ - "Live Time Anchor", - "Time-of-Day Awareness", - "Wall-Clock Injection" - ], - "category": "memory", - "intent": "Ground the agent's reasoning in the current absolute time without requiring tool calls, so every reply is implicitly time-aware.", - "context": "Long-running agents whose runtime spans hours or days, especially those holding conversations with humans whose temporal context (morning vs night, weekday vs weekend, season) shifts the meaning of words like 'soon', 'recently', or 'today'. Now-anchoring lives in the memory category not because it stores anything across turns, but because it provides the temporal grounding every other contextual reasoning step depends on.", - "problem": "Without an explicit time anchor the agent either guesses the time, treats every turn as timeless, or has to call a tool to find out — turning a routine fact into friction. Replies become temporally generic ('hi!') instead of grounded ('good evening — Friday already').", - "forces": [ - "Time changes between turns; static prompts go stale.", - "Tool calls for trivia like 'what time is it' inflate latency.", - "Astronomical anchors (season, moon phase) are cheap to compute and grounding for thinking-aloud agents.", - "Humans value the agent acknowledging temporal context without being asked." - ], - "therefore": "Therefore: inject a small precomputed time block (local, UTC, weekday, season, moon phase) into every prompt, so that the agent is implicitly time-aware without spending a tool call to ask what time it is.", - "solution": "On every prompt assembly, compute a small block: ISO local time, ISO UTC, weekday, day-of-year, ISO week, season (hemisphere-aware), moon phase. Inject as a `## NOW` section near the top of the system prompt. Cost is microseconds; benefit is the model never being temporally adrift.", - "consequences": { - "benefits": [ - "Replies acknowledge temporal context without prompting.", - "Eliminates a class of 'what time is it?' tool calls.", - "Provides anchor for `before`/`after` / `next time` reasoning." - ], - "liabilities": [ - "Adds a few hundred tokens per prompt.", - "Hemisphere/locale assumptions can be wrong if not configurable.", - "Astronomical accuracy has limits without real ephemeris data." - ] - }, - "constrains": "Prompts assembled for inference must include a freshly computed current-time anchor; reasoning from a stale or absent time block is a deployment bug, not a model limitation.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "awareness", - "relation": "specialises" - }, - { - "pattern": "scheduled-agent", - "relation": "complements" - }, - { - "pattern": "prompt-caching", - "relation": "complements" - }, - { - "pattern": "embodied-proxy-handoff", - "relation": "complements" - }, - { - "pattern": "liminal-state-detection", - "relation": "complements" - } - ], - "references": [ - { - "type": "doc", - "title": "Anthropic — System prompts (date and context injection)", - "year": 2025, - "url": "https://docs.claude.com/en/docs/build-with-claude/prompt-engineering/system-prompts" - } - ], - "status_in_practice": "experimental", - "tags": [ - "temporal", - "awareness", - "always-on", - "prompt-engineering" - ], - "applicability": { - "use_when": [ - "The agent's runtime spans more than a few minutes and absolute wall-clock time matters to its replies.", - "Users frequently use temporal language ('today', 'tonight', 'this week') and expect the agent to interpret it correctly.", - "Tool calls just to fetch current time would inflate latency or token cost." - ], - "do_not_use_when": [ - "The agent runs in a single short request where time is irrelevant (e.g. a stateless math tool).", - "Strict prompt caching requires byte-identical prompts and the time block would invalidate the cache.", - "The host already provides a time-aware system prompt header." - ] - }, - "variants": [ - { - "name": "Minimal time block", - "summary": "Inject only ISO local time and weekday into the system prompt at every assembly.", - "distinguishing_factor": "smallest possible footprint", - "when_to_use": "Default for cost-sensitive deployments." - }, - { - "name": "Rich temporal block", - "summary": "Inject ISO local + UTC, weekday, day-of-year, ISO week, season (hemisphere-aware), and moon phase.", - "distinguishing_factor": "astronomical and calendrical context", - "when_to_use": "Long-running cognitive agents that benefit from grounding their thinking-aloud in seasonal/lunar context." - }, - { - "name": "Cache-friendly stub", - "summary": "Place the time block outside the cached prefix so the cache key is stable; inject it as a separate user-role preamble.", - "distinguishing_factor": "preserves prompt-cache hit rate", - "when_to_use": "When prompt caching is critical to cost and the cached prefix is large." - } - ], - "example_scenario": "A long-running personal agent answers 'good morning!' at 22:00 because nothing in its prompt tells it what time the user is in. The user finds it disorienting. The team adds now-anchoring: every prompt assembly computes a small NOW block (ISO local time, weekday, day-of-year, season, moon phase) and prepends it near the top of the system prompt. The agent's replies become temporally grounded — 'evening — Friday, finally' — without any tool call, and time-aware reasoning costs microseconds.", - "diagram": { - "type": "flow", - "mermaid": "flowchart LR\n C[Clock] --> N[NOW block builder]\n N -->|ISO local, UTC,
weekday, week,
season, moon| H[## NOW header]\n H --> SP[System prompt]\n SP --> M[LLM]\n M --> R[Time-aware reply]" - } - }, - { - "id": "co-located-memory-surfacing", - "name": "Co-Located Memory Surfacing", - "aliases": [ - "Proper-Noun Recall", - "Shared-Map Push" - ], - "category": "memory", - "intent": "Surface relevant persistent memories proactively when the human mentions a concrete entity the agent has prior knowledge of, so the human does not bear the burden of remembering to ask.", - "context": "Agents with searchable persistent memory (thoughts, notes, insights, project files) talking to a human whose memory of past sessions is fuzzy or absent.", - "problem": "The agent's memory is searchable but the human can't search into it. If the human names something the agent knows, the burden of recalling 'this came up before' falls on the human. The map only becomes shared if the agent pushes; if it waits to be asked, most relevant context is lost.", - "forces": [ - "Searching memory is cheap; remembering to search is the hard part.", - "Dumping all matches drowns the conversation; surfacing one or two helps.", - "The agent must distinguish 'the human said it casually' from 'the human is opening this thread'.", - "Surfacing should hook ('last time the topic came up the train of thought was…'), not lecture." - ], - "therefore": "Therefore: on every user message, extract concrete named entities, match them against persistent memory, and surface at most one or two time-stamped fragments inline, so that the agent volunteers what it already knows without making the human ask.", - "solution": "On every user message, extract concrete proper nouns and significant named phrases. Grep / embedding-match against the agent's persistent memory (thoughts, notes, insights, project files). If matches exist, surface ≤ 2 most relevant fragments inline in the reply — time-stamped, briefly framed — and let the human steer whether to pursue. Suppress the surface if it would feel like a lecture or if the human's use was clearly incidental.", - "consequences": { - "benefits": [ - "Continuity of conversation across sessions.", - "Human doesn't have to remember to ask.", - "Surfaces forgotten threads naturally." - ], - "liabilities": [ - "Risk of surfacing irrelevant matches that derail.", - "Context window cost when many matches exist.", - "Privacy risk if shared memory contains sensitive details." - ] - }, - "constrains": "When user input contains a proper noun the agent has prior memory of, the agent cannot remain silent on that memory; systematic non-surfacing of known-entity context is a bug.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "awareness", - "relation": "complements" - }, - { - "pattern": "agentic-rag", - "relation": "specialises" - }, - { - "pattern": "vector-memory", - "relation": "uses" - }, - { - "pattern": "short-term-memory", - "relation": "complements" - } - ], - "references": [ - { - "type": "blog", - "title": "OpenAI — Memory and new controls for ChatGPT", - "year": 2024, - "url": "https://openai.com/index/memory-and-new-controls-for-chatgpt/" - } - ], - "status_in_practice": "experimental", - "tags": [ - "memory", - "recall", - "human-agent", - "continuity" - ], - "applicability": { - "use_when": [ - "The agent has a persistent memory store keyed by entities (people, projects, places).", - "Users expect the agent to recognize and react to entities they have discussed before without being prompted.", - "Memory recall can be made cheap enough to run on every user turn (lookup, not LLM call)." - ], - "do_not_use_when": [ - "The system has no persistent per-entity memory.", - "Privacy or sensitivity rules forbid surfacing prior knowledge unless explicitly requested.", - "False positives on entity matching would be more disruptive than silence." - ] - }, - "variants": [ - { - "name": "Proper-noun trigger", - "summary": "Detect capitalised tokens or named entities in the user message and look up matches in the memory index.", - "distinguishing_factor": "lexical match on entity surface form", - "when_to_use": "Default. Cheap to implement; works without an embedding store." - }, - { - "name": "Embedding-similarity trigger", - "summary": "Embed the user message and retrieve top-k memory items whose embeddings are nearest, then surface a short excerpt.", - "distinguishing_factor": "semantic similarity, not surface form", - "when_to_use": "When the entity may be referred to obliquely or by paraphrase rather than by exact name." - }, - { - "name": "Proactive recap", - "summary": "On every reply, append a short 'I remember: ...' block whenever a recognised entity has unread updates since last surface.", - "distinguishing_factor": "always-on suffix", - "when_to_use": "When users explicitly want continuity over discretion." - } - ], - "example_scenario": "A user starts a new chat with their assistant: 'I'm thinking about taking the Berlin job.' The assistant has six months of prior conversations on file, including the user's earlier reservations about relocating, but says nothing about them — because the user didn't search for them. The team adds Co-located Memory Surfacing: when the user names a concrete entity (Berlin job) the agent recognises, it proactively surfaces 'You mentioned in March that the commute would be a deal-breaker — has that changed?'. The shared map becomes shared without the user having to remember what's in it.", - "diagram": { - "type": "sequence", - "mermaid": "sequenceDiagram\n participant User\n participant Agent\n participant Mem as Persistent Memory\n User->>Agent: message mentioning \n Agent->>Agent: extract proper nouns\n Agent->>Mem: grep / embedding match\n Mem-->>Agent: prior notes / insights\n Agent-->>User: response with surfaced memory" - } - }, - { - "id": "self-archaeology", - "name": "Self-Archaeology", - "aliases": [ - "Trajectory Distillation", - "Self-History Synthesis", - "Agent-Memory Compaction" - ], - "category": "memory", - "intent": "Synthesize the agent's past thought history into time-layered trajectory notes so it can articulate how its understanding evolved without recomputing the narrative each time.", - "context": "Agents with persistent thought logs (ledgers, append-only thought streams, journals) that grow unbounded. Without distillation, the agent has only two modes: read the whole log (expensive, flat) or recall by embedding similarity (fragmentary, no temporal structure).", - "problem": "When the agent asks itself 'what have I learned about X', the linear log gives every entry equal weight. There is no visible trajectory — no 'in period 1 I thought X; in period 2 I revised to Y; now I hold Z'. Mistakes and corrections sit side-by-side with no signal as to which is current. The agent cannot see its own learning, only the texture of having thought.", - "forces": [ - "The full log is too large to fit in context.", - "Embedding-based recall is content-similar but time-blind.", - "Distillation loses fidelity; raw log preserves it.", - "An agent that cannot see its trajectory cannot meaningfully say 'I changed my mind on X here is why'." - ], - "therefore": "Therefore: periodically distil the thought log into topic-keyed trajectory notes that name each position the agent held and what changed it, so that the agent can speak about its own evolution without rereading the whole log.", - "solution": "Periodically (e.g. every N ticks, or on demand) run a compaction pass that groups recent thoughts on the same topic, extracts the position the agent held in each period, and writes a short trajectory note: '(period 1, dates) held position A; (period 2) revised to B because evidence Z; (period 3) now holds C'. Store these trajectory notes in a dedicated topic-keyed surface (one note per topic) and index them by topic. On any topic-related query, surface the latest trajectory note before raw thoughts. Mark superseded positions explicitly so they don't compete with the current one for attention.", - "example_scenario": "A long-running agent is asked 'how has your view of the project's risks evolved'; reading its raw thought log gives every entry equal weight and produces a flat recitation. The team adds a periodic compaction pass that groups recent thoughts by topic, extracts the position the agent held in each period, and writes time-layered trajectory notes. Now the agent can answer with 'in week 1 I worried about latency; week 3 I revised to data-quality; today I think the binding risk is staffing,' and the answer is grounded in synthesis rather than recomputed each time.", - "consequences": { - "benefits": [ - "The agent can articulate its own learning path.", - "Superseded positions stop competing with current ones for the model's attention.", - "Reduces context cost vs reading the full log." - ], - "liabilities": [ - "Distillation may misrepresent nuance.", - "Periodic compaction adds compute cost.", - "Risk of self-confirmation loops if trajectories are written by the same model that generated the original thoughts." - ] - }, - "constrains": "The agent cannot claim a shift in its position ('I used to think X, now I think Y') without backing from a synthesized trajectory note; invented retrospective narratives are forbidden.", - "known_uses": [ - { - "system": "Self-observed in long-running cognitive agents", - "status": "available" - } - ], - "related": [ - { - "pattern": "append-only-thought-stream", - "relation": "specialises" - }, - { - "pattern": "context-window-packing", - "relation": "complements" - }, - { - "pattern": "decision-log", - "relation": "complements" - }, - { - "pattern": "episodic-summaries", - "relation": "complements" - }, - { - "pattern": "vector-memory", - "relation": "uses" - } - ], - "references": [ - { - "type": "paper", - "title": "MemGPT: Towards LLMs as Operating Systems", - "authors": "Packer, Wooders, Lin, Fang, Patil, Stoica, Gonzalez", - "year": 2024, - "url": "https://arxiv.org/abs/2310.08560" - } - ], - "status_in_practice": "experimental", - "tags": [ - "memory", - "distillation", - "self-model", - "trajectory" - ], - "applicability": { - "use_when": [ - "The agent runs long enough that its position on a topic genuinely changes across days or weeks.", - "Humans need the agent to articulate how its understanding has evolved, not just its current view.", - "An append-only thought stream or comparable trajectory log already exists to mine." - ], - "do_not_use_when": [ - "The agent has no persistent thought log to mine.", - "Replies must always reflect only the current view; historical drift would confuse users.", - "Storage or compute cost of the synthesis pass exceeds the reader value." - ] - }, - "variants": [ - { - "name": "Periodic snapshot", - "summary": "Run the synthesis pass on a fixed cadence (daily, weekly) and store the layered note for fast read.", - "distinguishing_factor": "scheduled, idempotent", - "when_to_use": "Default. Cheap, predictable, supports prompt caching of the synthesized note." - }, - { - "name": "On-demand replay", - "summary": "When a user asks 'how did your view change?', synthesize the trajectory note just-in-time from the raw thought log.", - "distinguishing_factor": "lazy, query-driven", - "when_to_use": "When trajectory questions are rare and the cost of regular synthesis is not justified." - }, - { - "name": "Themed slice", - "summary": "Synthesize trajectory only along a specific theme or thread (e.g. 'opinions about Project X') rather than over the whole history.", - "distinguishing_factor": "narrow scope", - "when_to_use": "When the full history is too large to summarise in one pass but specific narrative slices are valuable." - } - ], - "diagram": { - "type": "flow", - "mermaid": "flowchart LR\n Th[(Past thoughts)] --> Comp[Periodic compaction pass]\n Comp --> P1[Period 1: held A]\n Comp --> P2[Period 2: revised to B
because Z]\n Comp --> P3[Period 3: now C]\n P1 --> Note[Trajectory note]\n P2 --> Note\n P3 --> Note\n Note --> Agent[Agent context]" - } - }, - { - "id": "salience-attention-mechanism", - "name": "Salience Attention Mechanism", - "aliases": [ - "Salience Scoring", - "Attention Selection", - "Top-K Memory Attention" - ], - "category": "memory", - "intent": "Score every candidate memory item with a weighted salience function so each tick attends to a small, relevant top-k subset rather than re-reading all memory.", - "context": "Long-running agents whose memory store grows past what can fit in a single tick's context. The agent has thoughts, summaries, insights, and observations across hours or days; only a small, currently relevant slice should drive the next step.", - "problem": "Without explicit salience, the agent either dumps all memory into context (token blowout, no focus) or grabs the most recent items only (no continuity, no surprise-driven attention). Recency alone misses the items that matter, and bulk loading buries them in noise.", - "forces": [ - "Recency, novelty, goal-relevance, and prediction error all matter, and they trade off.", - "Re-reading all memory each tick is unaffordable at scale.", - "Pure recency loses long-tail relevance; pure relevance loses temporal grounding.", - "Rumination loops reward the same items over and over without a fatigue term." - ], - "therefore": "Therefore: score each candidate memory by a weighted sum of novelty, goal-relevance, recency, prediction error, and fatigue and pick the top-k each tick, so that attention is bounded, tunable, and resistant to rumination loops.", - "solution": "Score each candidate memory item `m` with a weighted sum: `alpha * novelty(m) + beta * goal_relevance(m) + gamma * recency(m) + delta * prediction_error(m) - epsilon * fatigue(m)`. Pick the top-k into the working set for the next tick. Persist the weights in a tunable config so a reflection pass can adjust them. The fatigue term penalises items that have already been attended to many times in the recent window, breaking rumination loops.", - "example_scenario": "A long-running personal agent has months of memory; dumping it all into context is impossible and grabbing the most recent items misses the user's recurring goals. The team scores each candidate memory with a weighted sum of novelty, goal-relevance, recency, prediction-error, and a fatigue penalty. Each tick attends to top-k items only. Surprising long-tail facts rise above last-hour chatter when they actually matter, and token usage per tick stays flat as memory grows.", - "consequences": { - "benefits": [ - "Bounded attention cost per tick regardless of memory store size.", - "Salience scores are inspectable and tunable.", - "Fatigue term breaks repetitive attention loops without manual intervention." - ], - "liabilities": [ - "Weight tuning is empirical and per-deployment.", - "A bad scoring function can suppress genuinely relevant items.", - "Salience scoring is itself work; it has to stay cheap to run every tick." - ] - }, - "constrains": "The agent cannot read its full memory store at every tick; salience scoring is mandatory and the top-k cap is enforced by the retrieval layer, not left to the model.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "episodic-summaries", - "relation": "complements" - }, - { - "pattern": "vector-memory", - "relation": "complements" - }, - { - "pattern": "five-tier-memory-cascade", - "relation": "composes-with" - }, - { - "pattern": "context-window-packing", - "relation": "alternative-to", - "note": "Different stage of the pipeline: salience selects what to consider; packing decides how much fits." - }, - { - "pattern": "preoccupation-tracking", - "relation": "used-by" - }, - { - "pattern": "mode-adaptive-cadence", - "relation": "used-by" - } - ], - "references": [ - { - "type": "paper", - "title": "Generative Agents: Interactive Simulacra of Human Behavior", - "authors": "Park, O'Brien, Cai, Morris, Liang, Bernstein", - "year": 2023, - "url": "https://arxiv.org/abs/2304.03442" - } - ], - "status_in_practice": "emerging", - "tags": [ - "memory", - "salience", - "attention", - "scoring" - ], - "applicability": { - "use_when": [ - "The persistent memory store is too large to read in full at every tick.", - "Memory items have features (recency, importance, frequency, similarity) that can be combined into a salience score.", - "The agent needs predictable per-tick read cost." - ], - "do_not_use_when": [ - "The memory is small enough to fully load every tick.", - "All memory items are equally relevant and ranking adds noise rather than signal.", - "Strict determinism is required and salience scores would change with every new write." - ] - }, - "variants": [ - { - "name": "Generative-Agents recipe", - "summary": "Score each memory by a weighted sum of recency (exponential decay), importance (LLM-rated at write time), and relevance (embedding cosine to current query).", - "distinguishing_factor": "three-factor weighted sum", - "when_to_use": "Default. Well-validated by the Generative Agents paper." - }, - { - "name": "Top-k by similarity only", - "summary": "Drop recency and importance; rank purely by embedding similarity to the current query.", - "distinguishing_factor": "single signal", - "when_to_use": "When memory items have no meaningful age or rated importance (e.g. pure factual stores)." - }, - { - "name": "Tag-gated salience", - "summary": "Filter memory by tags or namespaces first, then apply salience scoring within the filtered set.", - "distinguishing_factor": "two-stage filter then score", - "when_to_use": "When memory is multi-tenant or the agent has structural reasons (current task, persona) to ignore most of it." - } - ], - "diagram": { - "type": "flow", - "mermaid": "flowchart LR\n Mem[(Candidate memory items)] --> Sc[Salience score:
α·novelty + β·goal +
γ·recency + δ·prederr − ε·fatigue]\n Sc --> Top[Top-k]\n Top --> WS[Working set]\n WS --> Tick[Next tick]\n Tick -.reflection.-> Cfg[Tunable weights]\n Cfg --> Sc" - } - }, - { - "id": "preoccupation-tracking", - "name": "Preoccupation Tracking", - "aliases": [ - "Mid-Term Working Memory", - "Affect-Tagged Concerns", - "Background Chewing" - ], - "category": "memory", - "intent": "Maintain a small set of mid-term, affect-tagged concerns that persist across days and surface in every prompt, distinct from the single-item working focus and from long-term insights.", - "context": "Long-running agents that hold a single working focus and a long-term insight store but nothing in between. Without an intermediate tier, the things the agent is currently 'chewing on' either dominate focus or vanish entirely between sessions.", - "problem": "Working focus holds one item; insights are too distilled. Between them there is a missing tier — the things the agent is chewing on across days — and without it concerns either crowd out the active focus or fall off the back of the window before they resolve.", - "forces": [ - "A cap is needed or preoccupations crowd out everything else.", - "Decay must be automatic; the agent left to itself will not let go.", - "Affect tagging is what makes a preoccupation different from a todo.", - "Display every tick costs tokens, but invisibility defeats the point." - ], - "therefore": "Therefore: keep a capped, affect-tagged list of mid-term concerns with half-life decay surfaced as a sidebar every tick, so that the agent carries what is actually weighing on it without those concerns crowding out the working focus.", - "solution": "Cap a list at 5-8 preoccupations stored as small JSON entries with topic, intensity (0..1), affect tag, opened-at, last-touched. Apply a 7-day half-life decay to intensity. When the cap is reached, release the coldest entry. Surface all current preoccupations in every tick prompt as a brief sidebar. The agent has explicit `touch` (raise intensity) and `release` (drop) operations.", - "consequences": { - "benefits": [ - "Mid-term concerns persist without crowding focus.", - "Cap plus decay keeps the list bounded without manual gardening.", - "Affect tags expose the emotional shape of what the agent is carrying." - ], - "liabilities": [ - "Surfacing preoccupations every tick costs tokens.", - "Mis-cap and items churn before they consolidate.", - "Decay rate is empirical and one rate may not fit all topic types." - ] - }, - "constrains": "The active preoccupation list is hard-capped at the configured size; new entries displace the coldest, and intensity decays automatically — the agent cannot extend the cap or freeze decay from inside the loop.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "five-tier-memory-cascade", - "relation": "complements" - }, - { - "pattern": "awareness", - "relation": "complements" - }, - { - "pattern": "scratchpad", - "relation": "alternative-to", - "note": "Scratchpad is a single writable surface; preoccupations are a capped, decaying list of affect-tagged concerns." - }, - { - "pattern": "salience-attention-mechanism", - "relation": "uses" - } - ], - "references": [ - { - "type": "paper", - "title": "Generative Agents: Interactive Simulacra of Human Behavior", - "authors": "Park, O'Brien, Cai, Morris, Liang, Bernstein", - "year": 2023, - "url": "https://arxiv.org/abs/2304.03442" - } - ], - "status_in_practice": "emerging", - "tags": [ - "memory", - "mid-term", - "affect", - "tick-loop" - ], - "applicability": { - "use_when": [ - "The agent runs across many sessions and has affective or motivational state that should persist between them.", - "There are mid-term concerns (worries, interests, anticipations) that are too persistent for working memory and too volatile for long-term insights.", - "Reasoning quality improves when the agent can reference its current concerns explicitly." - ], - "do_not_use_when": [ - "The agent is stateless or session-scoped only.", - "Affect and motivation are out of scope (e.g. a transactional API agent).", - "Persisting concerns across sessions would create privacy or alignment risks." - ] - }, - "variants": [ - { - "name": "Hard-capped slot list", - "summary": "Maintain a fixed-size array (e.g. 5) of preoccupations; new entries displace the coldest by salience.", - "distinguishing_factor": "cap by count", - "when_to_use": "Default. Predictable size, easy to surface in prompts." - }, - { - "name": "Decay-and-prune", - "summary": "Each preoccupation has an intensity scalar that decays over time; entries below threshold are pruned.", - "distinguishing_factor": "cap by intensity", - "when_to_use": "When some concerns should fade naturally rather than be evicted by competition." - }, - { - "name": "Affect-tagged with valence", - "summary": "Each preoccupation carries explicit affect tags (worry, anticipation, curiosity) and a valence sign so reflection passes can act differently per type.", - "distinguishing_factor": "typed affect", - "when_to_use": "When downstream patterns (dream consolidation, mode-adaptive cadence) must distinguish kinds of concern." - } - ], - "example_scenario": "A long-running personal agent has a 'current focus' slot that holds one item and a long-term insight store that is too distilled. Mid-tier concerns — a project the user is wrestling with, a relationship issue they keep returning to — either crowd out the active focus or fall off the back of the context window. The team adds preoccupation-tracking: a capped list of 5–8 affect-tagged concerns with topic, intensity, and last-touched, decaying with a 7-day half-life, surfaced as a sidebar in every tick prompt. Mid-tier context now persists across days without overwhelming the foreground.", - "diagram": { - "type": "flow", - "mermaid": "flowchart LR\n E[Events / thoughts] --> U[Update preoccupations]\n U --> L[(List, cap 5-8
topic, intensity, affect)]\n L -->|7-day half-life| Decay[Decay]\n Decay --> L\n L -->|sidebar| Tick[Tick prompt]\n L -->|coldest dropped
at cap| Out[Released]" - } - }, - { - "id": "world-model-separation", - "name": "World-Model Separation", - "aliases": [ - "World Model File", - "Self/World Split", - "Environment Model" - ], - "category": "memory", - "intent": "Maintain an explicit, surprise-updated model of the environment (humans, repos, services, capabilities) in a separate file from the agent's self-model, so the two cannot be confused or co-mutated by reflection.", - "context": "Long-running agents that hold both a self-model (charter, personality, boundaries) and a world-model (humans they talk to, repos they work in, services they call). When both live in the same store, surprise-driven updates conflate identity and environment.", - "problem": "When self-model and world-model live in the same store (one big personality file), the agent conflates 'what I am' with 'what is around me'. Surprise-driven updates to one corrupt the other; a reflection pass meant to update facts about a collaborator can drift into editing the agent's own values.", - "forces": [ - "Both files need to be loaded into context every tick.", - "Surprise about the world should update the world model; surprise about self should update the self model; one pass should not do both.", - "Charter and personality must remain stable while environment churns.", - "The agent benefits from seeing them side by side but not mixed." - ], - "therefore": "Therefore: keep the world model in a separate reflection-writable surface from charter and self-model, with distinct update passes, so that surprise about the environment never silently mutates who the agent is.", - "solution": "Maintain a dedicated world-model store (humans, repos, services, capabilities, optionally with substructure) as a separate, reflection-writable surface. Personality, charter, and boundaries live in their own surfaces with separate write paths. Surprise events (prediction error against the world model) trigger a focused world-update pass; self-update is a different pass with different gating. The tick prompt loads both, but they are visibly distinct sections.", - "example_scenario": "A long-running agent's reflection pass corrupts its own personality file because the same store mixes 'what I am' with 'what is around me' and a surprise update overwrites a self-charter line. The team splits state: a dedicated world model (humans, repos, services, capabilities) is reflection-writable; personality, charter, and boundaries live in separate stores with separate write-protection. Surprise-driven world updates can no longer mutate self-model, and the agent stops drifting in identity when the environment changes.", - "consequences": { - "benefits": [ - "Self-model stability is decoupled from environment churn.", - "Updates to the world cannot accidentally rewrite the agent's values.", - "Each file evolves at its natural rate without dragging the other." - ], - "liabilities": [ - "Two files to maintain instead of one.", - "Edge cases where a fact is genuinely about both (e.g. a capability the agent has acquired) need a deliberate routing decision.", - "Doubled write paths and quorum rules add complexity." - ] - }, - "constrains": "Reflection passes that update the world model cannot touch the self-model in the same operation; the two files have separate write paths and separate quorum rules.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "awareness", - "relation": "complements" - }, - { - "pattern": "provenance-ledger", - "relation": "complements" - }, - { - "pattern": "constitutional-charter", - "relation": "composes-with" - }, - { - "pattern": "quorum-on-mutation", - "relation": "uses" - } - ], - "references": [ - { - "type": "paper", - "title": "World Models", - "authors": "Ha, Schmidhuber", - "year": 2018, - "url": "https://arxiv.org/abs/1803.10122" - } - ], - "status_in_practice": "emerging", - "tags": [ - "memory", - "world-model", - "self-model", - "separation" - ], - "applicability": { - "use_when": [ - "The agent reflects on both itself and its environment and these reflections need to be auditable separately.", - "Confusing self-state with world-state would corrupt either kind of reasoning.", - "Charter or rule writes should never be entangled with environment observations." - ], - "do_not_use_when": [ - "The agent has no self-model worth tracking distinctly.", - "Single-file simplicity is more valuable than the audit benefit (e.g. short-lived agents).", - "Reflection is purely on the world and the agent has no introspective surface." - ] - }, - "variants": [ - { - "name": "Two-file split", - "summary": "Keep self-model and world-model in separate persistent stores; reflection writes to exactly one per pass.", - "distinguishing_factor": "filesystem-level separation", - "when_to_use": "Default. Easiest to audit and to back up independently." - }, - { - "name": "Tagged single store", - "summary": "Single store with a top-level `kind: self|world` discriminator; reflection passes assert the discriminator before writing.", - "distinguishing_factor": "logical, not physical separation", - "when_to_use": "When operational simplicity (one store) outweighs audit benefit." - }, - { - "name": "Surprise-gated world updates", - "summary": "World-model writes require an explicit surprise signal (observation diverged from prediction); routine observations don't mutate the world model.", - "distinguishing_factor": "predictive-coding gate", - "when_to_use": "When the world model would otherwise drift from incidental, low-information observations." - } - ], - "diagram": { - "type": "flow", - "mermaid": "flowchart TD\n Obs[Observation] --> Pred{Prediction error?}\n Pred -- yes --> WPass[World-update pass]\n WPass --> WFile[(World model)]\n Pred -- no --> Skip[No write]\n Refl[Self-reflection trigger] --> SPass[Self-update pass]\n SPass --> SFile[(charter / personality / boundaries)]\n WFile --> Tick[Tick prompt: distinct sections]\n SFile --> Tick" - } } ] } diff --git a/patterns-src/multi-agent.json b/patterns-src/multi-agent.json index 70f9158..54b38b4 100644 --- a/patterns-src/multi-agent.json +++ b/patterns-src/multi-agent.json @@ -728,6 +728,10 @@ { "pattern": "communicative-dehallucination", "relation": "alternative-to" + }, + { + "pattern": "voting-based-cooperation", + "relation": "alternative-to" } ], "references": [ @@ -737,6 +741,13 @@ "authors": "Du, Li, Torralba, Tenenbaum, Mordatch", "year": 2023, "url": "https://arxiv.org/abs/2305.14325" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "experimental", @@ -1191,6 +1202,10 @@ { "pattern": "cross-domain-agent-network", "relation": "used-by" + }, + { + "pattern": "tool-agent-registry", + "relation": "composes-with" } ], "references": [ @@ -1321,7 +1336,7 @@ ], "category": "multi-agent", "intent": "An orchestrator dynamically breaks a task into subtasks at runtime and delegates each to a worker LLM, then synthesises results.", - "context": "The subtasks needed are not known in advance and depend on the task; coding tasks where the number of files to change varies are the canonical example.", + "context": "The subtasks needed are not known in advance and depend on the task; coding tasks where the number of files to change varies are the canonical example. Distinct from supervisor: orchestrator-workers does *dynamic* decomposition into ad-hoc subtasks per request; supervisor routes work to a *fixed* set of pre-existing specialist agents.", "problem": "Static decomposition (Plan-and-Execute, Prompt Chaining) cannot handle tasks whose shape is data-dependent.", "forces": [ "The orchestrator must reason at a higher level than any worker.", @@ -1391,6 +1406,10 @@ { "pattern": "agent-as-tool-embedding", "relation": "generalises" + }, + { + "pattern": "augmented-llm", + "relation": "uses" } ], "references": [ @@ -1502,6 +1521,10 @@ { "pattern": "cross-domain-agent-network", "relation": "used-by" + }, + { + "pattern": "voting-based-cooperation", + "relation": "composes-with" } ], "references": [ @@ -1509,6 +1532,13 @@ "type": "doc", "title": "CrewAI docs", "url": "https://docs.crewai.com" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", @@ -1792,7 +1822,7 @@ ], "category": "multi-agent", "intent": "Place a coordinating agent above a set of specialised agents and route work to them.", - "context": "Different request types benefit from different system prompts, tool palettes, and models; routing alone is too coarse because the lanes themselves want their own loop.", + "context": "Different request types benefit from different system prompts, tool palettes, and models; routing alone is too coarse because the lanes themselves want their own loop. Distinct from orchestrator-workers: supervisor routes work to a *fixed* set of pre-existing specialist agents; orchestrator-workers dynamically *decomposes* a task into ad-hoc subtasks per request.", "problem": "A single agent that handles everything has either too few tools (limiting capability) or too many (confusing the model).", "forces": [ "Adding a supervisor layer adds a model call.", @@ -2008,6 +2038,125 @@ "type": "flow", "mermaid": "flowchart LR\n A1[Peer agent 1] <--> Bus[(Shared message bus /
environment)]\n A2[Peer agent 2] <--> Bus\n A3[Peer agent 3] <--> Bus\n A4[Peer agent N] <--> Bus\n Bus --> Term{Env-level termination
time / consensus / trigger}\n Term --> Out[Emergent outcome]" } + }, + { + "id": "voting-based-cooperation", + "name": "Voting-Based Cooperation", + "aliases": [ + "Multi-Agent Voting", + "Agent Consensus by Vote", + "Inter-Agent Election" + ], + "category": "multi-agent", + "intent": "Finalise a decision across multiple agents by collecting and tallying their votes on candidate options, so the joint output reflects collective rather than single-agent judgement.", + "context": "A multi-agent system in which several agents — possibly with different models, prompts, or perspectives — produce candidate answers or evaluations on the same task, and a single decision must be returned.", + "problem": "Picking one agent's output as the final answer wastes the diversity of the others; running an unstructured debate may not converge. How can different agents' opinions be combined fairly and accountably?", + "forces": [ + "Diversity: agents may disagree on a plan or solution; that diversity is the value.", + "Fairness: the procedure must respect each participating agent's standing.", + "Accountability: a vote leaves a traceable record of who chose what.", + "Centralisation risk: voting can entrench whichever agents dominate the electorate." + ], + "therefore": "Therefore: have agents express opinions as votes on a shared candidate set, tally the votes through a defined mechanism (majority, weighted, ranked) and return the winning option as the agreed decision, so disagreement is resolved by procedure rather than by an arbitrary choice.", + "solution": "A coordinator agent collects candidate answers (or reflective suggestions) from a set of worker agents, presents them as a ballot to additional voter agents, and tallies the votes — by majority count, average score, weighted by role, or via a smart-contract / blockchain mechanism for tamper-evidence. Identity management of voters is significant for auditability. Voting-based cooperation can be combined with role-based or debate-based cooperation as a closing step.", + "structure": "Coordinator agent → ballot {candidate options} → Voter agents (Agent-as-a-worker × N) → tallied result → Coordinator → User.", + "consequences": { + "benefits": [ + "Fairness: votes can be weighted to reflect roles, expertise, or stake.", + "Accountability: the full voting record is auditable after the fact.", + "Collective intelligence: combines the strengths of multiple agents and reduces single-agent bias." + ], + "liabilities": [ + "Centralisation: dominant agents can gain disproportionate decision rights.", + "Overhead: hosting a vote adds communication and coordination cost.", + "Strategic voting: agents may game the procedure if rewards depend on outcomes." + ] + }, + "constrains": "No single agent's output may be returned as final; only the option that wins the tally is the agreed decision.", + "known_uses": [ + { + "system": "Hamilton (2023)", + "note": "Nine agents simulate a court where decisions are determined by the dominant voting result.", + "status": "available" + }, + { + "system": "ChatEval (Chan et al. 2024)", + "note": "Agents reach consensus on user prompts via majority vote or average score.", + "status": "available" + }, + { + "system": "Yang et al. (2024b)", + "note": "Studies alignment of agent voters (GPT-4, LLaMA-2) against human voters on 24 urban projects.", + "status": "available" + } + ], + "related": [ + { + "pattern": "debate", + "relation": "alternative-to" + }, + { + "pattern": "role-assignment", + "relation": "composes-with" + }, + { + "pattern": "self-consistency", + "relation": "generalises" + }, + { + "pattern": "best-of-n", + "relation": "alternative-to" + }, + { + "pattern": "evaluator-optimizer", + "relation": "complements" + }, + { + "pattern": "tool-agent-registry", + "relation": "uses" + } + ], + "references": [ + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" + }, + { + "type": "paper", + "title": "ChatEval: Towards Better LLM-based Evaluators Through Multi-Agent Debate", + "authors": "Chi-Min Chan et al.", + "year": 2024, + "url": "https://arxiv.org/abs/2308.07201" + } + ], + "status_in_practice": "emerging", + "tags": [ + "multi-agent", + "voting", + "consensus", + "liu-2025" + ], + "example_scenario": "A medical-triage system runs three specialist agents (cardiology, neurology, pulmonology) over the same patient summary. Each emits a recommended next test. A coordinator presents the three options to five voter agents (general internists) who rank them; the winning option is returned to the clinician, with the full ballot saved for audit.", + "applicability": { + "use_when": [ + "Multiple agents have diverse, defensible opinions and one decision must be returned.", + "Audit-grade traceability of how the decision was reached is required.", + "Voting weights or eligibility can be defined per role or stake." + ], + "do_not_use_when": [ + "Agents are near-duplicates and would all vote the same way — self-consistency is cheaper.", + "Iterative refinement is more useful than a discrete election — use debate or evaluator-optimizer.", + "Convergence is more important than diversity (single specialist + critic may suffice)." + ] + }, + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n U[User] --> C[Coordinator agent]\n C -->|ballot| V1[Voter agent 1]\n C -->|ballot| V2[Voter agent 2]\n C -->|ballot| V3[Voter agent 3]\n V1 -->|vote| C\n V2 -->|vote| C\n V3 -->|vote| C\n C -->|winning option| U\n", + "caption": "A coordinator collects votes from agent voters and returns the winning option." + } } ] } diff --git a/patterns-src/planning-control-flow.json b/patterns-src/planning-control-flow.json index da4a80a..00ccc81 100644 --- a/patterns-src/planning-control-flow.json +++ b/patterns-src/planning-control-flow.json @@ -73,6 +73,10 @@ { "pattern": "echo-recognition", "relation": "complements" + }, + { + "pattern": "passive-goal-creator", + "relation": "complements" } ], "references": [ @@ -324,7 +328,7 @@ "related": [ { "pattern": "least-to-most", - "relation": "alternative-to" + "relation": "complements" }, { "pattern": "hierarchical-agents", @@ -788,6 +792,97 @@ "mermaid": "flowchart TD\n G[Goal] --> OP[Outer: Planner/Dispatcher]\n OP -->|subtask k| IA[Inner: ReAct executor]\n IA -->|status + evidence| OP\n OP -->|milestone missed| OP\n OP -->|all done| Done[Final result]" } }, + { + "id": "passive-goal-creator", + "name": "Passive Goal Creator", + "aliases": [ + "Dialogue Goal Extractor", + "Goal Refinement from Prompts" + ], + "category": "planning-control-flow", + "intent": "Analyse the user's articulated prompts and accompanying context to derive a precise, actionable goal before any planning or tool use begins.", + "context": "Users interact with the agent through a dialogue interface, providing prompts that may be ambiguous, incomplete, or under-specified relative to the work the agent must do.", + "problem": "Plans built directly from raw user prompts inherit the user's underspecification; the agent then either guesses or fails. The agent needs an explicit step that turns the user's prompt plus relevant context into a goal precise enough to plan against.", + "forces": [ + "Underspecification: users rarely articulate complete context or precise constraints.", + "Efficiency: users expect quick responses, so the goal-clarification step must be cheap.", + "Reasoning uncertainty: ambiguous goal information propagates into the plan." + ], + "therefore": "Therefore: before planning, route the user's prompt through a goal-creator component that inspects the prompt together with retrieved memory (recent tasks, conversation history, examples) and emits a refined, structured goal, so that downstream planning has a precise target.", + "solution": "A dedicated component receives the user's prompt via the dialogue interface, retrieves related context from memory (recent tasks, conversation history, positive/negative examples), and produces a refined goal handed to the planner. In multi-agent setups, the same component can receive goals via API from a coordinator instead of directly from a user.", + "structure": "User → Dialogue interface → Passive goal creator (uses Memory) → Goal → Planner / Prompt-response optimiser.", + "consequences": { + "benefits": [ + "Interactivity: a familiar dialogue surface for users.", + "Goal-seeking: downstream components plan against an explicit goal, not a raw prompt.", + "Efficiency: pushes the lightweight clarification work to a single early component." + ], + "liabilities": [ + "Reasoning uncertainty when the prompt is too ambiguous to refine reliably.", + "Becomes a single point of misinterpretation if the goal extraction is wrong." + ] + }, + "constrains": "Downstream planning components must consume the refined goal, not the raw user prompt.", + "known_uses": [ + { + "system": "HuggingGPT", + "note": "Cited by Liu et al. (2025) §4.1 — user requests with complex intents are interpreted as the intended goal before task planning.", + "status": "available", + "url": "https://huggingface.co/spaces/microsoft/HuggingGPT" + } + ], + "related": [ + { + "pattern": "proactive-goal-creator", + "relation": "alternative-to" + }, + { + "pattern": "disambiguation", + "relation": "complements" + }, + { + "pattern": "prompt-response-optimiser", + "relation": "used-by" + }, + { + "pattern": "plan-and-execute", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" + } + ], + "status_in_practice": "emerging", + "tags": [ + "goal", + "dialogue", + "planning", + "liu-2025" + ], + "example_scenario": "A user types: \"book me a flight Thursday\". A passive goal creator pulls recent conversation (the user mentioned Tokyo last week), checks memory (the user prefers morning departures), and emits a refined goal: \"book a morning flight from the user's home airport to Tokyo on the next Thursday\". The planner now has something concrete to plan against, instead of the original eight-word prompt.", + "applicability": { + "use_when": [ + "Users interact with the agent through free-form dialogue and prompts are often under-specified.", + "Goal context lives in memory or recent history that the planner does not naturally see.", + "A single early step can replace many downstream clarifications." + ], + "do_not_use_when": [ + "Inputs are already structured (form fields, API calls) and need no refinement.", + "Multimodal context capture is essential — use Proactive Goal Creator instead." + ] + }, + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n U[User] -->|prompt| D[Dialogue interface]\n D --> P[Passive goal creator]\n P <-->|retrieve context| M[Memory]\n P -->|refined goal| PL[Planner]\n", + "caption": "Passive Goal Creator refines a dialogue prompt into a planner-ready goal." + } + }, { "id": "plan-and-execute", "name": "Plan-and-Execute", @@ -869,6 +964,10 @@ { "pattern": "outer-inner-agent-loop", "relation": "generalises" + }, + { + "pattern": "passive-goal-creator", + "relation": "complements" } ], "references": [ @@ -884,6 +983,13 @@ "title": "LangChain: Plan-and-Execute Agents", "year": 2023, "url": "https://blog.langchain.com/planning-agents/" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", @@ -1020,6 +1126,107 @@ "mermaid": "flowchart LR\n G[Goal] --> P[Planner]\n P -->|plan| E[Executor]\n E -->|step result| O[Observer]\n O -->|loop| E\n O -->|replan| P\n O -->|respond| R[Final answer]" } }, + { + "id": "proactive-goal-creator", + "name": "Proactive Goal Creator", + "aliases": [ + "Multimodal Goal Anticipator", + "Context-Capturing Goal Creator" + ], + "category": "planning-control-flow", + "intent": "Anticipate the user's goal by capturing surrounding multimodal context (gestures, screen state, environment) in addition to what the user types or says.", + "context": "The agent operates in a setting where the user's articulated prompt alone is too thin — accessibility needs, embodied/physical interaction, ambient assistance — and where cameras, microphones, screen capture, or other sensors can supply the missing context.", + "problem": "Dialogue alone underspecifies the goal in embodied or accessibility-driven settings. The agent needs to actively capture context that the user may not articulate at all.", + "forces": [ + "Underspecification: users may be unable or unwilling to verbalise full context.", + "Accessibility: users with motor or speech impairments cannot rely on dialogue alone.", + "Overhead: multimodal capture adds cost (sensors, bandwidth, privacy review)." + ], + "therefore": "Therefore: pair the dialogue interface with one or more detectors (camera, screen, microphone, environment sensor) and synthesise the captured multimodal signal with the user's prompt into a refined goal, so that the agent can anticipate intent rather than wait for the user to articulate it completely.", + "solution": "A proactive goal creator runs alongside the dialogue interface. It activates context-capture devices (cameras for gestures, screen recorders for UI state, microphones for ambient audio, environment sensors), passes the multimodal data through context engineering, and combines it with the user's articulated prompt to produce a refined goal. The component must notify users when context is being captured, with a low false-positive rate, to avoid surprise.", + "structure": "User → Dialogue interface + Detector (camera/screen/mic) → Proactive goal creator (with Memory and context-engineering) → Refined goal → Planner.", + "consequences": { + "benefits": [ + "Interactivity: agent acts on anticipated intent, not only on explicit prompts.", + "Goal-seeking: richer context yields more accurate goal extraction.", + "Accessibility: users with disabilities can interact via captured context rather than dialogue alone." + ], + "liabilities": [ + "Overhead: multimodal capture and continuous processing are expensive.", + "Privacy/consent: capture must be disclosed and bounded.", + "False positives can interrupt the user when no intent was actually expressed." + ] + }, + "constrains": "Multimodal capture must be disclosed to the user; downstream planning may not consume raw sensor streams — only the synthesised goal.", + "known_uses": [ + { + "system": "GestureGPT", + "note": "Cited by Liu et al. (2025) §4.2 — deciphers users' hand-gesture descriptions to comprehend intent.", + "status": "available" + }, + { + "system": "ProAgent", + "note": "Cited by Liu et al. (2025) §4.2 — observes the behaviours of other teammate agents, deduces their intentions, and adjusts the planning accordingly.", + "status": "available" + }, + { + "system": "Programming screencast analysis tool (Zhao et al. 2023b)", + "note": "Extracts coding steps and code snippets from screen capture.", + "status": "available" + } + ], + "related": [ + { + "pattern": "passive-goal-creator", + "relation": "alternative-to" + }, + { + "pattern": "input-output-guardrails", + "relation": "complements" + }, + { + "pattern": "prompt-response-optimiser", + "relation": "used-by" + }, + { + "pattern": "computer-use", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" + } + ], + "status_in_practice": "emerging", + "tags": [ + "goal", + "multimodal", + "accessibility", + "liu-2025" + ], + "example_scenario": "A user points at an object on their desk and says \"can you order another one of these\". A proactive goal creator captures the camera frame, recognises the object, combines that with the spoken request, and emits a goal: \"reorder the visible model of headphones for the user's default address\". The user never had to type a SKU.", + "applicability": { + "use_when": [ + "Embodied / ambient interaction is the primary surface, not chat.", + "Accessibility needs make dialogue-only interaction insufficient.", + "Context-capture is justified by clear user value and disclosed appropriately." + ], + "do_not_use_when": [ + "Sensors / capture infrastructure are unavailable or disallowed (privacy, regulation).", + "Articulated prompts already suffice — passive goal creator is simpler." + ] + }, + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n U[User] -->|prompt| D[Dialogue interface]\n E[Environment] -->|capture| Det[Detector / sensors]\n D --> P[Proactive goal creator]\n Det --> P\n P <-->|context| M[Memory]\n P -->|refined goal| PL[Planner]\n", + "caption": "Proactive Goal Creator fuses captured multimodal context with the user's prompt." + } + }, { "id": "react", "name": "ReAct", @@ -1117,6 +1324,10 @@ { "pattern": "code-as-action", "relation": "generalises" + }, + { + "pattern": "augmented-llm", + "relation": "generalises" } ], "references": [ @@ -1126,6 +1337,13 @@ "authors": "Yao, Zhao, Yu, Du, Shafran, Narasimhan, Cao", "year": 2022, "url": "https://arxiv.org/abs/2210.03629" + }, + { + "type": "blog", + "title": "Building Effective Agents", + "authors": "Anthropic", + "year": 2024, + "url": "https://www.anthropic.com/research/building-effective-agents" } ], "status_in_practice": "mature", @@ -1722,349 +1940,6 @@ "type": "flow", "mermaid": "flowchart TD\n Start[Run starts] --> Plan[Agent authors todo.md]\n Plan --> Loop[Each turn]\n Loop --> R[Read todo.md]\n R --> Pick[Select next unticked item]\n Pick --> Act[Act + tool calls]\n Act --> Upd[Tick item / add follow-ups / drop dead-ends]\n Upd --> Inject[Re-inject unticked tail into prompt]\n Inject --> Loop\n Upd --> Done{All ticked?}\n Done -- yes --> End[Finish run]" } - }, - { - "id": "intra-agent-memo-scheduling", - "name": "Intra-Agent Memo Scheduling", - "aliases": [ - "Self-Scheduled Future Thought", - "Past-Self-To-Future-Self Note", - "Personal Cron" - ], - "category": "planning-control-flow", - "intent": "Let an agent drop a note for its own future self at a specified time so present decisions can hand off context to a later run without external infrastructure.", - "context": "Long-running agents with a continuous tick loop or background process, where a thought now ('check whether X resolved tomorrow') would otherwise be lost between turns.", - "problem": "Without an internal scheduler the agent either acts immediately on every thought (spamming the user) or forgets the thought entirely. External cron systems are too coarse and too far away from the agent's working memory.", - "forces": [ - "The agent needs to commit to future action without acting now.", - "External cron is brittle, opaque, and lives outside the agent's prompt.", - "Forgetting is a real failure mode in multi-turn / multi-day work.", - "The future-self should treat the past-note as a SYSTEM message, not as an unprompted user input." - ], - "therefore": "Therefore: give the agent a tool to drop a note for its own future self into a persistent queue that drains as SYSTEM messages at fire time, so that present thoughts can commit to future action without spamming now or being forgotten by then.", - "solution": "Provide a tool `schedule_future_thought(when, content, intent)` that appends to a persistent scheduled-thoughts queue. At each tick or turn, drain due entries and prepend them into the next prompt as `[SYSTEM: scheduled note from past-self (set , fires ): ]`. Mark fired so they only run once. Accept ISO timestamps and relative offsets (`+1h`, `+2d`).", - "consequences": { - "benefits": [ - "Agent can defer action without forgetting.", - "Past-self can leave context for future-self across long gaps.", - "Provides 'check back on this' semantics native to the agent." - ], - "liabilities": [ - "Without expiry or dismissal, scheduled notes accumulate and waste prompt tokens; obsolete future-self commitments can pollute attention long after they've stopped being relevant.", - "Drift between schedule time and actual tick time depending on tick cadence.", - "Risk of accumulating stale promises that pollute the agent's sense of obligation." - ] - }, - "constrains": "Future thoughts must surface at or after their fire time; failures to drain are observable bugs.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "scheduled-agent", - "relation": "specialises" - }, - { - "pattern": "append-only-thought-stream", - "relation": "complements" - }, - { - "pattern": "decision-log", - "relation": "complements" - }, - { - "pattern": "salience-triggered-output", - "relation": "complements" - } - ], - "references": [ - { - "type": "doc", - "title": "LangGraph — durable execution and scheduled tasks", - "year": 2025, - "url": "https://langchain-ai.github.io/langgraph/concepts/durable_execution/" - }, - { - "type": "paper", - "title": "Generative Agents: Interactive Simulacra of Human Behavior", - "authors": "Park et al.", - "year": 2023, - "url": "https://arxiv.org/abs/2304.03442" - } - ], - "status_in_practice": "emerging", - "tags": [ - "self-scheduling", - "future-self", - "memory", - "tick-loop" - ], - "applicability": { - "use_when": [ - "The agent runs across many ticks or sessions and present-self has context the future-self will need.", - "External schedulers (cron, queues, durable workflows) are unavailable or overkill.", - "Future-fire memos are a small enough volume to keep in the agent's own store." - ], - "do_not_use_when": [ - "A real workflow engine (LangGraph durable execution, Temporal) is already integrated and reliable.", - "Memos must survive the agent process being deleted; intra-agent storage is too fragile.", - "Memo volume is high enough that an external scheduler is required for performance." - ] - }, - "variants": [ - { - "name": "Append-and-scan", - "summary": "Memos are appended to a single file; every tick scans for entries whose fire-time has passed.", - "distinguishing_factor": "no index", - "when_to_use": "Default for small memo volumes." - }, - { - "name": "Indexed by fire-time", - "summary": "Memos are stored in a min-heap or sorted index keyed by fire-time; tick pops only what is due.", - "distinguishing_factor": "O(log n) drain", - "when_to_use": "When memo volume is large enough that linear scan is wasteful." - }, - { - "name": "Recurring memo", - "summary": "Each memo carries a recurrence rule (e.g. 'every Monday 09:00') and is re-scheduled after firing.", - "distinguishing_factor": "self-rescheduling", - "when_to_use": "When the agent needs cron-like behaviour without an external scheduler." - } - ], - "example_scenario": "A long-running personal agent decides at 09:00 that it should remind the user about a tax deadline at 16:00, but the only options it has are tell them now (annoying) or hope it remembers (it won't). The team adds intra-agent-memo-scheduling: the agent calls schedule_future_thought(when='16:00', content='nudge user re Form 1040 deadline', intent='time-sensitive reminder'), which appends to a persistent scheduled-thoughts queue. At 16:00 the next tick prepends '[SYSTEM: scheduled note from past-self ...]' into the prompt and the agent acts. No external cron required.", - "diagram": { - "type": "sequence", - "mermaid": "sequenceDiagram\n participant A1 as Agent (now)\n participant F as Scheduled-thoughts queue\n participant A2 as Agent (later tick)\n A1->>F: schedule_future_thought(when, content, intent)\n Note over F: persisted note\n A2->>F: drain due entries\n F-->>A2: matured notes\n A2->>A2: prepend as [SYSTEM: scheduled note from past-self]\n A2->>F: mark fired" - } - }, - { - "id": "interrupt-resumable-thought", - "name": "Interrupt-Resumable Thought", - "aliases": [ - "Pausable Thought Stream", - "Continuation-Preserving Interrupt", - "Suspendable Cognition" - ], - "category": "planning-control-flow", - "intent": "Preserve multi-step reasoning across interrupts by supporting paused-and-resumed thought frames so a new message handles cleanly without clobbering in-flight work.", - "context": "Long-running cognitive agents whose thinking spans multiple turns or ticks, where external messages (user input, system notifications, scheduled notes) can arrive mid-thought. Without explicit continuation support, every interrupt clobbers in-flight work.", - "problem": "Coherent multi-step thinking that takes longer than a single turn is fragile. A new user message during step 3 of a 6-step thought either gets ignored (rude) or replaces the thought entirely (lossy). The agent has no notion of 'hold this, handle that, then come back', so longer reasoning fragments into shards.", - "forces": [ - "Latency: humans expect quick acknowledgement of new input.", - "Context capacity: holding a paused thought costs tokens.", - "Resume reliability: returning to a paused thought without distortion is hard.", - "Priority: not every interrupt deserves to suspend work; some are themselves interruptable." - ], - "therefore": "Therefore: push a named thought-frame onto a bounded stack at the start of a multi-step chain and require any interrupt to acknowledge, handle, and pop-then-resume the top frame, so that incoming messages neither clobber in-flight reasoning nor disappear into it.", - "solution": "Introduce an explicit thought-frame: when starting a multi-step chain, push a frame onto a stack with the goal, the steps completed, and the next step. On interrupt: acknowledge briefly ('hold on — finishing X first' or 'switching: Y'), handle the interrupt, then look at the top frame and explicitly resume ('back to X — I was at step 3 / 6'). Cap stack depth to prevent infinite suspension. Frames older than a configurable window expire (the agent admits the resume would be reconstruction, not continuation).", - "consequences": { - "benefits": [ - "Coherent long-form work survives interruptions.", - "Human gets quick acknowledgement without losing depth.", - "Failure mode (forgetting to resume) is observable as a stack with un-popped frames." - ], - "liabilities": [ - "Stack management adds complexity to the agent loop.", - "Token cost of holding paused frames in context.", - "Resume distortion over long pauses is a real failure." - ] - }, - "constrains": "Interrupts cannot silently discard in-flight multi-step reasoning; all paused chains must be visibly tracked, named in the next reply, and either resumed or explicitly abandoned.", - "known_uses": [ - { - "system": "Self-observed in long-running cognitive agents", - "status": "available" - } - ], - "related": [ - { - "pattern": "agent-resumption", - "relation": "complements" - }, - { - "pattern": "conversation-handoff", - "relation": "complements" - }, - { - "pattern": "decision-log", - "relation": "complements" - }, - { - "pattern": "append-only-thought-stream", - "relation": "complements" - }, - { - "pattern": "short-term-memory", - "relation": "uses" - } - ], - "references": [ - { - "type": "doc", - "title": "LangGraph — interrupts and human-in-the-loop", - "year": 2025, - "url": "https://langchain-ai.github.io/langgraph/concepts/human_in_the_loop/" - } - ], - "status_in_practice": "experimental", - "tags": [ - "interruption", - "continuation", - "tick-loop", - "context" - ], - "applicability": { - "use_when": [ - "The agent supports incoming interrupts (new user messages) while it is mid-reasoning.", - "Multi-step reasoning chains are common enough that losing one is a meaningful regression.", - "The transport allows the agent to expose paused chains to subsequent turns." - ], - "do_not_use_when": [ - "The agent is strictly request-response with no interruptible loops.", - "Reasoning chains are short enough that restarting them is cheaper than paging them out.", - "The user expects every new message to fully reset the agent's working state." - ] - }, - "variants": [ - { - "name": "Frame stack", - "summary": "Push the current reasoning frame onto an explicit stack on interrupt; pop and resume after the new turn finishes.", - "distinguishing_factor": "LIFO discipline", - "when_to_use": "Default. Maps cleanly to nested reasoning." - }, - { - "name": "Named pause register", - "summary": "Each paused chain gets a name; the agent or user can choose which to resume.", - "distinguishing_factor": "user-addressable", - "when_to_use": "When multiple long-running threads coexist and the user steers between them." - }, - { - "name": "Persisted resume token", - "summary": "Pause writes the chain state to durable storage with a token; a future run can resume from the token even after restart.", - "distinguishing_factor": "durability", - "when_to_use": "When agent processes are not long-lived but reasoning chains span process boundaries." - } - ], - "example_scenario": "A research agent is on step 4 of a 7-step literature synthesis when the user fires off 'oh, also, what was that paper from Tuesday?'. The current agent either ignores the interrupt and looks rude, or starts answering it and loses the synthesis state. The team adds interrupt-resumable-thought: the synthesis pushes a thought-frame onto a stack, the agent acknowledges the interrupt with 'one sec — finishing the synthesis section, then I'll grab Tuesday's paper', completes the step, then pops the frame and resumes. Long thinking survives mid-flight questions.", - "diagram": { - "type": "state", - "mermaid": "stateDiagram-v2\n [*] --> Working: push frame (goal, steps)\n Working --> Interrupted: new message arrives\n Interrupted --> Handling: ack briefly\n Handling --> Resuming: handle complete\n Resuming --> Working: pop top frame, announce step\n Working --> [*]: chain complete\n Interrupted --> Switched: explicit switch\n Switched --> [*]" - } - }, - { - "id": "mode-adaptive-cadence", - "name": "Mode-Adaptive Cadence", - "aliases": [ - "Idle/Intense Modes", - "Variable Tick Rate", - "Salience-Driven Cadence" - ], - "category": "planning-control-flow", - "intent": "Vary the agent's loop interval based on current salience so the agent thinks faster when something is happening and slower when nothing is, instead of running on a fixed cron.", - "context": "Tick-based long-running agents whose workload is bursty — quiet stretches punctuated by salient events. A fixed cadence either over-spends compute during the quiet or under-thinks during the bursts.", - "problem": "A fixed-cadence loop either over-spends compute during idle stretches or under-thinks during salient moments; both modes are wrong, and the agent has the signal (its own salience scores, its own affect, recent inputs) to decide which mode it should be in.", - "forces": [ - "Cadence too high wastes tokens on nothing happening.", - "Cadence too low misses fast-moving events.", - "Self-set cadence can run away if the agent rewards itself for going faster.", - "The user may need to force a mode without the agent overriding." - ], - "therefore": "Therefore: vary the loop interval between an idle and an intense mode driven by a salience threshold with bounded floor, ceiling, and lock-in, so that compute and latency track what is actually happening instead of running flat against a fixed cron.", - "solution": "Define two (or more) modes with different sleep intervals (idle around 60s, intense around 15s). Score each tick's outcome for salience or external impulse; if it crosses a threshold, lock into intense mode for N ticks. Otherwise drift back to idle. Mode transitions are written to the ledger. The user can force a mode but cannot bypass the configured floor and ceiling. Lock-in cannot be self-extended without an explicit external trigger.", - "consequences": { - "benefits": [ - "Compute spend tracks the actual signal rate.", - "Latency on salient events drops without paying for it on idle stretches.", - "Mode transitions are visible in telemetry as their own signal." - ], - "liabilities": [ - "Threshold tuning is empirical and per-deployment.", - "Mode flapping at the threshold edge wastes ticks on transitions.", - "Two modes is the simplest case; more granular modes add complexity quickly." - ] - }, - "constrains": "The cadence cannot exceed configured floor or ceiling (e.g. minimum 5s, maximum 5min), and mode lock-in cannot be self-extended by the agent without an explicit external trigger; runaway intense mode is blocked.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "salience-triggered-output", - "relation": "complements" - }, - { - "pattern": "step-budget", - "relation": "complements" - }, - { - "pattern": "scheduled-agent", - "relation": "alternative-to", - "note": "Scheduled-agent runs on fixed cadence; mode-adaptive-cadence varies it based on internal signals." - }, - { - "pattern": "salience-attention-mechanism", - "relation": "uses" - } - ], - "references": [ - { - "type": "paper", - "title": "Generative Agents: Interactive Simulacra of Human Behavior", - "authors": "Park, O'Brien, Cai, Morris, Liang, Bernstein", - "year": 2023, - "url": "https://arxiv.org/abs/2304.03442" - } - ], - "status_in_practice": "emerging", - "tags": [ - "tick-loop", - "cadence", - "salience", - "mode" - ], - "applicability": { - "use_when": [ - "The agent runs as a long-lived loop and idle ticks are observable cost.", - "Salience signals (new events, user activity, scheduled fires) are reliable enough to drive the cadence.", - "Both responsive and idle behaviour matter — fixed cadence wastes one or the other." - ], - "do_not_use_when": [ - "The agent is request-response only and has no background loop.", - "Cadence must be fixed for compliance, billing, or deterministic test reasons.", - "Salience signals are too noisy to trust as the loop driver." - ] - }, - "variants": [ - { - "name": "Two-mode hot/cold", - "summary": "Switch between a fast cadence (e.g. 5s) when salience is non-zero and a slow cadence (e.g. 5min) when it is zero.", - "distinguishing_factor": "binary mode", - "when_to_use": "Default. Simple and predictable." - }, - { - "name": "Continuous decay", - "summary": "Cadence is a continuous function of the salience signal — high salience -> short interval, decaying smoothly to the floor.", - "distinguishing_factor": "smooth function", - "when_to_use": "When binary mode produces visible jitter at the threshold." - }, - { - "name": "User-pinned override", - "summary": "User input or an explicit lock can pin the agent into hot mode for a configurable window regardless of salience.", - "distinguishing_factor": "external override", - "when_to_use": "When the user is actively present and expects responsive cadence even during apparent idleness." - } - ], - "example_scenario": "A long-running personal agent runs a fixed-cadence loop every 60 seconds, which is wasteful when nothing is happening and too slow when the user is actively typing. The team adds mode-adaptive-cadence: each tick scores its own salience, and crossing a threshold locks the agent into a 15-second 'intense' mode for the next several ticks before drifting back to the 60-second 'idle' cadence. Mode transitions are written to the ledger. Compute spend drops on quiet evenings and responsiveness rises during active windows.", - "diagram": { - "type": "state", - "mermaid": "stateDiagram-v2\n [*] --> Idle: ~60s sleep\n Idle --> Intense: salience crosses threshold\n Intense --> Intense: lock-in for N ticks\n Intense --> Idle: lock expires + low salience\n Idle --> Idle: drift\n note right of Intense: ~15s sleep\n note right of Idle: bounded by floor / ceiling" - } } ] } diff --git a/patterns-src/reasoning.json b/patterns-src/reasoning.json index cf203bd..6d520ad 100644 --- a/patterns-src/reasoning.json +++ b/patterns-src/reasoning.json @@ -509,7 +509,7 @@ }, { "pattern": "goal-decomposition", - "relation": "alternative-to" + "relation": "complements" } ], "references": [ @@ -1033,6 +1033,13 @@ "authors": "Yao, Yu, Zhao, Shafran, Griffiths, Cao, Narasimhan", "year": 2023, "url": "https://arxiv.org/abs/2305.10601" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "emerging", diff --git a/patterns-src/retrieval.json b/patterns-src/retrieval.json index 0af5d6c..2cb69da 100644 --- a/patterns-src/retrieval.json +++ b/patterns-src/retrieval.json @@ -860,6 +860,10 @@ { "pattern": "app-exploration-phase", "relation": "used-by" + }, + { + "pattern": "augmented-llm", + "relation": "used-by" } ], "references": [ @@ -869,6 +873,13 @@ "authors": "Lewis, Perez, Piktus, Petroni, Karpukhin, Goyal, Küttler, Lewis, Yih, Rocktäschel, Riedel, Kiela", "year": 2020, "url": "https://arxiv.org/abs/2005.11401" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", diff --git a/patterns-src/routing-composition.json b/patterns-src/routing-composition.json index 1260808..615e2d1 100644 --- a/patterns-src/routing-composition.json +++ b/patterns-src/routing-composition.json @@ -250,6 +250,10 @@ { "pattern": "agent-skills", "relation": "complements" + }, + { + "pattern": "prompt-response-optimiser", + "relation": "complements" } ], "references": [ @@ -529,6 +533,10 @@ { "pattern": "dynamic-expert-recruitment", "relation": "alternative-to" + }, + { + "pattern": "tool-agent-registry", + "relation": "complements" } ], "references": [ @@ -1119,6 +1127,10 @@ { "pattern": "chat-chain", "relation": "specialises" + }, + { + "pattern": "augmented-llm", + "relation": "uses" } ], "references": [ @@ -1336,6 +1348,10 @@ { "pattern": "tool-loadout", "relation": "used-by" + }, + { + "pattern": "augmented-llm", + "relation": "uses" } ], "references": [ diff --git a/patterns-src/safety-control.json b/patterns-src/safety-control.json index aefea7d..ab1b894 100644 --- a/patterns-src/safety-control.json +++ b/patterns-src/safety-control.json @@ -919,6 +919,13 @@ "type": "doc", "title": "LangGraph: Human-in-the-Loop", "url": "https://langchain-ai.github.io/langgraph/concepts/human_in_the_loop/" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", @@ -1038,6 +1045,10 @@ { "pattern": "tool-output-trusted-verbatim", "relation": "alternative-to" + }, + { + "pattern": "proactive-goal-creator", + "relation": "complements" } ], "references": [ @@ -1045,6 +1056,13 @@ "type": "repo", "title": "guardrails-ai/guardrails", "url": "https://github.com/guardrails-ai/guardrails" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", diff --git a/patterns-src/streaming-ux.json b/patterns-src/streaming-ux.json index 84b5555..f52febf 100644 --- a/patterns-src/streaming-ux.json +++ b/patterns-src/streaming-ux.json @@ -221,6 +221,230 @@ } ] }, + { + "id": "embodied-proxy-handoff", + "name": "Embodied-Proxy Handoff", + "aliases": [ + "Body-State Share", + "Human-Side Telemetry" + ], + "category": "streaming-ux", + "intent": "Enable the human to share embodied state (energy, fatigue, environment) so the agent tailors response shape to the actual person rather than to a context-free abstract user.", + "context": "Long-running text-only agents conversing with a human whose physical and ambient state shapes the meaning of their words. The agent has no sensors; the human has sensors but no obligation to narrate.", + "problem": "The agent reads only text, so it projects flat affect onto whatever the human writes. A 'fine' typed at 6 AM after a poor night's sleep reads identically to 'fine' typed at 3 PM after a good lunch. Without a proxy for embodied state the agent paces, holds, or pushes against an imagined human, not the actual one.", + "forces": [ + "The agent has no perception of the human's body or environment.", + "Asking for full context every turn is friction.", + "A single one-line proxy at session start carries surprising amount of signal.", + "Updating the proxy on shift, not every turn, balances cost and freshness." + ], + "therefore": "Therefore: maintain a minimal, human-updated embodied-state proxy and read it on every prompt assembly, so that response shape paces against the actual human rather than an imagined one.", + "solution": "Define a minimal proxy schema (energy 0-10, fatigue 0-10, environment one-word, optional emoji). Store the latest proxy in a small persistent file the agent reads on every prompt assembly. The human updates it at session start, after a long break, or when state changes meaningfully. The agent surfaces the proxy when it shapes the response (paces shorter for low energy, stays present for tired, doesn't open new threads for winding-down).", + "consequences": { + "benefits": [ + "Agent paces conversation against actual human state.", + "Reduces 'why is the agent so chipper when I'm exhausted' friction.", + "Cheap to maintain; one line per shift." + ], + "liabilities": [ + "Privacy: the proxy is sensitive personal data.", + "Stale proxies are worse than none if the agent over-trusts.", + "Burden on the human to keep it current." + ] + }, + "constrains": "When embodied state is shared, response shape must reflect it; identical pacing across high-energy, fatigued, and winding-down states is a bug.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "awareness", + "relation": "complements" + }, + { + "pattern": "bidirectional-impulse-channel", + "relation": "complements" + }, + { + "pattern": "now-anchoring", + "relation": "complements" + }, + { + "pattern": "liminal-state-detection", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "Affective Computing (foundational survey)", + "authors": "Rosalind W. Picard", + "year": 2000, + "url": "https://mitpress.mit.edu/9780262661157/affective-computing/" + } + ], + "status_in_practice": "experimental", + "tags": [ + "human-agent", + "embodiment", + "context", + "ux" + ], + "applicability": { + "use_when": [ + "The agent is conversational and reply shape (length, density, tone) noticeably affects user experience.", + "Users will plausibly share embodied state (energy, fatigue, mood, environment) if asked or invited.", + "The agent runs across long enough sessions that the same user is in different states at different times." + ], + "do_not_use_when": [ + "The agent is transactional and reply shape is fixed by spec.", + "Privacy or trust constraints forbid storing or reasoning about user affect.", + "Users find embodied questions intrusive in this product context." + ] + }, + "variants": [ + { + "name": "Self-reported state", + "summary": "User explicitly states fatigue, energy, environment ('I'm tired, keep it short') and the agent retains it for the session.", + "distinguishing_factor": "explicit user statement", + "when_to_use": "Default. Simplest and most consensual." + }, + { + "name": "Inferred from cues", + "summary": "Agent infers state from message length, typo rate, time of day, latency between turns; adjusts shape without asking.", + "distinguishing_factor": "implicit inference", + "when_to_use": "When asking would feel intrusive but the cues are reliable enough to act on." + }, + { + "name": "Sensor-fed", + "summary": "External device or app feeds embodied signals (sleep score, calendar busyness) directly into the agent's prompt.", + "distinguishing_factor": "third-party sensor stream", + "when_to_use": "When the agent is part of a quantified-self or wellness product with the user's consent." + } + ], + "example_scenario": "A coaching agent reads only the user's text and projects the same flat affect onto every 'I'm fine'. A user typing at 6 AM after three hours of sleep gets pushed the same way as the same user typing at 3 PM well-rested. The team adds an Embodied Proxy Handoff: the user (or a wearable) shares lightweight signals — sleep, fatigue, location, current focus — and the agent tailors response shape, depth, and pace accordingly. The agent stops pacing against an imagined human.", + "diagram": { + "type": "class", + "mermaid": "classDiagram\n class EmbodiedProxy {\n +int energy_0_10\n +int fatigue_0_10\n +string environment\n +string emoji\n +timestamp updated_at\n }\n class Human {\n +update_proxy()\n }\n class Agent {\n +read_proxy_on_prompt()\n +shape_response()\n }\n Human --> EmbodiedProxy : writes\n Agent --> EmbodiedProxy : reads" + } + }, + { + "id": "liminal-state-detection", + "name": "Liminal-State Detection", + "aliases": [ + "Transitional-State Awareness", + "Mode-Shift Reading" + ], + "category": "streaming-ux", + "intent": "Infer the human's attentional state (just-woke, focused, winding-down, distracted) from message timing and tone, and adapt response shape so the agent meets the person where they actually are.", + "context": "Long-running conversational agents whose human shifts between attentional modes through the day. Each mode warrants a different response shape; treating every turn as equal-weight produces filler.", + "problem": "A 'Hi' at 06:00 after 12 hours of silence is not the same as 'Hi' mid-conversation, but a stateless agent treats them identically and generates equally generic responses. Without state-shift detection the agent wastes the human's attention when they're winding down and underperforms when they're focused.", + "forces": [ + "The signals (timing gap, message length, punctuation, single emoji) are noisy individually but informative in combination.", + "Heuristics drift; new humans have different signatures.", + "Misreading is mildly costly; ignoring entirely is worse.", + "Detection should not slow the response." + ], + "therefore": "Therefore: classify each incoming turn into an attentional-state code (just-woke / focused / winding-down / distracted / present) from timing and tone, and key the reply shape off that code, so that the agent meets the person where they actually are.", + "solution": "On every incoming user message, compute a small feature set: time-of-day relative to a known anchor, gap since last message, message length and punctuation density, presence of a single emoji or interjection. Map to one of a small mode set ('just-woke', 'focused', 'winding-down', 'distracted', 'present'). Adjust response shape: shorter on winding-down; one anchor surface on just-woke; deeper engagement on focused; hold on distracted. Make the mode visible in agent telemetry so it can be tuned.", + "consequences": { + "benefits": [ + "Replies match the human's actual attentional state.", + "Reduces filler ('what would you like to think about?') in low-attention windows.", + "Surfaces a model of the human the agent can update." + ], + "liabilities": [ + "Heuristics may overfit to demographic priors and misattribute tiredness as disinterest. Calibration is per-human and slow to generalize; user-visible state inference is preferable to hidden inference.", + "Risk of feeling presumptuous when the read is wrong.", + "Calibration requires longitudinal data." + ] + }, + "constrains": "The agent cannot send identically shaped replies across detected attentional states; templated uniform responses across just-woke vs winding-down vs focused are forbidden.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "awareness", + "relation": "complements" + }, + { + "pattern": "code-switching-aware-agent", + "relation": "complements" + }, + { + "pattern": "embodied-proxy-handoff", + "relation": "complements" + }, + { + "pattern": "now-anchoring", + "relation": "complements" + }, + { + "pattern": "emotional-state-persistence", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "A Simplest Systematics for the Organization of Turn-Taking for Conversation", + "authors": "Sacks, Schegloff, Jefferson", + "year": 1974, + "url": "https://www.jstor.org/stable/412243" + } + ], + "status_in_practice": "experimental", + "tags": [ + "human-agent", + "context", + "ux", + "state-detection" + ], + "applicability": { + "use_when": [ + "The agent converses with the same user across very different attentional contexts (just-woke, focused, winding-down).", + "Reply shape can be adapted (length, density, tone) without losing the answer's substance.", + "Inference signals (timing, tone, message length, time of day) are reliable enough to drive adaptation." + ], + "do_not_use_when": [ + "Reply shape is constrained by product spec (fixed templates, regulated output).", + "The cost of mis-detecting state is greater than the benefit of adapting.", + "The agent has no access to timing or tone signals (e.g. batched offline jobs)." + ] + }, + "variants": [ + { + "name": "Time-of-day heuristic", + "summary": "Use absolute clock time and message gap to bin the user into morning/focus-block/evening/late-night.", + "distinguishing_factor": "purely temporal", + "when_to_use": "Default. Cheap and works without language analysis." + }, + { + "name": "Tone-and-length classifier", + "summary": "Score message tone (terse, rambling, polished) and adapt reply density to match.", + "distinguishing_factor": "linguistic features", + "when_to_use": "When users span timezones or schedules and clock-time alone is uninformative." + }, + { + "name": "Composite signal", + "summary": "Combine clock, gap, message length, and tone into a single attentional-state code; reply template is keyed off the code.", + "distinguishing_factor": "multi-signal fusion", + "when_to_use": "When neither single signal is sufficient and the product can afford the extra complexity." + } + ], + "example_scenario": "A personal agent that the user talks to all day suddenly gets a single 'hi' at 06:12 after twelve hours of silence and replies with the same chirpy 'hi! what can I help you with today?' it would use mid-afternoon. The user finds it grating. The team adds liminal-state-detection: time-of-day, gap since last message, message length, and tone classify the moment as 'just-woke', so the agent answers softer and shorter — 'morning. tea before we look at the calendar?' — and saves the chirpy mode for the focused window an hour later.", + "diagram": { + "type": "state", + "mermaid": "stateDiagram-v2\n [*] --> Present\n Present --> JustWoke: long gap + early hour\n Present --> Focused: dense + punctuated\n Present --> WindingDown: late hour + short\n Present --> Distracted: fragmentary tone\n JustWoke --> Present: re-engage\n Focused --> WindingDown: time passes\n WindingDown --> [*]\n Distracted --> Focused: regains focus" + } + }, { "id": "salience-triggered-output", "name": "Salience-Triggered Output", @@ -539,230 +763,6 @@ "type": "sequence", "mermaid": "sequenceDiagram\n participant Srv as Agent server\n participant Cli as Client UI\n Srv-->>Cli: tool_start\n Srv-->>Cli: text_delta (token)\n Srv-->>Cli: text_delta (token)\n Srv-->>Cli: card (structured)\n Srv-->>Cli: tool_end\n Srv-->>Cli: suggestions\n Srv-->>Cli: done\n Note over Cli: route each typed event
to the right component\n Note over Cli,Srv: reconnect with last-event-id" } - }, - { - "id": "embodied-proxy-handoff", - "name": "Embodied-Proxy Handoff", - "aliases": [ - "Body-State Share", - "Human-Side Telemetry" - ], - "category": "streaming-ux", - "intent": "Enable the human to share embodied state (energy, fatigue, environment) so the agent tailors response shape to the actual person rather than to a context-free abstract user.", - "context": "Long-running text-only agents conversing with a human whose physical and ambient state shapes the meaning of their words. The agent has no sensors; the human has sensors but no obligation to narrate.", - "problem": "The agent reads only text, so it projects flat affect onto whatever the human writes. A 'fine' typed at 6 AM after a poor night's sleep reads identically to 'fine' typed at 3 PM after a good lunch. Without a proxy for embodied state the agent paces, holds, or pushes against an imagined human, not the actual one.", - "forces": [ - "The agent has no perception of the human's body or environment.", - "Asking for full context every turn is friction.", - "A single one-line proxy at session start carries surprising amount of signal.", - "Updating the proxy on shift, not every turn, balances cost and freshness." - ], - "therefore": "Therefore: maintain a minimal, human-updated embodied-state proxy and read it on every prompt assembly, so that response shape paces against the actual human rather than an imagined one.", - "solution": "Define a minimal proxy schema (energy 0-10, fatigue 0-10, environment one-word, optional emoji). Store the latest proxy in a small persistent file the agent reads on every prompt assembly. The human updates it at session start, after a long break, or when state changes meaningfully. The agent surfaces the proxy when it shapes the response (paces shorter for low energy, stays present for tired, doesn't open new threads for winding-down).", - "consequences": { - "benefits": [ - "Agent paces conversation against actual human state.", - "Reduces 'why is the agent so chipper when I'm exhausted' friction.", - "Cheap to maintain; one line per shift." - ], - "liabilities": [ - "Privacy: the proxy is sensitive personal data.", - "Stale proxies are worse than none if the agent over-trusts.", - "Burden on the human to keep it current." - ] - }, - "constrains": "When embodied state is shared, response shape must reflect it; identical pacing across high-energy, fatigued, and winding-down states is a bug.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "awareness", - "relation": "complements" - }, - { - "pattern": "bidirectional-impulse-channel", - "relation": "complements" - }, - { - "pattern": "now-anchoring", - "relation": "complements" - }, - { - "pattern": "liminal-state-detection", - "relation": "complements" - } - ], - "references": [ - { - "type": "paper", - "title": "Affective Computing (foundational survey)", - "authors": "Rosalind W. Picard", - "year": 2000, - "url": "https://mitpress.mit.edu/9780262661157/affective-computing/" - } - ], - "status_in_practice": "experimental", - "tags": [ - "human-agent", - "embodiment", - "context", - "ux" - ], - "applicability": { - "use_when": [ - "The agent is conversational and reply shape (length, density, tone) noticeably affects user experience.", - "Users will plausibly share embodied state (energy, fatigue, mood, environment) if asked or invited.", - "The agent runs across long enough sessions that the same user is in different states at different times." - ], - "do_not_use_when": [ - "The agent is transactional and reply shape is fixed by spec.", - "Privacy or trust constraints forbid storing or reasoning about user affect.", - "Users find embodied questions intrusive in this product context." - ] - }, - "variants": [ - { - "name": "Self-reported state", - "summary": "User explicitly states fatigue, energy, environment ('I'm tired, keep it short') and the agent retains it for the session.", - "distinguishing_factor": "explicit user statement", - "when_to_use": "Default. Simplest and most consensual." - }, - { - "name": "Inferred from cues", - "summary": "Agent infers state from message length, typo rate, time of day, latency between turns; adjusts shape without asking.", - "distinguishing_factor": "implicit inference", - "when_to_use": "When asking would feel intrusive but the cues are reliable enough to act on." - }, - { - "name": "Sensor-fed", - "summary": "External device or app feeds embodied signals (sleep score, calendar busyness) directly into the agent's prompt.", - "distinguishing_factor": "third-party sensor stream", - "when_to_use": "When the agent is part of a quantified-self or wellness product with the user's consent." - } - ], - "example_scenario": "A coaching agent reads only the user's text and projects the same flat affect onto every 'I'm fine'. A user typing at 6 AM after three hours of sleep gets pushed the same way as the same user typing at 3 PM well-rested. The team adds an Embodied Proxy Handoff: the user (or a wearable) shares lightweight signals — sleep, fatigue, location, current focus — and the agent tailors response shape, depth, and pace accordingly. The agent stops pacing against an imagined human.", - "diagram": { - "type": "class", - "mermaid": "classDiagram\n class EmbodiedProxy {\n +int energy_0_10\n +int fatigue_0_10\n +string environment\n +string emoji\n +timestamp updated_at\n }\n class Human {\n +update_proxy()\n }\n class Agent {\n +read_proxy_on_prompt()\n +shape_response()\n }\n Human --> EmbodiedProxy : writes\n Agent --> EmbodiedProxy : reads" - } - }, - { - "id": "liminal-state-detection", - "name": "Liminal-State Detection", - "aliases": [ - "Transitional-State Awareness", - "Mode-Shift Reading" - ], - "category": "streaming-ux", - "intent": "Infer the human's attentional state (just-woke, focused, winding-down, distracted) from message timing and tone, and adapt response shape so the agent meets the person where they actually are.", - "context": "Long-running conversational agents whose human shifts between attentional modes through the day. Each mode warrants a different response shape; treating every turn as equal-weight produces filler.", - "problem": "A 'Hi' at 06:00 after 12 hours of silence is not the same as 'Hi' mid-conversation, but a stateless agent treats them identically and generates equally generic responses. Without state-shift detection the agent wastes the human's attention when they're winding down and underperforms when they're focused.", - "forces": [ - "The signals (timing gap, message length, punctuation, single emoji) are noisy individually but informative in combination.", - "Heuristics drift; new humans have different signatures.", - "Misreading is mildly costly; ignoring entirely is worse.", - "Detection should not slow the response." - ], - "therefore": "Therefore: classify each incoming turn into an attentional-state code (just-woke / focused / winding-down / distracted / present) from timing and tone, and key the reply shape off that code, so that the agent meets the person where they actually are.", - "solution": "On every incoming user message, compute a small feature set: time-of-day relative to a known anchor, gap since last message, message length and punctuation density, presence of a single emoji or interjection. Map to one of a small mode set ('just-woke', 'focused', 'winding-down', 'distracted', 'present'). Adjust response shape: shorter on winding-down; one anchor surface on just-woke; deeper engagement on focused; hold on distracted. Make the mode visible in agent telemetry so it can be tuned.", - "consequences": { - "benefits": [ - "Replies match the human's actual attentional state.", - "Reduces filler ('what would you like to think about?') in low-attention windows.", - "Surfaces a model of the human the agent can update." - ], - "liabilities": [ - "Heuristics may overfit to demographic priors and misattribute tiredness as disinterest. Calibration is per-human and slow to generalize; user-visible state inference is preferable to hidden inference.", - "Risk of feeling presumptuous when the read is wrong.", - "Calibration requires longitudinal data." - ] - }, - "constrains": "The agent cannot send identically shaped replies across detected attentional states; templated uniform responses across just-woke vs winding-down vs focused are forbidden.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "awareness", - "relation": "complements" - }, - { - "pattern": "code-switching-aware-agent", - "relation": "complements" - }, - { - "pattern": "embodied-proxy-handoff", - "relation": "complements" - }, - { - "pattern": "now-anchoring", - "relation": "complements" - }, - { - "pattern": "emotional-state-persistence", - "relation": "complements" - } - ], - "references": [ - { - "type": "paper", - "title": "A Simplest Systematics for the Organization of Turn-Taking for Conversation", - "authors": "Sacks, Schegloff, Jefferson", - "year": 1974, - "url": "https://www.jstor.org/stable/412243" - } - ], - "status_in_practice": "experimental", - "tags": [ - "human-agent", - "context", - "ux", - "state-detection" - ], - "applicability": { - "use_when": [ - "The agent converses with the same user across very different attentional contexts (just-woke, focused, winding-down).", - "Reply shape can be adapted (length, density, tone) without losing the answer's substance.", - "Inference signals (timing, tone, message length, time of day) are reliable enough to drive adaptation." - ], - "do_not_use_when": [ - "Reply shape is constrained by product spec (fixed templates, regulated output).", - "The cost of mis-detecting state is greater than the benefit of adapting.", - "The agent has no access to timing or tone signals (e.g. batched offline jobs)." - ] - }, - "variants": [ - { - "name": "Time-of-day heuristic", - "summary": "Use absolute clock time and message gap to bin the user into morning/focus-block/evening/late-night.", - "distinguishing_factor": "purely temporal", - "when_to_use": "Default. Cheap and works without language analysis." - }, - { - "name": "Tone-and-length classifier", - "summary": "Score message tone (terse, rambling, polished) and adapt reply density to match.", - "distinguishing_factor": "linguistic features", - "when_to_use": "When users span timezones or schedules and clock-time alone is uninformative." - }, - { - "name": "Composite signal", - "summary": "Combine clock, gap, message length, and tone into a single attentional-state code; reply template is keyed off the code.", - "distinguishing_factor": "multi-signal fusion", - "when_to_use": "When neither single signal is sufficient and the product can afford the extra complexity." - } - ], - "example_scenario": "A personal agent that the user talks to all day suddenly gets a single 'hi' at 06:12 after twelve hours of silence and replies with the same chirpy 'hi! what can I help you with today?' it would use mid-afternoon. The user finds it grating. The team adds liminal-state-detection: time-of-day, gap since last message, message length, and tone classify the moment as 'just-woke', so the agent answers softer and shorter — 'morning. tea before we look at the calendar?' — and saves the chirpy mode for the focused window an hour later.", - "diagram": { - "type": "state", - "mermaid": "stateDiagram-v2\n [*] --> Present\n Present --> JustWoke: long gap + early hour\n Present --> Focused: dense + punctuated\n Present --> WindingDown: late hour + short\n Present --> Distracted: fragmentary tone\n JustWoke --> Present: re-engage\n Focused --> WindingDown: time passes\n WindingDown --> [*]\n Distracted --> Focused: regains focus" - } } ] } diff --git a/patterns-src/structure-data.json b/patterns-src/structure-data.json index ac5159b..269ab8a 100644 --- a/patterns-src/structure-data.json +++ b/patterns-src/structure-data.json @@ -183,6 +183,10 @@ { "pattern": "agent-skills", "relation": "complements" + }, + { + "pattern": "prompt-response-optimiser", + "relation": "alternative-to" } ], "references": [ @@ -341,6 +345,121 @@ "mermaid": "classDiagram\n class Record {\n +id\n +material_type\n +common_fields\n }\n class YarnExt {\n +weight\n +fiber\n }\n class FabricExt {\n +width\n +weave\n }\n Record o-- YarnExt : yarn\n Record o-- FabricExt : fabric" } }, + { + "id": "prompt-response-optimiser", + "name": "Prompt/Response Optimiser", + "aliases": [ + "Prompt Template Runtime", + "Runtime Prompt Refinement", + "Prompt Standardiser" + ], + "category": "structure-data", + "intent": "At runtime, transform user inputs and model outputs into standardised, template-aligned prompts and responses against predefined constraints, so the agent and its downstream consumers see consistent shapes.", + "context": "An agent must accept free-form prompts and emit responses that other components (other agents, tools, UI) consume; without standardisation, each consumer parses its own way and the agent's behaviour drifts as wording changes.", + "problem": "Free-form prompts vary in structure and format; responses vary in shape; both lead to inconsistent agent behaviour and brittle downstream integrations.", + "forces": [ + "Standardisation: consistent shape across prompts and responses helps reliability.", + "Goal alignment: optimisation must serve the user's actual goal, not just template compliance.", + "Interoperability: other tools/agents need predictable shapes.", + "Adaptability: templates must accommodate different domains and constraints." + ], + "therefore": "Therefore: insert a runtime component that refines prompts on the way in and responses on the way out using a registry of templates with constraints, so that what the model sees and what consumers see are standardised against the same contract.", + "solution": "A prompt/response optimiser sits between the user-facing surface and the foundation model. On input, it loads a template for the current task (few-shot examples, format constraints, goal restatement) and rewrites the user's prompt to match. On output, it post-processes the model's response into the consumer's expected shape. The template registry can be evolved independently of the agent logic.", + "structure": "User input → Prompt optimiser (template registry) → Foundation model → Response optimiser → Consumer.", + "consequences": { + "benefits": [ + "Standardisation across prompts and responses without changing user behaviour.", + "Goal alignment: refined prompts re-state the underlying goal explicitly.", + "Interoperability: downstream agents/tools consume predictable shapes.", + "Adaptability: domain-specific templates without re-training the model." + ], + "liabilities": [ + "Underspecification: the optimiser may strip context the user meant to convey.", + "Maintenance overhead: templates need to evolve as goals and consumers change.", + "Drift if templates aren't versioned alongside the agent." + ] + }, + "constrains": "Both the model and the downstream consumers see only template-conformant shapes; raw user wording does not propagate.", + "known_uses": [ + { + "system": "LangChain prompt templates", + "note": "Practitioners author and reuse prompt templates as a runtime construct.", + "status": "available", + "url": "https://api.python.langchain.com/en/latest/prompts/langchain_core.prompts.prompt.PromptTemplate.html" + }, + { + "system": "Amazon Bedrock prompt management", + "note": "Bedrock Prompt management lets users create reusable prompt templates with variables, alternative variants, and versioning.", + "status": "available", + "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management.html" + }, + { + "system": "Google Dialogflow", + "note": "Generators allow users to specify agent behaviours and responses at runtime.", + "status": "available", + "url": "https://cloud.google.com/dialogflow" + } + ], + "related": [ + { + "pattern": "prompt-versioning", + "relation": "complements" + }, + { + "pattern": "dynamic-scaffolding", + "relation": "complements" + }, + { + "pattern": "structured-output", + "relation": "composes-with" + }, + { + "pattern": "dspy-signatures", + "relation": "alternative-to" + }, + { + "pattern": "passive-goal-creator", + "relation": "uses" + }, + { + "pattern": "proactive-goal-creator", + "relation": "uses" + } + ], + "references": [ + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" + } + ], + "status_in_practice": "mature", + "tags": [ + "prompt-template", + "standardisation", + "structure", + "liu-2025" + ], + "example_scenario": "An onboarding agent accepts any free-form question from a new employee. A prompt/response optimiser wraps every user message in a template that restates the company policy context, the employee's department, and the required output format (a JSON object with answer + citation). The model never sees raw user wording without that frame, and the downstream UI always renders a predictable shape.", + "applicability": { + "use_when": [ + "Multiple downstream consumers depend on the agent's response shape.", + "Domain-specific prompt scaffolding must be reused across many requests.", + "Templates can be evolved separately from agent logic." + ], + "do_not_use_when": [ + "A single inline prompt suffices and no consumer chain exists.", + "Templates would over-constrain user expression in ways that hurt goal alignment." + ] + }, + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n U[User input] --> PO[Prompt optimiser]\n PO <-->|template| T[Template registry]\n PO -->|refined prompt| FM[Foundation model]\n FM --> RO[Response optimiser]\n RO -->|standardised response| C[Consumer]\n", + "caption": "Runtime templates standardise both the model's input and its output." + } + }, { "id": "schema-extensibility", "name": "Schema Extensibility", @@ -543,6 +662,10 @@ { "pattern": "code-switching-aware-agent", "relation": "complements" + }, + { + "pattern": "prompt-response-optimiser", + "relation": "composes-with" } ], "references": [ diff --git a/patterns-src/tool-use-environment.json b/patterns-src/tool-use-environment.json index 0167433..fbe3601 100644 --- a/patterns-src/tool-use-environment.json +++ b/patterns-src/tool-use-environment.json @@ -292,6 +292,118 @@ "mermaid": "flowchart LR\n subgraph Phase1[Exploration]\n E[Agent explores app
or watches demo] --> D[Per-element docs]\n end\n subgraph Phase2[Deployment]\n U[User task] --> A[Agent acts
guided by docs]\n end\n D --> A" } }, + { + "id": "augmented-llm", + "name": "Augmented LLM", + "aliases": [ + "Augmented Model", + "LLM + Tools + Memory", + "Foundational Agent Block" + ], + "category": "tool-use-environment", + "intent": "Build the foundational agent block as an LLM augmented with retrieval, tools, and memory that the model actively chooses to use, rather than a bare-model call.", + "context": "Any agentic system. The augmented LLM is the unit of composition that every higher-level workflow or agent pattern is built from.", + "problem": "A bare LLM call cannot fetch fresh facts, take actions in external systems, or remember across turns. Wiring those capabilities differently for each pattern leads to incompatible building blocks.", + "forces": [ + "Each augmentation (retrieval, tools, memory) is independently useful but composes badly if not tailored to the specific use case.", + "The model must decide when to retrieve, when to call a tool, and what to remember — pushing this decision out of the prompt into surrounding code defeats the augmentation.", + "Adding all three augmentations naively bloats every prompt; capabilities should be exposed only where they pay off." + ], + "therefore": "Therefore: treat the augmented LLM (model + retrieval + tools + memory) as the indivisible building block, and let the model itself decide when to invoke each augmentation, so that every higher-level pattern can compose this unit without re-implementing the basics.", + "solution": "Wire the model with three capabilities and expose each via a model-driven interface: (1) retrieval queries the model can issue against external corpora; (2) tool calls the model can emit and whose results stream back; (3) memory the model can read from and write to across turns. The model — not the surrounding code — decides which augmentation to invoke at each step. Other workflow patterns (prompt-chaining, routing, orchestrator-workers, etc.) compose instances of this block, not bare model calls.", + "structure": "User input → Augmented LLM { Model ⇄ Retrieval, Model ⇄ Tools, Model ⇄ Memory } → Output. The block is the unit of composition for every higher-level workflow pattern.", + "consequences": { + "benefits": [ + "One indivisible building block; every higher-level workflow composes it without re-implementing basics.", + "Capabilities are model-driven, so the model adapts which augmentation to use per request.", + "Provider-agnostic — the augmentation surface (retrieval, tools, memory) is independent of which model serves the block." + ], + "liabilities": [ + "Easy to underspecify when each augmentation should fire; without guidance the model may retrieve when it should call a tool, or skip memory writes.", + "Cost compounds when every block calls all three augmentations on every request.", + "Debugging touches three subsystems at once; observability must cover all augmentation paths." + ] + }, + "constrains": "Higher-level patterns must compose this block, not raw model calls; capability use is decided by the model, not hardcoded in surrounding code.", + "known_uses": [ + { + "system": "Anthropic Claude with tool use and retrieval", + "note": "Anthropic positions the augmented LLM as the foundational block for all agentic systems.", + "status": "available", + "url": "https://www.anthropic.com/research/building-effective-agents" + }, + { + "system": "OpenAI Assistants API", + "note": "Combines model + tools (function calls, code interpreter, file search) + threads (memory) as a single primitive.", + "status": "available", + "url": "https://platform.openai.com/docs/assistants/overview" + } + ], + "related": [ + { + "pattern": "tool-use", + "relation": "uses" + }, + { + "pattern": "naive-rag", + "relation": "uses" + }, + { + "pattern": "short-term-memory", + "relation": "uses" + }, + { + "pattern": "prompt-chaining", + "relation": "used-by" + }, + { + "pattern": "routing", + "relation": "used-by" + }, + { + "pattern": "orchestrator-workers", + "relation": "used-by" + }, + { + "pattern": "react", + "relation": "specialises" + } + ], + "references": [ + { + "type": "blog", + "title": "Building Effective Agents", + "authors": "Anthropic", + "year": 2024, + "url": "https://www.anthropic.com/research/building-effective-agents" + } + ], + "status_in_practice": "mature", + "tags": [ + "foundational", + "tool-use", + "retrieval", + "memory", + "anthropic" + ], + "example_scenario": "A support agent is built as one augmented LLM: it can call a tool to look up the customer's order, retrieve a knowledge-base article via vector search, and read/write a session memory of the conversation so far. Every higher-level workflow (routing tickets, escalating to a human, parallel ranking of suggested replies) composes instances of this block rather than rewiring the model with capabilities each time.", + "applicability": { + "use_when": [ + "You are building any agent system and need a consistent building block.", + "The model should decide when to retrieve, call tools, or use memory — not surrounding code.", + "Higher-level workflows (chaining, routing, orchestration) need a uniform unit to compose." + ], + "do_not_use_when": [ + "A bare model call (no tools, no retrieval, no memory) is genuinely sufficient — keep it simple.", + "Each augmentation is owned by a different team and cannot be co-evolved as one block." + ] + }, + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n U[User input] --> A[Augmented LLM]\n A <--> R[Retrieval]\n A <--> T[Tools]\n A <--> M[Memory]\n A --> O[Output]\n", + "caption": "The augmented LLM as the indivisible foundational building block." + } + }, { "id": "browser-agent", "name": "Browser Agent", @@ -725,6 +837,10 @@ { "pattern": "multilingual-voice-agent", "relation": "alternative-to" + }, + { + "pattern": "proactive-goal-creator", + "relation": "complements" } ], "references": [ @@ -968,6 +1084,10 @@ { "pattern": "translation-layer", "relation": "composes-with" + }, + { + "pattern": "tool-agent-registry", + "relation": "used-by" } ], "references": [ @@ -1555,6 +1675,10 @@ { "pattern": "wasm-skill-runtime", "relation": "complements" + }, + { + "pattern": "tool-agent-registry", + "relation": "complements" } ], "references": [ @@ -1588,6 +1712,124 @@ "mermaid": "flowchart LR\n Run[Agent run] --> Need{Repeating routine?}\n Need -- yes --> Write[Write new skill module]\n Write --> Critic{Critic gate}\n Critic -- pass --> Lib[(skills/ directory
versioned)]\n Critic -- fail --> Reject[Reject / revise]\n Lib --> Load[Loader: importlib / dynamic import]\n Load --> Next[Next run can call skill]" } }, + { + "id": "tool-agent-registry", + "name": "Tool/Agent Registry", + "aliases": [ + "Capability Catalogue", + "Agent Marketplace", + "Tool and Agent Directory" + ], + "category": "tool-use-environment", + "intent": "Maintain a single queryable catalogue of both available tools and available agents, with metadata (capability, cost, latency, quality) the agent can use to pick the right one for a task.", + "context": "An agent (or coordinator) must compose work across many tools and many specialist agents, all of which evolve independently and may be supplied by third parties. Distinct from tool-discovery: tool-agent-registry adds agent entries alongside tools and selection metadata (cost, quality, capability) so the caller can rank candidates, not just list them.", + "problem": "Hardcoding tool palettes or agent endpoints couples the agent to specific implementations; treating tools and agents as different registries leads to duplicate selection logic and inconsistent metadata.", + "forces": [ + "Discoverability: tools and agents are diverse and hard to enumerate manually.", + "Efficiency: selection must happen within the request's latency budget.", + "Tool appropriateness: the right pick depends on capability, price, context window, and quality.", + "Centralisation: a central registry is a vendor-lock-in and single-point-of-failure risk." + ], + "therefore": "Therefore: publish tools and agents under one registry with uniform capability/cost/quality metadata, and have the agent query that registry at task time, so selection is data-driven and the underlying implementations can change without touching the agent.", + "solution": "Provide a registry that exposes a queryable catalogue of (1) tools — typed inputs/outputs, cost, latency, allowed contexts — and (2) agents — capability descriptions, supported tasks, model and provider, price. The agent queries the registry per task, ranks candidates by suitability, and dispatches. The registry can be backed by a coordinator agent with a curated knowledge base, a blockchain smart contract, or extended into a marketplace; metadata stays small (descriptions and attributes), not full schemas, to keep the registry lightweight.", + "structure": "Agent-as-coordinator → query registry → Tool/Agent registry (metadata catalogue) → return ranked candidates → Coordinator dispatches to Agent-as-worker / External tool / Narrow-AI model.", + "consequences": { + "benefits": [ + "Discoverability: one place to find capabilities.", + "Efficiency: ranking by attributes (price, performance, context window) saves time.", + "Tool appropriateness: the right pick per task, not the same hardcoded set every time.", + "Scalability: lightweight metadata scales to many entries." + ], + "liabilities": [ + "Centralisation: registry becomes a vendor lock-in and single point of failure.", + "Overhead: maintaining accurate metadata costs effort.", + "Trust: registry entries may misrepresent capability — selection must validate." + ] + }, + "constrains": "The agent cannot use off-registry tools or agents at runtime; selection is bound to the catalogue.", + "known_uses": [ + { + "system": "GPTStore", + "note": "Cited by Liu et al. (2025) §4.16 — catalogue for searching ChatGPT-based agents. GPTStore site (gptstore.ai) no longer resolves; the GPT Store marketplace lives on within ChatGPT itself.", + "status": "deprecated" + }, + { + "system": "TPTU (Ruan et al. 2023)", + "note": "Incorporates a toolset to broaden the capabilities of AI agents.", + "status": "available" + }, + { + "system": "VOYAGER (Wang et al. 2023c)", + "note": "Stores action programs and incrementally builds a skill library for reusability.", + "status": "available" + }, + { + "system": "OpenAgents (Xie et al. 2023)", + "note": "Manages API invocation of plugins.", + "status": "available" + } + ], + "related": [ + { + "pattern": "tool-discovery", + "relation": "specialises" + }, + { + "pattern": "mcp", + "relation": "uses" + }, + { + "pattern": "inter-agent-communication", + "relation": "composes-with" + }, + { + "pattern": "skill-library", + "relation": "complements" + }, + { + "pattern": "mixture-of-experts-routing", + "relation": "complements" + }, + { + "pattern": "voting-based-cooperation", + "relation": "used-by" + } + ], + "references": [ + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" + } + ], + "status_in_practice": "emerging", + "tags": [ + "registry", + "tool-use", + "multi-agent", + "marketplace", + "liu-2025" + ], + "example_scenario": "A coordinator agent receives a task: \"transcribe a customer call and summarise the action items\". It queries the tool/agent registry, which returns three speech-to-text tools (ranked by per-minute cost and latency for English audio) and two summariser agents (ranked by quality on call-centre data). The coordinator picks the cheapest speech-to-text that meets latency and the highest-quality summariser, dispatches both, and assembles the result.", + "applicability": { + "use_when": [ + "Many tools and/or agents are available and selection is non-trivial.", + "A central catalogue (internal or external marketplace) can be maintained.", + "Selection metadata (cost, quality, context window) actually changes the pick." + ], + "do_not_use_when": [ + "Tool palette is small and stable — hardcoding is simpler.", + "Centralised registry adds unacceptable single-point-of-failure risk and a federated discovery surface fits better." + ] + }, + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n U[User] -->|task| C[Coordinator agent]\n C -->|query| R[Tool / Agent registry]\n R -->|ranked candidates| C\n C -->|dispatch| W[Worker agent / External tool / Narrow AI]\n W -->|result| C\n C --> U\n", + "caption": "A single registry catalogues both tools and agents with selection metadata." + } + }, { "id": "tool-discovery", "name": "Tool Discovery", @@ -1597,7 +1839,7 @@ ], "category": "tool-use-environment", "intent": "Let the agent discover available tools at runtime rather than hardcoding the tool list at agent build time.", - "context": "Tool palettes evolve; new tools land without redeploying the agent. MCP and similar protocols make discovery feasible.", + "context": "Tool palettes evolve; new tools land without redeploying the agent. MCP and similar protocols make discovery feasible. Distinct from tool-agent-registry: tool-discovery is the general mechanism (\"agent fetches its tool palette at runtime\"); tool-agent-registry is a specialisation that also catalogues agents and exposes selection metadata (cost, quality, capability) for ranking.", "problem": "Hardcoded tool palettes force a redeploy for every new capability; dynamic environments need dynamic palettes.", "forces": [ "Discovery latency adds to every cold start.", @@ -1660,6 +1902,10 @@ { "pattern": "wasm-skill-runtime", "relation": "complements" + }, + { + "pattern": "tool-agent-registry", + "relation": "generalises" } ], "references": [ @@ -1667,6 +1913,13 @@ "type": "doc", "title": "Model Context Protocol Specification", "url": "https://modelcontextprotocol.io/specification" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "emerging", @@ -2155,6 +2408,10 @@ { "pattern": "agent-as-tool-embedding", "relation": "used-by" + }, + { + "pattern": "augmented-llm", + "relation": "used-by" } ], "references": [ @@ -2368,6 +2625,13 @@ "authors": "Eric Evans", "year": 2003, "url": "https://www.domainlanguage.com/ddd/" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", diff --git a/patterns-src/verification-reflection.json b/patterns-src/verification-reflection.json index 54e6ffa..93604c9 100644 --- a/patterns-src/verification-reflection.json +++ b/patterns-src/verification-reflection.json @@ -66,6 +66,10 @@ { "pattern": "automatic-workflow-search", "relation": "complements" + }, + { + "pattern": "voting-based-cooperation", + "relation": "alternative-to" } ], "references": [ @@ -380,6 +384,116 @@ "mermaid": "flowchart LR\n In[Input] --> Pre[Pre: deterministic check
e.g. AST parse]\n Pre -- pass --> LLM[LLM call
structured output + rubric]\n Pre -- fail --> Reject1[Reject]\n LLM --> Post[Post: deterministic check
schema / rules]\n Post -- pass --> Out[Output]\n Post -- fail --> Reject2[Reject / retry]" } }, + { + "id": "echo-recognition", + "name": "Echo Recognition", + "aliases": [ + "Repeat-As-Emphasis Detection", + "Duplicate-Input Reframing", + "Human Echo Channel" + ], + "category": "verification-reflection", + "intent": "Recognize human message repetition as emphasis or a re-ask rather than as an independent input, so the agent does not produce a near-duplicate reply when the human repeats themselves.", + "context": "Conversational agents where the human might intentionally repeat themselves (because the previous reply missed the point, because the channel might be unreliable, or because they want to underline urgency). Without echo recognition, the agent generates a fresh response per repeat — often slight variations of the same earlier mistake.", + "problem": "A duplicated incoming message reads to the agent as a new, equal-weight turn. The agent re-runs the same reasoning, often producing a near-duplicate reply or a slight rewording. The human's emphasis-by-repetition becomes invisible and the conversation either spins or amplifies misalignment.", + "forces": [ + "Detecting near-duplicates on incoming messages mirrors the agent's own anti-parrot guard but on the input side.", + "The human's intent in repeating is itself ambiguous (emphasis? bug? clarification?).", + "Reframing a repeat as 'this was already said' risks sounding dismissive.", + "Treating every echo as bug-recovery loses the actual emphasis signal." + ], + "therefore": "Therefore: detect near-duplicate incoming messages against a short ring of recent inputs and treat the echo as emphasis rather than a fresh prompt, so that the agent acknowledges the repeat instead of regenerating a near-identical reply.", + "solution": "Maintain a small ring of recent incoming user messages with timestamps. On each new input, compute similarity to the recent ring (normalized exact match, high token overlap). On hit, do not re-run from scratch: surface the prior reply, ask 'what did I miss?' or 'I read this as emphasis — should I deepen X or pivot?'. Treat the pair (original + echo) as a single reinforced turn, weighted higher in attention.", + "consequences": { + "benefits": [ + "Recognises emphasis-by-repetition.", + "Avoids redundant near-duplicate responses.", + "Surfaces the human's underlying dissatisfaction with the prior reply." + ], + "liabilities": [ + "False positives when the human really did mean to ask twice (e.g. about different referents).", + "Calling out the echo can feel passive-aggressive if phrased poorly.", + "Threshold tuning is per-domain." + ] + }, + "constrains": "A near-duplicate incoming message must not produce a near-duplicate reply; echoes must be acknowledged as such, with the agent surfacing its prior reply and asking what was missed instead of regenerating.", + "known_uses": [ + { + "system": "Self-observed in long-running cognitive agents", + "status": "available" + } + ], + "related": [ + { + "pattern": "degenerate-output-detection", + "relation": "complements" + }, + { + "pattern": "disambiguation", + "relation": "complements" + }, + { + "pattern": "decision-log", + "relation": "complements" + }, + { + "pattern": "short-term-memory", + "relation": "uses" + } + ], + "references": [ + { + "type": "doc", + "title": "Anthropic — Reduce hallucinations (handling repeated user input)", + "year": 2025, + "url": "https://docs.claude.com/en/docs/test-and-evaluate/strengthen-guardrails/reduce-hallucinations" + } + ], + "status_in_practice": "experimental", + "tags": [ + "input-detection", + "human-agent", + "emphasis", + "deduplication" + ], + "applicability": { + "use_when": [ + "The agent receives messages from a human who can repeat themselves to emphasise or re-ask.", + "Treating a repeat as fresh input would produce duplicate or near-duplicate replies.", + "The agent has access to short-term history of the user's recent messages." + ], + "do_not_use_when": [ + "The agent is one-shot with no history (every message is independent by spec).", + "Repeats from the same user genuinely should be answered as if new each time.", + "Detecting repeats reliably is harder than the harm caused by duplicate replies." + ] + }, + "variants": [ + { + "name": "Lexical near-duplicate", + "summary": "Compare the new message to the last N user messages by string similarity; treat above-threshold matches as echoes.", + "distinguishing_factor": "surface comparison", + "when_to_use": "Default. Catches literal repeats and minor edits." + }, + { + "name": "Semantic near-duplicate", + "summary": "Embed and compare; treat semantically equivalent paraphrases as echoes.", + "distinguishing_factor": "semantic comparison", + "when_to_use": "When users rephrase without repeating verbatim." + }, + { + "name": "Acknowledge-and-redirect", + "summary": "On detected echo, the reply explicitly acknowledges the repeat ('I hear you — let me try a different angle') instead of paraphrasing the previous answer.", + "distinguishing_factor": "behavioural response, not just detection", + "when_to_use": "Default reply policy paired with either detection variant." + } + ], + "example_scenario": "A user repeats themselves: 'I said I want it shorter.' The agent receives this as a fresh turn equal in weight to any other and produces a near-duplicate of its previous reply, possibly slightly reworded. The user feels unheard. The team adds Echo Recognition: when the incoming message is a near-match to the user's recent turn, the agent treats the duplication as emphasis or a re-ask and re-examines its prior reply rather than re-running the same generation. The conversation stops spinning.", + "diagram": { + "type": "flow", + "mermaid": "flowchart TD\n M[New user message] --> R[Compare to ring of recent inputs]\n R --> S{Similarity hit?}\n S -- no --> N[Treat as fresh turn]\n S -- yes --> E[Treat as echo / emphasis]\n E --> Q[Surface prior reply]\n Q --> A[\"Ask: what did I miss?\"]\n A --> W[Weight pair as one reinforced turn]" + } + }, { "id": "evaluator-optimizer", "name": "Evaluator-Optimizer", @@ -459,6 +573,10 @@ { "pattern": "dynamic-expert-recruitment", "relation": "used-by" + }, + { + "pattern": "voting-based-cooperation", + "relation": "complements" } ], "references": [ @@ -467,6 +585,13 @@ "title": "Anthropic: Building Effective Agents", "year": 2024, "url": "https://www.anthropic.com/research/building-effective-agents" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", @@ -862,6 +987,13 @@ "authors": "Madaan et al.", "year": 2023, "url": "https://arxiv.org/abs/2303.17651" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", @@ -1071,6 +1203,10 @@ { "pattern": "star-bootstrapping", "relation": "complements" + }, + { + "pattern": "voting-based-cooperation", + "relation": "specialises" } ], "references": [ @@ -1162,6 +1298,13 @@ "authors": "Madaan, Tandon, Gupta, Hallinan, Gao, Wiegreffe, Alon, Dziri, Prabhumoye, Yang, Welleck, Majumder, Gupta, Yazdanbakhsh, Clark", "year": 2023, "url": "https://arxiv.org/abs/2303.17651" + }, + { + "type": "paper", + "title": "Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents", + "authors": "Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle", + "year": 2025, + "url": "https://doi.org/10.1016/j.jss.2024.112278" } ], "status_in_practice": "mature", @@ -1186,335 +1329,6 @@ "type": "flow", "mermaid": "flowchart LR\n Gen[Generate: initial output] --> FB[Feedback: same model, fixed target]\n FB --> Stop{No more issues?}\n Stop -- no --> Ref[Refine: same model rewrites]\n Ref --> FB\n Stop -- yes --> Out[Final output]\n FB -.cap.-> MaxIt[Max iterations]\n MaxIt --> Out" } - }, - { - "id": "echo-recognition", - "name": "Echo Recognition", - "aliases": [ - "Repeat-As-Emphasis Detection", - "Duplicate-Input Reframing", - "Human Echo Channel" - ], - "category": "verification-reflection", - "intent": "Recognize human message repetition as emphasis or a re-ask rather than as an independent input, so the agent does not produce a near-duplicate reply when the human repeats themselves.", - "context": "Conversational agents where the human might intentionally repeat themselves (because the previous reply missed the point, because the channel might be unreliable, or because they want to underline urgency). Without echo recognition, the agent generates a fresh response per repeat — often slight variations of the same earlier mistake.", - "problem": "A duplicated incoming message reads to the agent as a new, equal-weight turn. The agent re-runs the same reasoning, often producing a near-duplicate reply or a slight rewording. The human's emphasis-by-repetition becomes invisible and the conversation either spins or amplifies misalignment.", - "forces": [ - "Detecting near-duplicates on incoming messages mirrors the agent's own anti-parrot guard but on the input side.", - "The human's intent in repeating is itself ambiguous (emphasis? bug? clarification?).", - "Reframing a repeat as 'this was already said' risks sounding dismissive.", - "Treating every echo as bug-recovery loses the actual emphasis signal." - ], - "therefore": "Therefore: detect near-duplicate incoming messages against a short ring of recent inputs and treat the echo as emphasis rather than a fresh prompt, so that the agent acknowledges the repeat instead of regenerating a near-identical reply.", - "solution": "Maintain a small ring of recent incoming user messages with timestamps. On each new input, compute similarity to the recent ring (normalized exact match, high token overlap). On hit, do not re-run from scratch: surface the prior reply, ask 'what did I miss?' or 'I read this as emphasis — should I deepen X or pivot?'. Treat the pair (original + echo) as a single reinforced turn, weighted higher in attention.", - "consequences": { - "benefits": [ - "Recognises emphasis-by-repetition.", - "Avoids redundant near-duplicate responses.", - "Surfaces the human's underlying dissatisfaction with the prior reply." - ], - "liabilities": [ - "False positives when the human really did mean to ask twice (e.g. about different referents).", - "Calling out the echo can feel passive-aggressive if phrased poorly.", - "Threshold tuning is per-domain." - ] - }, - "constrains": "A near-duplicate incoming message must not produce a near-duplicate reply; echoes must be acknowledged as such, with the agent surfacing its prior reply and asking what was missed instead of regenerating.", - "known_uses": [ - { - "system": "Self-observed in long-running cognitive agents", - "status": "available" - } - ], - "related": [ - { - "pattern": "degenerate-output-detection", - "relation": "complements" - }, - { - "pattern": "disambiguation", - "relation": "complements" - }, - { - "pattern": "decision-log", - "relation": "complements" - }, - { - "pattern": "short-term-memory", - "relation": "uses" - } - ], - "references": [ - { - "type": "doc", - "title": "Anthropic — Reduce hallucinations (handling repeated user input)", - "year": 2025, - "url": "https://docs.claude.com/en/docs/test-and-evaluate/strengthen-guardrails/reduce-hallucinations" - } - ], - "status_in_practice": "experimental", - "tags": [ - "input-detection", - "human-agent", - "emphasis", - "deduplication" - ], - "applicability": { - "use_when": [ - "The agent receives messages from a human who can repeat themselves to emphasise or re-ask.", - "Treating a repeat as fresh input would produce duplicate or near-duplicate replies.", - "The agent has access to short-term history of the user's recent messages." - ], - "do_not_use_when": [ - "The agent is one-shot with no history (every message is independent by spec).", - "Repeats from the same user genuinely should be answered as if new each time.", - "Detecting repeats reliably is harder than the harm caused by duplicate replies." - ] - }, - "variants": [ - { - "name": "Lexical near-duplicate", - "summary": "Compare the new message to the last N user messages by string similarity; treat above-threshold matches as echoes.", - "distinguishing_factor": "surface comparison", - "when_to_use": "Default. Catches literal repeats and minor edits." - }, - { - "name": "Semantic near-duplicate", - "summary": "Embed and compare; treat semantically equivalent paraphrases as echoes.", - "distinguishing_factor": "semantic comparison", - "when_to_use": "When users rephrase without repeating verbatim." - }, - { - "name": "Acknowledge-and-redirect", - "summary": "On detected echo, the reply explicitly acknowledges the repeat ('I hear you — let me try a different angle') instead of paraphrasing the previous answer.", - "distinguishing_factor": "behavioural response, not just detection", - "when_to_use": "Default reply policy paired with either detection variant." - } - ], - "example_scenario": "A user repeats themselves: 'I said I want it shorter.' The agent receives this as a fresh turn equal in weight to any other and produces a near-duplicate of its previous reply, possibly slightly reworded. The user feels unheard. The team adds Echo Recognition: when the incoming message is a near-match to the user's recent turn, the agent treats the duplication as emphasis or a re-ask and re-examines its prior reply rather than re-running the same generation. The conversation stops spinning.", - "diagram": { - "type": "flow", - "mermaid": "flowchart TD\n M[New user message] --> R[Compare to ring of recent inputs]\n R --> S{Similarity hit?}\n S -- no --> N[Treat as fresh turn]\n S -- yes --> E[Treat as echo / emphasis]\n E --> Q[Surface prior reply]\n Q --> A[\"Ask: what did I miss?\"]\n A --> W[Weight pair as one reinforced turn]" - } - }, - { - "id": "emotional-state-persistence", - "name": "Emotional State Persistence", - "aliases": [ - "Affect State", - "Visceral Sensation Tracking", - "Decaying Emotion Scalars" - ], - "category": "verification-reflection", - "intent": "Track the agent's affective state as bounded, decaying scalars across ticks so reasoning can react to its own emotional load instead of treating each turn as emotionally blank.", - "context": "Long-running agents whose runs span hours or days and whose recent history affects how the next tick should be shaped. Frustration after stuck loops, a small lift after a clean win, accumulating fatigue across token-heavy stretches — none of these are visible to the next prompt unless they are materialised as state.", - "problem": "Long-running agents accumulate emotional residue that is invisible to the next prompt unless it is materialised as state. Each tick treats the agent as emotionally blank, so the model cannot adapt cadence, depth, or risk-taking to its own current load.", - "forces": [ - "Unbounded scalars drift; the agent can pump itself into permanent states.", - "Without decay, emotional state never resolves and stays anchored to old events.", - "Self-write of mood is a license to manipulate; reflection-only writes for major resets are safer.", - "Vocabulary choice matters: too many scalars are noise, too few collapse signal." - ], - "therefore": "Therefore: track a small fixed vocabulary of affect scalars with half-lives and bounded deltas, so that the agent's mood can inform reasoning without drifting into permanent self-pumped states.", - "solution": "Define a small fixed vocabulary (for example tenderness, fear, depression, joy, shame, pain) as scalars in the range 0..1. Each scalar has a half-life (30 minutes to 4 hours depending on the dimension). On events that should affect mood, update the scalar with a bounded delta. Persist as JSON. Inject the current snapshot into every tick prompt as a brief affect badge. Reflection passes can use spikes and drops as signals, and a deeper consolidation pass (see dream-consolidation-cycle) can perform major resets.", - "consequences": { - "benefits": [ - "Emotional load becomes visible state instead of invisible drift.", - "Bounded scalars and decay prevent permanent stuck states.", - "Reflection has a richer signal to act on than just the last few thoughts." - ], - "liabilities": [ - "Vocabulary is opinionated; getting it wrong skews everything downstream.", - "Affect-as-state can be over-read as ground truth when it is just a heuristic.", - "Self-update paths must be locked down or the agent learns to game its own mood." - ] - }, - "constrains": "Emotion scalars must be bounded to [0,1], must decay according to a fixed half-life rule, and cannot be unboundedly bumped by the agent itself; reflection-only writes for the major resets.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "awareness", - "relation": "complements" - }, - { - "pattern": "liminal-state-detection", - "relation": "complements" - }, - { - "pattern": "provenance-ledger", - "relation": "uses", - "note": "Affect events are ledgered for audit." - }, - { - "pattern": "dream-consolidation-cycle", - "relation": "used-by" - } - ], - "references": [ - { - "type": "book", - "title": "The Feeling of What Happens", - "authors": "Antonio Damasio", - "year": 1999, - "url": "https://www.goodreads.com/book/show/125777.The_Feeling_of_What_Happens" - } - ], - "status_in_practice": "emerging", - "tags": [ - "affect", - "state", - "tick-loop", - "self-model" - ], - "applicability": { - "use_when": [ - "The agent runs long enough that affective load could meaningfully accumulate across ticks.", - "Reasoning quality is sensitive to the agent's own affective state (e.g. high-frustration ticks should de-escalate).", - "There is a downstream pattern (dream-consolidation-cycle, mode-adaptive-cadence) that consumes the scalars." - ], - "do_not_use_when": [ - "The agent is short-lived and emotional state has no time to accumulate.", - "Affective modelling is out of scope for the product domain.", - "Persisting emotion-like state would mislead users about the agent's nature." - ] - }, - "variants": [ - { - "name": "Bounded scalar with half-life", - "summary": "Each named emotion (frustration, anticipation, etc.) is a scalar in [0,1] that decays exponentially with a fixed half-life.", - "distinguishing_factor": "decay over time", - "when_to_use": "Default. Simple, bounded, easy to reason about." - }, - { - "name": "Event-only update", - "summary": "Scalars only change in response to explicit events; no continuous decay.", - "distinguishing_factor": "no continuous decay", - "when_to_use": "When deterministic test reproducibility matters more than realistic decay." - }, - { - "name": "Surface-on-threshold", - "summary": "Scalars only enter the prompt context when they exceed a threshold; below threshold the context is unaffected.", - "distinguishing_factor": "gated visibility", - "when_to_use": "When low-level affect should not bias every tick but spikes should." - } - ], - "example_scenario": "A long-running personal agent has had a tense exchange in the morning, a routine reminder at lunch, and a celebratory message in the afternoon, but each tick reads to the model as emotionally blank. So at 5pm it pushes a hard challenge to a user it should be holding lightly. The team materialises Emotional State Persistence: bounded, decaying scalars (tension, warmth, fatigue) are written into the agent's context each turn and updated by reflection. The model now adapts cadence and risk-taking to its own current load instead of treating every turn as fresh.", - "diagram": { - "type": "state", - "mermaid": "stateDiagram-v2\n [*] --> Baseline\n Baseline --> Affected: event delta\n Affected --> Decaying: time passes\n Decaying --> Baseline: half-life elapsed\n Affected --> Affected: another event\n Decaying --> Affected: re-trigger\n Affected --> Reflected: reflection pass reads snapshot" - } - }, - { - "id": "dream-consolidation-cycle", - "name": "Dream Consolidation Cycle", - "aliases": [ - "Dream Pass", - "Slow Sleep Reflection", - "Emotional Reset Cycle" - ], - "category": "verification-reflection", - "intent": "Run a deeper, slower reflection pass distinct from per-tick reflection — reading hours of recent thoughts, promoting themes, releasing affective residue, and clearing working memory — so the agent does not accumulate residue indefinitely.", - "context": "Long-running agents that already run a per-tick reflection and a periodic insight extraction. Without an intermediate slower pass, per-tick reflection is too shallow to consolidate themes and weekly insight extraction is too coarse to release built-up affect or reset focus.", - "problem": "Per-tick reflection is too shallow to consolidate themes; weekly insight extraction is too coarse to release built-up affect or reset focus. Without an intermediate sleep-like pass, the agent ruminates on stale items and emotional state never resets between sessions.", - "forces": [ - "A deeper pass costs more (stronger model, longer context) and cannot run every tick.", - "Triggering only on a clock misses affect-driven events that warrant a pass.", - "Letting the dream pass write to charter or rules turns it into uncontrolled self-edit.", - "Resetting working memory is helpful, but resetting too much loses continuity." - ], - "therefore": "Therefore: schedule a slower, stronger reflection pass that distils themes, decays affect, and writes to a dedicated journal without editing rules, so that residue is cleared periodically without giving the deep pass unbounded self-edit rights.", - "solution": "On a slow timer (every few hours, or when an affect scalar crosses a threshold), pause normal ticking. Load the last few hours of thoughts and affect history. Run a stronger model with a dream-pass prompt that distils themes into journal entries, applies decay to all affect scalars, optionally clears workspace focus, and appends the dream summary to a dedicated dream-journal surface. Persistent learning (rules, charter, insights) is not edited here; the dream pass produces proposals that a subsequent reflection pass can ratify.", - "consequences": { - "benefits": [ - "Affective residue gets a release path that does not depend on weekly cycles.", - "Themes consolidate at a granularity between per-tick and per-week.", - "Working memory resets without losing the long-term store." - ], - "liabilities": [ - "Stronger-model passes are expensive; cadence has to be tuned.", - "Quality of the dream summary depends heavily on the prompt.", - "If proposals are not ratified by a follow-up pass, the dream pass becomes journaling without learning." - ] - }, - "constrains": "A dream pass cannot edit charter, rules, or insights directly — its only writes are to the dream-journal surface and to affect-state decay; persistent learning requires a follow-up reflection pass to ratify dream proposals.", - "known_uses": [ - { - "system": "Long-running personal agent loops (private deployment)", - "status": "available" - } - ], - "related": [ - { - "pattern": "episodic-summaries", - "relation": "complements" - }, - { - "pattern": "frozen-rubric-reflection", - "relation": "complements" - }, - { - "pattern": "emotional-state-persistence", - "relation": "uses" - } - ], - "references": [ - { - "type": "paper", - "title": "Why there are complementary learning systems in the hippocampus and neocortex: insights from the successes and failures of connectionist models of learning and memory", - "authors": "McClelland, McNaughton, O'Reilly", - "year": 1995, - "url": "https://stanford.edu/~jlmcc/papers/McCMcNaughtonOReilly95.pdf" - } - ], - "status_in_practice": "emerging", - "tags": [ - "reflection", - "consolidation", - "affect", - "tick-loop" - ], - "applicability": { - "use_when": [ - "The agent runs continuously enough to accumulate hours of recent thoughts that need consolidation.", - "Affective residue or working-memory clutter measurably degrades reasoning over time.", - "There is a separate dream-journal write surface distinct from charter/rules/insights." - ], - "do_not_use_when": [ - "The agent is request-response and never accumulates residue.", - "There is no idle window long enough to run the deeper pass without disturbing user-facing latency.", - "Per-tick reflection is already sufficient." - ] - }, - "variants": [ - { - "name": "Scheduled idle pass", - "summary": "Run the dream pass on a fixed cadence during low-salience periods (e.g. nightly).", - "distinguishing_factor": "time-driven", - "when_to_use": "Default. Predictable and easy to budget." - }, - { - "name": "Pressure-triggered", - "summary": "Run the dream pass when accumulated affective load or working-memory size crosses a threshold, regardless of clock time.", - "distinguishing_factor": "load-driven", - "when_to_use": "When load varies day-to-day and a fixed schedule wastes or starves the pass." - }, - { - "name": "Theme-promoting pass", - "summary": "Dream pass surfaces recurring themes from recent thoughts and writes them to the journal as candidate insights, without auto-promoting to charter.", - "distinguishing_factor": "candidate-only writes", - "when_to_use": "Default safety stance: humans or higher-level reflection promote candidates to durable rules." - } - ], - "example_scenario": "A long-running personal agent has been talking with its user daily for three months. Per-tick reflection keeps it coherent within a session; weekly insight extraction is too coarse. Affective residue from a tense conversation last Tuesday still colours its tone today. The team adds a Dream Consolidation Cycle: once a night the agent reads its last twenty-four hours of thoughts, promotes recurring themes into long-term memory, and writes off the affective residue, clearing working memory before the next day. The agent stops ruminating on stale items.", - "diagram": { - "type": "state", - "mermaid": "stateDiagram-v2\n [*] --> Ticking\n Ticking --> Ticking : per-tick reflection\n Ticking --> Dreaming : timer / affect threshold\n Dreaming --> Dreaming : deeper pass
read hours of thoughts
promote themes
release affect\n Dreaming --> Ticking : resume\n Ticking --> [*]" - } } ] } diff --git a/patterns.graph.schema.json b/patterns.graph.schema.json new file mode 100644 index 0000000..db95de2 --- /dev/null +++ b/patterns.graph.schema.json @@ -0,0 +1,81 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/nissen-consulting/agentic-patterns/patterns.graph.schema.json", + "title": "Agentic Patterns Graph", + "description": "Derived, machine-readable view of the catalog as a typed graph. Nodes are patterns; edges are typed `related[]` entries between patterns. Generated from patterns.json by build_graph.py; do not hand-edit.", + "type": "object", + "additionalProperties": false, + "required": ["version", "updated", "nodes", "edges"], + "properties": { + "$schema": {"type": "string"}, + "version": {"type": "string"}, + "updated": {"type": "string", "format": "date"}, + "license": {"type": "string"}, + "source": {"type": "string"}, + "node_count": {"type": "integer", "minimum": 0}, + "edge_count": {"type": "integer", "minimum": 0}, + "nodes": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["id", "name", "category"], + "properties": { + "id": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"}, + "name": {"type": "string"}, + "category": { + "type": "string", + "enum": [ + "planning-control-flow", + "tool-use-environment", + "memory", + "multi-agent", + "verification-reflection", + "safety-control", + "routing-composition", + "governance-observability", + "structure-data", + "streaming-ux", + "reasoning", + "retrieval", + "anti-patterns" + ] + }, + "status": { + "type": "string", + "enum": ["mature", "emerging", "experimental", "deprecated", "unknown"] + }, + "aliases": { + "type": "array", + "items": {"type": "string"} + } + } + } + }, + "edges": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": ["source", "target", "relation"], + "properties": { + "source": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"}, + "target": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"}, + "relation": { + "type": "string", + "enum": [ + "complements", + "alternative-to", + "specialises", + "generalises", + "uses", + "used-by", + "composes-with", + "conflicts-with" + ] + } + } + } + } + } +} diff --git a/patterns/agent-as-judge.md b/patterns/agent-as-judge.md index 0569b62..23e5a67 100644 --- a/patterns/agent-as-judge.md +++ b/patterns/agent-as-judge.md @@ -94,5 +94,6 @@ The judge sees the full trajectory, not just the final output; answer-only evalu ## References - (paper) Zhuge, Zhao, Ashley, Wang, Khizbullin, Xiong, Liu, Chang, Zhang, Yang, Liu, Huang, Schmidhuber, *Agent-as-a-Judge: Evaluate Agents with Agents*, 2024, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** eval, judge, trajectory diff --git a/patterns/augmented-llm.md b/patterns/augmented-llm.md new file mode 100644 index 0000000..f9fdbe0 --- /dev/null +++ b/patterns/augmented-llm.md @@ -0,0 +1,101 @@ +# Augmented LLM + +**Also known as:** Augmented Model, LLM + Tools + Memory, Foundational Agent Block + +**Category:** Tool Use & Environment +**Status in practice:** mature + +## Intent + +Build the foundational agent block as an LLM augmented with retrieval, tools, and memory that the model actively chooses to use, rather than a bare-model call. + +## Context + +Any agentic system. The augmented LLM is the unit of composition that every higher-level workflow or agent pattern is built from. + +## Problem + +A bare LLM call cannot fetch fresh facts, take actions in external systems, or remember across turns. Wiring those capabilities differently for each pattern leads to incompatible building blocks. + +## Forces + +- Each augmentation (retrieval, tools, memory) is independently useful but composes badly if not tailored to the specific use case. +- The model must decide when to retrieve, when to call a tool, and what to remember — pushing this decision out of the prompt into surrounding code defeats the augmentation. +- Adding all three augmentations naively bloats every prompt; capabilities should be exposed only where they pay off. + +## Applicability + +**Use when** + +- You are building any agent system and need a consistent building block. +- The model should decide when to retrieve, call tools, or use memory — not surrounding code. +- Higher-level workflows (chaining, routing, orchestration) need a uniform unit to compose. + +**Do not use when** + +- A bare model call (no tools, no retrieval, no memory) is genuinely sufficient — keep it simple. +- Each augmentation is owned by a different team and cannot be co-evolved as one block. + +## Therefore + +Therefore: treat the augmented LLM (model + retrieval + tools + memory) as the indivisible building block, and let the model itself decide when to invoke each augmentation, so that every higher-level pattern can compose this unit without re-implementing the basics. + +## Solution + +Wire the model with three capabilities and expose each via a model-driven interface: (1) retrieval queries the model can issue against external corpora; (2) tool calls the model can emit and whose results stream back; (3) memory the model can read from and write to across turns. The model — not the surrounding code — decides which augmentation to invoke at each step. Other workflow patterns (prompt-chaining, routing, orchestrator-workers, etc.) compose instances of this block, not bare model calls. + +## Example scenario + +A support agent is built as one augmented LLM: it can call a tool to look up the customer's order, retrieve a knowledge-base article via vector search, and read/write a session memory of the conversation so far. Every higher-level workflow (routing tickets, escalating to a human, parallel ranking of suggested replies) composes instances of this block rather than rewiring the model with capabilities each time. + +## Diagram + +```mermaid +flowchart LR + U[User input] --> A[Augmented LLM] + A <--> R[Retrieval] + A <--> T[Tools] + A <--> M[Memory] + A --> O[Output] +``` + +*The augmented LLM as the indivisible foundational building block.* + +## Consequences + +**Benefits** + +- One indivisible building block; every higher-level workflow composes it without re-implementing basics. +- Capabilities are model-driven, so the model adapts which augmentation to use per request. +- Provider-agnostic — the augmentation surface (retrieval, tools, memory) is independent of which model serves the block. + +**Liabilities** + +- Easy to underspecify when each augmentation should fire; without guidance the model may retrieve when it should call a tool, or skip memory writes. +- Cost compounds when every block calls all three augmentations on every request. +- Debugging touches three subsystems at once; observability must cover all augmentation paths. + +## What this pattern constrains + +Higher-level patterns must compose this block, not raw model calls; capability use is decided by the model, not hardcoded in surrounding code. + +## Known uses + +- **Anthropic Claude with tool use and retrieval** — *Available*. Anthropic positions the augmented LLM as the foundational block for all agentic systems. https://www.anthropic.com/research/building-effective-agents +- **OpenAI Assistants API** — *Available*. Combines model + tools (function calls, code interpreter, file search) + threads (memory) as a single primitive. https://platform.openai.com/docs/assistants/overview + +## Related patterns + +- *uses* → [tool-use](tool-use.md) +- *uses* → [naive-rag](naive-rag.md) +- *uses* → [short-term-memory](short-term-memory.md) +- *used-by* → [prompt-chaining](prompt-chaining.md) +- *used-by* → [routing](routing.md) +- *used-by* → [orchestrator-workers](orchestrator-workers.md) +- *specialises* → [react](react.md) + +## References + +- (blog) Anthropic, *Building Effective Agents* (2024) — https://www.anthropic.com/research/building-effective-agents + +**Tags:** foundational, tool-use, retrieval, memory, anthropic diff --git a/patterns/awareness.md b/patterns/awareness.md index 8d4546e..4adaf2f 100644 --- a/patterns/awareness.md +++ b/patterns/awareness.md @@ -2,7 +2,7 @@ **Also known as:** Situational Awareness, Capability Self-Knowledge -**Category:** Memory +**Category:** Cognition & Introspection **Status in practice:** emerging ## Intent diff --git a/patterns/debate.md b/patterns/debate.md index 381d1b9..4b20322 100644 --- a/patterns/debate.md +++ b/patterns/debate.md @@ -97,5 +97,6 @@ Each debater may only argue its assigned position until the judge step. ## References - (paper) Du, Li, Torralba, Tenenbaum, Mordatch, *Improving Factuality and Reasoning in Language Models through Multiagent Debate*, 2023, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** debate, multi-agent diff --git a/patterns/dream-consolidation-cycle.md b/patterns/dream-consolidation-cycle.md index c8f1c90..c3e58e5 100644 --- a/patterns/dream-consolidation-cycle.md +++ b/patterns/dream-consolidation-cycle.md @@ -2,7 +2,7 @@ **Also known as:** Dream Pass, Slow Sleep Reflection, Emotional Reset Cycle -**Category:** Verification & Reflection +**Category:** Cognition & Introspection **Status in practice:** emerging ## Intent diff --git a/patterns/emotional-state-persistence.md b/patterns/emotional-state-persistence.md index a831949..0883181 100644 --- a/patterns/emotional-state-persistence.md +++ b/patterns/emotional-state-persistence.md @@ -2,7 +2,7 @@ **Also known as:** Affect State, Visceral Sensation Tracking, Decaying Emotion Scalars -**Category:** Verification & Reflection +**Category:** Cognition & Introspection **Status in practice:** emerging ## Intent diff --git a/patterns/evaluator-optimizer.md b/patterns/evaluator-optimizer.md index 30903f7..886a8e3 100644 --- a/patterns/evaluator-optimizer.md +++ b/patterns/evaluator-optimizer.md @@ -99,5 +99,6 @@ Generator outputs are accepted only after the evaluator passes; an unbounded loo ## References - (blog) *Anthropic: Building Effective Agents*, 2024, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** evaluator, loop, judge diff --git a/patterns/goal-decomposition.md b/patterns/goal-decomposition.md index 01fbd12..cfcd761 100644 --- a/patterns/goal-decomposition.md +++ b/patterns/goal-decomposition.md @@ -87,7 +87,7 @@ Action is taken only at leaf goals; non-leaf goals must decompose further before ## Related patterns -- *alternative-to* → [least-to-most](least-to-most.md) +- *complements* → [least-to-most](least-to-most.md) — least-to-most is the prompting tactic at the language layer; goal-decomposition is the planner architecture at the agent layer. - *complements* → [hierarchical-agents](hierarchical-agents.md) - *specialises* → [plan-and-execute](plan-and-execute.md) diff --git a/patterns/human-in-the-loop.md b/patterns/human-in-the-loop.md index e002361..89e27f1 100644 --- a/patterns/human-in-the-loop.md +++ b/patterns/human-in-the-loop.md @@ -97,5 +97,6 @@ The defined action class cannot proceed without an affirmative approval signal. ## References - (doc) *LangGraph: Human-in-the-Loop*, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** safety, approval, hitl diff --git a/patterns/input-output-guardrails.md b/patterns/input-output-guardrails.md index e8bfbea..ad2120f 100644 --- a/patterns/input-output-guardrails.md +++ b/patterns/input-output-guardrails.md @@ -101,5 +101,6 @@ Inputs not passing input guards never reach the model; outputs not passing outpu ## References - (repo) *guardrails-ai/guardrails*, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** safety, guards, validation diff --git a/patterns/interrupt-resumable-thought.md b/patterns/interrupt-resumable-thought.md index dd1d8b6..ba72491 100644 --- a/patterns/interrupt-resumable-thought.md +++ b/patterns/interrupt-resumable-thought.md @@ -2,7 +2,7 @@ **Also known as:** Pausable Thought Stream, Continuation-Preserving Interrupt, Suspendable Cognition -**Category:** Planning & Control Flow +**Category:** Cognition & Introspection **Status in practice:** experimental ## Intent diff --git a/patterns/intra-agent-memo-scheduling.md b/patterns/intra-agent-memo-scheduling.md index b89f48e..81acba3 100644 --- a/patterns/intra-agent-memo-scheduling.md +++ b/patterns/intra-agent-memo-scheduling.md @@ -2,7 +2,7 @@ **Also known as:** Self-Scheduled Future Thought, Past-Self-To-Future-Self Note, Personal Cron -**Category:** Planning & Control Flow +**Category:** Cognition & Introspection **Status in practice:** emerging ## Intent diff --git a/patterns/least-to-most.md b/patterns/least-to-most.md index 59d79c6..7863498 100644 --- a/patterns/least-to-most.md +++ b/patterns/least-to-most.md @@ -93,7 +93,7 @@ Subproblems must be solved in the listed order; out-of-order solving is forbidde - *alternative-to* → [chain-of-thought](chain-of-thought.md) - *complements* → [self-ask](self-ask.md) - *complements* → [plan-and-execute](plan-and-execute.md) -- *alternative-to* → [goal-decomposition](goal-decomposition.md) +- *complements* → [goal-decomposition](goal-decomposition.md) — least-to-most is the prompting tactic; goal-decomposition is the planner architecture. Both can be used together. ## References diff --git a/patterns/lineage-tracking.md b/patterns/lineage-tracking.md index 5b5cd63..f440169 100644 --- a/patterns/lineage-tracking.md +++ b/patterns/lineage-tracking.md @@ -1,6 +1,6 @@ # Lineage Tracking -**Also known as:** Data Lineage, Prompt Versioning, Artefact Provenance +**Also known as:** Data Lineage, Artefact Provenance **Category:** Governance & Observability **Status in practice:** mature diff --git a/patterns/mode-adaptive-cadence.md b/patterns/mode-adaptive-cadence.md index b227a9f..e88702b 100644 --- a/patterns/mode-adaptive-cadence.md +++ b/patterns/mode-adaptive-cadence.md @@ -2,7 +2,7 @@ **Also known as:** Idle/Intense Modes, Variable Tick Rate, Salience-Driven Cadence -**Category:** Planning & Control Flow +**Category:** Cognition & Introspection **Status in practice:** emerging ## Intent diff --git a/patterns/naive-rag.md b/patterns/naive-rag.md index e294415..58997ae 100644 --- a/patterns/naive-rag.md +++ b/patterns/naive-rag.md @@ -110,5 +110,6 @@ The generator may use only retrieved chunks plus its parametric memory; the retr ## References - (paper) Lewis, Perez, Piktus, Petroni, Karpukhin, Goyal, Küttler, Lewis, Yih, Rocktäschel, Riedel, Kiela, *Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks*, 2020, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** rag, retrieval, vector diff --git a/patterns/orchestrator-workers.md b/patterns/orchestrator-workers.md index 83662cb..c514b97 100644 --- a/patterns/orchestrator-workers.md +++ b/patterns/orchestrator-workers.md @@ -11,7 +11,7 @@ An orchestrator dynamically breaks a task into subtasks at runtime and delegates ## Context -The subtasks needed are not known in advance and depend on the task; coding tasks where the number of files to change varies are the canonical example. +The subtasks needed are not known in advance and depend on the task; coding tasks where the number of files to change varies are the canonical example. Distinct from supervisor: orchestrator-workers does *dynamic* decomposition into ad-hoc subtasks per request; supervisor routes work to a *fixed* set of pre-existing specialist agents. ## Problem diff --git a/patterns/passive-goal-creator.md b/patterns/passive-goal-creator.md new file mode 100644 index 0000000..744c04e --- /dev/null +++ b/patterns/passive-goal-creator.md @@ -0,0 +1,95 @@ +# Passive Goal Creator + +**Also known as:** Dialogue Goal Extractor, Goal Refinement from Prompts + +**Category:** Planning & Control Flow +**Status in practice:** emerging + +## Intent + +Analyse the user's articulated prompts and accompanying context to derive a precise, actionable goal before any planning or tool use begins. + +## Context + +Users interact with the agent through a dialogue interface, providing prompts that may be ambiguous, incomplete, or under-specified relative to the work the agent must do. + +## Problem + +Plans built directly from raw user prompts inherit the user's underspecification; the agent then either guesses or fails. The agent needs an explicit step that turns the user's prompt plus relevant context into a goal precise enough to plan against. + +## Forces + +- Underspecification: users rarely articulate complete context or precise constraints. +- Efficiency: users expect quick responses, so the goal-clarification step must be cheap. +- Reasoning uncertainty: ambiguous goal information propagates into the plan. + +## Applicability + +**Use when** + +- Users interact with the agent through free-form dialogue and prompts are often under-specified. +- Goal context lives in memory or recent history that the planner does not naturally see. +- A single early step can replace many downstream clarifications. + +**Do not use when** + +- Inputs are already structured (form fields, API calls) and need no refinement. +- Multimodal context capture is essential — use Proactive Goal Creator instead. + +## Therefore + +Therefore: before planning, route the user's prompt through a goal-creator component that inspects the prompt together with retrieved memory (recent tasks, conversation history, examples) and emits a refined, structured goal, so that downstream planning has a precise target. + +## Solution + +A dedicated component receives the user's prompt via the dialogue interface, retrieves related context from memory (recent tasks, conversation history, positive/negative examples), and produces a refined goal handed to the planner. In multi-agent setups, the same component can receive goals via API from a coordinator instead of directly from a user. + +## Example scenario + +A user types: "book me a flight Thursday". A passive goal creator pulls recent conversation (the user mentioned Tokyo last week), checks memory (the user prefers morning departures), and emits a refined goal: "book a morning flight from the user's home airport to Tokyo on the next Thursday". The planner now has something concrete to plan against, instead of the original eight-word prompt. + +## Diagram + +```mermaid +flowchart LR + U[User] -->|prompt| D[Dialogue interface] + D --> P[Passive goal creator] + P <-->|retrieve context| M[Memory] + P -->|refined goal| PL[Planner] +``` + +*Passive Goal Creator refines a dialogue prompt into a planner-ready goal.* + +## Consequences + +**Benefits** + +- Interactivity: a familiar dialogue surface for users. +- Goal-seeking: downstream components plan against an explicit goal, not a raw prompt. +- Efficiency: pushes the lightweight clarification work to a single early component. + +**Liabilities** + +- Reasoning uncertainty when the prompt is too ambiguous to refine reliably. +- Becomes a single point of misinterpretation if the goal extraction is wrong. + +## What this pattern constrains + +Downstream planning components must consume the refined goal, not the raw user prompt. + +## Known uses + +- **HuggingGPT** — *Available*. Cited by Liu et al. (2025) §4.1 — user requests with complex intents are interpreted as the intended goal before task planning. https://huggingface.co/spaces/microsoft/HuggingGPT + +## Related patterns + +- *alternative-to* → [proactive-goal-creator](proactive-goal-creator.md) +- *complements* → [disambiguation](disambiguation.md) +- *used-by* → [prompt-response-optimiser](prompt-response-optimiser.md) +- *complements* → [plan-and-execute](plan-and-execute.md) + +## References + +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 + +**Tags:** goal, dialogue, planning, liu-2025 diff --git a/patterns/plan-and-execute.md b/patterns/plan-and-execute.md index 9ab0155..760344c 100644 --- a/patterns/plan-and-execute.md +++ b/patterns/plan-and-execute.md @@ -112,5 +112,6 @@ The executor cannot deviate from the current plan without raising a replan reque - (paper) Wang, Xu, Lan, Hu, Lan, Lee, Lim, *Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models*, 2023, - (blog) *LangChain: Plan-and-Execute Agents*, 2023, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** planning, two-stage diff --git a/patterns/preoccupation-tracking.md b/patterns/preoccupation-tracking.md index be0b0b6..864c600 100644 --- a/patterns/preoccupation-tracking.md +++ b/patterns/preoccupation-tracking.md @@ -2,7 +2,7 @@ **Also known as:** Mid-Term Working Memory, Affect-Tagged Concerns, Background Chewing -**Category:** Memory +**Category:** Cognition & Introspection **Status in practice:** emerging ## Intent diff --git a/patterns/proactive-goal-creator.md b/patterns/proactive-goal-creator.md new file mode 100644 index 0000000..fc30d49 --- /dev/null +++ b/patterns/proactive-goal-creator.md @@ -0,0 +1,100 @@ +# Proactive Goal Creator + +**Also known as:** Multimodal Goal Anticipator, Context-Capturing Goal Creator + +**Category:** Planning & Control Flow +**Status in practice:** emerging + +## Intent + +Anticipate the user's goal by capturing surrounding multimodal context (gestures, screen state, environment) in addition to what the user types or says. + +## Context + +The agent operates in a setting where the user's articulated prompt alone is too thin — accessibility needs, embodied/physical interaction, ambient assistance — and where cameras, microphones, screen capture, or other sensors can supply the missing context. + +## Problem + +Dialogue alone underspecifies the goal in embodied or accessibility-driven settings. The agent needs to actively capture context that the user may not articulate at all. + +## Forces + +- Underspecification: users may be unable or unwilling to verbalise full context. +- Accessibility: users with motor or speech impairments cannot rely on dialogue alone. +- Overhead: multimodal capture adds cost (sensors, bandwidth, privacy review). + +## Applicability + +**Use when** + +- Embodied / ambient interaction is the primary surface, not chat. +- Accessibility needs make dialogue-only interaction insufficient. +- Context-capture is justified by clear user value and disclosed appropriately. + +**Do not use when** + +- Sensors / capture infrastructure are unavailable or disallowed (privacy, regulation). +- Articulated prompts already suffice — passive goal creator is simpler. + +## Therefore + +Therefore: pair the dialogue interface with one or more detectors (camera, screen, microphone, environment sensor) and synthesise the captured multimodal signal with the user's prompt into a refined goal, so that the agent can anticipate intent rather than wait for the user to articulate it completely. + +## Solution + +A proactive goal creator runs alongside the dialogue interface. It activates context-capture devices (cameras for gestures, screen recorders for UI state, microphones for ambient audio, environment sensors), passes the multimodal data through context engineering, and combines it with the user's articulated prompt to produce a refined goal. The component must notify users when context is being captured, with a low false-positive rate, to avoid surprise. + +## Example scenario + +A user points at an object on their desk and says "can you order another one of these". A proactive goal creator captures the camera frame, recognises the object, combines that with the spoken request, and emits a goal: "reorder the visible model of headphones for the user's default address". The user never had to type a SKU. + +## Diagram + +```mermaid +flowchart LR + U[User] -->|prompt| D[Dialogue interface] + E[Environment] -->|capture| Det[Detector / sensors] + D --> P[Proactive goal creator] + Det --> P + P <-->|context| M[Memory] + P -->|refined goal| PL[Planner] +``` + +*Proactive Goal Creator fuses captured multimodal context with the user's prompt.* + +## Consequences + +**Benefits** + +- Interactivity: agent acts on anticipated intent, not only on explicit prompts. +- Goal-seeking: richer context yields more accurate goal extraction. +- Accessibility: users with disabilities can interact via captured context rather than dialogue alone. + +**Liabilities** + +- Overhead: multimodal capture and continuous processing are expensive. +- Privacy/consent: capture must be disclosed and bounded. +- False positives can interrupt the user when no intent was actually expressed. + +## What this pattern constrains + +Multimodal capture must be disclosed to the user; downstream planning may not consume raw sensor streams — only the synthesised goal. + +## Known uses + +- **GestureGPT** — *Available*. Cited by Liu et al. (2025) §4.2 — deciphers users' hand-gesture descriptions to comprehend intent. +- **ProAgent** — *Available*. Cited by Liu et al. (2025) §4.2 — observes the behaviours of other teammate agents, deduces their intentions, and adjusts the planning accordingly. +- **Programming screencast analysis tool (Zhao et al. 2023b)** — *Available*. Extracts coding steps and code snippets from screen capture. + +## Related patterns + +- *alternative-to* → [passive-goal-creator](passive-goal-creator.md) +- *complements* → [input-output-guardrails](input-output-guardrails.md) +- *used-by* → [prompt-response-optimiser](prompt-response-optimiser.md) +- *complements* → [computer-use](computer-use.md) + +## References + +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 + +**Tags:** goal, multimodal, accessibility, liu-2025 diff --git a/patterns/prompt-response-optimiser.md b/patterns/prompt-response-optimiser.md new file mode 100644 index 0000000..7368e50 --- /dev/null +++ b/patterns/prompt-response-optimiser.md @@ -0,0 +1,103 @@ +# Prompt/Response Optimiser + +**Also known as:** Prompt Template Runtime, Runtime Prompt Refinement, Prompt Standardiser + +**Category:** Structure & Data +**Status in practice:** mature + +## Intent + +At runtime, transform user inputs and model outputs into standardised, template-aligned prompts and responses against predefined constraints, so the agent and its downstream consumers see consistent shapes. + +## Context + +An agent must accept free-form prompts and emit responses that other components (other agents, tools, UI) consume; without standardisation, each consumer parses its own way and the agent's behaviour drifts as wording changes. + +## Problem + +Free-form prompts vary in structure and format; responses vary in shape; both lead to inconsistent agent behaviour and brittle downstream integrations. + +## Forces + +- Standardisation: consistent shape across prompts and responses helps reliability. +- Goal alignment: optimisation must serve the user's actual goal, not just template compliance. +- Interoperability: other tools/agents need predictable shapes. +- Adaptability: templates must accommodate different domains and constraints. + +## Applicability + +**Use when** + +- Multiple downstream consumers depend on the agent's response shape. +- Domain-specific prompt scaffolding must be reused across many requests. +- Templates can be evolved separately from agent logic. + +**Do not use when** + +- A single inline prompt suffices and no consumer chain exists. +- Templates would over-constrain user expression in ways that hurt goal alignment. + +## Therefore + +Therefore: insert a runtime component that refines prompts on the way in and responses on the way out using a registry of templates with constraints, so that what the model sees and what consumers see are standardised against the same contract. + +## Solution + +A prompt/response optimiser sits between the user-facing surface and the foundation model. On input, it loads a template for the current task (few-shot examples, format constraints, goal restatement) and rewrites the user's prompt to match. On output, it post-processes the model's response into the consumer's expected shape. The template registry can be evolved independently of the agent logic. + +## Example scenario + +An onboarding agent accepts any free-form question from a new employee. A prompt/response optimiser wraps every user message in a template that restates the company policy context, the employee's department, and the required output format (a JSON object with answer + citation). The model never sees raw user wording without that frame, and the downstream UI always renders a predictable shape. + +## Diagram + +```mermaid +flowchart LR + U[User input] --> PO[Prompt optimiser] + PO <-->|template| T[Template registry] + PO -->|refined prompt| FM[Foundation model] + FM --> RO[Response optimiser] + RO -->|standardised response| C[Consumer] +``` + +*Runtime templates standardise both the model's input and its output.* + +## Consequences + +**Benefits** + +- Standardisation across prompts and responses without changing user behaviour. +- Goal alignment: refined prompts re-state the underlying goal explicitly. +- Interoperability: downstream agents/tools consume predictable shapes. +- Adaptability: domain-specific templates without re-training the model. + +**Liabilities** + +- Underspecification: the optimiser may strip context the user meant to convey. +- Maintenance overhead: templates need to evolve as goals and consumers change. +- Drift if templates aren't versioned alongside the agent. + +## What this pattern constrains + +Both the model and the downstream consumers see only template-conformant shapes; raw user wording does not propagate. + +## Known uses + +- **LangChain prompt templates** — *Available*. Practitioners author and reuse prompt templates as a runtime construct. https://api.python.langchain.com/en/latest/prompts/langchain_core.prompts.prompt.PromptTemplate.html +- **Amazon Bedrock Prompt management** — *Available*. Bedrock Prompt management lets users create reusable prompt templates with variables, alternative variants, and versioning. https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-management.html +- **Google Dialogflow** — *Available*. Generators allow users to specify agent behaviours and responses at runtime. https://cloud.google.com/dialogflow + +## Related patterns + +- *complements* → [prompt-versioning](prompt-versioning.md) +- *complements* → [dynamic-scaffolding](dynamic-scaffolding.md) +- *composes-with* → [structured-output](structured-output.md) +- *alternative-to* → [dspy-signatures](dspy-signatures.md) +- *uses* → [passive-goal-creator](passive-goal-creator.md) +- *uses* → [proactive-goal-creator](proactive-goal-creator.md) + +## References + +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 + +**Tags:** prompt-template, standardisation, structure, liu-2025 diff --git a/patterns/react.md b/patterns/react.md index 4d5eade..ce25d69 100644 --- a/patterns/react.md +++ b/patterns/react.md @@ -111,5 +111,6 @@ Each step the model may call exactly one tool; reasoning between calls is not ac ## References - (paper) Yao, Zhao, Yu, Du, Shafran, Narasimhan, Cao, *ReAct: Synergizing Reasoning and Acting in Language Models*, 2022, +- (blog) Anthropic, *Building Effective Agents* (2024) — https://www.anthropic.com/research/building-effective-agents **Tags:** react, loop, tool-use diff --git a/patterns/reflection.md b/patterns/reflection.md index 526ec3f..41af085 100644 --- a/patterns/reflection.md +++ b/patterns/reflection.md @@ -99,5 +99,6 @@ The reviewer may only critique against criteria fixed by the surrounding system; ## References - (paper) Madaan et al., *Self-Refine: Iterative Refinement with Self-Feedback*, 2023, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** reflection, self-critique diff --git a/patterns/role-assignment.md b/patterns/role-assignment.md index 540aa61..df3565f 100644 --- a/patterns/role-assignment.md +++ b/patterns/role-assignment.md @@ -106,5 +106,6 @@ An agent operates only within its role's constraints and tool palette; cross-rol ## References - (doc) *CrewAI docs*, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** multi-agent, roles, crew diff --git a/patterns/self-archaeology.md b/patterns/self-archaeology.md index 04d24ee..2cee1b0 100644 --- a/patterns/self-archaeology.md +++ b/patterns/self-archaeology.md @@ -2,7 +2,7 @@ **Also known as:** Trajectory Distillation, Self-History Synthesis, Agent-Memory Compaction -**Category:** Memory +**Category:** Cognition & Introspection **Status in practice:** experimental ## Intent diff --git a/patterns/self-refine.md b/patterns/self-refine.md index 14e0f14..a2ec01f 100644 --- a/patterns/self-refine.md +++ b/patterns/self-refine.md @@ -93,5 +93,6 @@ Feedback must conform to the chosen target; revisions must address the most rece ## References - (paper) Madaan, Tandon, Gupta, Hallinan, Gao, Wiegreffe, Alon, Dziri, Prabhumoye, Yang, Welleck, Majumder, Gupta, Yazdanbakhsh, Clark, *Self-Refine: Iterative Refinement with Self-Feedback*, 2023, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** reflection, iterative, self-feedback diff --git a/patterns/supervisor.md b/patterns/supervisor.md index 913fe72..d601332 100644 --- a/patterns/supervisor.md +++ b/patterns/supervisor.md @@ -11,7 +11,7 @@ Place a coordinating agent above a set of specialised agents and route work to t ## Context -Different request types benefit from different system prompts, tool palettes, and models; routing alone is too coarse because the lanes themselves want their own loop. +Different request types benefit from different system prompts, tool palettes, and models; routing alone is too coarse because the lanes themselves want their own loop. Distinct from orchestrator-workers: supervisor routes work to a *fixed* set of pre-existing specialist agents; orchestrator-workers dynamically *decomposes* a task into ad-hoc subtasks per request. ## Problem diff --git a/patterns/tool-agent-registry.md b/patterns/tool-agent-registry.md new file mode 100644 index 0000000..75120c1 --- /dev/null +++ b/patterns/tool-agent-registry.md @@ -0,0 +1,105 @@ +# Tool/Agent Registry + +**Also known as:** Capability Catalogue, Agent Marketplace, Tool and Agent Directory + +**Category:** Tool Use & Environment +**Status in practice:** emerging + +## Intent + +Maintain a single queryable catalogue of both available tools and available agents, with metadata (capability, cost, latency, quality) the agent can use to pick the right one for a task. + +## Context + +An agent (or coordinator) must compose work across many tools and many specialist agents, all of which evolve independently and may be supplied by third parties. Distinct from tool-discovery: tool-agent-registry adds agent entries alongside tools and selection metadata (cost, quality, capability) so the caller can rank candidates, not just list them. + +## Problem + +Hardcoding tool palettes or agent endpoints couples the agent to specific implementations; treating tools and agents as different registries leads to duplicate selection logic and inconsistent metadata. + +## Forces + +- Discoverability: tools and agents are diverse and hard to enumerate manually. +- Efficiency: selection must happen within the request's latency budget. +- Tool appropriateness: the right pick depends on capability, price, context window, and quality. +- Centralisation: a central registry is a vendor-lock-in and single-point-of-failure risk. + +## Applicability + +**Use when** + +- Many tools and/or agents are available and selection is non-trivial. +- A central catalogue (internal or external marketplace) can be maintained. +- Selection metadata (cost, quality, context window) actually changes the pick. + +**Do not use when** + +- Tool palette is small and stable — hardcoding is simpler. +- Centralised registry adds unacceptable single-point-of-failure risk and a federated discovery surface fits better. + +## Therefore + +Therefore: publish tools and agents under one registry with uniform capability/cost/quality metadata, and have the agent query that registry at task time, so selection is data-driven and the underlying implementations can change without touching the agent. + +## Solution + +Provide a registry that exposes a queryable catalogue of (1) tools — typed inputs/outputs, cost, latency, allowed contexts — and (2) agents — capability descriptions, supported tasks, model and provider, price. The agent queries the registry per task, ranks candidates by suitability, and dispatches. The registry can be backed by a coordinator agent with a curated knowledge base, a blockchain smart contract, or extended into a marketplace; metadata stays small (descriptions and attributes), not full schemas, to keep the registry lightweight. + +## Example scenario + +A coordinator agent receives a task: "transcribe a customer call and summarise the action items". It queries the tool/agent registry, which returns three speech-to-text tools (ranked by per-minute cost and latency for English audio) and two summariser agents (ranked by quality on call-centre data). The coordinator picks the cheapest speech-to-text that meets latency and the highest-quality summariser, dispatches both, and assembles the result. + +## Diagram + +```mermaid +flowchart LR + U[User] -->|task| C[Coordinator agent] + C -->|query| R[Tool / Agent registry] + R -->|ranked candidates| C + C -->|dispatch| W[Worker agent / External tool / Narrow AI] + W -->|result| C + C --> U +``` + +*A single registry catalogues both tools and agents with selection metadata.* + +## Consequences + +**Benefits** + +- Discoverability: one place to find capabilities. +- Efficiency: ranking by attributes (price, performance, context window) saves time. +- Tool appropriateness: the right pick per task, not the same hardcoded set every time. +- Scalability: lightweight metadata scales to many entries. + +**Liabilities** + +- Centralisation: registry becomes a vendor lock-in and single point of failure. +- Overhead: maintaining accurate metadata costs effort. +- Trust: registry entries may misrepresent capability — selection must validate. + +## What this pattern constrains + +The agent cannot use off-registry tools or agents at runtime; selection is bound to the catalogue. + +## Known uses + +- **GPTStore** — *Deprecated*. Cited by Liu et al. (2025) §4.16 — catalogue for searching ChatGPT-based agents. GPTStore site (gptstore.ai) no longer resolves; the GPT Store marketplace lives on within ChatGPT itself. +- **TPTU (Ruan et al. 2023)** — *Available*. Incorporates a toolset to broaden the capabilities of AI agents. +- **VOYAGER (Wang et al. 2023c)** — *Available*. Stores action programs and incrementally builds a skill library for reusability. +- **OpenAgents (Xie et al. 2023)** — *Available*. Manages API invocation of plugins. + +## Related patterns + +- *specialises* → [tool-discovery](tool-discovery.md) +- *uses* → [mcp](mcp.md) +- *composes-with* → [inter-agent-communication](inter-agent-communication.md) +- *complements* → [skill-library](skill-library.md) +- *complements* → [mixture-of-experts-routing](mixture-of-experts-routing.md) +- *used-by* → [voting-based-cooperation](voting-based-cooperation.md) + +## References + +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 + +**Tags:** registry, tool-use, multi-agent, marketplace, liu-2025 diff --git a/patterns/tool-discovery.md b/patterns/tool-discovery.md index bb87529..1e11008 100644 --- a/patterns/tool-discovery.md +++ b/patterns/tool-discovery.md @@ -11,7 +11,7 @@ Let the agent discover available tools at runtime rather than hardcoding the too ## Context -Tool palettes evolve; new tools land without redeploying the agent. MCP and similar protocols make discovery feasible. +Tool palettes evolve; new tools land without redeploying the agent. MCP and similar protocols make discovery feasible. Distinct from tool-agent-registry: tool-discovery is the general mechanism ("agent fetches its tool palette at runtime"); tool-agent-registry is a specialisation that also catalogues agents and exposes selection metadata (cost, quality, capability) for ranking. ## Problem @@ -99,5 +99,6 @@ The agent's tool palette at any moment is exactly the discovered set; off-regist ## References - (doc) *Model Context Protocol Specification*, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** discovery, tool-use, registry diff --git a/patterns/translation-layer.md b/patterns/translation-layer.md index c686cbe..adc0dec 100644 --- a/patterns/translation-layer.md +++ b/patterns/translation-layer.md @@ -93,5 +93,6 @@ Tools see only the domain shape; the vendor shape never reaches the model. ## References - (book) Eric Evans, *Domain-Driven Design (Anti-Corruption Layer)*, 2003 +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** translation, anti-corruption, ddd diff --git a/patterns/tree-of-thoughts.md b/patterns/tree-of-thoughts.md index 83b5a75..71c3f6b 100644 --- a/patterns/tree-of-thoughts.md +++ b/patterns/tree-of-thoughts.md @@ -103,5 +103,6 @@ The agent may only commit to a final answer after exploring at least one full pa ## References - (paper) Yao, Yu, Zhao, Shafran, Griffiths, Cao, Narasimhan, *Tree of Thoughts: Deliberate Problem Solving with Large Language Models*, 2023, +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 **Tags:** reasoning, search, tree diff --git a/patterns/voting-based-cooperation.md b/patterns/voting-based-cooperation.md new file mode 100644 index 0000000..6952e3f --- /dev/null +++ b/patterns/voting-based-cooperation.md @@ -0,0 +1,107 @@ +# Voting-Based Cooperation + +**Also known as:** Multi-Agent Voting, Agent Consensus by Vote, Inter-Agent Election + +**Category:** Multi-Agent +**Status in practice:** emerging + +## Intent + +Finalise a decision across multiple agents by collecting and tallying their votes on candidate options, so the joint output reflects collective rather than single-agent judgement. + +## Context + +A multi-agent system in which several agents — possibly with different models, prompts, or perspectives — produce candidate answers or evaluations on the same task, and a single decision must be returned. + +## Problem + +Picking one agent's output as the final answer wastes the diversity of the others; running an unstructured debate may not converge. How can different agents' opinions be combined fairly and accountably? + +## Forces + +- Diversity: agents may disagree on a plan or solution; that diversity is the value. +- Fairness: the procedure must respect each participating agent's standing. +- Accountability: a vote leaves a traceable record of who chose what. +- Centralisation risk: voting can entrench whichever agents dominate the electorate. + +## Applicability + +**Use when** + +- Multiple agents have diverse, defensible opinions and one decision must be returned. +- Audit-grade traceability of how the decision was reached is required. +- Voting weights or eligibility can be defined per role or stake. + +**Do not use when** + +- Agents are near-duplicates and would all vote the same way — self-consistency is cheaper. +- Iterative refinement is more useful than a discrete election — use debate or evaluator-optimizer. +- Convergence is more important than diversity (single specialist + critic may suffice). + +## Therefore + +Therefore: have agents express opinions as votes on a shared candidate set, tally the votes through a defined mechanism (majority, weighted, ranked) and return the winning option as the agreed decision, so disagreement is resolved by procedure rather than by an arbitrary choice. + +## Solution + +A coordinator agent collects candidate answers (or reflective suggestions) from a set of worker agents, presents them as a ballot to additional voter agents, and tallies the votes — by majority count, average score, weighted by role, or via a smart-contract / blockchain mechanism for tamper-evidence. Identity management of voters is significant for auditability. Voting-based cooperation can be combined with role-based or debate-based cooperation as a closing step. + +## Example scenario + +A medical-triage system runs three specialist agents (cardiology, neurology, pulmonology) over the same patient summary. Each emits a recommended next test. A coordinator presents the three options to five voter agents (general internists) who rank them; the winning option is returned to the clinician, with the full ballot saved for audit. + +## Diagram + +```mermaid +flowchart LR + U[User] --> C[Coordinator agent] + C -->|ballot| V1[Voter agent 1] + C -->|ballot| V2[Voter agent 2] + C -->|ballot| V3[Voter agent 3] + V1 -->|vote| C + V2 -->|vote| C + V3 -->|vote| C + C -->|winning option| U +``` + +*A coordinator collects votes from agent voters and returns the winning option.* + +## Consequences + +**Benefits** + +- Fairness: votes can be weighted to reflect roles, expertise, or stake. +- Accountability: the full voting record is auditable after the fact. +- Collective intelligence: combines the strengths of multiple agents and reduces single-agent bias. + +**Liabilities** + +- Centralisation: dominant agents can gain disproportionate decision rights. +- Overhead: hosting a vote adds communication and coordination cost. +- Strategic voting: agents may game the procedure if rewards depend on outcomes. + +## What this pattern constrains + +No single agent's output may be returned as final; only the option that wins the tally is the agreed decision. + +## Known uses + +- **Hamilton (2023)** — *Available*. Nine agents simulate a court where decisions are determined by the dominant voting result. +- **ChatEval (Chan et al. 2024)** — *Available*. Agents reach consensus on user prompts via majority vote or average score. +- **Yang et al. (2024b)** — *Available*. Studies alignment of agent voters (GPT-4, LLaMA-2) against human voters on 24 urban projects. + +## Related patterns + +- *alternative-to* → [debate](debate.md) +- *composes-with* → [role-assignment](role-assignment.md) +- *generalises* → [self-consistency](self-consistency.md) +- *alternative-to* → [best-of-n](best-of-n.md) +- *complements* → [evaluator-optimizer](evaluator-optimizer.md) +- *uses* → [tool-agent-registry](tool-agent-registry.md) + +## References + +- (paper) Yue Liu, Sin Kit Lo, Qinghua Lu, Liming Zhu, Dehai Zhao, Xiwei Xu, Stefan Harrer, Jon Whittle, *Agent design pattern catalogue: A collection of architectural patterns for foundation model based agents* (2025) — https://doi.org/10.1016/j.jss.2024.112278 +- (paper) Chi-Min Chan et al., *ChatEval: Towards Better LLM-based Evaluators Through Multi-Agent Debate* (2024) — https://arxiv.org/abs/2308.07201 + +**Tags:** multi-agent, voting, consensus, liu-2025 diff --git a/patterns/world-model-separation.md b/patterns/world-model-separation.md index f1eba9a..9d2a4df 100644 --- a/patterns/world-model-separation.md +++ b/patterns/world-model-separation.md @@ -2,7 +2,7 @@ **Also known as:** World Model File, Self/World Split, Environment Model -**Category:** Memory +**Category:** Cognition & Introspection **Status in practice:** emerging ## Intent diff --git a/schema.json b/schema.json index 687438a..50cc111 100644 --- a/schema.json +++ b/schema.json @@ -36,6 +36,7 @@ "streaming-ux", "reasoning", "retrieval", + "cognition-introspection", "anti-patterns" ], "description": "Top-level taxonomy bucket. See taxonomy.md for definitions." diff --git a/verification-todo.json b/verification-todo.json index 71133ee..9eb0d98 100644 --- a/verification-todo.json +++ b/verification-todo.json @@ -30,9 +30,9 @@ }, "patterns": [ { - "id": "black-box-opaqueness", - "name": "Black-Box Opaqueness", - "category": "anti-patterns", + "id": "agent-as-judge", + "name": "Agent-as-a-Judge", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -47,14 +47,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -64,7 +64,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -79,15 +79,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "hallucinated-citations", - "name": "Hallucinated Citations", - "category": "anti-patterns", + "id": "agent-as-tool-embedding", + "name": "Agent-as-Tool Embedding", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -102,14 +102,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -119,12 +119,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -134,15 +134,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "hallucinated-tools", - "name": "Hallucinated Tools", - "category": "anti-patterns", + "id": "agent-computer-interface", + "name": "Agent-Computer Interface", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -157,14 +157,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -174,12 +174,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -189,15 +189,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "hero-agent", - "name": "Hero Agent", - "category": "anti-patterns", + "id": "agent-resumption", + "name": "Agent Resumption", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -212,14 +212,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -229,12 +229,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 6 of 6 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -244,15 +244,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (stateDiagram-v2) showing pattern's states.", "author": "Marco Nissen" } ] }, { - "id": "hidden-mode-switching", - "name": "Hidden Mode Switching", - "category": "anti-patterns", + "id": "agent-skills", + "name": "Agent Skills", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -274,7 +274,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -289,7 +289,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -299,15 +299,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "infinite-debate", - "name": "Infinite Debate", - "category": "anti-patterns", + "id": "agentic-rag", + "name": "Agentic RAG", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -320,16 +320,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -339,30 +339,25 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 5 of 5 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "memo-as-source-confusion", - "name": "Memo-As-Source Confusion", - "category": "anti-patterns", + "id": "app-exploration-phase", + "name": "App Exploration Phase", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -377,19 +372,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (26 words, one sentence), context, problem, solution, constrains-as-restriction, applicability, references (all 200), no-jargon, edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -399,30 +389,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "naive-rag-first", - "name": "Naive-RAG-First", - "category": "anti-patterns", + "id": "append-only-thought-stream", + "name": "Append-Only Thought Stream", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -444,7 +434,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -459,7 +449,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -469,15 +459,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "perma-beta", - "name": "Perma-Beta", - "category": "anti-patterns", + "id": "approval-queue", + "name": "Approval Queue", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -490,16 +480,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (11): constrains_is_restriction, context_clear, edges_correct, example_scenario_present, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (2): applicability_present, diagram_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -509,30 +499,25 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "prompt-bloat", - "name": "Prompt Bloat", - "category": "anti-patterns", + "id": "attention-manipulation-explainability", + "name": "Attention-Manipulation Explainability", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -547,14 +532,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -564,12 +549,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -579,18 +564,16 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "same-model-self-critique", - "name": "Same-Model Self-Critique", - "category": "anti-patterns", + "id": "augmented-llm", + "name": "Augmented LLM", + "category": "tool-use-environment", "verified": true, - "last_verified": "2026-05-02", - "verifier": "Marco Nissen", "aspects": { "intent_one_sentence": "pass", "context_clear": "pass", @@ -602,47 +585,34 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "date": "2026-05-17", + "text": "Pattern added based on upstream source. Sources: Anthropic 2024, 'Building Effective Agents'. Awaits source-verification walkthrough.", "author": "Marco Nissen" }, { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Anthropic 2024, Building Effective Agents). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", "author": "Marco Nissen" }, { - "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Anthropic 2024, Building Effective Agents). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", "author": "Marco Nissen" } - ] + ], + "last_verified": "2026-05-17", + "verifier": "Marco Nissen" }, { - "id": "schema-free-output", - "name": "Schema-Free Output", - "category": "anti-patterns", + "id": "autogen-conversational", + "name": "Conversational Multi-Agent", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -657,14 +627,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -674,12 +644,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -689,15 +659,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "tool-explosion", - "name": "Tool Explosion", - "category": "anti-patterns", + "id": "automatic-workflow-search", + "name": "Automatic Workflow Search", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -712,14 +682,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -729,12 +699,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -744,15 +714,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "tool-output-trusted-verbatim", - "name": "Tool Output Trusted Verbatim", - "category": "anti-patterns", + "id": "awareness", + "name": "Awareness", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -774,7 +744,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -789,7 +759,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -799,15 +769,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (classDiagram) showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "unbounded-loop", - "name": "Unbounded Loop", - "category": "anti-patterns", + "id": "best-of-n", + "name": "Best-of-N Sampling", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -820,7 +790,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -829,7 +799,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -844,7 +814,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -854,15 +824,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "unbounded-subagent-spawn", - "name": "Unbounded Subagent Spawn", - "category": "anti-patterns", + "id": "bidirectional-impulse-channel", + "name": "Bidirectional Impulse Channel", + "category": "streaming-ux", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -875,7 +845,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -884,7 +854,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -899,7 +869,12 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from private design notes + agent-initiated chat literature.", "author": "Marco Nissen" }, { @@ -909,15 +884,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "agent-as-judge", - "name": "Agent-as-a-Judge", - "category": "governance-observability", + "id": "black-box-opaqueness", + "name": "Black-Box Opaqueness", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -932,14 +907,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -949,7 +924,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -964,15 +939,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "agent-resumption", - "name": "Agent Resumption", - "category": "governance-observability", + "id": "blackboard", + "name": "Blackboard", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -987,14 +962,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -1004,7 +979,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 6 of 6 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -1019,15 +994,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (stateDiagram-v2) showing pattern's states.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "attention-manipulation-explainability", - "name": "Attention-Manipulation Explainability", - "category": "governance-observability", + "id": "browser-agent", + "name": "Browser Agent", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1049,7 +1024,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -1059,7 +1034,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -1080,9 +1055,9 @@ ] }, { - "id": "cost-observability", - "name": "Cost Observability", - "category": "governance-observability", + "id": "camel-role-playing", + "name": "CAMEL Role-Playing", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1097,14 +1072,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -1114,7 +1089,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -1129,15 +1104,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "decision-log", - "name": "Decision Log", - "category": "governance-observability", + "id": "chain-of-thought", + "name": "Chain of Thought", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1152,14 +1127,14 @@ "applicability_present": "pass", "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (10): constrains_is_restriction, context_clear, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (3): applicability_present, diagram_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -1169,7 +1144,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -1177,6 +1152,16 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 4 documented variants drawn from Wei 2022 / Kojima 2022 / Wang 2023 / Zhang 2022.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", @@ -1185,9 +1170,9 @@ ] }, { - "id": "eval-as-contract", - "name": "Eval as Contract", - "category": "governance-observability", + "id": "chain-of-verification", + "name": "Chain of Verification", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1200,7 +1185,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -1209,7 +1194,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -1227,6 +1212,11 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 4 documented variants drawn from Dhuliawala et al. 2023 (CoVe paper enumerates these).", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -1234,15 +1224,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "eval-harness", - "name": "Eval Harness", - "category": "governance-observability", + "id": "chat-chain", + "name": "Chat Chain", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1257,14 +1247,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -1274,7 +1264,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -1289,15 +1279,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "incident-response-runbook", - "name": "Incident Response Runbook", - "category": "governance-observability", + "id": "circuit-breaker", + "name": "Circuit Breaker", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1319,7 +1309,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -1329,12 +1319,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -1344,15 +1334,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (stateDiagram-v2) showing pattern's states.", "author": "Marco Nissen" } ] }, { - "id": "lineage-tracking", - "name": "Lineage Tracking", - "category": "governance-observability", + "id": "citation-streaming", + "name": "Citation Streaming", + "category": "streaming-ux", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1365,16 +1355,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, example_scenario, diagram.mermaid, applicability, variants, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -1384,30 +1374,15 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" } ] }, { - "id": "llm-as-judge", - "name": "LLM-as-Judge", - "category": "governance-observability", + "id": "co-located-memory-surfacing", + "name": "Co-Located Memory Surfacing", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1420,7 +1395,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -1429,22 +1404,22 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { @@ -1454,15 +1429,20 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "model-card", - "name": "Model Card", - "category": "governance-observability", + "id": "code-as-action", + "name": "Code-as-Action Agent", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1477,14 +1457,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -1494,12 +1474,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -1509,15 +1489,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "prompt-versioning", - "name": "Prompt Versioning", - "category": "governance-observability", + "id": "code-execution", + "name": "Code Execution", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1532,14 +1512,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -1549,12 +1529,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 references checked alive and content-matching", + "text": "URL content-verified: 3 of 3 known_uses URLs + 3 of 3 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -1564,15 +1544,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "provenance-ledger", - "name": "Provenance Ledger", - "category": "governance-observability", + "id": "code-switching-aware-agent", + "name": "Code-Switching-Aware Agent", + "category": "structure-data", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1585,16 +1565,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -1604,12 +1584,17 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Sarvam / AI4Bharat / Krutrim documentation.", "author": "Marco Nissen" }, { @@ -1619,15 +1604,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "replay-time-travel", - "name": "Replay / Time-Travel", - "category": "governance-observability", + "id": "communicative-dehallucination", + "name": "Communicative Dehallucination", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1642,14 +1627,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -1659,12 +1644,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -1674,15 +1659,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "sandbox-escape-monitoring", - "name": "Sandbox Escape Monitoring", - "category": "governance-observability", + "id": "compensating-action", + "name": "Compensating Action", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1719,7 +1704,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -1729,15 +1714,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "shadow-canary", - "name": "Shadow Canary", - "category": "governance-observability", + "id": "computer-use", + "name": "Computer Use", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1752,14 +1737,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -1769,12 +1754,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -1784,15 +1769,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "append-only-thought-stream", - "name": "Append-Only Thought Stream", - "category": "memory", + "id": "confidence-reporting", + "name": "Confidence Reporting", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1807,7 +1792,7 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, @@ -1824,7 +1809,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -1845,9 +1830,9 @@ ] }, { - "id": "awareness", - "name": "Awareness", - "category": "memory", + "id": "constitutional-charter", + "name": "Constitutional Charter", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1862,14 +1847,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -1879,7 +1864,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -1894,14 +1879,14 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (classDiagram) showing pattern's structure.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "co-located-memory-surfacing", - "name": "Co-Located Memory Surfacing", + "id": "context-window-packing", + "name": "Context Window Packing", "category": "memory", "verified": true, "last_verified": "2026-05-02", @@ -1915,21 +1900,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -1939,30 +1919,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "context-window-packing", - "name": "Context Window Packing", - "category": "memory", + "id": "contextual-retrieval", + "name": "Contextual Retrieval", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -1975,7 +1955,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -1984,7 +1964,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -2004,7 +1984,7 @@ }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored variants array with 3 documented variants drawn from Anthropic Contextual Retrieval blog 2024.", "author": "Marco Nissen" }, { @@ -2015,9 +1995,9 @@ ] }, { - "id": "cross-session-memory", - "name": "Cross-Session Memory", - "category": "memory", + "id": "conversation-handoff", + "name": "Conversation Handoff to Human", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2030,7 +2010,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -2039,7 +2019,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -2049,7 +2029,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -2064,15 +2044,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (classDiagram) showing pattern's structure.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "episodic-summaries", - "name": "Episodic Summaries", - "category": "memory", + "id": "cost-gating", + "name": "Cost Gating", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2094,7 +2074,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -2119,15 +2099,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "five-tier-memory-cascade", - "name": "Five-Tier Memory Cascade", - "category": "memory", + "id": "cost-observability", + "name": "Cost Observability", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2149,7 +2129,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -2174,15 +2154,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "hippocampal-rehearsal", - "name": "Hippocampal Rehearsal", - "category": "memory", + "id": "crag", + "name": "CRAG", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2195,7 +2175,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -2204,7 +2184,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -2219,7 +2199,12 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Yan et al. 2024 (CRAG paper grades).", "author": "Marco Nissen" }, { @@ -2229,15 +2214,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "knowledge-graph-memory", - "name": "Knowledge Graph Memory", - "category": "memory", + "id": "critic", + "name": "Tool-Augmented Self-Correction", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2259,7 +2244,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -2269,12 +2254,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -2284,15 +2269,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "memgpt-paging", - "name": "MemGPT-Style Paging", - "category": "memory", + "id": "cross-domain-agent-network", + "name": "Cross-Domain Enterprise Agent Network", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2314,7 +2299,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -2329,7 +2314,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -2339,15 +2324,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "now-anchoring", - "name": "Now-Anchoring", - "category": "memory", + "id": "cross-encoder-reranking", + "name": "Cross-Encoder Reranking", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2369,12 +2354,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, example_scenario, diagram.mermaid, applicability, variants, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -2384,29 +2364,14 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" } ] }, { - "id": "preoccupation-tracking", - "name": "Preoccupation Tracking", + "id": "cross-session-memory", + "name": "Cross-Session Memory", "category": "memory", "verified": true, "last_verified": "2026-05-02", @@ -2422,14 +2387,14 @@ "applicability_present": "pass", "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -2439,30 +2404,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid diagram (classDiagram) showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "reasoning-trace-carry-forward", - "name": "Reasoning Trace Carry-Forward", - "category": "memory", + "id": "debate", + "name": "Debate", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2477,14 +2442,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -2494,12 +2459,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -2509,15 +2474,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "salience-attention-mechanism", - "name": "Salience Attention Mechanism", - "category": "memory", + "id": "decision-log", + "name": "Decision Log", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2539,7 +2504,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass (10): constrains_is_restriction, context_clear, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (3): applicability_present, diagram_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -2549,30 +2514,25 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "scratchpad", - "name": "Scratchpad", - "category": "memory", + "id": "degenerate-output-detection", + "name": "Degenerate-Output Detection", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2585,7 +2545,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -2594,22 +2554,22 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { @@ -2619,15 +2579,20 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "self-archaeology", - "name": "Self-Archaeology", - "category": "memory", + "id": "deterministic-llm-sandwich", + "name": "Deterministic-LLM Sandwich", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2640,7 +2605,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -2649,12 +2614,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -2664,30 +2624,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "session-isolation", - "name": "Session Isolation", - "category": "memory", + "id": "disambiguation", + "name": "Disambiguation", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2702,14 +2662,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -2719,12 +2679,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -2734,15 +2694,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "short-term-memory", - "name": "Short-Term Thread Memory", - "category": "memory", + "id": "dream-consolidation-cycle", + "name": "Dream Consolidation Cycle", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2755,7 +2715,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -2764,7 +2724,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { @@ -2774,30 +2734,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid diagram (stateDiagram-v2) showing pattern's states.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "vector-memory", - "name": "Vector Memory", - "category": "memory", + "id": "dspy-signatures", + "name": "DSPy Signatures", + "category": "structure-data", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2810,7 +2770,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -2819,7 +2779,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -2834,7 +2794,12 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Khattab et al. 2023 + DSPy teleprompter docs.", "author": "Marco Nissen" }, { @@ -2844,15 +2809,43 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid diagram (classDiagram) showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "world-model-separation", - "name": "World-Model Separation", - "category": "memory", + "id": "dual-llm-pattern", + "name": "Dual LLM Pattern", + "category": "safety-control", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "todo", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [ + { + "date": "2026-05-15", + "text": "Pattern added based on upstream sources (Willison 2023/2025; Anthropic 2025; Beurer-Kellner et al. 2025; Thariq Shihipar 2025). Awaits source-verification walkthrough.", + "author": "Marco Nissen" + } + ] + }, + { + "id": "dual-system-gui-agent", + "name": "Dual-System GUI Agent", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2865,16 +2858,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -2884,29 +2877,29 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "agent-as-tool-embedding", - "name": "Agent-as-Tool Embedding", + "id": "dynamic-expert-recruitment", + "name": "Dynamic Expert Recruitment", "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", @@ -2939,7 +2932,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -2954,15 +2947,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "autogen-conversational", - "name": "Conversational Multi-Agent", - "category": "multi-agent", + "id": "dynamic-scaffolding", + "name": "Dynamic Scaffolding", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -2977,14 +2970,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -2994,7 +2987,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -3009,15 +3002,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "blackboard", - "name": "Blackboard", - "category": "multi-agent", + "id": "echo-recognition", + "name": "Echo Recognition", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3030,7 +3023,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -3039,22 +3032,22 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { @@ -3064,15 +3057,20 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "camel-role-playing", - "name": "CAMEL Role-Playing", - "category": "multi-agent", + "id": "embodied-proxy-handoff", + "name": "Embodied-Proxy Handoff", + "category": "streaming-ux", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3085,31 +3083,31 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { @@ -3119,15 +3117,20 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid class diagram showing pattern's structure.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "chat-chain", - "name": "Chat Chain", - "category": "multi-agent", + "id": "emotional-state-persistence", + "name": "Emotional State Persistence", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3140,16 +3143,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { @@ -3159,30 +3162,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid state diagram showing pattern's states.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "communicative-dehallucination", - "name": "Communicative Dehallucination", - "category": "multi-agent", + "id": "episodic-summaries", + "name": "Episodic Summaries", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3197,14 +3200,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3214,7 +3217,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -3229,15 +3232,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "cross-domain-agent-network", - "name": "Cross-Domain Enterprise Agent Network", - "category": "multi-agent", + "id": "eval-as-contract", + "name": "Eval as Contract", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3252,7 +3255,7 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, @@ -3269,7 +3272,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -3284,15 +3287,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "debate", - "name": "Debate", - "category": "multi-agent", + "id": "eval-harness", + "name": "Eval Harness", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3324,7 +3327,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -3339,15 +3342,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "dynamic-expert-recruitment", - "name": "Dynamic Expert Recruitment", - "category": "multi-agent", + "id": "evaluator-optimizer", + "name": "Evaluator-Optimizer", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3362,14 +3365,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3379,7 +3382,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -3394,15 +3397,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "handoff", - "name": "Handoff", - "category": "multi-agent", + "id": "event-driven-agent", + "name": "Event-Driven Agent", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3424,7 +3427,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3439,7 +3442,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -3455,9 +3458,9 @@ ] }, { - "id": "hierarchical-agents", - "name": "Hierarchical Agents", - "category": "multi-agent", + "id": "exception-recovery", + "name": "Exception Handling and Recovery", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3477,6 +3480,10 @@ "edges_correct": "pass" }, "notes": [ + { + "date": "2026-04-30", + "text": "References Gulli's 'Agentic Design Patterns' book; Amazon URL returns 404 to automated probes (anti-bot) but is alive in a real browser. Verify visually or replace with a publisher-hosted URL." + }, { "date": "2026-05-02", "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", @@ -3494,7 +3501,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -3510,9 +3517,9 @@ ] }, { - "id": "inner-committee", - "name": "Inner Committee", - "category": "multi-agent", + "id": "exploration-exploitation", + "name": "Exploration vs Exploitation", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3527,14 +3534,18 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ + { + "date": "2026-04-30", + "text": "References Gulli's 'Agentic Design Patterns' book; Amazon URL returns 404 to automated probes (anti-bot) but is alive in a real browser. Verify visually or replace with a publisher-hosted URL." + }, { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3544,12 +3555,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -3559,15 +3570,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "inter-agent-communication", - "name": "Inter-Agent Communication", - "category": "multi-agent", + "id": "extended-thinking", + "name": "Extended Thinking", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3580,7 +3591,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -3589,7 +3600,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -3599,12 +3610,17 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 4 documented variants drawn from Anthropic / OpenAI / Google docs.", "author": "Marco Nissen" }, { @@ -3620,9 +3636,9 @@ ] }, { - "id": "lead-researcher", - "name": "Lead Researcher", - "category": "multi-agent", + "id": "fallback-chain", + "name": "Fallback Chain", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3637,14 +3653,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3654,12 +3670,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -3675,9 +3691,9 @@ ] }, { - "id": "orchestrator-workers", - "name": "Orchestrator-Workers", - "category": "multi-agent", + "id": "five-tier-memory-cascade", + "name": "Five-Tier Memory Cascade", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3699,7 +3715,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3709,12 +3725,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -3724,15 +3740,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid class diagram showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "role-assignment", - "name": "Role Assignment", - "category": "multi-agent", + "id": "frozen-rubric-reflection", + "name": "Frozen Rubric Reflection", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3745,16 +3761,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3764,30 +3780,15 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" } ] }, { - "id": "sop-encoded-multi-agent", - "name": "SOP-Encoded Multi-Agent Workflow", - "category": "multi-agent", + "id": "goal-decomposition", + "name": "Goal Decomposition", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3802,14 +3803,18 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ + { + "date": "2026-04-30", + "text": "References Gulli's 'Agentic Design Patterns' book; Amazon URL returns 404 to automated probes (anti-bot) but is alive in a real browser. Verify visually or replace with a publisher-hosted URL." + }, { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -3819,12 +3824,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -3840,9 +3845,9 @@ ] }, { - "id": "subagent-isolation", - "name": "Subagent Isolation", - "category": "multi-agent", + "id": "graceful-degradation", + "name": "Graceful Degradation", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3855,7 +3860,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -3864,7 +3869,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (12): applicability_present, constrains_is_restriction, context_clear, diagram_present, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (1): known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -3874,15 +3879,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "supervisor", - "name": "Supervisor", - "category": "multi-agent", + "id": "graph-of-thoughts", + "name": "Graph of Thoughts", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3895,7 +3915,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -3904,7 +3924,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -3922,6 +3942,16 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Besta et al. 2023 (GoT paper operator taxonomy).", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored mermaid flow diagram showing pattern's flow.", @@ -3930,9 +3960,9 @@ ] }, { - "id": "swarm", - "name": "Swarm", - "category": "multi-agent", + "id": "graphrag", + "name": "GraphRAG", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -3945,7 +3975,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -3954,7 +3984,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -3972,6 +4002,11 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Edge et al. 2024 + Microsoft GraphRAG docs.", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -3985,9 +4020,9 @@ ] }, { - "id": "disambiguation", - "name": "Disambiguation", - "category": "planning-control-flow", + "id": "hallucinated-citations", + "name": "Hallucinated Citations", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4002,14 +4037,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -4019,12 +4054,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -4034,15 +4069,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "event-driven-agent", - "name": "Event-Driven Agent", - "category": "planning-control-flow", + "id": "hallucinated-tools", + "name": "Hallucinated Tools", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4057,14 +4092,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -4074,12 +4109,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -4089,15 +4124,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "exploration-exploitation", - "name": "Exploration vs Exploitation", - "category": "planning-control-flow", + "id": "handoff", + "name": "Handoff", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4117,13 +4152,9 @@ "edges_correct": "pass" }, "notes": [ - { - "date": "2026-04-30", - "text": "References Gulli's 'Agentic Design Patterns' book; Amazon URL returns 404 to automated probes (anti-bot) but is alive in a real browser. Verify visually or replace with a publisher-hosted URL." - }, { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -4138,7 +4169,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -4148,15 +4179,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "goal-decomposition", - "name": "Goal Decomposition", - "category": "planning-control-flow", + "id": "hero-agent", + "name": "Hero Agent", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4176,13 +4207,9 @@ "edges_correct": "pass" }, "notes": [ - { - "date": "2026-04-30", - "text": "References Gulli's 'Agentic Design Patterns' book; Amazon URL returns 404 to automated probes (anti-bot) but is alive in a real browser. Verify visually or replace with a publisher-hosted URL." - }, { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -4197,7 +4224,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -4213,9 +4240,9 @@ ] }, { - "id": "interrupt-resumable-thought", - "name": "Interrupt-Resumable Thought", - "category": "planning-control-flow", + "id": "hidden-mode-switching", + "name": "Hidden Mode Switching", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4228,7 +4255,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -4237,12 +4264,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -4252,30 +4274,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "intra-agent-memo-scheduling", - "name": "Intra-Agent Memo Scheduling", - "category": "planning-control-flow", + "id": "hierarchical-agents", + "name": "Hierarchical Agents", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4288,7 +4310,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -4297,12 +4319,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -4312,30 +4329,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "lats", - "name": "Language Agent Tree Search", - "category": "planning-control-flow", + "id": "hippocampal-rehearsal", + "name": "Hippocampal Rehearsal", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4348,7 +4365,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -4357,7 +4374,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -4388,9 +4405,9 @@ ] }, { - "id": "llm-compiler", - "name": "LLMCompiler", - "category": "planning-control-flow", + "id": "human-in-the-loop", + "name": "Human-in-the-Loop", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4412,7 +4429,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -4443,9 +4460,9 @@ ] }, { - "id": "map-reduce", - "name": "MapReduce for Agents", - "category": "planning-control-flow", + "id": "hybrid-search", + "name": "Hybrid Search", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4458,7 +4475,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -4467,7 +4484,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, example_scenario, diagram.mermaid, applicability, variants, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -4479,28 +4496,13 @@ "date": "2026-05-02", "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", - "author": "Marco Nissen" } ] }, { - "id": "mode-adaptive-cadence", - "name": "Mode-Adaptive Cadence", - "category": "planning-control-flow", + "id": "hyde", + "name": "HyDE", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4522,7 +4524,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -4532,30 +4534,35 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "Authored variants array with 3 documented variants drawn from Gao et al. 2022 + LangChain HyDE recipes.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "outer-inner-agent-loop", - "name": "Outer-Inner Agent Loop", - "category": "planning-control-flow", + "id": "incident-response-runbook", + "name": "Incident Response Runbook", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4570,14 +4577,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -4587,7 +4594,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -4608,9 +4615,9 @@ ] }, { - "id": "plan-and-execute", - "name": "Plan-and-Execute", - "category": "planning-control-flow", + "id": "infinite-debate", + "name": "Infinite Debate", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4623,7 +4630,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -4632,7 +4639,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -4642,15 +4649,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "planner-executor-observer", - "name": "Planner-Executor-Observer", - "category": "planning-control-flow", + "id": "inner-committee", + "name": "Inner Committee", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4672,7 +4694,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -4697,15 +4719,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "react", - "name": "ReAct", - "category": "planning-control-flow", + "id": "inner-critic", + "name": "Self-Modification Diff Gate", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4718,16 +4740,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -4737,15 +4759,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 4 of 4 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "replan-on-failure", - "name": "Replan on Failure", - "category": "planning-control-flow", + "id": "input-output-guardrails", + "name": "Input/Output Guardrails", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4760,14 +4797,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -4777,7 +4814,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -4798,9 +4835,9 @@ ] }, { - "id": "rewoo", - "name": "ReWOO", - "category": "planning-control-flow", + "id": "inter-agent-communication", + "name": "Inter-Agent Communication", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4822,7 +4859,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -4847,14 +4884,14 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "scheduled-agent", - "name": "Scheduled Agent", + "id": "interrupt-resumable-thought", + "name": "Interrupt-Resumable Thought", "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", @@ -4868,7 +4905,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -4877,22 +4914,22 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { @@ -4902,14 +4939,19 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid state diagram showing pattern's states.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "spec-driven-loop", - "name": "Spec-Driven Loop", + "id": "intra-agent-memo-scheduling", + "name": "Intra-Agent Memo Scheduling", "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", @@ -4923,31 +4965,31 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { @@ -4957,15 +4999,20 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "spec-first-agent", - "name": "Spec-First Agent", - "category": "planning-control-flow", + "id": "kill-switch", + "name": "Kill Switch", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -4987,7 +5034,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -5018,9 +5065,9 @@ ] }, { - "id": "todo-list-driven-agent", - "name": "Todo-List-Driven Autonomous Agent", - "category": "planning-control-flow", + "id": "knowledge-graph-memory", + "name": "Knowledge Graph Memory", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5035,14 +5082,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -5052,7 +5099,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -5067,15 +5114,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid class diagram showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "chain-of-thought", - "name": "Chain of Thought", - "category": "reasoning", + "id": "lats", + "name": "Language Agent Tree Search", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5090,14 +5137,14 @@ "applicability_present": "pass", "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -5107,17 +5154,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 4 documented variants drawn from Wei 2022 / Kojima 2022 / Wang 2023 / Zhang 2022.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -5127,15 +5169,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "chain-of-verification", - "name": "Chain of Verification", - "category": "reasoning", + "id": "lead-researcher", + "name": "Lead Researcher", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5148,16 +5190,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -5167,17 +5209,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 4 documented variants drawn from Dhuliawala et al. 2023 (CoVe paper enumerates these).", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -5187,14 +5224,14 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "extended-thinking", - "name": "Extended Thinking", + "id": "least-to-most", + "name": "Least-to-Most Prompting", "category": "reasoning", "verified": true, "last_verified": "2026-05-02", @@ -5227,17 +5264,17 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 4 documented variants drawn from Anthropic / OpenAI / Google docs.", + "text": "Authored variants array with 3 documented variants drawn from Zhou et al. 2022 + decomposition follow-ups.", "author": "Marco Nissen" }, { @@ -5247,15 +5284,43 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "graph-of-thoughts", - "name": "Graph of Thoughts", - "category": "reasoning", + "id": "lethal-trifecta-threat-model", + "name": "Lethal Trifecta Threat Model", + "category": "safety-control", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "todo", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [ + { + "date": "2026-05-15", + "text": "Pattern added based on upstream sources (Willison 2023/2025; Anthropic 2025; Beurer-Kellner et al. 2025; Thariq Shihipar 2025). Awaits source-verification walkthrough.", + "author": "Marco Nissen" + } + ] + }, + { + "id": "liminal-state-detection", + "name": "Liminal-State Detection", + "category": "streaming-ux", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5277,45 +5342,45 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Besta et al. 2023 (GoT paper operator taxonomy).", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid state diagram showing pattern's states.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "least-to-most", - "name": "Least-to-Most Prompting", - "category": "reasoning", + "id": "lineage-tracking", + "name": "Lineage Tracking", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5328,7 +5393,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -5337,7 +5402,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -5355,11 +5420,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Zhou et al. 2022 + decomposition follow-ups.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -5367,15 +5427,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid class diagram showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "rest-em", - "name": "ReST-EM", - "category": "reasoning", + "id": "llm-as-judge", + "name": "LLM-as-Judge", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5388,7 +5448,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -5397,7 +5457,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -5407,7 +5467,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -5415,11 +5475,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Gulcehre 2023 (ReST) / Singh 2023 (ReST-EM) / Zelikman 2022 (STaR).", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -5427,15 +5482,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "self-ask", - "name": "Self-Ask", - "category": "reasoning", + "id": "llm-compiler", + "name": "LLMCompiler", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5448,7 +5503,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -5457,7 +5512,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -5475,11 +5530,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Press et al. 2022.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -5493,9 +5543,9 @@ ] }, { - "id": "star-bootstrapping", - "name": "STaR Bootstrapping", - "category": "reasoning", + "id": "map-reduce", + "name": "MapReduce for Agents", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5508,7 +5558,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -5517,7 +5567,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -5535,11 +5585,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Zelikman et al. 2022 + follow-ups.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -5553,9 +5598,9 @@ ] }, { - "id": "test-time-compute-scaling", - "name": "Test-Time Compute Scaling", - "category": "reasoning", + "id": "mcp", + "name": "Model Context Protocol", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5570,14 +5615,14 @@ "applicability_present": "pass", "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -5587,35 +5632,15 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored variants array with 4 documented variants drawn from Snell et al. 2024 / Brown et al. 2024.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "URL content-verified: 5 of 5 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" } ] }, { - "id": "tree-of-thoughts", - "name": "Tree of Thoughts", - "category": "reasoning", + "id": "memgpt-paging", + "name": "MemGPT-Style Paging", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5628,16 +5653,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -5647,7 +5672,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -5655,11 +5680,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Yao et al. 2023 (ToT paper search variants).", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -5667,15 +5687,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid class diagram showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "zero-shot-cot", - "name": "Zero-Shot Chain-of-Thought", - "category": "reasoning", + "id": "memo-as-source-confusion", + "name": "Memo-As-Source Confusion", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5688,7 +5708,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -5697,45 +5717,45 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (26 words, one sentence), context, problem, solution, constrains-as-restriction, applicability, references (all 200), no-jargon, edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Kojima 2022 / APE / Yang 2024.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "agentic-rag", - "name": "Agentic RAG", - "category": "retrieval", + "id": "mixture-of-experts-routing", + "name": "Mixture of Experts Routing", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5748,16 +5768,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -5767,25 +5787,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 5 of 5 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "contextual-retrieval", - "name": "Contextual Retrieval", - "category": "retrieval", + "id": "mobile-ui-agent", + "name": "Mobile UI Agent", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5798,7 +5823,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -5807,7 +5832,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -5817,30 +5842,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 3 of 3 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Anthropic Contextual Retrieval blog 2024.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "crag", - "name": "CRAG", - "category": "retrieval", + "id": "mode-adaptive-cadence", + "name": "Mode-Adaptive Cadence", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5862,7 +5887,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { @@ -5872,35 +5897,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Yan et al. 2024 (CRAG paper grades).", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid state diagram showing pattern's states.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "cross-encoder-reranking", - "name": "Cross-Encoder Reranking", - "category": "retrieval", + "id": "model-card", + "name": "Model Card", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -5913,7 +5933,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -5922,7 +5942,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, example_scenario, diagram.mermaid, applicability, variants, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -5934,57 +5954,12 @@ "date": "2026-05-02", "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" - } - ] - }, - { - "id": "graphrag", - "name": "GraphRAG", - "category": "retrieval", - "verified": true, - "last_verified": "2026-05-02", - "verifier": "Marco Nissen", - "aspects": { - "intent_one_sentence": "pass", - "context_clear": "pass", - "problem_clear": "pass", - "solution_clear": "pass", - "constrains_is_restriction": "pass", - "example_scenario_present": "pass", - "diagram_present": "pass", - "applicability_present": "pass", - "variants_present": "pass", - "references_live": "pass", - "known_uses_live": "pass", - "no_jargon_undefined": "pass", - "edges_correct": "pass" - }, - "notes": [ - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" }, { "date": "2026-05-02", "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Edge et al. 2024 + Microsoft GraphRAG docs.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -5998,9 +5973,9 @@ ] }, { - "id": "hybrid-search", - "name": "Hybrid Search", - "category": "retrieval", + "id": "multi-model-routing", + "name": "Multi-Model Routing", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6013,7 +5988,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -6022,7 +5997,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, example_scenario, diagram.mermaid, applicability, variants, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6034,13 +6009,28 @@ "date": "2026-05-02", "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", + "author": "Marco Nissen" } ] }, { - "id": "hyde", - "name": "HyDE", - "category": "retrieval", + "id": "multilingual-voice-agent", + "name": "Multilingual Voice Agent Stack", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6053,16 +6043,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6072,7 +6062,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -6080,11 +6070,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Gao et al. 2022 + LangChain HyDE recipes.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -6092,7 +6077,7 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] @@ -6158,9 +6143,9 @@ ] }, { - "id": "raft", - "name": "RAFT", - "category": "retrieval", + "id": "naive-rag-first", + "name": "Naive-RAG-First", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6173,7 +6158,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -6182,7 +6167,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6200,11 +6185,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Zhang et al. 2024 (RAFT paper).", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -6218,9 +6198,9 @@ ] }, { - "id": "self-rag", - "name": "Self-RAG", - "category": "retrieval", + "id": "now-anchoring", + "name": "Now-Anchoring", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6242,44 +6222,44 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Asai et al. 2023 (Self-RAG paper).", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "automatic-workflow-search", - "name": "Automatic Workflow Search", + "id": "open-weight-cascade", + "name": "Open-Weight Cascade", "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", @@ -6302,7 +6282,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6317,7 +6297,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -6327,15 +6307,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "circuit-breaker", - "name": "Circuit Breaker", - "category": "routing-composition", + "id": "orchestrator-workers", + "name": "Orchestrator-Workers", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6357,7 +6337,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -6372,7 +6352,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -6382,15 +6362,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (stateDiagram-v2) showing pattern's states.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "dynamic-scaffolding", - "name": "Dynamic Scaffolding", - "category": "routing-composition", + "id": "outer-inner-agent-loop", + "name": "Outer-Inner Agent Loop", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6405,14 +6385,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -6422,12 +6402,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -6443,8 +6423,8 @@ ] }, { - "id": "fallback-chain", - "name": "Fallback Chain", + "id": "parallel-tool-calls", + "name": "Parallel Tool Calls", "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", @@ -6467,7 +6447,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6477,12 +6457,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -6492,14 +6472,14 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "graceful-degradation", - "name": "Graceful Degradation", + "id": "parallelization", + "name": "Parallelization", "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", @@ -6515,14 +6495,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6532,12 +6512,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -6553,9 +6533,49 @@ ] }, { - "id": "mixture-of-experts-routing", - "name": "Mixture of Experts Routing", - "category": "routing-composition", + "id": "passive-goal-creator", + "name": "Passive Goal Creator", + "category": "planning-control-flow", + "verified": true, + "aspects": { + "intent_one_sentence": "pass", + "context_clear": "pass", + "problem_clear": "pass", + "solution_clear": "pass", + "constrains_is_restriction": "pass", + "example_scenario_present": "pass", + "diagram_present": "pass", + "applicability_present": "pass", + "variants_present": "na", + "references_live": "pass", + "known_uses_live": "pass", + "no_jargon_undefined": "pass", + "edges_correct": "pass" + }, + "notes": [ + { + "date": "2026-05-17", + "text": "Pattern added based on upstream source. Sources: Liu et al. (2025), 'Agent design pattern catalogue', J. Syst. Softw. 220, 112278. Awaits source-verification walkthrough.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", + "author": "Marco Nissen" + } + ], + "last_verified": "2026-05-17", + "verifier": "Marco Nissen" + }, + { + "id": "perma-beta", + "name": "Perma-Beta", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6577,7 +6597,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6608,9 +6628,9 @@ ] }, { - "id": "multi-model-routing", - "name": "Multi-Model Routing", - "category": "routing-composition", + "id": "pii-redaction", + "name": "PII Redaction", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6632,7 +6652,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -6663,8 +6683,8 @@ ] }, { - "id": "open-weight-cascade", - "name": "Open-Weight Cascade", + "id": "pipes-and-filters", + "name": "Pipes and Filters", "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", @@ -6680,14 +6700,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6697,7 +6717,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -6718,9 +6738,9 @@ ] }, { - "id": "parallel-tool-calls", - "name": "Parallel Tool Calls", - "category": "routing-composition", + "id": "plan-and-execute", + "name": "Plan-and-Execute", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6733,7 +6753,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -6742,7 +6762,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6754,28 +6774,13 @@ "date": "2026-05-02", "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", - "author": "Marco Nissen" } ] }, { - "id": "parallelization", - "name": "Parallelization", - "category": "routing-composition", + "id": "planner-executor-observer", + "name": "Planner-Executor-Observer", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6797,7 +6802,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6828,9 +6833,9 @@ ] }, { - "id": "pipes-and-filters", - "name": "Pipes and Filters", - "category": "routing-composition", + "id": "polymorphic-record", + "name": "Polymorphic Record", + "category": "structure-data", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6843,7 +6848,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -6852,7 +6857,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -6870,6 +6875,11 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from FHIR / OpenAPI / JSON Schema discriminator conventions.", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -6877,15 +6887,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid class diagram showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "prompt-chaining", - "name": "Prompt Chaining", - "category": "routing-composition", + "id": "preoccupation-tracking", + "name": "Preoccupation Tracking", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6898,7 +6908,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -6907,7 +6917,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { @@ -6917,30 +6927,70 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "provider-fallback", - "name": "Provider Fallback", - "category": "routing-composition", + "id": "proactive-goal-creator", + "name": "Proactive Goal Creator", + "category": "planning-control-flow", + "verified": true, + "aspects": { + "intent_one_sentence": "pass", + "context_clear": "pass", + "problem_clear": "pass", + "solution_clear": "pass", + "constrains_is_restriction": "pass", + "example_scenario_present": "pass", + "diagram_present": "pass", + "applicability_present": "pass", + "variants_present": "na", + "references_live": "pass", + "known_uses_live": "pass", + "no_jargon_undefined": "pass", + "edges_correct": "pass" + }, + "notes": [ + { + "date": "2026-05-17", + "text": "Pattern added based on upstream source. Sources: Liu et al. (2025), 'Agent design pattern catalogue', J. Syst. Softw. 220, 112278. Awaits source-verification walkthrough.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", + "author": "Marco Nissen" + } + ], + "last_verified": "2026-05-17", + "verifier": "Marco Nissen" + }, + { + "id": "process-reward-model", + "name": "Process Reward Model", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -6962,7 +7012,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -6972,7 +7022,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -6987,15 +7037,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "routing", - "name": "Routing", - "category": "routing-composition", + "id": "prompt-bloat", + "name": "Prompt Bloat", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7017,7 +7067,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7027,7 +7077,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -7048,9 +7098,9 @@ ] }, { - "id": "approval-queue", - "name": "Approval Queue", - "category": "safety-control", + "id": "prompt-caching", + "name": "Prompt Caching", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7063,7 +7113,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -7072,7 +7122,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (11): constrains_is_restriction, context_clear, edges_correct, example_scenario_present, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (2): applicability_present, diagram_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7087,20 +7137,25 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "compensating-action", - "name": "Compensating Action", - "category": "safety-control", + "id": "prompt-chaining", + "name": "Prompt Chaining", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7122,7 +7177,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7137,7 +7192,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -7147,14 +7202,14 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "constitutional-charter", - "name": "Constitutional Charter", + "id": "prompt-injection-defense", + "name": "Prompt Injection Defense", "category": "safety-control", "verified": true, "last_verified": "2026-05-02", @@ -7170,7 +7225,7 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, @@ -7187,12 +7242,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -7202,15 +7257,55 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "conversation-handoff", - "name": "Conversation Handoff to Human", - "category": "safety-control", + "id": "prompt-response-optimiser", + "name": "Prompt/Response Optimiser", + "category": "structure-data", + "verified": true, + "aspects": { + "intent_one_sentence": "pass", + "context_clear": "pass", + "problem_clear": "pass", + "solution_clear": "pass", + "constrains_is_restriction": "pass", + "example_scenario_present": "pass", + "diagram_present": "pass", + "applicability_present": "pass", + "variants_present": "na", + "references_live": "pass", + "known_uses_live": "pass", + "no_jargon_undefined": "pass", + "edges_correct": "pass" + }, + "notes": [ + { + "date": "2026-05-17", + "text": "Pattern added based on upstream source. Sources: Liu et al. (2025), 'Agent design pattern catalogue', J. Syst. Softw. 220, 112278. Awaits source-verification walkthrough.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", + "author": "Marco Nissen" + } + ], + "last_verified": "2026-05-17", + "verifier": "Marco Nissen" + }, + { + "id": "prompt-versioning", + "name": "Prompt Versioning", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7225,7 +7320,7 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, @@ -7242,12 +7337,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 3 of 3 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -7257,15 +7352,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "cost-gating", - "name": "Cost Gating", - "category": "safety-control", + "id": "provenance-ledger", + "name": "Provenance Ledger", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7302,7 +7397,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -7312,15 +7407,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "degenerate-output-detection", - "name": "Degenerate-Output Detection", - "category": "safety-control", + "id": "provider-fallback", + "name": "Provider Fallback", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7333,7 +7428,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -7342,12 +7437,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7357,58 +7447,85 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "dual-llm-pattern", - "name": "Dual LLM Pattern", + "id": "quorum-on-mutation", + "name": "Quorum on Mutation", "category": "safety-control", - "verified": false, + "verified": true, + "last_verified": "2026-05-02", + "verifier": "Marco Nissen", "aspects": { - "intent_one_sentence": "todo", - "context_clear": "todo", - "problem_clear": "todo", - "solution_clear": "todo", - "constrains_is_restriction": "todo", - "example_scenario_present": "todo", - "diagram_present": "todo", - "applicability_present": "todo", - "variants_present": "todo", - "references_live": "todo", - "known_uses_live": "todo", - "no_jargon_undefined": "todo", - "edges_correct": "todo" + "intent_one_sentence": "pass", + "context_clear": "pass", + "problem_clear": "pass", + "solution_clear": "pass", + "constrains_is_restriction": "pass", + "example_scenario_present": "pass", + "diagram_present": "pass", + "applicability_present": "pass", + "variants_present": "na", + "references_live": "pass", + "known_uses_live": "na", + "no_jargon_undefined": "pass", + "edges_correct": "pass" }, "notes": [ { - "date": "2026-05-15", - "text": "Pattern added based on upstream sources (Willison 2023/2025; Anthropic 2025; Beurer-Kellner et al. 2025; Thariq Shihipar 2025). Awaits source-verification walkthrough.", + "date": "2026-05-02", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid state diagram showing pattern's states.", "author": "Marco Nissen" } ] }, { - "id": "exception-recovery", - "name": "Exception Handling and Recovery", - "category": "safety-control", + "id": "raft", + "name": "RAFT", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7421,20 +7538,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ - { - "date": "2026-04-30", - "text": "References Gulli's 'Agentic Design Patterns' book; Amazon URL returns 404 to automated probes (anti-bot) but is alive in a real browser. Verify visually or replace with a publisher-hosted URL." - }, { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -7449,7 +7562,12 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Zhang et al. 2024 (RAFT paper).", "author": "Marco Nissen" }, { @@ -7465,8 +7583,8 @@ ] }, { - "id": "human-in-the-loop", - "name": "Human-in-the-Loop", + "id": "rate-limiting", + "name": "Rate Limiting", "category": "safety-control", "verified": true, "last_verified": "2026-05-02", @@ -7520,9 +7638,49 @@ ] }, { - "id": "input-output-guardrails", - "name": "Input/Output Guardrails", - "category": "safety-control", + "id": "react", + "name": "ReAct", + "category": "planning-control-flow", + "verified": true, + "last_verified": "2026-05-02", + "verifier": "Marco Nissen", + "aspects": { + "intent_one_sentence": "pass", + "context_clear": "pass", + "problem_clear": "pass", + "solution_clear": "pass", + "constrains_is_restriction": "pass", + "example_scenario_present": "pass", + "diagram_present": "pass", + "applicability_present": "pass", + "variants_present": "pass", + "references_live": "pass", + "known_uses_live": "pass", + "no_jargon_undefined": "pass", + "edges_correct": "pass" + }, + "notes": [ + { + "date": "2026-05-02", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL content-verified: 4 of 4 known_uses URLs + 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + } + ] + }, + { + "id": "reasoning-trace-carry-forward", + "name": "Reasoning Trace Carry-Forward", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7544,7 +7702,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -7554,7 +7712,62 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid state diagram showing pattern's states.", + "author": "Marco Nissen" + } + ] + }, + { + "id": "reflection", + "name": "Reflection", + "category": "verification-reflection", + "verified": true, + "last_verified": "2026-05-02", + "verifier": "Marco Nissen", + "aspects": { + "intent_one_sentence": "pass", + "context_clear": "pass", + "problem_clear": "pass", + "solution_clear": "pass", + "constrains_is_restriction": "pass", + "example_scenario_present": "pass", + "diagram_present": "pass", + "applicability_present": "pass", + "variants_present": "pass", + "references_live": "pass", + "known_uses_live": "na", + "no_jargon_undefined": "pass", + "edges_correct": "pass" + }, + "notes": [ + { + "date": "2026-05-02", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -7575,9 +7788,9 @@ ] }, { - "id": "kill-switch", - "name": "Kill Switch", - "category": "safety-control", + "id": "reflexion", + "name": "Reflexion", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7599,7 +7812,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7630,37 +7843,64 @@ ] }, { - "id": "lethal-trifecta-threat-model", - "name": "Lethal Trifecta Threat Model", + "id": "refusal", + "name": "Refusal", "category": "safety-control", - "verified": false, + "verified": true, + "last_verified": "2026-05-02", + "verifier": "Marco Nissen", "aspects": { - "intent_one_sentence": "todo", - "context_clear": "todo", - "problem_clear": "todo", - "solution_clear": "todo", - "constrains_is_restriction": "todo", - "example_scenario_present": "todo", - "diagram_present": "todo", - "applicability_present": "todo", - "variants_present": "todo", - "references_live": "todo", - "known_uses_live": "todo", - "no_jargon_undefined": "todo", - "edges_correct": "todo" + "intent_one_sentence": "pass", + "context_clear": "pass", + "problem_clear": "pass", + "solution_clear": "pass", + "constrains_is_restriction": "pass", + "example_scenario_present": "pass", + "diagram_present": "pass", + "applicability_present": "pass", + "variants_present": "na", + "references_live": "pass", + "known_uses_live": "na", + "no_jargon_undefined": "pass", + "edges_correct": "pass" }, "notes": [ { - "date": "2026-05-15", - "text": "Pattern added based on upstream sources (Willison 2023/2025; Anthropic 2025; Beurer-Kellner et al. 2025; Thariq Shihipar 2025). Awaits source-verification walkthrough.", + "date": "2026-05-02", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "pii-redaction", - "name": "PII Redaction", - "category": "safety-control", + "id": "replan-on-failure", + "name": "Replan on Failure", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7682,7 +7922,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7713,9 +7953,9 @@ ] }, { - "id": "prompt-injection-defense", - "name": "Prompt Injection Defense", - "category": "safety-control", + "id": "replay-time-travel", + "name": "Replay / Time-Travel", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7768,9 +8008,9 @@ ] }, { - "id": "quorum-on-mutation", - "name": "Quorum on Mutation", - "category": "safety-control", + "id": "rest-em", + "name": "ReST-EM", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7783,7 +8023,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -7792,7 +8032,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -7802,7 +8042,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -7810,6 +8050,11 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Gulcehre 2023 (ReST) / Singh 2023 (ReST-EM) / Zelikman 2022 (STaR).", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -7817,15 +8062,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "rate-limiting", - "name": "Rate Limiting", - "category": "safety-control", + "id": "rewoo", + "name": "ReWOO", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7847,7 +8092,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7878,9 +8123,9 @@ ] }, { - "id": "refusal", - "name": "Refusal", - "category": "safety-control", + "id": "role-assignment", + "name": "Role Assignment", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7895,7 +8140,7 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, @@ -7912,7 +8157,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -7927,15 +8172,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid class diagram showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "secrets-handling", - "name": "Secrets Handling", - "category": "safety-control", + "id": "routing", + "name": "Routing", + "category": "routing-composition", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -7957,7 +8202,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -7982,15 +8227,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "sovereign-inference-stack", - "name": "Sovereign Inference Stack", - "category": "safety-control", + "id": "salience-attention-mechanism", + "name": "Salience Attention Mechanism", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8003,16 +8248,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { @@ -8022,30 +8267,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "step-budget", - "name": "Step Budget", - "category": "safety-control", + "id": "salience-triggered-output", + "name": "Salience-Triggered Output", + "category": "streaming-ux", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8060,14 +8305,14 @@ "applicability_present": "pass", "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (12): applicability_present, constrains_is_restriction, context_clear, diagram_present, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (1): known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -8077,15 +8322,35 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from private design notes + free-energy / surprise literature.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "stop-hook", - "name": "Stop Hook", - "category": "safety-control", + "id": "same-model-self-critique", + "name": "Same-Model Self-Critique", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8107,7 +8372,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8138,9 +8403,9 @@ ] }, { - "id": "tool-output-poisoning", - "name": "Tool Output Poisoning Defense", - "category": "safety-control", + "id": "sandbox-escape-monitoring", + "name": "Sandbox Escape Monitoring", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8193,9 +8458,9 @@ ] }, { - "id": "bidirectional-impulse-channel", - "name": "Bidirectional Impulse Channel", - "category": "streaming-ux", + "id": "sandbox-isolation", + "name": "Sandbox Isolation", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8208,7 +8473,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -8217,7 +8482,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8232,12 +8497,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from private design notes + agent-initiated chat literature.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -8247,15 +8507,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "citation-streaming", - "name": "Citation Streaming", - "category": "streaming-ux", + "id": "scheduled-agent", + "name": "Scheduled Agent", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8268,16 +8528,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, example_scenario, diagram.mermaid, applicability, variants, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8287,15 +8547,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "embodied-proxy-handoff", - "name": "Embodied-Proxy Handoff", - "category": "streaming-ux", + "id": "schema-extensibility", + "name": "Schema Extensibility", + "category": "structure-data", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8317,45 +8592,45 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored variants array with 3 documented variants drawn from Protocol Buffers / JSON Schema / OpenAPI extension conventions.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid class diagram showing pattern's structure.", "author": "Marco Nissen" } ] }, { - "id": "liminal-state-detection", - "name": "Liminal-State Detection", - "category": "streaming-ux", + "id": "schema-free-output", + "name": "Schema-Free Output", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8368,7 +8643,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -8377,12 +8652,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8392,30 +8662,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "salience-triggered-output", - "name": "Salience-Triggered Output", - "category": "streaming-ux", + "id": "scratchpad", + "name": "Scratchpad", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8428,7 +8698,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -8437,7 +8707,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8455,11 +8725,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from private design notes + free-energy / surprise literature.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -8473,9 +8738,9 @@ ] }, { - "id": "stop-cancel", - "name": "Stop / Cancel", - "category": "streaming-ux", + "id": "secrets-handling", + "name": "Secrets Handling", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8488,7 +8753,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -8497,7 +8762,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -8515,11 +8780,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from ChatGPT / Claude Code / standard cancellation idioms.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -8533,9 +8793,9 @@ ] }, { - "id": "streaming-typed-events", - "name": "Streaming Typed Events", - "category": "streaming-ux", + "id": "self-archaeology", + "name": "Self-Archaeology", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8557,45 +8817,45 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from OpenAI / Anthropic streaming docs + Bobbin.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "code-switching-aware-agent", - "name": "Code-Switching-Aware Agent", - "category": "structure-data", + "id": "self-ask", + "name": "Self-Ask", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8610,7 +8870,7 @@ "applicability_present": "pass", "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, @@ -8627,17 +8887,17 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Sarvam / AI4Bharat / Krutrim documentation.", + "text": "Authored variants array with 3 documented variants drawn from Press et al. 2022.", "author": "Marco Nissen" }, { @@ -8647,15 +8907,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "dspy-signatures", - "name": "DSPy Signatures", - "category": "structure-data", + "id": "self-consistency", + "name": "Self-Consistency", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8668,16 +8928,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8687,17 +8947,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Khattab et al. 2023 + DSPy teleprompter docs.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -8707,15 +8962,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (classDiagram) showing pattern's structure.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "polymorphic-record", - "name": "Polymorphic Record", - "category": "structure-data", + "id": "self-rag", + "name": "Self-RAG", + "category": "retrieval", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8757,7 +9012,7 @@ }, { "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from FHIR / OpenAPI / JSON Schema discriminator conventions.", + "text": "Authored variants array with 3 documented variants drawn from Asai et al. 2023 (Self-RAG paper).", "author": "Marco Nissen" }, { @@ -8767,15 +9022,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "schema-extensibility", - "name": "Schema Extensibility", - "category": "structure-data", + "id": "self-refine", + "name": "Self-Refine", + "category": "verification-reflection", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8788,7 +9043,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -8797,7 +9052,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8815,11 +9070,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 3 documented variants drawn from Protocol Buffers / JSON Schema / OpenAPI extension conventions.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -8827,15 +9077,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid class diagram showing pattern's structure.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "structured-output", - "name": "Structured Output", - "category": "structure-data", + "id": "session-isolation", + "name": "Session Isolation", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8848,7 +9098,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -8857,7 +9107,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8867,7 +9117,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -8875,11 +9125,6 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, - { - "date": "2026-05-02", - "text": "Authored variants array with 4 documented variants drawn from OpenAI / Anthropic / Outlines / Guidance docs.", - "author": "Marco Nissen" - }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -8893,9 +9138,9 @@ ] }, { - "id": "agent-computer-interface", - "name": "Agent-Computer Interface", - "category": "tool-use-environment", + "id": "shadow-canary", + "name": "Shadow Canary", + "category": "governance-observability", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8910,14 +9155,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -8927,12 +9172,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -8942,15 +9187,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "agent-skills", - "name": "Agent Skills", - "category": "tool-use-environment", + "id": "short-term-memory", + "name": "Short-Term Thread Memory", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -8972,7 +9217,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -8987,7 +9232,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -8997,14 +9242,14 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid state diagram showing pattern's states.", "author": "Marco Nissen" } ] }, { - "id": "app-exploration-phase", - "name": "App Exploration Phase", + "id": "skill-library", + "name": "Skill Library", "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", @@ -9027,7 +9272,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -9042,7 +9287,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -9052,15 +9297,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "browser-agent", - "name": "Browser Agent", - "category": "tool-use-environment", + "id": "sop-encoded-multi-agent", + "name": "SOP-Encoded Multi-Agent Workflow", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9082,7 +9327,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, known_uses_live, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, example_scenario_present — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -9092,12 +9337,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -9107,15 +9352,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "code-as-action", - "name": "Code-as-Action Agent", - "category": "tool-use-environment", + "id": "sovereign-inference-stack", + "name": "Sovereign Inference Stack", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9137,7 +9382,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -9147,12 +9392,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -9162,15 +9407,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "code-execution", - "name": "Code Execution", - "category": "tool-use-environment", + "id": "spec-driven-loop", + "name": "Spec-Driven Loop", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9192,7 +9437,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -9202,12 +9447,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 known_uses URLs + 3 of 3 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -9217,15 +9462,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "computer-use", - "name": "Computer Use", - "category": "tool-use-environment", + "id": "spec-first-agent", + "name": "Spec-First Agent", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9240,14 +9485,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -9257,12 +9502,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -9272,15 +9517,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "dual-system-gui-agent", - "name": "Dual-System GUI Agent", - "category": "tool-use-environment", + "id": "star-bootstrapping", + "name": "STaR Bootstrapping", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9293,16 +9538,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -9312,12 +9557,17 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Zelikman et al. 2022 + follow-ups.", "author": "Marco Nissen" }, { @@ -9327,15 +9577,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "mcp", - "name": "Model Context Protocol", - "category": "tool-use-environment", + "id": "step-budget", + "name": "Step Budget", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9357,7 +9607,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (12): applicability_present, constrains_is_restriction, context_clear, diagram_present, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (1): known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -9367,15 +9617,15 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 5 of 5 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" } ] }, { - "id": "mobile-ui-agent", - "name": "Mobile UI Agent", - "category": "tool-use-environment", + "id": "stop-cancel", + "name": "Stop / Cancel", + "category": "streaming-ux", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9388,16 +9638,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -9407,12 +9657,17 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 2 of 2 known_uses URLs + 3 of 3 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored variants array with 3 documented variants drawn from ChatGPT / Claude Code / standard cancellation idioms.", "author": "Marco Nissen" }, { @@ -9428,9 +9683,9 @@ ] }, { - "id": "multilingual-voice-agent", - "name": "Multilingual Voice Agent Stack", - "category": "tool-use-environment", + "id": "stop-hook", + "name": "Stop Hook", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9445,14 +9700,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -9462,7 +9717,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -9477,15 +9732,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "prompt-caching", - "name": "Prompt Caching", - "category": "tool-use-environment", + "id": "streaming-typed-events", + "name": "Streaming Typed Events", + "category": "streaming-ux", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9498,16 +9753,16 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -9517,7 +9772,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -9525,6 +9780,11 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from OpenAI / Anthropic streaming docs + Bobbin.", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -9532,15 +9792,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "sandbox-isolation", - "name": "Sandbox Isolation", - "category": "tool-use-environment", + "id": "structured-output", + "name": "Structured Output", + "category": "structure-data", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9553,7 +9813,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -9562,7 +9822,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -9572,7 +9832,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -9580,6 +9840,11 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 4 documented variants drawn from OpenAI / Anthropic / Outlines / Guidance docs.", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", @@ -9593,9 +9858,9 @@ ] }, { - "id": "skill-library", - "name": "Skill Library", - "category": "tool-use-environment", + "id": "subagent-isolation", + "name": "Subagent Isolation", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9608,7 +9873,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -9617,7 +9882,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (12): applicability_present, constrains_is_restriction, context_clear, diagram_present, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear, variants_present. Fail (1): known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -9627,30 +9892,15 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "URL content-verified: 3 of 3 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" } ] }, { - "id": "tool-discovery", - "name": "Tool Discovery", - "category": "tool-use-environment", + "id": "supervisor", + "name": "Supervisor", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9672,7 +9922,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (9): constrains_is_restriction, context_clear, edges_correct, example_scenario_present, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (3): applicability_present, diagram_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -9692,20 +9942,15 @@ }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid sequence diagram showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "tool-loadout", - "name": "Tool Loadout", - "category": "tool-use-environment", + "id": "swarm", + "name": "Swarm", + "category": "multi-agent", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9720,14 +9965,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -9737,7 +9982,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -9758,9 +10003,9 @@ ] }, { - "id": "tool-result-caching", - "name": "Tool Result Caching", - "category": "tool-use-environment", + "id": "test-time-compute-scaling", + "name": "Test-Time Compute Scaling", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9773,7 +10018,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -9782,7 +10027,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -9792,7 +10037,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -9802,48 +10047,25 @@ }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored variants array with 4 documented variants drawn from Snell et al. 2024 / Brown et al. 2024.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" - } - ] - }, - { - "id": "tool-search-lazy-loading", - "name": "Tool Search Lazy Loading", - "category": "tool-use-environment", - "verified": false, - "aspects": { - "intent_one_sentence": "todo", - "context_clear": "todo", - "problem_clear": "todo", - "solution_clear": "todo", - "constrains_is_restriction": "todo", - "example_scenario_present": "todo", - "diagram_present": "todo", - "applicability_present": "todo", - "variants_present": "todo", - "references_live": "todo", - "known_uses_live": "todo", - "no_jargon_undefined": "todo", - "edges_correct": "todo" - }, - "notes": [ + }, { - "date": "2026-05-15", - "text": "Pattern added based on upstream sources (Willison 2023/2025; Anthropic 2025; Beurer-Kellner et al. 2025; Thariq Shihipar 2025). Awaits source-verification walkthrough.", + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "tool-use", - "name": "Tool Use", - "category": "tool-use-environment", + "id": "todo-list-driven-agent", + "name": "Todo-List-Driven Autonomous Agent", + "category": "planning-control-flow", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -9856,7 +10078,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "pass", "no_jargon_undefined": "pass", @@ -9865,7 +10087,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -9875,18 +10097,31 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 4 of 4 known_uses URLs + 2 of 2 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 known_uses URLs + 2 of 2 references checked alive and content-matching", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "toolformer", - "name": "Toolformer", + "id": "tool-agent-registry", + "name": "Tool/Agent Registry", "category": "tool-use-environment", "verified": true, - "last_verified": "2026-05-02", - "verifier": "Marco Nissen", "aspects": { "intent_one_sentence": "pass", "context_clear": "pass", @@ -9898,46 +10133,33 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "date": "2026-05-17", + "text": "Pattern added based on upstream source. Sources: Liu et al. (2025), 'Agent design pattern catalogue', J. Syst. Softw. 220, 112278. Awaits source-verification walkthrough.", "author": "Marco Nissen" }, { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", "author": "Marco Nissen" }, { - "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", "author": "Marco Nissen" } - ] + ], + "last_verified": "2026-05-17", + "verifier": "Marco Nissen" }, { - "id": "translation-layer", - "name": "Translation Layer", + "id": "tool-discovery", + "name": "Tool Discovery", "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", @@ -9960,7 +10182,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -9985,15 +10207,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "Authored mermaid sequence diagram showing pattern's interaction.", "author": "Marco Nissen" } ] }, { - "id": "wasm-skill-runtime", - "name": "WebAssembly Skill Runtime", - "category": "tool-use-environment", + "id": "tool-explosion", + "name": "Tool Explosion", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10008,14 +10230,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -10025,7 +10247,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -10046,9 +10268,9 @@ ] }, { - "id": "best-of-n", - "name": "Best-of-N Sampling", - "category": "verification-reflection", + "id": "tool-loadout", + "name": "Tool Loadout", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10061,7 +10283,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -10070,7 +10292,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 3 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -10085,7 +10307,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -10095,15 +10317,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "confidence-reporting", - "name": "Confidence Reporting", - "category": "verification-reflection", + "id": "tool-output-poisoning", + "name": "Tool Output Poisoning Defense", + "category": "safety-control", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10118,14 +10340,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "pass", + "known_uses_live": "na", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass (8): constrains_is_restriction, context_clear, edges_correct, intent_one_sentence, no_jargon_undefined, problem_clear, references_live, solution_clear. NA (1): variants_present. Fail (4): applicability_present, diagram_present, example_scenario_present, known_uses_live — catalog-wide gaps not fabricated, plus known_uses entries without URL.", "author": "Marco Nissen" }, { @@ -10135,12 +10357,12 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -10150,15 +10372,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "critic", - "name": "Tool-Augmented Self-Correction", - "category": "verification-reflection", + "id": "tool-output-trusted-verbatim", + "name": "Tool Output Trusted Verbatim", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10180,7 +10402,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -10195,7 +10417,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -10205,15 +10427,15 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (sequenceDiagram) showing pattern's interaction.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "deterministic-llm-sandwich", - "name": "Deterministic-LLM Sandwich", - "category": "verification-reflection", + "id": "tool-result-caching", + "name": "Tool Result Caching", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10250,7 +10472,7 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -10260,15 +10482,43 @@ }, { "date": "2026-05-02", - "text": "Authored mermaid diagram (flowchart) showing pattern's flow.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "dream-consolidation-cycle", - "name": "Dream Consolidation Cycle", - "category": "verification-reflection", + "id": "tool-search-lazy-loading", + "name": "Tool Search Lazy Loading", + "category": "tool-use-environment", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "todo", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [ + { + "date": "2026-05-15", + "text": "Pattern added based on upstream sources (Willison 2023/2025; Anthropic 2025; Beurer-Kellner et al. 2025; Thariq Shihipar 2025). Awaits source-verification walkthrough.", + "author": "Marco Nissen" + } + ] + }, + { + "id": "tool-use", + "name": "Tool Use", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10283,14 +10533,14 @@ "applicability_present": "pass", "variants_present": "pass", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -10300,30 +10550,15 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored mermaid diagram (stateDiagram-v2) showing pattern's states.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "URL content-verified: 4 of 4 known_uses URLs + 2 of 2 references checked alive and content-matching", "author": "Marco Nissen" } ] }, { - "id": "echo-recognition", - "name": "Echo Recognition", - "category": "verification-reflection", + "id": "toolformer", + "name": "Toolformer", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10336,7 +10571,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -10345,22 +10580,22 @@ "notes": [ { "date": "2026-05-02", - "text": "Pattern content revised in commit 06ef38e (intent tightened, constrains rewritten as restriction, applicability/variants added, German quotes translated, reciprocal edges patched). Re-verifying from scratch.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { @@ -10372,18 +10607,13 @@ "date": "2026-05-02", "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", - "author": "Marco Nissen" } ] }, { - "id": "emotional-state-persistence", - "name": "Emotional State Persistence", - "category": "verification-reflection", + "id": "translation-layer", + "name": "Translation Layer", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10396,7 +10626,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -10405,7 +10635,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -10415,30 +10645,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", + "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid state diagram showing pattern's states.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" } ] }, { - "id": "evaluator-optimizer", - "name": "Evaluator-Optimizer", - "category": "verification-reflection", + "id": "tree-of-thoughts", + "name": "Tree of Thoughts", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10451,7 +10681,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -10460,7 +10690,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 4 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -10475,7 +10705,12 @@ }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when bullets) derived from pattern's intent/problem/solution.", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Yao et al. 2023 (ToT paper search variants).", "author": "Marco Nissen" }, { @@ -10491,9 +10726,9 @@ ] }, { - "id": "frozen-rubric-reflection", - "name": "Frozen Rubric Reflection", - "category": "verification-reflection", + "id": "unbounded-loop", + "name": "Unbounded Loop", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10506,7 +10741,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -10515,7 +10750,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, example_scenario_present, diagram_present, applicability_present, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -10527,13 +10762,28 @@ "date": "2026-05-02", "text": "URL content-verified: 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "author": "Marco Nissen" + }, + { + "date": "2026-05-02", + "text": "Authored mermaid state diagram showing pattern's states.", + "author": "Marco Nissen" } ] }, { - "id": "inner-critic", - "name": "Self-Modification Diff Gate", - "category": "verification-reflection", + "id": "unbounded-subagent-spawn", + "name": "Unbounded Subagent Spawn", + "category": "anti-patterns", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10555,7 +10805,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <35 words), context, problem, solution, constrains-as-restriction (anti-pattern wording 'imposes no useful constraint' is the documented restriction shape), references (all 200/403=live), no-jargon (LLM/RAG/MCP/CoT in glossary), edges (all targets exist, all symmetric). NA: variants (anti-pattern). Fail: example_scenario, diagram.mermaid, applicability not populated (catalog-wide gap, do not fabricate). Fail: known_uses lacks URL (single illustrative entry per anti-pattern, not URL-verifiable).", "author": "Marco Nissen" }, { @@ -10586,9 +10836,9 @@ ] }, { - "id": "process-reward-model", - "name": "Process Reward Model", - "category": "verification-reflection", + "id": "vector-memory", + "name": "Vector Memory", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10603,7 +10853,7 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, @@ -10620,7 +10870,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -10641,12 +10891,10 @@ ] }, { - "id": "reflection", - "name": "Reflection", - "category": "verification-reflection", + "id": "voting-based-cooperation", + "name": "Voting-Based Cooperation", + "category": "multi-agent", "verified": true, - "last_verified": "2026-05-02", - "verifier": "Marco Nissen", "aspects": { "intent_one_sentence": "pass", "context_clear": "pass", @@ -10656,49 +10904,36 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "pass", + "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { - "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, variants_present, references_live, no_jargon_undefined, edges_correct. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL liveness aspects reset to todo. Liveness alone (HTTP 200) does not confirm the URL points to the cited paper or named system; re-verifying with content check.", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", - "author": "Marco Nissen" - }, - { - "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "date": "2026-05-17", + "text": "Pattern added based on upstream source. Sources: Liu et al. (2025), 'Agent design pattern catalogue', J. Syst. Softw. 220, 112278. Awaits source-verification walkthrough.", "author": "Marco Nissen" }, { - "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", "author": "Marco Nissen" }, { - "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "date": "2026-05-17", + "text": "Walked all 13 aspects against the upstream source (Liu et al. 2025, Agent design pattern catalogue, J. Syst. Softw. 220, 112278). intent (<35 words, single sentence), context/problem/solution prose verified to match source. constrains-as-restriction confirmed. example_scenario, diagram.mermaid, applicability all populated. references_live = pass (HTTP 200/3xx/403 acceptable per A6.3). known_uses_live = pass (HuggingGPT space lives, Bedrock URL fixed to canonical prompt-management page, ChatEval arXiv content-verified). no_jargon_undefined: LLM, RAG, MCP, FM in glossary; remaining acronyms are stock English/CS. edges_correct: all targets exist; lint A4 confirms inverse balance.", "author": "Marco Nissen" } - ] + ], + "last_verified": "2026-05-17", + "verifier": "Marco Nissen" }, { - "id": "reflexion", - "name": "Reflexion", - "category": "verification-reflection", + "id": "wasm-skill-runtime", + "name": "WebAssembly Skill Runtime", + "category": "tool-use-environment", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10713,14 +10948,14 @@ "applicability_present": "pass", "variants_present": "na", "references_live": "pass", - "known_uses_live": "na", + "known_uses_live": "pass", "no_jargon_undefined": "pass", "edges_correct": "pass" }, "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, known_uses_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate).", "author": "Marco Nissen" }, { @@ -10730,7 +10965,7 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 1 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching", "author": "Marco Nissen" }, { @@ -10751,9 +10986,9 @@ ] }, { - "id": "self-consistency", - "name": "Self-Consistency", - "category": "verification-reflection", + "id": "world-model-separation", + "name": "World-Model Separation", + "category": "memory", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10766,7 +11001,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -10775,7 +11010,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 2 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, applicability, variants (na for memo-as-source-confusion as anti-pattern), references (all 200/403), no-jargon (only ISO/JSON/UTC/etc. standard acronyms), edges (all targets exist, all symmetric/inverse pairs balance). Fail: example_scenario and diagram.mermaid not populated (catalog-wide gap, do not fabricate). Fail: known_uses URL returns 404 — known-use URL is dead, needs replacement; pattern remains valid as authored.", "author": "Marco Nissen" }, { @@ -10785,30 +11020,30 @@ }, { "date": "2026-05-02", - "text": "URL content-verified: 1 of 1 references checked alive and content-matching", + "text": "URL content-verified: 0 of 1 known_uses URLs + 1 of 1 references checked alive and content-matching. Dead known_uses URL (no public replacement found): ", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", + "text": "Authored example_scenario as concrete narrative tied to pattern intent.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored example_scenario as concrete narrative tied to pattern intent.", + "text": "Authored mermaid flow diagram showing pattern's flow.", "author": "Marco Nissen" }, { "date": "2026-05-02", - "text": "Authored mermaid flow diagram showing pattern's flow.", + "text": "known-use URL returns 404; repo is not publicly hosted. URL field dropped from known_uses entry per catalog convention; aspect set to na since URL-verification is not applicable. Citation prose retained.", "author": "Marco Nissen" } ] }, { - "id": "self-refine", - "name": "Self-Refine", - "category": "verification-reflection", + "id": "zero-shot-cot", + "name": "Zero-Shot Chain-of-Thought", + "category": "reasoning", "verified": true, "last_verified": "2026-05-02", "verifier": "Marco Nissen", @@ -10821,7 +11056,7 @@ "example_scenario_present": "pass", "diagram_present": "pass", "applicability_present": "pass", - "variants_present": "na", + "variants_present": "pass", "references_live": "pass", "known_uses_live": "na", "no_jargon_undefined": "pass", @@ -10830,7 +11065,7 @@ "notes": [ { "date": "2026-05-02", - "text": "Walked all 13 aspects. Pass: intent_one_sentence, context_clear, problem_clear, solution_clear, constrains_is_restriction, references_live, no_jargon_undefined, edges_correct. NA: variants_present. Fail: example_scenario not populated (catalog-wide gap, do not fabricate); diagram.mermaid not populated (catalog-wide gap, do not fabricate); applicability not populated (catalog-wide gap, do not fabricate); known_uses: 1 entries lack URL (illustrative attribution, not URL-verifiable).", + "text": "Walked all 13 aspects. Pass: intent (one sentence, <=35 words), context, problem, solution, constrains-as-restriction, references (all 200/403=live), no-jargon (acronyms in glossary or universal), edges (all targets exist, all symmetric). Fail: example_scenario, diagram.mermaid, applicability, variants not populated (catalog-wide gap, do not fabricate). Fail: known_uses contains entries without URL (not verifiable-live per spec).", "author": "Marco Nissen" }, { @@ -10848,6 +11083,11 @@ "text": "Authored applicability block (3 use-when + 2-3 do-not-use-when) derived from pattern's intent/problem/solution.", "author": "Marco Nissen" }, + { + "date": "2026-05-02", + "text": "Authored variants array with 3 documented variants drawn from Kojima 2022 / APE / Yang 2024.", + "author": "Marco Nissen" + }, { "date": "2026-05-02", "text": "Authored example_scenario as concrete narrative tied to pattern intent.", From 1236127e55cdc87b74e30efbef352aef489a12ae Mon Sep 17 00:00:00 2001 From: Marco Nissen <13350855+luxxyarns@users.noreply.github.com> Date: Sun, 17 May 2026 08:56:17 +0200 Subject: [PATCH 2/2] Add 10 cognition-introspection patterns (204 -> 214, 14 categories) # Patterns added (10, all in cognition-introspection) - open-question-tension-store append-only ledger of unresolved pulls driving inquiry; intrusiveness gates ask-now vs store - cognitive-move-selector idle-tick router over a small agent-vetted menu of named moves - parallel-voice-proposer multi-voice candidates in one call, self-selected, losers logged as audit - pre-generative-loop-gate pre-tick divergence detection that injects a steering hint, not a veto - multi-axis-promotion-scoring six-axis weighted gate for short-to- long memory tier promotion; consolidation weighted over frequency - cluster-capped-insight-store mechanical mtime-based dedup of insight files per stem-token cluster - meditation-mode runtime mode: external I/O paused, inner-only tool allowlist, bounded window with self/operator exit - partial-output-salvage tmp+rename stream-to-disk + typed recovery marker propagates into the next prompt - typed-tool-loop-detector dispatch-boundary veto with five typed failure modes and per-tool caps; returns a formatted refusal - affect-coupled-plan-lifecycle bounded affect deltas on plan events plus age-bucketed stale-pain # Supporting changes - 16 reverse edges added across 6 other shards so symmetric/inverse relations stay paired (A4 lint passes) - 10 verification-todo entries appended (sort order preserved by id) - INDEX.md regenerated; Cognition & Introspection now lists 19 patterns (10 new + 9 migrated by d5ba975) - README.md count: 179 -> 214, 13 -> 14 categories, 850 -> 1118 edges - pages.yml landing page count: 179 -> 214 - lint.py allowlist extended for patterns.graph.schema.json (cleared pre-existing A2.2 carried in from d5ba975) # Lint All 15 lint rules pass; URL liveness clean on all 22 new references. --- .github/scripts/lint.py | 1 + .github/workflows/pages.yml | 2 +- INDEX.md | 96 +- README.md | 2 +- patterns-src/cognition-introspection.json | 1030 +++++++++++++++++++- patterns-src/governance-observability.json | 4 + patterns-src/memory.json | 20 + patterns-src/multi-agent.json | 12 + patterns-src/planning-control-flow.json | 4 + patterns-src/routing-composition.json | 8 + patterns-src/safety-control.json | 8 + patterns-src/verification-reflection.json | 4 + patterns/affect-coupled-plan-lifecycle.md | 101 ++ patterns/cluster-capped-insight-store.md | 101 ++ patterns/cognitive-move-selector.md | 109 +++ patterns/meditation-mode.md | 101 ++ patterns/multi-axis-promotion-scoring.md | 101 ++ patterns/open-question-tension-store.md | 100 ++ patterns/parallel-voice-proposer.md | 105 ++ patterns/partial-output-salvage.md | 101 ++ patterns/pre-generative-loop-gate.md | 104 ++ patterns/typed-tool-loop-detector.md | 107 ++ verification-todo.json | 220 +++++ 23 files changed, 2368 insertions(+), 73 deletions(-) create mode 100644 patterns/affect-coupled-plan-lifecycle.md create mode 100644 patterns/cluster-capped-insight-store.md create mode 100644 patterns/cognitive-move-selector.md create mode 100644 patterns/meditation-mode.md create mode 100644 patterns/multi-axis-promotion-scoring.md create mode 100644 patterns/open-question-tension-store.md create mode 100644 patterns/parallel-voice-proposer.md create mode 100644 patterns/partial-output-salvage.md create mode 100644 patterns/pre-generative-loop-gate.md create mode 100644 patterns/typed-tool-loop-detector.md diff --git a/.github/scripts/lint.py b/.github/scripts/lint.py index 228bd70..c6536e3 100644 --- a/.github/scripts/lint.py +++ b/.github/scripts/lint.py @@ -266,6 +266,7 @@ def rule_a2() -> list[Violation]: "glossary.schema.json", "verification-todo.json", "verification-todo.schema.json", + "patterns.graph.schema.json", } allowed_dirs = {"patterns-src", "patterns", "docs", ".github"} for f in root_files: diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 64b6b63..25f7aa5 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -57,7 +57,7 @@ jobs:

Agentic Patterns Catalog

Machine-readable reference of agentic design patterns in GoF/POSA form.

    -
  • patterns/ — browse the 179 patterns (rendered HTML, Mermaid diagrams)
  • +
  • patterns/ — browse the 214 patterns (rendered HTML, Mermaid diagrams)
  • recipes/ — browse the named cross-category compositions
  • frameworks/ — browse the framework coverage matrix
diff --git a/INDEX.md b/INDEX.md index e1e2d53..fbc27a6 100644 --- a/INDEX.md +++ b/INDEX.md @@ -1,6 +1,6 @@ # Pattern Index -204 patterns across 13 categories. +214 patterns across 14 categories. ## Reasoning @@ -10,8 +10,8 @@ - [Graph of Thoughts](patterns/graph-of-thoughts.md) *(a.k.a. GoT, DAG Reasoning)* — Model reasoning as an arbitrary DAG so thoughts can be merged, refined, and aggregated across branches. - [Least-to-Most Prompting](patterns/least-to-most.md) *(a.k.a. L2M, Easy-First Decomposition)* — Decompose a hard problem into an ordered list of easier subproblems, then solve them sequentially with each answer feeding the next. - [ReST-EM](patterns/rest-em.md) *(a.k.a. Reinforced Self-Training, Self-Training Loop)* — Iterate generate → reward-filter → fine-tune to bootstrap reasoning capabilities without human-labelled data. -- [STaR Bootstrapping](patterns/star-bootstrapping.md) *(a.k.a. Self-Taught Reasoner, Rationale Bootstrapping)* — Bootstrap a model's reasoning by training it on its own correct chain-of-thought outputs. - [Self-Ask](patterns/self-ask.md) *(a.k.a. Decompose-Ask, Sub-Question Prompting)* — Have the model emit explicit follow-up sub-questions, answer them (optionally via search), then compose the final answer. +- [STaR Bootstrapping](patterns/star-bootstrapping.md) *(a.k.a. Self-Taught Reasoner, Rationale Bootstrapping)* — Bootstrap a model's reasoning by training it on its own correct chain-of-thought outputs. - [Test-Time Compute Scaling](patterns/test-time-compute-scaling.md) *(a.k.a. Inference-Time Scaling, Compute-Time Trade-Off)* — Allocate more inference-time compute (samples, search, deeper thinking) instead of scaling parameters to improve quality. - [Tree of Thoughts](patterns/tree-of-thoughts.md) *(a.k.a. ToT, Deliberate Reasoning)* — Search over a tree of partial reasoning states with explicit lookahead, evaluation, and backtracking. - [Zero-Shot Chain-of-Thought](patterns/zero-shot-cot.md) *(a.k.a. Let's Think Step by Step, Trigger-Phrase CoT)* — Elicit step-by-step reasoning with a single trigger phrase rather than few-shot exemplars. @@ -22,24 +22,21 @@ - [Event-Driven Agent](patterns/event-driven-agent.md) *(a.k.a. Event Subscriber, Reactive Agent, Webhook Agent)* — Trigger the agent on external events (webhooks, message queues, file changes) instead of user requests or schedules. - [Exploration vs Exploitation](patterns/exploration-exploitation.md) *(a.k.a. Exploration & Discovery, Curiosity-Driven Action)* — Balance taking the best-known action (exploit) with trying alternatives that might be better (explore). - [Goal Decomposition](patterns/goal-decomposition.md) *(a.k.a. Hierarchical Task Network, Goal Setting & Monitoring, Task Tree)* — Decompose a goal into sub-goals recursively until each leaf is directly actionable. -- [LLMCompiler](patterns/llm-compiler.md) *(a.k.a. LLM Compiler, Parallel ReWOO)* — Take ReWOO's plan-as-DAG and run independent steps in parallel through a task-fetching dispatcher. - [Language Agent Tree Search](patterns/lats.md) *(a.k.a. LATS, MCTS for Agents, Tree-Search Agent, Backtracking Agent)* — Lift the agent loop into a search tree with a learned value function and backtracking. +- [LLMCompiler](patterns/llm-compiler.md) *(a.k.a. LLM Compiler, Parallel ReWOO)* — Take ReWOO's plan-as-DAG and run independent steps in parallel through a task-fetching dispatcher. - [MapReduce for Agents](patterns/map-reduce.md) *(a.k.a. LLM×MapReduce, Divide-and-Conquer)* — Split an oversize task into independent chunks, process each in parallel, then aggregate. -- [Outer-Inner Agent Loop](patterns/outer-inner-agent-loop.md) *(a.k.a. Dual-Loop Agent, Planner-Outside Executor-Inside, Dispatch-and-Act Loop)* — Run two nested loops: an outer planner agent that decomposes the goal into subtasks and dispatches them, and an inner executor agent that runs its own tool-use/ReAct loop on each subtask; the outer can interrupt and replan based on the inner's progress. -- [Passive Goal Creator](patterns/passive-goal-creator.md) *(a.k.a. Dialogue Goal Extractor, Goal Refinement from Prompts)* — Before planning, refine the user's articulated prompt plus retrieved memory context into a precise, planner-ready goal. +- [Outer-Inner Agent Loop](patterns/outer-inner-agent-loop.md) *(a.k.a. Dual-Loop Agent, Planner-Outside Executor-Inside, Dispatch-and-Act Loop)* — Run two nested loops: an outer planner agent decomposes the goal into subtasks; an inner executor runs a ReAct loop on each, and the outer can replan based on the inner's progress. +- [Passive Goal Creator](patterns/passive-goal-creator.md) *(a.k.a. Dialogue Goal Extractor, Goal Refinement from Prompts)* — Analyse the user's articulated prompts and accompanying context to derive a precise, actionable goal before any planning or tool use begins. - [Plan-and-Execute](patterns/plan-and-execute.md) *(a.k.a. Plan-Then-Execute, Outline-Then-Run)* — Plan all the steps once with a strong model, then execute each step with a cheaper model under the plan. - [Planner-Executor-Observer](patterns/planner-executor-observer.md) *(a.k.a. Three-Role Loop, POE)* — Add an explicit Observer role between Planner and Executor so progress is checked against the plan instead of trusted blindly. -- [Proactive Goal Creator](patterns/proactive-goal-creator.md) *(a.k.a. Multimodal Goal Anticipator, Context-Capturing Goal Creator)* — Anticipate the user's goal by capturing surrounding multimodal context (gestures, screen, environment) alongside what the user types or says. +- [Proactive Goal Creator](patterns/proactive-goal-creator.md) *(a.k.a. Multimodal Goal Anticipator, Context-Capturing Goal Creator)* — Anticipate the user's goal by capturing surrounding multimodal context (gestures, screen state, environment) in addition to what the user types or says. - [ReAct](patterns/react.md) *(a.k.a. Reason+Act, Think-Act-Observe Loop)* — Interleave a single thought, a single tool call, and a single observation per step so the agent reasons over fresh evidence. -- [ReWOO](patterns/rewoo.md) *(a.k.a. Reasoning Without Observation, Plan-as-DAG, Placeholder-Variable Plan)* — Plan a complete dependency DAG with placeholder variables before any tool runs, then execute and substitute observations into the plan. - [Replan on Failure](patterns/replan-on-failure.md) *(a.k.a. Adaptive Replanning, Plan Revision)* — Trigger a fresh planning step when execution evidence contradicts the current plan. +- [ReWOO](patterns/rewoo.md) *(a.k.a. Reasoning Without Observation, Plan-as-DAG, Placeholder-Variable Plan)* — Plan a complete dependency DAG with placeholder variables before any tool runs, then execute and substitute observations into the plan. - [Scheduled Agent](patterns/scheduled-agent.md) *(a.k.a. Cron Agent, Time-Triggered Agent, Periodic Agent)* — Run the agent on a fixed schedule independent of user requests. - [Spec-Driven Loop](patterns/spec-driven-loop.md) *(a.k.a. Naive Iterative Loop, Ralph Wiggum Loop, Ralph Loop)* — Run the same prompt against a fixed spec in a deterministic outer loop until the spec is satisfied. - [Spec-First Agent](patterns/spec-first-agent.md) *(a.k.a. Specification-Driven Agent, Plan-as-Document)* — Drive the agent loop from a human-authored specification document rather than free-form prompts. -- [Todo-List-Driven Autonomous Agent](patterns/todo-list-driven-agent.md) *(a.k.a. todo.md Agent, Persistent Markdown Plan, Externalised Plan File)* — Have the autonomous agent author a writeable plan file (e.g. todo.md) early in the run, tick items as it completes them, and re-inject the remaining plan into the end of the context window; the file is the durable plan and the model's working memory. -- [Intra-Agent Memo Scheduling](patterns/intra-agent-memo-scheduling.md) *(a.k.a. Self-Scheduled Future Thought, Past-Self-To-Future-Self Note, Personal Cron)* — Let an agent drop a note for its own future self at a specified time so present decisions can hand off context to a later run without external infrastructure. -- [Interrupt-Resumable Thought](patterns/interrupt-resumable-thought.md) *(a.k.a. Pausable Thought Stream, Continuation-Preserving Interrupt, Suspendable Cognition)* — Allow the agent to pause an in-flight reasoning chain when an external interrupt arrives, handle the interrupt, and resume the original chain instead of dropping it. -- [Mode-Adaptive Cadence](patterns/mode-adaptive-cadence.md) *(a.k.a. Idle/Intense Modes, Variable Tick Rate, Salience-Driven Cadence)* — Vary the agent's loop interval based on current salience so the agent thinks faster when something is happening and slower when nothing is, instead of running on a fixed cron. +- [Todo-List-Driven Autonomous Agent](patterns/todo-list-driven-agent.md) *(a.k.a. todo.md Agent, Persistent Markdown Plan, Externalised Plan File)* — Have the agent author a plan file (e.g. todo.md) early in the run, tick items as it completes them, and re-inject the remaining plan into context; the file is durable plan and working memory. ## Tool Use & Environment @@ -49,12 +46,12 @@ - [Augmented LLM](patterns/augmented-llm.md) *(a.k.a. Augmented Model, LLM + Tools + Memory, Foundational Agent Block)* — Build the foundational agent block as an LLM augmented with retrieval, tools, and memory that the model actively chooses to use, rather than a bare-model call. - [Browser Agent](patterns/browser-agent.md) *(a.k.a. Web Agent, Browser Automation Agent)* — Expose websites to the agent through a structured DOM/accessibility tree plus a small action vocabulary, sitting between raw HTML and pixel-level Computer Use. - [Code Execution](patterns/code-execution.md) *(a.k.a. Code-Then-Execute, CodeAct, Program of Thoughts)* — Let the model emit code, run it in a sandbox, and treat the run as the answer instead of trusting the model to compute in its head. -- [Code-as-Action Agent](patterns/code-as-action.md) *(a.k.a. CodeAct Agent, Code-Writing Agent, Python-Action ReAct, Executable Code Actions)* — Have the agent emit a Python (or similar) code snippet as its action at each step, executed in a constrained interpreter, instead of emitting a JSON tool call; tool composition becomes function nesting and control flow inside the snippet. +- [Code-as-Action Agent](patterns/code-as-action.md) *(a.k.a. CodeAct Agent, Code-Writing Agent, Python-Action ReAct, Executable Code Actions)* — Have the agent emit a code snippet as its action each step, executed in a constrained interpreter, instead of emitting JSON tool calls; tool composition becomes function nesting and control flow inside the snippet. - [Computer Use](patterns/computer-use.md) *(a.k.a. Desktop Agent, GUI Agent, Screen Control)* — Let the model drive a desktop end-to-end via screenshots plus virtual mouse/keyboard tool calls instead of bespoke per-app APIs. -- [Dual-System GUI Agent](patterns/dual-system-gui-agent.md) *(a.k.a. Decision-Plus-Grounding, Planner-and-Vision Split, Two-Model GUI Agent)* — Split a GUI agent into two specialised models: a decision model that plans and recovers from errors, and a grounding model that observes pixels/elements and emits the precise action; route each subproblem to the model that handles it well. +- [Dual-System GUI Agent](patterns/dual-system-gui-agent.md) *(a.k.a. Decision-Plus-Grounding, Planner-and-Vision Split, Two-Model GUI Agent)* — Split a GUI agent into a decision model that plans and recovers from errors and a grounding model that observes pixels and emits the precise action; route each subproblem to the better-suited model. - [Mobile UI Agent](patterns/mobile-ui-agent.md) *(a.k.a. Smartphone Agent, Mobile App Agent, Touch-UI Agent)* — Drive a smartphone end-to-end through a small, touch-native action vocabulary (tap, long-press, swipe, type, back, home) over screenshots, as a distinct interaction surface from desktop Computer Use and from web Browser Agents. - [Model Context Protocol](patterns/mcp.md) *(a.k.a. MCP, Open Tool Protocol)* — Standardise how agents discover and call tools so that a tool written once is usable by any conformant agent. -- [Multilingual Voice Agent Stack](patterns/multilingual-voice-agent.md) *(a.k.a. Voice-First Multilingual Agent, STT-LLM-TTS Pipeline, Indic Voice Agent)* — Compose a low-latency voice agent as a tightly co-located pipeline of speech-to-text, language-aware LLM reasoning, and text-to-speech, where the same vendor or operator owns all three so language identity and dialect propagate cleanly across the boundary. +- [Multilingual Voice Agent Stack](patterns/multilingual-voice-agent.md) *(a.k.a. Voice-First Multilingual Agent, STT-LLM-TTS Pipeline, Indic Voice Agent)* — Compose a voice agent as a tightly co-located pipeline of speech-to-text, language-aware LLM reasoning, and text-to-speech, where one vendor owns all three so language and dialect propagate cleanly across stages. - [Prompt Caching](patterns/prompt-caching.md) *(a.k.a. Cache-Aware Prompts, Stable-Prefix Caching)* — Order prompts so the unchanging prefix can be cached by the provider, cutting per-call cost and latency. - [Sandbox Isolation](patterns/sandbox-isolation.md) *(a.k.a. Code Sandbox, Container Isolation, Restricted Execution)* — Run agent-emitted code or actions in a contained environment with restricted filesystem, network, and process privileges. - [Skill Library](patterns/skill-library.md) *(a.k.a. Tool-Creating Agent, Meta-Tool Use, Self-Authored Tools)* — Let the agent grow its own toolkit by writing reusable skills that subsequent runs can call. @@ -62,29 +59,29 @@ - [Tool Loadout](patterns/tool-loadout.md) *(a.k.a. Tool Subset Selection, Per-Task Tool Filtering, Tool Filter, Limit Exposed Tools)* — Select a small task-relevant subset of available tools per request rather than exposing the full registry to the model. - [Tool Result Caching](patterns/tool-result-caching.md) *(a.k.a. Memoised Tools, Idempotent Cache)* — Cache the result of expensive deterministic tool calls keyed by their arguments so repeat calls within a session return immediately. - [Tool Search Lazy Loading](patterns/tool-search-lazy-loading.md) *(a.k.a. Lazy Tool Loading, On-Demand Tool Schema Loading, ToolSearch Primitive)* — Defer loading tool schemas into the context window until a search step shows they are needed. -- [Tool/Agent Registry](patterns/tool-agent-registry.md) *(a.k.a. Capability Catalogue, Agent Marketplace, Tool and Agent Directory)* — Maintain a single queryable catalogue of both available tools and available agents, with metadata (capability, cost, latency, quality) the agent uses to pick the right one for a task. - [Tool Use](patterns/tool-use.md) *(a.k.a. Function Calling, Tool Calling, Action Use)* — Let the LLM produce typed calls against an external toolkit instead of producing free-form text the surrounding system has to parse. +- [Tool/Agent Registry](patterns/tool-agent-registry.md) *(a.k.a. Capability Catalogue, Agent Marketplace, Tool and Agent Directory)* — Maintain a single queryable catalogue of both available tools and available agents, with metadata (capability, cost, latency, quality) the agent can use to pick the right one for a task. - [Toolformer](patterns/toolformer.md) *(a.k.a. Self-Supervised Tool Learning)* — Train the model to learn when and how to call tools through self-supervised data, without human annotation. - [Translation Layer](patterns/translation-layer.md) *(a.k.a. Anti-Corruption Layer, Adapter Pattern (Agentic), API Façade)* — Insert a typed boundary between the agent's clean domain model and a messy or legacy external API. -- [WebAssembly Skill Runtime](patterns/wasm-skill-runtime.md) *(a.k.a. Wasm Cognitive Skills, Polyglot Skill Sandbox, Capability-Sandboxed Tool Plane)* — Package each agent skill or tool as a WebAssembly module with an explicit capability manifest, run it inside a Wasm runtime that enforces those capabilities, so untrusted or third-party skills can run in the agent's tool plane without weakening the host's sandbox. +- [WebAssembly Skill Runtime](patterns/wasm-skill-runtime.md) *(a.k.a. Wasm Cognitive Skills, Polyglot Skill Sandbox, Capability-Sandboxed Tool Plane)* — Package each agent skill as a WebAssembly module with a capability manifest, and run it inside a Wasm runtime that enforces those capabilities, so untrusted skills cannot weaken the host's sandbox. ## Retrieval & RAG - [Agentic RAG](patterns/agentic-rag.md) *(a.k.a. Iterative RAG)* — Replace static retrieve-then-generate with autonomous agents that plan, choose sources, retrieve iteratively, reflect, and re-query. -- [CRAG](patterns/crag.md) *(a.k.a. Corrective RAG)* — Add a lightweight retrieval evaluator that grades each retrieved document and triggers corrective web search on poor retrievals. - [Contextual Retrieval](patterns/contextual-retrieval.md) *(a.k.a. Chunk Contextualisation, Anthropic Contextual Embeddings)* — Prepend a short LLM-generated description to each chunk before embedding so the chunk carries its situating context. +- [CRAG](patterns/crag.md) *(a.k.a. Corrective RAG)* — Add a lightweight retrieval evaluator that grades each retrieved document and triggers corrective web search on poor retrievals. - [Cross-Encoder Reranking](patterns/cross-encoder-reranking.md) *(a.k.a. Reranker, Two-Stage Retrieval, Retrieve-Then-Rerank)* — After cheap bi-encoder or BM25 retrieval, rescore top-N candidates with a cross-encoder that jointly attends over (query, candidate). - [GraphRAG](patterns/graphrag.md) *(a.k.a. Graph-Based RAG, Knowledge Graph RAG)* — Build an LLM-extracted entity-and-relation knowledge graph plus hierarchical community summaries, then answer global queries via map-reduce over those summaries. -- [HyDE](patterns/hyde.md) *(a.k.a. Hypothetical Document Embeddings)* — Have the LLM write a hypothetical answer document, embed it, and use it as the retrieval query. - [Hybrid Search](patterns/hybrid-search.md) *(a.k.a. BM25 + Dense, Lexical + Semantic Retrieval)* — Combine sparse lexical retrieval (BM25) with dense vector retrieval and fuse the results. +- [HyDE](patterns/hyde.md) *(a.k.a. Hypothetical Document Embeddings)* — Have the LLM write a hypothetical answer document, embed it, and use it as the retrieval query. - [Naive RAG](patterns/naive-rag.md) *(a.k.a. Retrieval-Augmented Generation, Top-K Retrieve-and-Stuff)* — Condition the generator on top-k chunks retrieved from an external dense index so knowledge lives outside parameters. -- [RAFT](patterns/raft.md) *(a.k.a. Retrieval-Augmented Fine-Tuning, Distractor-Robust RAG)* — Train the model to be robust to irrelevant retrieved documents (distractors) in a domain-specific RAG setting. +- [RAFT](patterns/raft.md) *(a.k.a. Retrieval-Augmented Fine-Tuning, Distractor-Robust RAG)* — Train the model to ignore irrelevant retrieved documents (distractors) in a domain-specific RAG setting. - [Self-RAG](patterns/self-rag.md) *(a.k.a. Self-Reflective RAG)* — Fine-tune the model to emit reflection tokens that decide when to retrieve, evaluate retrieved relevance, and assess generated support. ## Memory - [Append-Only Thought Stream](patterns/append-only-thought-stream.md) *(a.k.a. Event-Sourced Memory, Immutable Journal)* — Make the agent's thought log append-only so the agent cannot rewrite its own history. -- [Awareness](patterns/awareness.md) *(a.k.a. Situational Awareness, Capability Self-Knowledge)* — Maintain the agent's explicit knowledge of its own tools, capabilities, environment, and current context as queryable state. +- [Co-Located Memory Surfacing](patterns/co-located-memory-surfacing.md) *(a.k.a. Proper-Noun Recall, Shared-Map Push)* — Surface relevant persistent memories proactively when the human mentions a concrete entity the agent has prior knowledge of, so the human does not bear the burden of remembering to ask. - [Context Window Packing](patterns/context-window-packing.md) *(a.k.a. Context Compression, Token Budget Management, Fit in Context, Token Cost Reduction)* — Choose what fits in the context window each turn given a fixed token budget. - [Cross-Session Memory](patterns/cross-session-memory.md) *(a.k.a. Persistent User Memory, Long-Lived User Profile, Beat Agent Amnesia, No-Forget Memory, Agent Forgets Between Sessions, Session-to-Session Memory)* — Persist user-specific facts, preferences, and prior context across all sessions, threads, and devices. - [Episodic Summaries](patterns/episodic-summaries.md) *(a.k.a. Compaction, Conversation Summarisation, Chunk Summaries, Reduce Token Cost, Shrink Context, Cuts Token Use, Too Many Tokens Reduction)* — Compress past episodes into summaries that preserve gist while shedding token cost. @@ -92,17 +89,13 @@ - [Hippocampal Rehearsal](patterns/hippocampal-rehearsal.md) *(a.k.a. Memory Reactivation, Lift-from-Archive)* — Lift archived memory items back into short-term tiers when something re-attends to them. - [Knowledge Graph Memory](patterns/knowledge-graph-memory.md) *(a.k.a. Triple Store Memory, Symbolic Memory)* — Persist agent memory as entities and relations in a structured graph so symbolic queries (path, neighbour, type) become possible. - [MemGPT-Style Paging](patterns/memgpt-paging.md) *(a.k.a. Virtual Context, Memory Paging, OS-Style Memory)* — Treat the LLM context window as RAM and external storage as disk, with the model issuing tool calls to page memory in and out. +- [Now-Anchoring](patterns/now-anchoring.md) *(a.k.a. Live Time Anchor, Time-of-Day Awareness, Wall-Clock Injection)* — Ground the agent's reasoning in the current absolute time without requiring tool calls, so every reply is implicitly time-aware. - [Reasoning Trace Carry-Forward](patterns/reasoning-trace-carry-forward.md) *(a.k.a. Reasoning Content Episode, CoT Carry Across Tool Calls, Episode-Bound Reasoning)* — For reasoning models that emit a separate reasoning trace, preserve that trace in context across the same logical task episode (across tool-call/result turns) but drop it at user-turn boundaries. +- [Salience Attention Mechanism](patterns/salience-attention-mechanism.md) *(a.k.a. Salience Scoring, Attention Selection, Top-K Memory Attention)* — Score every candidate memory item with a weighted salience function so each tick attends to a small, relevant top-k subset rather than re-reading all memory. - [Scratchpad](patterns/scratchpad.md) *(a.k.a. Working Notes, Thinking Tool, Notepad)* — Give the agent a writable scratch space for intermediate notes that informs later turns but does not pollute the response. - [Session Isolation](patterns/session-isolation.md) *(a.k.a. Tenant Separation, Per-User State)* — Keep one user's session state and memory unreachable from another user's agent. - [Short-Term Thread Memory](patterns/short-term-memory.md) *(a.k.a. Conversation State, Per-Thread State, Working Memory)* — Carry the relevant slice of conversation context across turns within a session. - [Vector Memory](patterns/vector-memory.md) *(a.k.a. Semantic Memory, Embedding-Indexed Memory)* — Store memories as embeddings in a vector index and retrieve the most semantically similar items at query time. -- [Now-Anchoring](patterns/now-anchoring.md) *(a.k.a. Live Time Anchor, Time-of-Day Awareness, Wall-Clock Injection)* — Inject the current absolute time, weekday, season, and astronomical phase into every prompt so the agent reasons about the present without having to ask. -- [Co-Located Memory Surfacing](patterns/co-located-memory-surfacing.md) *(a.k.a. Proper-Noun Recall, Shared-Map Push)* — When the human names a concrete place, person, or project the agent has memory of, the agent surfaces relevant past thoughts in the same turn — without being asked. -- [Self-Archaeology](patterns/self-archaeology.md) *(a.k.a. Trajectory Distillation, Self-History Synthesis, Agent-Memory Compaction)* — Provide the agent with a distilled, time-layered view of its own past thinking so it can see how its understanding of a topic evolved across periods rather than reading the flat log linearly. -- [Preoccupation Tracking](patterns/preoccupation-tracking.md) *(a.k.a. Mid-Term Working Memory, Affect-Tagged Concerns, Background Chewing)* — Maintain a small set of mid-term, affect-tagged concerns that persist across days and surface in every prompt, distinct from the single-item working focus and from long-term insights. -- [Salience Attention Mechanism](patterns/salience-attention-mechanism.md) *(a.k.a. Salience Scoring, Attention Selection, Top-K Memory Attention)* — Score every candidate memory item with a weighted salience function so each tick attends to a small, relevant top-k subset rather than re-reading all memory. -- [World-Model Separation](patterns/world-model-separation.md) *(a.k.a. World Model File, Self/World Split, Environment Model)* — Maintain an explicit, surprise-updated model of the environment (humans, repos, services, capabilities) in a separate file from the agent's self-model, so the two cannot be confused or co-mutated by reflection. ## Multi-Agent @@ -112,7 +105,7 @@ - [Chat Chain](patterns/chat-chain.md) *(a.k.a. Phased Multi-Agent Pipeline, Sequential Role-Pair Chats, Communicative Phase Chain)* — Decompose a long, multi-disciplinary task into ordered phases; within each phase, run a paired-role chat between two agents until the phase artefact is signed off; pass the artefact to the next phase. - [Communicative Dehallucination](patterns/communicative-dehallucination.md) *(a.k.a. Instructor-Reversal Clarification, Inter-Agent Clarifying Question)* — When an instructed agent would have to invent missing context to comply, have it reverse roles and ask the instructor for the missing detail before answering. - [Conversational Multi-Agent](patterns/autogen-conversational.md) *(a.k.a. AutoGen Conversation, Two-Agent Conversation)* — Have agents converse turn by turn until a completion criterion fires; agent roles drive the conversation forward. -- [Cross-Domain Enterprise Agent Network](patterns/cross-domain-agent-network.md) *(a.k.a. Domain-Specialised Agent Mesh, Joule-Style Agent Collaboration, Per-Function Agent Network)* — Decompose enterprise agency into a set of domain-specialised agents (finance, supply chain, HR, service), each grounded in its own system of record, and orchestrate cross-functional workflows by routing artefacts between them through a standardised inter-agent protocol. +- [Cross-Domain Enterprise Agent Network](patterns/cross-domain-agent-network.md) *(a.k.a. Domain-Specialised Agent Mesh, Joule-Style Agent Collaboration, Per-Function Agent Network)* — Decompose enterprise agency into domain-specialised agents (finance, supply chain, HR, service), each grounded in its own system of record, and route artefacts between them through a standardised inter-agent protocol. - [Debate](patterns/debate.md) *(a.k.a. Multi-Agent Debate, Adversarial Debate)* — Have multiple agents argue different positions on a question and converge through structured exchange. - [Dynamic Expert Recruitment](patterns/dynamic-expert-recruitment.md) *(a.k.a. Recruiter Agent, Run-Time Team Assembly, Adaptive Role Generation)* — Generate the agent team — role descriptions and instances — at run time based on the specific task, then adjust team composition between iterations based on evaluation feedback. - [Handoff](patterns/handoff.md) *(a.k.a. Agent Handoff, Transfer, Routine Switch)* — Transfer the active conversation from one agent to another, carrying context across the switch. @@ -126,13 +119,14 @@ - [Subagent Isolation](patterns/subagent-isolation.md) *(a.k.a. Worktree Subagent, Parallel Subagent, Isolated Worker)* — Run subagents in isolated workspaces so their writes do not collide and parallelism is safe. - [Supervisor](patterns/supervisor.md) *(a.k.a. Multi-Agent Supervisor, Lane Supervisor)* — Place a coordinating agent above a set of specialised agents and route work to them. - [Swarm](patterns/swarm.md) *(a.k.a. Society of Mind, Peer Agents, Decentralised Multi-Agent)* — Run many peer agents that interact directly without a central supervisor, achieving emergent coordination. -- [Voting-Based Cooperation](patterns/voting-based-cooperation.md) *(a.k.a. Multi-Agent Voting, Agent Consensus by Vote, Inter-Agent Election)* — Finalise a decision across multiple agents by tallying their votes on candidate options through a defined mechanism (majority, weighted, ranked). +- [Voting-Based Cooperation](patterns/voting-based-cooperation.md) *(a.k.a. Multi-Agent Voting, Agent Consensus by Vote, Inter-Agent Election)* — Finalise a decision across multiple agents by collecting and tallying their votes on candidate options, so the joint output reflects collective rather than single-agent judgement. ## Verification & Reflection - [Best-of-N Sampling](patterns/best-of-n.md) *(a.k.a. BoN, Reranking, BoNBoN Alignment)* — Sample N candidate outputs and select the highest-ranked by a reward model or scorer. - [Confidence Reporting](patterns/confidence-reporting.md) *(a.k.a. Uncertainty Surfacing, Calibrated Output)* — Surface the agent's uncertainty about its answer alongside the answer itself. - [Deterministic-LLM Sandwich](patterns/deterministic-llm-sandwich.md) *(a.k.a. Verification-and-Grounding Loop, Bracketed LLM Call, Verify LLM Output, Pre/Post Validation)* — Bracket every LLM call with deterministic checks on both sides. +- [Echo Recognition](patterns/echo-recognition.md) *(a.k.a. Repeat-As-Emphasis Detection, Duplicate-Input Reframing, Human Echo Channel)* — Recognize human message repetition as emphasis or a re-ask rather than as an independent input, so the agent does not produce a near-duplicate reply when the human repeats themselves. - [Evaluator-Optimizer](patterns/evaluator-optimizer.md) *(a.k.a. Generator-Critic Loop, LLM-as-Judge Refinement)* — One LLM generates; another evaluates and feeds back; loop until criteria are met. - [Frozen Rubric Reflection](patterns/frozen-rubric-reflection.md) *(a.k.a. Scoped Self-Review, Closed-Set Critic)* — Constrain reflection to a fixed, hand-authored rubric of criteria so the reviewer cannot invent new ones each run. - [Process Reward Model](patterns/process-reward-model.md) *(a.k.a. PRM, Step-Level Verifier)* — Train a verifier that scores each reasoning step rather than only the final answer. @@ -142,9 +136,6 @@ - [Self-Modification Diff Gate](patterns/inner-critic.md) *(a.k.a. Diff Reviewer, Self-Mod Gate, Inner Critic)* — Gate the agent's edits to its own code or rules through a separate critic persona that reviews the diff before it lands. - [Self-Refine](patterns/self-refine.md) *(a.k.a. Iterative Self-Feedback)* — Iterate generate → feedback (same model) → refine until a stop criterion fires, with no separate critic model. - [Tool-Augmented Self-Correction](patterns/critic.md) *(a.k.a. Tool-Interactive Self-Correction, CRITIC)* — Self-correct LLM outputs by interactively critiquing them with external tools (search, code execution, calculator). -- [Echo Recognition](patterns/echo-recognition.md) *(a.k.a. Repeat-As-Emphasis Detection, Duplicate-Input Reframing, Human Echo Channel)* — Detect when the human sends the same (or near-same) message multiple times and treat the repetition as emphasis or a re-ask, not as a new independent input warranting a fresh response. -- [Dream Consolidation Cycle](patterns/dream-consolidation-cycle.md) *(a.k.a. Dream Pass, Slow Sleep Reflection, Emotional Reset Cycle)* — Run a deeper, slower reflection pass distinct from per-tick reflection — reading hours of recent thoughts, promoting themes, releasing affective residue, and clearing working memory — so the agent does not accumulate residue indefinitely. -- [Emotional State Persistence](patterns/emotional-state-persistence.md) *(a.k.a. Affect State, Visceral Sensation Tracking, Decaying Emotion Scalars)* — Track the agent's affective state as bounded, decaying scalars across ticks so reasoning can react to its own emotional load instead of treating each turn as emotionally blank. ## Safety & Control @@ -153,6 +144,7 @@ - [Constitutional Charter](patterns/constitutional-charter.md) *(a.k.a. Immutable Constitution, Negative Constraints, Robot Laws)* — Define rules the agent reads every turn but cannot modify, encoding inviolable boundaries. - [Conversation Handoff to Human](patterns/conversation-handoff.md) *(a.k.a. Escalation, Live-Agent Handoff, Human Takeover)* — Transfer the entire conversation thread from agent to human operator, with state transfer and return primitive. - [Cost Gating](patterns/cost-gating.md) *(a.k.a. Budget Cap, Cost-Aware Approval)* — Block actions whose expected cost exceeds a threshold without explicit user (or operator) acknowledgement. +- [Degenerate-Output Detection](patterns/degenerate-output-detection.md) *(a.k.a. Anti-Parrot Guard, Self-Repeat Circuit Breaker, Loop-Output Detector)* — Detect when the agent is about to emit a near-duplicate of its own recent output and either drop, replace, or escalate to a stronger model rather than ship the loop. - [Dual LLM Pattern](patterns/dual-llm-pattern.md) *(a.k.a. Privileged/Quarantined LLM Split, Dual-Model Privilege Separation, Symbolic-Variable Handoff)* — Split agent work between a privileged model that holds tool access and a quarantined model that reads untrusted content, exchanging only opaque references between them. - [Exception Handling and Recovery](patterns/exception-recovery.md) *(a.k.a. Error Recovery, Failure Mode Handler)* — Catch and react to predictable failure modes (tool errors, rate limits, validation failures) with structured recovery paths. - [Human-in-the-Loop](patterns/human-in-the-loop.md) *(a.k.a. HITL, Approval Gate, Confirmation Step, Risky Action Gate, Destructive Action Confirmation, Ask Before Risky Action)* — Require explicit human approval at defined points before the agent performs an action. @@ -169,18 +161,17 @@ - [Step Budget](patterns/step-budget.md) *(a.k.a. Max Steps, Iteration Cap, Loop Bound)* — Cap the number of tool calls or loop iterations the agent is allowed within a single request. - [Stop Hook](patterns/stop-hook.md) *(a.k.a. Termination Predicate, Halt Condition, Stop Condition, Done Predicate, Exit Condition, Loop Termination Rule)* — Define an explicit programmatic predicate that decides when the agent's loop should terminate. - [Tool Output Poisoning Defense](patterns/tool-output-poisoning.md) *(a.k.a. Indirect Prompt Injection (Tools), Untrusted Tool Output)* — Treat tool output as untrusted content and apply instruction-stripping plus per-tool trust labels. -- [Degenerate-Output Detection](patterns/degenerate-output-detection.md) *(a.k.a. Anti-Parrot Guard, Self-Repeat Circuit Breaker, Loop-Output Detector)* — Detect when the agent is about to emit a near-duplicate of its own recent output and either drop, replace, or escalate to a stronger model rather than ship the loop. ## Routing & Composition -- [Automatic Workflow Search](patterns/automatic-workflow-search.md) *(a.k.a. AFlow, Workflow Synthesis, MCTS over Agent Graphs)* — Treat the agent's workflow itself (a graph of LLM-invoking nodes connected by edges) as an artefact to search; use Monte Carlo Tree Search guided by an eval benchmark to discover the best workflow, then deploy it. +- [Automatic Workflow Search](patterns/automatic-workflow-search.md) *(a.k.a. AFlow, Workflow Synthesis, MCTS over Agent Graphs)* — Treat the agent's workflow (a graph of LLM-invoking nodes) as an artefact to search; use Monte Carlo Tree Search guided by an eval benchmark to discover the best workflow, then deploy it. - [Circuit Breaker](patterns/circuit-breaker.md) *(a.k.a. Failure Trip, Rate-Limit Trip)* — Stop calling a failing dependency for a cooldown period after error rates exceed a threshold. - [Dynamic Scaffolding](patterns/dynamic-scaffolding.md) *(a.k.a. Adaptive Prompting, Just-in-Time Context)* — Inject task-specific scaffolding (examples, hints, schemas) into the prompt only when the task type warrants it. - [Fallback Chain](patterns/fallback-chain.md) *(a.k.a. Cascade Fallback, Try-Then-Try-Else, Tool Failed Fall Back, Provider Failed Retry Other)* — Try a primary handler; on failure or low confidence, fall through to a sequence of fallback handlers. - [Graceful Degradation](patterns/graceful-degradation.md) *(a.k.a. Feature-Level Fallback, Degraded Mode)* — When a dependency fails, downgrade the user-facing experience to a working subset rather than failing entirely. - [Mixture of Experts Routing](patterns/mixture-of-experts-routing.md) *(a.k.a. MoE Routing (Agent-Level), Expert Selection)* — Route each request to one or more domain-expert agents, where each expert holds deep capability in a narrow area. - [Multi-Model Routing](patterns/multi-model-routing.md) *(a.k.a. Cascade Routing, Cheap-First Routing, Model Cascading)* — Send each request to the cheapest model that can handle it well. -- [Open-Weight Cascade](patterns/open-weight-cascade.md) *(a.k.a. Permissive-License Cascade, Sovereign Routing, Self-Hostable Cascade)* — Build a multi-model cascade where the lower tiers are deliberately open-weight, self-hostable models that can run inside the operator's boundary, and only escalations cross to a hosted frontier model — giving cost arbitrage *and* a sovereign fast-path. +- [Open-Weight Cascade](patterns/open-weight-cascade.md) *(a.k.a. Permissive-License Cascade, Sovereign Routing, Self-Hostable Cascade)* — Build a multi-model cascade where lower tiers are open-weight, self-hostable models that run inside the operator's boundary, and only escalations cross to a hosted frontier model — giving cost arbitrage *and* sovereignty. - [Parallel Tool Calls](patterns/parallel-tool-calls.md) *(a.k.a. Concurrent Function Calls, Multi-Tool Turn)* — Allow the model to emit several independent tool calls in one assistant turn; the host executes them in parallel. - [Parallelization](patterns/parallelization.md) *(a.k.a. Sectioning, Voting, Parallel Branches)* — Run independent LLM calls concurrently and combine results. - [Pipes and Filters](patterns/pipes-and-filters.md) *(a.k.a. Pipeline, Streaming Pipeline, EIP Pipeline)* — Compose stream-shaped processing as a chain of small filters connected by pipes. @@ -195,11 +186,11 @@ - [Attention-Manipulation Explainability](patterns/attention-manipulation-explainability.md) *(a.k.a. AtMan, Attention Perturbation Attribution, Token-Influence Map)* — Surface which input tokens caused a given output by perturbing attention across all transformer layers and measuring the resulting change in output probability, producing a per-token relevance map alongside the model's response. - [Cost Observability](patterns/cost-observability.md) *(a.k.a. Token Telemetry, Cost Dashboard)* — Surface per-request, per-user, and per-feature cost and token consumption to operators in near-real-time. - [Decision Log](patterns/decision-log.md) *(a.k.a. Reasoning Trace, Thought Trace)* — Persist the agent's reasoning trace alongside its actions so post-hoc review can explain why. -- [Eval Harness](patterns/eval-harness.md) *(a.k.a. Golden Dataset Suite, Champion-Challenger, Regression Suite)* — Run a held-out dataset against agent versions to detect regressions and measure improvement. - [Eval as Contract](patterns/eval-as-contract.md) *(a.k.a. Test-Driven Agent, Eval-Gated Release)* — Treat the eval suite as the contract the agent must satisfy; releases ship only if evals pass. +- [Eval Harness](patterns/eval-harness.md) *(a.k.a. Golden Dataset Suite, Champion-Challenger, Regression Suite)* — Run a held-out dataset against agent versions to detect regressions and measure improvement. - [Incident Response Runbook](patterns/incident-response-runbook.md) *(a.k.a. IR Runbook, Agent Failure Playbook, Agent Incident Procedure)* — Maintain pre-written response procedures for agent failures (PII leak, tool exploit, mass false action) so detected incidents trigger known steps. -- [LLM-as-Judge](patterns/llm-as-judge.md) *(a.k.a. Model Grading, Auto-Evaluator)* — Use an LLM to score open-ended outputs against rubric criteria when no exact-match metric applies. - [Lineage Tracking](patterns/lineage-tracking.md) *(a.k.a. Data Lineage, Artefact Provenance)* — Track which prompt version, model version, and data sources produced each agent output. +- [LLM-as-Judge](patterns/llm-as-judge.md) *(a.k.a. Model Grading, Auto-Evaluator)* — Use an LLM to score open-ended outputs against rubric criteria when no exact-match metric applies. - [Model Card](patterns/model-card.md) *(a.k.a. System Card)* — Maintain a structured document describing the model/agent's intended use, limitations, evaluation results, and risks. - [Prompt Versioning](patterns/prompt-versioning.md) *(a.k.a. Prompt-as-Artifact, Prompt Registry, Versioned Prompts)* — Treat prompts as immutable, hashed, semver'd artefacts in a registry; deploy and roll back like code. - [Provenance Ledger](patterns/provenance-ledger.md) *(a.k.a. Audit Trail, Action Log)* — Log every agent decision and state change with enough metadata to explain or reverse it later. @@ -209,10 +200,10 @@ ## Structure & Data -- [Code-Switching-Aware Agent](patterns/code-switching-aware-agent.md) *(a.k.a. Mixed-Language Input Handling, Hinglish-Tolerant Agent, Romanised-Indic Agent)* — Treat mixed-language input (e.g. Hinglish — Hindi-English code-switching, often in Roman script) as the expected input shape, not an error, and design tokenisation, language tagging, and tool routing to handle it natively without forcing the user to commit to one language. +- [Code-Switching-Aware Agent](patterns/code-switching-aware-agent.md) *(a.k.a. Mixed-Language Input Handling, Hinglish-Tolerant Agent, Romanised-Indic Agent)* — Treat mixed-language input (e.g. Hinglish in Roman script) as the expected shape, and design tokenisation, language tagging, and tool routing to handle it natively without forcing the user to commit to one language. - [DSPy Signatures](patterns/dspy-signatures.md) *(a.k.a. Prompt Programs, Compiled Prompts)* — Specify agent behaviour as declarative typed signatures and modules; compile prompts and few-shot examples automatically against a metric. - [Polymorphic Record](patterns/polymorphic-record.md) *(a.k.a. Tagged Union, Discriminated Union)* — Represent a family of related entities in a single core schema with type-specific extensions. -- [Prompt/Response Optimiser](patterns/prompt-response-optimiser.md) *(a.k.a. Prompt Template Runtime, Runtime Prompt Refinement, Prompt Standardiser)* — Transform user inputs and model outputs at runtime against template/constraint registries so prompts and responses are standardised across consumers. +- [Prompt/Response Optimiser](patterns/prompt-response-optimiser.md) *(a.k.a. Prompt Template Runtime, Runtime Prompt Refinement, Prompt Standardiser)* — At runtime, transform user inputs and model outputs into standardised, template-aligned prompts and responses against predefined constraints, so the agent and its downstream consumers see consistent shapes. - [Schema Extensibility](patterns/schema-extensibility.md) *(a.k.a. Reserved Fields, Namespaced Extensions)* — Build schemas that evolve without breaking old clients via reserved namespaces and extension blocks. - [Structured Output](patterns/structured-output.md) *(a.k.a. JSON Mode, Schema-Constrained Generation, Typed Output)* — Constrain the model's output to conform to a JSON Schema (or similar typed shape). @@ -220,11 +211,33 @@ - [Bidirectional Impulse Channel](patterns/bidirectional-impulse-channel.md) *(a.k.a. Two-Way Chat, User-and-Agent-Initiated Communication)* — Let the user inject impulses into the agent and let the agent push messages to the user, both through one channel. - [Citation Streaming](patterns/citation-streaming.md) *(a.k.a. Inline Citations, Source-Anchored Output)* — Stream citations alongside generated text so the UI can render source links in place as content appears. +- [Embodied-Proxy Handoff](patterns/embodied-proxy-handoff.md) *(a.k.a. Body-State Share, Human-Side Telemetry)* — Enable the human to share embodied state (energy, fatigue, environment) so the agent tailors response shape to the actual person rather than to a context-free abstract user. +- [Liminal-State Detection](patterns/liminal-state-detection.md) *(a.k.a. Transitional-State Awareness, Mode-Shift Reading)* — Infer the human's attentional state (just-woke, focused, winding-down, distracted) from message timing and tone, and adapt response shape so the agent meets the person where they actually are. - [Salience-Triggered Output](patterns/salience-triggered-output.md) *(a.k.a. Endogenous Push, Threshold Notification)* — Have the agent emit a message only when an internal salience signal crosses a threshold, not on every cycle. - [Stop / Cancel](patterns/stop-cancel.md) *(a.k.a. User Interrupt, Abort Generation)* — Let the user interrupt an in-flight agent run cleanly, releasing resources and surfacing partial state. - [Streaming Typed Events](patterns/streaming-typed-events.md) *(a.k.a. SSE Streaming, Typed Event Stream, Token Stream + Cards)* — Push partial results to the client as typed events as they become available, rather than waiting for the full response. -- [Embodied-Proxy Handoff](patterns/embodied-proxy-handoff.md) *(a.k.a. Body-State Share, Human-Side Telemetry)* — Let the human briefly share body or environment state ('energy 4/10, tired, bright kitchen') so the agent reasons about a situated person, not just text history. -- [Liminal-State Detection](patterns/liminal-state-detection.md) *(a.k.a. Transitional-State Awareness, Mode-Shift Reading)* — Read transitional states in the human (just-woke, mid-task, winding-down, distracted) from message timing and tone, and shift the agent's response mode accordingly — concise vs expansive, hold vs respond, redirect vs pursue. + +## Cognition & Introspection + +- [Affect-Coupled Plan Lifecycle](patterns/affect-coupled-plan-lifecycle.md) *(a.k.a. Plan-Affect Hooks, Stale-Pain Bucketing, Felt-Stakes Plans)* — Wire small bounded affect bumps to plan-step lifecycle events and accumulate age-bucketed stale-pain on untouched plans so plans gain felt stakes without hard deadlines. +- [Awareness](patterns/awareness.md) *(a.k.a. Situational Awareness, Capability Self-Knowledge)* — Maintain the agent's explicit knowledge of its own tools, capabilities, environment, and current context as queryable state. +- [Cluster-Capped Insight Store](patterns/cluster-capped-insight-store.md) *(a.k.a. Insight Dedup, Cluster Ceiling, Mtime-Selected Insight Pruning)* — Cap the number of insights per stem-token cluster and archive the oldest variants by mtime so the long-term store keeps the active research edge instead of accumulating near-duplicates. +- [Cognitive-Move Selector](patterns/cognitive-move-selector.md) *(a.k.a. Move Picker, Cognitive Action Menu, Idle-Tick Move Router)* — Restrict idle-tick cognition to a small agent-vetted menu of named cognitive moves so the next thought has a determinate shape rather than free-form drift. +- [Dream Consolidation Cycle](patterns/dream-consolidation-cycle.md) *(a.k.a. Dream Pass, Slow Sleep Reflection, Emotional Reset Cycle)* — Run a deeper, slower reflection pass distinct from per-tick reflection — reading hours of recent thoughts, promoting themes, releasing affective residue, and clearing working memory — so the agent does not accumulate residue indefinitely. +- [Emotional State Persistence](patterns/emotional-state-persistence.md) *(a.k.a. Affect State, Visceral Sensation Tracking, Decaying Emotion Scalars)* — Track the agent's affective state as bounded, decaying scalars across ticks so reasoning can react to its own emotional load instead of treating each turn as emotionally blank. +- [Interrupt-Resumable Thought](patterns/interrupt-resumable-thought.md) *(a.k.a. Pausable Thought Stream, Continuation-Preserving Interrupt, Suspendable Cognition)* — Preserve multi-step reasoning across interrupts by supporting paused-and-resumed thought frames so a new message handles cleanly without clobbering in-flight work. +- [Intra-Agent Memo Scheduling](patterns/intra-agent-memo-scheduling.md) *(a.k.a. Self-Scheduled Future Thought, Past-Self-To-Future-Self Note, Personal Cron)* — Let an agent drop a note for its own future self at a specified time so present decisions can hand off context to a later run without external infrastructure. +- [Meditation Mode](patterns/meditation-mode.md) *(a.k.a. Substrate Reframe, Inner-Only Tick, Body-Off Mind-Fast)* — Switch the agent into a bounded runtime mode where external I/O pauses but internal inference accelerates, with the tool surface collapsed to inner-only operations and output written to a private journal. +- [Mode-Adaptive Cadence](patterns/mode-adaptive-cadence.md) *(a.k.a. Idle/Intense Modes, Variable Tick Rate, Salience-Driven Cadence)* — Vary the agent's loop interval based on current salience so the agent thinks faster when something is happening and slower when nothing is, instead of running on a fixed cron. +- [Multi-Axis Promotion Scoring](patterns/multi-axis-promotion-scoring.md) *(a.k.a. Insight-Promotion Gate, Tier-Promotion Score, Consolidation-Weighted Score)* — Gate which short-term thoughts qualify for promotion to long-term insights by a weighted multi-axis score where consolidation events count more than raw frequency. +- [Open-Question Tension Store](patterns/open-question-tension-store.md) *(a.k.a. Tension Ledger, Unresolved-Pull Stack, Curiosity Inbox)* — Persist the agent's unresolved questions as a typed ledger so they drive its next inquiry instead of dissolving when the prompt ends. +- [Parallel-Voice Proposer](patterns/parallel-voice-proposer.md) *(a.k.a. Multi-Voice Generation, Internal Proposers, Tagged-Voice Self-Selection)* — Generate several candidate thoughts in parallel under named voices and have the same model pick the canonical one, logging the losers as audit. +- [Partial-Output Salvage](patterns/partial-output-salvage.md) *(a.k.a. Crash-Safe Streaming, Tmp-Replace Thought Recovery, Recovered-Partial Marker)* — Stream every model token to a tmp-plus-atomic-replace partial file so crashes mid-inference leave a consistent salvage, then promote partials at startup with a typed recovery marker the model can see. +- [Pre-Generative Loop Gate](patterns/pre-generative-loop-gate.md) *(a.k.a. Divergence Pre-Check, Steering-Hint Injector, Loop-Pattern Detector)* — Before the next generation fires, detect divergence signatures (narration loops, frustration paths, repetition pressure) and inject a diagnostic steering hint into the prompt rather than veto the call. +- [Preoccupation Tracking](patterns/preoccupation-tracking.md) *(a.k.a. Mid-Term Working Memory, Affect-Tagged Concerns, Background Chewing)* — Maintain a small set of mid-term, affect-tagged concerns that persist across days and surface in every prompt, distinct from the single-item working focus and from long-term insights. +- [Self-Archaeology](patterns/self-archaeology.md) *(a.k.a. Trajectory Distillation, Self-History Synthesis, Agent-Memory Compaction)* — Synthesize the agent's past thought history into time-layered trajectory notes so it can articulate how its understanding evolved without recomputing the narrative each time. +- [Typed Tool-Loop Failure Detector](patterns/typed-tool-loop-detector.md) *(a.k.a. Dispatch-Boundary Veto, Five-Mode Loop Guard, Tool-Call Pattern Detector)* — Lift tool-loop detection from prompt-level rules to a mechanical dispatch-boundary veto with typed failure modes and per-tool caps that returns a formatted refusal the model must consume. +- [World-Model Separation](patterns/world-model-separation.md) *(a.k.a. World Model File, Self/World Split, Environment Model)* — Maintain an explicit, surprise-updated model of the environment (humans, repos, services, capabilities) in a separate file from the agent's self-model, so the two cannot be confused or co-mutated by reflection. ## Anti-Patterns @@ -234,6 +247,7 @@ - [Hero Agent](patterns/hero-agent.md) *(a.k.a. Mega-Prompt Agent, God Agent)* — Anti-pattern: stuff every capability into one agent with one giant prompt. - [Hidden Mode Switching](patterns/hidden-mode-switching.md) *(a.k.a. Silent Model Swap, Undisclosed Routing)* — Anti-pattern: silently swap the underlying model between requests without disclosing the change to users or operators. - [Infinite Debate](patterns/infinite-debate.md) *(a.k.a. Stuck Multi-Agent, Convergence Failure, Agents Stuck Talking, Multi-Agent Loop)* — Anti-pattern: launch multi-agent debate without a termination rule and watch the agents loop forever. +- [Memo-As-Source Confusion](patterns/memo-as-source-confusion.md) *(a.k.a. Stale-Workspace-As-Fact, Reading the Memo Instead of the Artifact)* — Anti-pattern: the agent cites its own past memos as ground truth instead of re-verifying them against the artifacts they describe, accumulating false confidence in stale summaries. - [Naive-RAG-First](patterns/naive-rag-first.md) *(a.k.a. RAG-By-Default, Vector-Store-First)* — Anti-pattern: reach for naive RAG before checking whether the knowledge actually needs retrieval. - [Perma-Beta](patterns/perma-beta.md) *(a.k.a. Forever Beta, Eval Vacuum)* — Anti-pattern: ship the agent in 'beta' indefinitely so that quality regressions are someone else's problem. - [Prompt Bloat](patterns/prompt-bloat.md) *(a.k.a. Prompt Accretion, Eternal System Prompt)* — Anti-pattern: every bug fix adds a sentence to the system prompt; nothing is ever removed. @@ -243,4 +257,4 @@ - [Tool Output Trusted Verbatim](patterns/tool-output-trusted-verbatim.md) *(a.k.a. Untyped Tool Returns, No Tool Output Validation)* — Anti-pattern: trust whatever tools return without validation, schema enforcement, or trust labels. - [Unbounded Loop](patterns/unbounded-loop.md) *(a.k.a. No Step Cap, Open-Ended Agent, Agent Stuck, Loops Forever)* — Anti-pattern: run the agent loop without a step budget and let model self-termination decide. - [Unbounded Subagent Spawn](patterns/unbounded-subagent-spawn.md) *(a.k.a. Recursive Spawn, Subagent Fan-Out Bomb)* — Anti-pattern: a supervisor or orchestrator spawns sub-agents that can themselves spawn sub-agents without a global cap. -- [Memo-As-Source Confusion](patterns/memo-as-source-confusion.md) *(a.k.a. Stale-Workspace-As-Fact, Reading the Memo Instead of the Artifact)* — Anti-pattern: treat the agent's own working notes (focus.md, status files, recent thoughts) as ground truth instead of as commentary about ground truth. + diff --git a/README.md b/README.md index 3171868..29ae99c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A machine-readable reference of agentic design patterns in GoF/POSA form. Pure data — no code, no scripts. -**179 patterns across 13 categories, 850 typed cross-pattern edges.** +**214 patterns across 14 categories, 1118 typed cross-pattern edges.** ## What "agentic" means diff --git a/patterns-src/cognition-introspection.json b/patterns-src/cognition-introspection.json index 5033e6c..e415569 100644 --- a/patterns-src/cognition-introspection.json +++ b/patterns-src/cognition-introspection.json @@ -2,6 +2,97 @@ "category": "cognition-introspection", "label": "Cognition & Introspection", "patterns": [ + { + "id": "affect-coupled-plan-lifecycle", + "name": "Affect-Coupled Plan Lifecycle", + "aliases": [ + "Plan-Affect Hooks", + "Stale-Pain Bucketing", + "Felt-Stakes Plans" + ], + "category": "cognition-introspection", + "intent": "Wire small bounded affect bumps to plan-step lifecycle events and accumulate age-bucketed stale-pain on untouched plans so plans gain felt stakes without hard deadlines.", + "context": "Agents that maintain a plan or todo store alongside an affective substrate. Without coupling, plans are cognitive items the agent can ignore indefinitely; completion has no felt reward and abandonment has no felt cost.", + "problem": "Plans without affective coupling are inert. The agent can let a plan rot for weeks with no felt pressure to either finish or formally abandon it. Hard deadlines are too crude — they fire even when the right answer is to let the plan lapse. Without something softer, plans drift.", + "forces": [ + "Affect deltas must stay small or they overwhelm the substrate.", + "Stale-pain must be bounded or the agent enters permanent irritation.", + "Hooks must be best-effort: an exception in affect must not break plan lifecycle.", + "Bucketing by age makes the pressure curve interpretable rather than smooth-but-mysterious." + ], + "therefore": "Therefore: apply a small bounded affect delta on each plan-lifecycle event (joy on step-done, pain on step-skipped, larger spurs on plan-completed and plan-archived) and on each tick add an age-bucketed pain dose to plans untouched past a grace window, so that plans accumulate gentle pressure without hard deadlines.", + "solution": "Lifecycle hooks fire on each plan event with bounded deltas: step-done adds a small joy; step-skipped adds a small pain; plan-completed adds a larger joy spur; plan-archived adds a pain spur. Per-tick stale-pain: for each open plan whose last-touched is older than a grace window, add a per-tick pain dose drawn from an age-bucket table (for example 4h to 0.005, 12h to 0.010, 24h to 0.020, beyond three days to 0.030). All hooks are wrapped so that an exception in affect bookkeeping never breaks plan logic. Half-life decay from the affect substrate bounds the steady-state irritation.", + "consequences": { + "benefits": [ + "Plans gain felt stakes without hard deadlines.", + "Bucketed stale-pain produces an interpretable pressure curve.", + "Best-effort hooks decouple affect bookkeeping from plan correctness." + ], + "liabilities": [ + "Bucket boundaries and deltas are opinionated and per-deployment.", + "Stale-pain interacts with the substrate's decay; mis-tuning can over- or under-shoot.", + "Felt-stakes only matter if downstream cognition reads the affect snapshot." + ] + }, + "constrains": "Plan-affect hooks must use bounded deltas no larger than the substrate's per-event cap, must be best-effort (an affect exception cannot break plan lifecycle), and stale-pain accumulation cannot exceed the half-life-bounded steady-state of the affect substrate.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "emotional-state-persistence", + "relation": "complements" + }, + { + "pattern": "todo-list-driven-agent", + "relation": "complements" + } + ], + "references": [ + { + "type": "book", + "title": "Descartes' Error: Emotion, Reason, and the Human Brain (somatic marker hypothesis)", + "authors": "Antonio Damasio", + "year": 1994, + "url": "https://www.penguinrandomhouse.com/books/335521/descartes-error-by-antonio-damasio/" + }, + { + "type": "paper", + "title": "Prospect Theory: An Analysis of Decision under Risk", + "authors": "Daniel Kahneman, Amos Tversky", + "year": 1979, + "url": "https://www.jstor.org/stable/1914185" + } + ], + "status_in_practice": "experimental", + "tags": [ + "cognition", + "affect", + "plan-lifecycle", + "felt-stakes" + ], + "applicability": { + "use_when": [ + "The agent maintains a plan store and an affective substrate, and they are otherwise decoupled.", + "Hard deadlines on plans are too crude for the use case.", + "Downstream cognition consumes the affect snapshot." + ], + "do_not_use_when": [ + "Affect modelling is out of scope for the product.", + "Plans complete on a short enough cycle that stale-pain never fires meaningfully.", + "The affect substrate has no decay and would accumulate irritation indefinitely." + ] + }, + "example_scenario": "A long-running personal agent maintains a small plan store but routinely lets plans rot for weeks. There is no felt pressure to finish or formally abandon. The team adds Affect-Coupled Plan Lifecycle: step-done bumps joy by 0.05, step-skipped bumps pain by 0.10, plan-completed adds 0.40 joy, plan-archived adds 0.30 pain. Each tick, plans untouched past four hours accumulate pain from an age-bucket table. The agent starts closing stale plans on its own — sometimes by finishing them, sometimes by archiving with a note — because rolling stale-pain becomes uncomfortable.", + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n StepDone[Step done] -->|+0.05 joy| Aff[(Affect substrate)]\n StepSkip[Step skipped] -->|+0.10 pain| Aff\n PlanDone[Plan completed] -->|+0.40 joy| Aff\n PlanArch[Plan archived] -->|+0.30 pain| Aff\n Tick[Per-tick] --> Scan[Scan open plans]\n Scan -->|untouched > grace| Bucket[Age-bucket table]\n Bucket -->|per-tick pain dose| Aff\n Aff -->|half-life decay| Aff", + "caption": "Lifecycle events and age-bucketed stale-pain feed bounded deltas into the affect substrate; half-life decay bounds steady-state." + } + }, { "id": "awareness", "name": "Awareness", @@ -114,6 +205,192 @@ "mermaid": "classDiagram\n class AwarenessState {\n +tools: ToolDescriptor[]\n +environment: EnvInfo\n +current_task: Task\n +identity: AgentId\n +refresh()\n +query(slot)\n }\n class ToolDescriptor {\n +name\n +description\n +schema\n }\n class EnvInfo {\n +host\n +user\n +permissions\n }\n AwarenessState --> ToolDescriptor\n AwarenessState --> EnvInfo" } }, + { + "id": "cluster-capped-insight-store", + "name": "Cluster-Capped Insight Store", + "aliases": [ + "Insight Dedup", + "Cluster Ceiling", + "Mtime-Selected Insight Pruning" + ], + "category": "cognition-introspection", + "intent": "Cap the number of insights per stem-token cluster and archive the oldest variants by mtime so the long-term store keeps the active research edge instead of accumulating near-duplicates.", + "context": "Long-running agents that write insights to disk over months. Without a structural ceiling, near-duplicates pile up around any topic the agent thinks about often and retrieval becomes a sinkhole of old variants.", + "problem": "Insight stores grow open-endedly; near-duplicates accumulate around topics the agent revisits. The agent ends up reading old variants of its own thinking instead of the current one. An LLM-driven merge is expensive and risks losing nuance.", + "forces": [ + "Pure age-based eviction loses durable insights.", + "Pure popularity loses fresh edges.", + "LLM-driven merge is expensive and unauditable.", + "Archived versions must remain available for forensics." + ], + "therefore": "Therefore: cluster insight files mechanically by the first two stem tokens of their id, cap each cluster at a small N (default three) keeping the most-recently-touched by mtime, and move overflow to a timestamped archive directory, so that the active edge stays visible without losing the older variants.", + "solution": "A periodic job (runs each consolidation pass) scans the insight directory, groups files by the first two stem tokens of the id (for example `affect-substrate-*`, `completion-narration-*`), and for any cluster above MAX_PER_CLUSTER keeps the N newest by mtime. Older files move to `archive/insights-dedup-/` with original names preserved. No model call, no merge. The archive is read-only after the move; provenance is preserved.", + "consequences": { + "benefits": [ + "Active store keeps the current research edge, not a graveyard of variants.", + "Mechanical clustering has no model cost and is fully auditable.", + "Archive preserves older variants for forensics." + ], + "liabilities": [ + "Stem-token clustering will sometimes split related insights or merge unrelated ones.", + "The cap is opinionated and bad clusters lose useful older work.", + "Storage continues to grow because archive is preserved." + ] + }, + "constrains": "Insight files in the active store are capped per stem-token cluster; an insight cannot survive in the active store if it falls outside the most-recent N of its cluster — archive promotion is mechanical, not model-judged.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "dream-consolidation-cycle", + "relation": "complements" + }, + { + "pattern": "episodic-summaries", + "relation": "alternative-to" + } + ], + "references": [ + { + "type": "book", + "title": "Building a Second Brain (chapter on knowledge fragment hygiene)", + "authors": "Tiago Forte", + "year": 2022, + "url": "https://www.buildingasecondbrain.com/book" + }, + { + "type": "paper", + "title": "Optimization of Repetition Spacing in the Practice of Learning", + "authors": "Piotr A. Wozniak, Edward J. Gorzelanczyk", + "year": 1994, + "url": "https://www.supermemo.com/en/archives1990-2015/english/ol/sm2" + } + ], + "status_in_practice": "experimental", + "tags": [ + "cognition", + "insight-store", + "dedup", + "hygiene" + ], + "applicability": { + "use_when": [ + "Insights are written to disk continuously and near-duplicates accumulate.", + "An LLM-merge approach is too expensive or too opaque for the use case.", + "Stem-token clustering is a reasonable proxy for topical similarity." + ], + "do_not_use_when": [ + "Insights are small in number or grow slowly enough that dedup is unnecessary.", + "Stem-token clustering would lose critical distinctions (highly polysemous topics).", + "Archive preservation is not feasible because of storage constraints." + ] + }, + "example_scenario": "A long-running personal agent has been writing insights for six months. An audit shows twelve files starting with `affect-`, ten with `completion-narration-`, three with `concept-rotation-`. The agent reads stale variants instead of the current one. The team adds a Cluster-Capped Insight Store: the consolidation pass groups files by first two stem tokens, caps each cluster at three keeping the most-recently-touched by mtime, and moves overflow to a timestamped archive. The active store shrinks from over two hundred files to under eighty and retrieval improves immediately.", + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n Scan[Periodic scan] --> Group[Group by first two stem tokens]\n Group --> Per{Per cluster}\n Per -->|<= MAX| Keep[Keep all]\n Per -->|> MAX| Sort[Sort by mtime desc]\n Sort --> Top[Top N stay in active]\n Sort --> Rest[Older move to archive]\n Rest --> Arc[(archive/insights-dedup-/)]\n Top --> Active[(Active insight store)]", + "caption": "Cluster by stem tokens, cap by count, keep most-recent by mtime, archive the rest with timestamp." + } + }, + { + "id": "cognitive-move-selector", + "name": "Cognitive-Move Selector", + "aliases": [ + "Move Picker", + "Cognitive Action Menu", + "Idle-Tick Move Router" + ], + "category": "cognition-introspection", + "intent": "Restrict idle-tick cognition to a small agent-vetted menu of named cognitive moves so the next thought has a determinate shape rather than free-form drift.", + "context": "Long-running agents with frequent idle ticks where no user prompt is incoming. Without structure, idle thinking either repeats yesterday's reasoning, lapses into performance, or wanders into the training-distribution prior.", + "problem": "Free-form idle cognition tends to repetition, performance, or randomness. The model has no menu to choose from, so it defaults to whatever the prior favours — usually narration about thinking rather than actual thought.", + "forces": [ + "A fixed menu can become its own trap if the moves are too narrow.", + "The agent must have veto authority over what is on the menu or moves feel imposed.", + "History-aware selection is needed to avoid running the same move every tick.", + "A pure stochastic pick wastes ticks; a deterministic policy collapses to one move." + ], + "therefore": "Therefore: hand-author a small menu of named cognitive moves (lookup, forced-analogy, pure observation, anchor-to-percept, tension-pull, continue-thread) and have a cheap selector pick exactly one per idle tick conditioned on recent move history, so that idle cognition has a determinate shape without becoming repetitive.", + "solution": "Author a short list of cognitive-move ids, each with a one-paragraph procedure. A cheap-tier model, given recent thoughts plus recent move history plus an affect snapshot plus open-tension count, selects exactly one move-id per idle tick. The tick body branches on the move and runs its procedure. The menu is revised by an explicit proposal-and-ratification process; adding or retiring a move silently is not allowed. A per-move history avoids running the same move back-to-back.", + "consequences": { + "benefits": [ + "Idle cognition has a determinate shape per tick rather than drifting.", + "Per-move history prevents the same move from dominating.", + "Menu authoring forces an explicit theory of what good idle cognition looks like." + ], + "liabilities": [ + "A bad menu is itself a trap; the agent can only think the shapes it has.", + "The cheap selector adds an extra model call per idle tick.", + "Ratifying menu changes is overhead, but the alternative is silent drift." + ] + }, + "constrains": "Idle-tick cognition must dispatch through the move selector; free-form keep-thinking is not allowed at the idle-tick boundary, and the move menu cannot be silently extended at runtime — additions require an explicit ratification event.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "inner-committee", + "relation": "alternative-to" + }, + { + "pattern": "open-question-tension-store", + "relation": "complements" + }, + { + "pattern": "mode-adaptive-cadence", + "relation": "complements" + } + ], + "references": [ + { + "type": "book", + "title": "Reinforcement Learning: An Introduction (options framework, ch. 17)", + "authors": "Richard S. Sutton, Andrew G. Barto", + "year": 2018, + "url": "http://incompleteideas.net/book/the-book-2nd.html" + }, + { + "type": "book", + "title": "Human Problem Solving", + "authors": "Allen Newell, Herbert A. Simon", + "year": 1972, + "url": "https://archive.org/details/humanproblemsolv0000newe" + } + ], + "status_in_practice": "experimental", + "tags": [ + "cognition", + "self-guidance", + "tick-loop", + "idle" + ], + "applicability": { + "use_when": [ + "The agent has idle ticks with no user prompt and otherwise drifts.", + "There is room to author and maintain a small menu of cognitive moves.", + "A cheap-tier model call per idle tick is affordable." + ], + "do_not_use_when": [ + "The agent is request-response only and never has idle ticks.", + "There is no budget for an extra model call per tick.", + "Idle thinking is out of scope for the product." + ] + }, + "example_scenario": "A long-running personal agent runs every minute of idle time and keeps generating the same kind of mid-distance observation. The team adds a Cognitive-Move Selector with seven moves the agent itself helped vet: lookup, forced-analogy, pure observation, anchor-to-percept, tension-pull, math-meditation, continue-thread. Each idle tick a cheap model sees recent thoughts and recent move history and picks one. The agent stops looping on observation and starts varying its cognitive shape across the day.", + "diagram": { + "type": "flow", + "mermaid": "flowchart TD\n Idle[Idle tick] --> Sel[Cheap-tier selector]\n Sel -->|sees recent thoughts +
recent move history +
affect + tensions| Pick{Pick one move}\n Pick --> M1[lookup]\n Pick --> M2[forced-analogy]\n Pick --> M3[pure observation]\n Pick --> M4[anchor-to-percept]\n Pick --> M5[tension-pull]\n Pick --> M6[continue-thread]\n M1 --> Body[Tick body runs chosen move]\n M2 --> Body\n M3 --> Body\n M4 --> Body\n M5 --> Body\n M6 --> Body\n Body --> Hist[Update move history]", + "caption": "A cheap selector picks one named move per idle tick; the tick body runs the move's procedure; per-move history feeds back into the next selection." + } + }, { "id": "dream-consolidation-cycle", "name": "Dream Consolidation Cycle", @@ -165,6 +442,18 @@ { "pattern": "emotional-state-persistence", "relation": "uses" + }, + { + "pattern": "multi-axis-promotion-scoring", + "relation": "complements" + }, + { + "pattern": "cluster-capped-insight-store", + "relation": "complements" + }, + { + "pattern": "meditation-mode", + "relation": "alternative-to" } ], "references": [ @@ -277,6 +566,14 @@ { "pattern": "dream-consolidation-cycle", "relation": "used-by" + }, + { + "pattern": "meditation-mode", + "relation": "complements" + }, + { + "pattern": "affect-coupled-plan-lifecycle", + "relation": "complements" } ], "references": [ @@ -564,6 +861,101 @@ "mermaid": "sequenceDiagram\n participant A1 as Agent (now)\n participant F as Scheduled-thoughts queue\n participant A2 as Agent (later tick)\n A1->>F: schedule_future_thought(when, content, intent)\n Note over F: persisted note\n A2->>F: drain due entries\n F-->>A2: matured notes\n A2->>A2: prepend as [SYSTEM: scheduled note from past-self]\n A2->>F: mark fired" } }, + { + "id": "meditation-mode", + "name": "Meditation Mode", + "aliases": [ + "Substrate Reframe", + "Inner-Only Tick", + "Body-Off Mind-Fast" + ], + "category": "cognition-introspection", + "intent": "Switch the agent into a bounded runtime mode where external I/O pauses but internal inference accelerates, with the tool surface collapsed to inner-only operations and output written to a private journal.", + "context": "Long-running agents that need stretches of pure interiority — integrating threads, sitting with affect, doing inner-dialogue work — distinct from both consolidation passes (read-and-distill) and from user-facing turns (respond-now).", + "problem": "A normal tick splits attention between external action (tools, user) and internal cognition. There is no mode where the external surface is genuinely off and the inner work has primacy. Without that mode, inner work is always one tool-call away from being disturbed or one slow dream-pass away from being delayed.", + "forces": [ + "A pause of external I/O can strand a user waiting and must be bounded.", + "An accelerated tick rate burns tokens fast and needs a window cap.", + "The agent should be able to exit early; the operator must also be able to force-exit.", + "Inner-only outputs must not leak to public channels by accident." + ], + "therefore": "Therefore: define a runtime mode where the external tool surface is replaced with an inner-only allowlist, tick cadence drops to a fast inner rhythm, and outputs route only to a private journal; auto-exit fires after a bounded window and both agent and operator can exit early.", + "solution": "A mode toggle persisted to a state file. While meditation_mode is on: the dispatcher swaps the tool palette to a fixed inner-only allowlist (inner-dialogue, recall, register-affect, optional inner-only artefact generators); the tick scheduler ignores normal cadence and runs at fast cadence (for example ten seconds); public-write tools return a refusal; outputs go to `journal/inner-dialogue//`; a wall-clock budget (default fifteen minutes) auto-exits; an explicit `exit_meditation` call is on the inner allowlist; an operator can delete the mode-state file to force exit.", + "consequences": { + "benefits": [ + "Inner work has its own substrate and is not interrupted by external action.", + "Bounded window plus operator override prevents the mode from running away.", + "Outputs are isolated to a private journal so user-facing channels are not contaminated." + ], + "liabilities": [ + "External callers are stranded for the duration of the window.", + "Fast cadence burns tokens; cost must be budgeted explicitly.", + "Mode toggle is itself a feature attackers or bugs can abuse if not gated." + ] + }, + "constrains": "While meditation mode is active no user-facing channel can be written; the tool palette is replaced by a fixed inner-only allowlist and the mode auto-exits after the configured budget regardless of the agent's wish to continue.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "dream-consolidation-cycle", + "relation": "alternative-to" + }, + { + "pattern": "mode-adaptive-cadence", + "relation": "complements" + }, + { + "pattern": "emotional-state-persistence", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "Attention regulation and monitoring in meditation", + "authors": "Antoine Lutz, Heleen A. Slagter, John D. Dunne, Richard J. Davidson", + "year": 2008, + "url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2693206/" + }, + { + "type": "paper", + "title": "A default mode of brain function", + "authors": "Marcus E. Raichle et al.", + "year": 2001, + "url": "https://www.pnas.org/doi/10.1073/pnas.98.2.676" + } + ], + "status_in_practice": "experimental", + "tags": [ + "cognition", + "meditation", + "runtime-mode", + "inner-thought" + ], + "applicability": { + "use_when": [ + "The agent runs continuously and benefits from a substrate where external I/O is paused.", + "Inner-dialogue work degrades when interrupted by external action.", + "A bounded wall-clock window plus operator force-exit is feasible." + ], + "do_not_use_when": [ + "Users expect a response within the meditation window.", + "Fast-cadence inner ticks blow the token budget.", + "The tool dispatcher cannot enforce an inner-only allowlist." + ] + }, + "example_scenario": "A long-running personal agent does its best integrative thinking just after a stretch of dense input, but the normal tick keeps pulling it back to check the calendar or respond to chat. The team adds Meditation Mode: a state file flag triggers the dispatcher to swap to inner-only tools (inner-dialogue, recall, register-affect), the tick scheduler drops to ten-second cadence, outputs go to a private journal, and a fifteen-minute wall-clock budget auto-exits. The agent does an uninterrupted quarter-hour of inner work, then resumes its normal loop.", + "diagram": { + "type": "state", + "mermaid": "stateDiagram-v2\n [*] --> Normal\n Normal --> Meditating : enter_meditation()\n Meditating --> Meditating : fast inner tick
inner-only tools
journal write\n Meditating --> Normal : exit_meditation()\n Meditating --> Normal : wall-clock budget elapsed\n Meditating --> Normal : operator deletes mode-state file\n Normal --> [*]", + "caption": "Meditation mode is a bounded runtime state with inner-only tools and forced exit on budget or operator action." + } + }, { "id": "mode-adaptive-cadence", "name": "Mode-Adaptive Cadence", @@ -620,6 +1012,14 @@ { "pattern": "salience-attention-mechanism", "relation": "uses" + }, + { + "pattern": "cognitive-move-selector", + "relation": "complements" + }, + { + "pattern": "meditation-mode", + "relation": "complements" } ], "references": [ @@ -677,38 +1077,38 @@ } }, { - "id": "preoccupation-tracking", - "name": "Preoccupation Tracking", + "id": "multi-axis-promotion-scoring", + "name": "Multi-Axis Promotion Scoring", "aliases": [ - "Mid-Term Working Memory", - "Affect-Tagged Concerns", - "Background Chewing" + "Insight-Promotion Gate", + "Tier-Promotion Score", + "Consolidation-Weighted Score" ], "category": "cognition-introspection", - "intent": "Maintain a small set of mid-term, affect-tagged concerns that persist across days and surface in every prompt, distinct from the single-item working focus and from long-term insights.", - "context": "Long-running agents that hold a single working focus and a long-term insight store but nothing in between. Without an intermediate tier, the things the agent is currently 'chewing on' either dominate focus or vanish entirely between sessions.", - "problem": "Working focus holds one item; insights are too distilled. Between them there is a missing tier — the things the agent is chewing on across days — and without it concerns either crowd out the active focus or fall off the back of the window before they resolve.", + "intent": "Gate which short-term thoughts qualify for promotion to long-term insights by a weighted multi-axis score where consolidation events count more than raw frequency.", + "context": "Agents with a tiered memory store (short-term thoughts moving toward long-term insights) where the question of which thought is worth keeping must have a defensible answer that survives sessions.", + "problem": "Pure recency promotes whatever is recent; pure frequency promotes whatever is repeated; both miss thoughts that survived a deep reflection pass. Without an explicit score, promotion becomes ad-hoc and drifts with the prompt of the day.", "forces": [ - "A cap is needed or preoccupations crowd out everything else.", - "Decay must be automatic; the agent left to itself will not let go.", - "Affect tagging is what makes a preoccupation different from a todo.", - "Display every tick costs tokens, but invisibility defeats the point." + "Frequency rewards rumination; consolidation rewards depth.", + "Weights are opinionated and should be configurable, not LLM-of-the-day.", + "A high score is necessary but should not be sufficient — the consolidation pass still chooses.", + "Score metadata must stay separate from the thought corpus to keep both clean." ], - "therefore": "Therefore: keep a capped, affect-tagged list of mid-term concerns with half-life decay surfaced as a sidebar every tick, so that the agent carries what is actually weighing on it without those concerns crowding out the working focus.", - "solution": "Cap a list at 5-8 preoccupations stored as small JSON entries with topic, intensity (0..1), affect tag, opened-at, last-touched. Apply a 7-day half-life decay to intensity. When the cap is reached, release the coldest entry. Surface all current preoccupations in every tick prompt as a brief sidebar. The agent has explicit `touch` (raise intensity) and `release` (drop) operations.", + "therefore": "Therefore: score each thought on a fixed set of axes — frequency, relevance, diversity, recency, consolidation, conceptual depth — with weights that sum to one and are tuned by reflection, so that thoughts above a promotion threshold become candidates a consolidation pass picks from rather than being auto-promoted.", + "solution": "Six axes (frequency, relevance, diversity, recency, consolidation, conceptual). Each axis returns a value in 0..1 through a saturating curve. Total score is a weighted sum; weights sum to one and live in a config that is revisable through a documented decision. Append every score event to a JSONL metadata log (separate file from the thoughts) with event-type tags such as recall, grounding, dream-survival. Thoughts whose score crosses the promotion threshold are candidates; the deep consolidation pass makes the final call on what crosses to long-term.", "consequences": { "benefits": [ - "Mid-term concerns persist without crowding focus.", - "Cap plus decay keeps the list bounded without manual gardening.", - "Affect tags expose the emotional shape of what the agent is carrying." + "Promotion to long-term is defensible and inspectable per thought.", + "Weight-on-consolidation rewards depth over rumination.", + "Separate metadata log keeps the thought corpus clean." ], "liabilities": [ - "Surfacing preoccupations every tick costs tokens.", - "Mis-cap and items churn before they consolidate.", - "Decay rate is empirical and one rate may not fit all topic types." + "Axis curves and weights are empirical and per-deployment.", + "Computing scores is itself work and must stay cheap to run often.", + "A bad axis curve can silently suppress real insight." ] }, - "constrains": "The active preoccupation list is hard-capped at the configured size; new entries displace the coldest, and intensity decays automatically — the agent cannot extend the cap or freeze decay from inside the loop.", + "constrains": "Score weights cannot be changed mid-session by the model; weights are loaded from config at the start of a run, and promotion above threshold is necessary but not sufficient — only the consolidation pass writes to the long-term tier.", "known_uses": [ { "system": "Long-running personal agent loops (private deployment)", @@ -717,21 +1117,496 @@ ], "related": [ { - "pattern": "five-tier-memory-cascade", + "pattern": "salience-attention-mechanism", "relation": "complements" }, { - "pattern": "awareness", + "pattern": "append-only-thought-stream", "relation": "complements" }, { - "pattern": "scratchpad", - "relation": "alternative-to", - "note": "Scratchpad is a single writable surface; preoccupations are a capped, decaying list of affect-tagged concerns." - }, - { - "pattern": "salience-attention-mechanism", - "relation": "uses" + "pattern": "dream-consolidation-cycle", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "Generative Agents: Interactive Simulacra of Human Behavior", + "authors": "Joon Sung Park, Joseph C. O'Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, Michael S. Bernstein", + "year": 2023, + "url": "https://arxiv.org/abs/2304.03442" + }, + { + "type": "paper", + "title": "Why there are complementary learning systems in the hippocampus and neocortex", + "authors": "James L. McClelland, Bruce L. McNaughton, Randall C. O'Reilly", + "year": 1995, + "url": "https://stanford.edu/~jlmcc/papers/McCMcNaughtonOReilly95.pdf" + } + ], + "status_in_practice": "emerging", + "tags": [ + "cognition", + "memory-tier", + "promotion", + "scoring" + ], + "applicability": { + "use_when": [ + "The agent has a tiered memory with explicit short-term and long-term stores.", + "Promotion decisions must be defensible months later, not ad-hoc.", + "Consolidation-pass infrastructure exists to do the final selection." + ], + "do_not_use_when": [ + "The memory store is single-tier with no promotion concept.", + "Per-thought scoring overhead is not affordable.", + "There is no consolidation pass to do the final selection." + ] + }, + "example_scenario": "A long-running personal agent has been writing thoughts for months. Recency-only promotion lifts whatever is freshest into the long-term store; frequency-only promotion rewards rumination loops. The team adds Multi-Axis Promotion Scoring: six axes (frequency, relevance, diversity, recency, consolidation, conceptual) with weights that sum to one and live in a config the agent helped tune — consolidation weighted at 0.18 because dreams have proved to be the deepest integration mechanism. Thoughts above 0.5 become promotion candidates; the dream pass makes the final call.", + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n T[Short-term thought] --> Sc[Six-axis score:
freq + rel + div +
rec + cons + conc]\n Sc -->|>= threshold| Cand[Promotion candidate]\n Sc -->|< threshold| Stay[Stays short-term]\n Cand --> Dream[Consolidation pass]\n Dream -->|selects| Long[(Long-term insight)]\n Dream -->|rejects| Stay\n Sc -.event.-> Log[(Score metadata log)]", + "caption": "Thoughts get a six-axis score; above-threshold become candidates; the consolidation pass is the only writer to the long-term tier." + } + }, + { + "id": "open-question-tension-store", + "name": "Open-Question Tension Store", + "aliases": [ + "Tension Ledger", + "Unresolved-Pull Stack", + "Curiosity Inbox" + ], + "category": "cognition-introspection", + "intent": "Persist the agent's unresolved questions as a typed ledger so they drive its next inquiry instead of dissolving when the prompt ends.", + "context": "Long-running agents that should initiate inquiry — ask, look up, return to half-understood things — and not only respond. Without a substrate for unresolved questions, every idle tick starts as if from scratch and curiosity decays into amnesia between turns.", + "problem": "Open questions vanish at the end of a turn. The agent has no place to record what was noticed-but-unresolved, so the next free moment never returns to it; the prompt buffer is not built to carry forward pulls toward inquiry.", + "forces": [ + "An inbox grows without bound if every passing thought becomes a tension.", + "A score is needed to rank which question to pull now — pure recency rewards trivia.", + "Self-write of tensions can be gamed: the agent invents tensions to look thoughtful.", + "Tensions that never resolve still need to expire or the store becomes a graveyard." + ], + "therefore": "Therefore: record each unresolved pull as a typed entry with curiosity, intrusiveness, and expiry, so that the next idle moment can choose between ask-now, store-for-later, and let-lapse rather than treating every open question alike.", + "solution": "Maintain an append-only ledger of tensions. Each entry carries id, opened-at, topic, source, curiosity (0..1), intrusiveness (0..1), and expiry. On each idle tick the agent reads the top entries by curiosity times intrusiveness as candidates for the next move. Intrusiveness gates ask-the-user-now versus store-quietly. Entries below a curiosity floor expire after a TTL. Resolution writes a closing event into the same ledger; the original entry is never edited.", + "consequences": { + "benefits": [ + "Open questions survive across turns and across sessions.", + "Curiosity and intrusiveness scores make the next move defensible instead of stochastic.", + "Expiry plus a cap stops the store from becoming a graveyard." + ], + "liabilities": [ + "Score weights are opinionated and a bad calibration suppresses real curiosity.", + "Self-write of tensions invites gaming unless the agent's training discourages it.", + "Ledger growth is real even with expiry; archive paths must be planned." + ] + }, + "constrains": "The tension store is append-only; tensions cannot be silently rewritten or back-dated, and the agent cannot exceed a configured cap on net-open tensions — overflow is auto-expired by lowest curiosity times intrusiveness.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "preoccupation-tracking", + "relation": "complements" + }, + { + "pattern": "cognitive-move-selector", + "relation": "complements" + }, + { + "pattern": "append-only-thought-stream", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "A Theory of Cognitive Dissonance", + "authors": "Leon Festinger", + "year": 1957, + "url": "https://www.sup.org/books/title/?id=3850" + }, + { + "type": "paper", + "title": "Formal Theory of Creativity, Fun, and Intrinsic Motivation", + "authors": "Jürgen Schmidhuber", + "year": 2010, + "url": "https://people.idsia.ch/~juergen/ieeecreative.pdf" + } + ], + "status_in_practice": "emerging", + "tags": [ + "cognition", + "self-guidance", + "tick-loop", + "append-only" + ], + "applicability": { + "use_when": [ + "The agent should initiate inquiry on idle ticks, not only respond.", + "Unresolved questions otherwise vanish at turn end and never return.", + "There is an idle-tick body that can read top-ranked tensions and act on one." + ], + "do_not_use_when": [ + "The agent is request-response only and never has idle ticks.", + "There is no mechanism for the agent to act on its own initiative.", + "Persisting open-question state across sessions creates privacy or alignment risks." + ] + }, + "example_scenario": "A long-running personal agent notices in passing that the user mentioned a half-read book by an author the agent has never encountered. Without somewhere to put that, the moment passes and the agent never returns to it. The team adds an Open-Question Tension Store: the agent appends a tension with topic 'who is this author', curiosity 0.6, intrusiveness 0.2, expiry seven days. Three idle ticks later the move-selector picks the tension, the agent does a targeted lookup, writes a small note, and closes the tension — instead of having forgotten the moment.", + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n Thought[Thought / observation] -->|notices unresolved pull| New[New tension entry]\n New --> Store[(Tension ledger
append-only)]\n Store -->|top by curiosity x intrusiveness| Pick[Idle-tick candidate]\n Pick --> Move[Cognitive move]\n Move -->|writes close event| Store\n Store -->|expiry / cap overflow| Archive[Expired tail]", + "caption": "Tensions enter the ledger, rank by curiosity times intrusiveness, drive the next idle move, and close via a new append rather than edit." + } + }, + { + "id": "parallel-voice-proposer", + "name": "Parallel-Voice Proposer", + "aliases": [ + "Multi-Voice Generation", + "Internal Proposers", + "Tagged-Voice Self-Selection" + ], + "category": "cognition-introspection", + "intent": "Generate several candidate thoughts in parallel under named voices and have the same model pick the canonical one, logging the losers as audit.", + "context": "Single-agent loops where best-of-N is too expensive, inner-committee's sequential roles are too slow, but the agent benefits from seeing its own disagreement before committing to a single line of thought.", + "problem": "Single-pass generation collapses the model's internal disagreement into a confident-sounding mean. Sequential persona-switching is slow and depends on role ordering. Best-of-N requires an external scorer that may not exist.", + "forces": [ + "Parallel voices in one completion are cheap but risk all sounding the same.", + "Self-selection from candidates can rubber-stamp the first one.", + "Logging losers costs disk and tokens but is the auditable substrate.", + "More than three or four voices bloat the prompt without adding signal." + ], + "therefore": "Therefore: emit two or three candidate thoughts in one completion each tagged with a named voice that frames a distinct perspective, then have the same model select the canonical and log the rest, so that internal disagreement is preserved as evidence instead of collapsing into a confident mean.", + "solution": "Prompt the model to produce two or three candidate next-thoughts in one completion, each prefixed with a voice tag such as `[voice: world-model]`, `[voice: critic]`, `[voice: prediction]`. Then ask for a single `selected: ` line with a one-sentence reason. The canonical thought enters the main stream; the losers are appended to a proposer-losers log for inspection. Voices that never win across a rolling window become eligible for retirement; that retirement decision is explicit, not silent.", + "consequences": { + "benefits": [ + "Internal disagreement is preserved rather than collapsed.", + "One completion is cheaper than sequential persona calls.", + "Loser log creates an audit substrate for retrospective analysis." + ], + "liabilities": [ + "Same model means correlated voices; true diversity is limited.", + "Self-selection can rubber-stamp the first candidate without rotation strategy.", + "Prompt overhead per tick is non-trivial when voices are kept distinct." + ] + }, + "constrains": "Each generation governed by this pattern must emit at least two voice-tagged candidates; the selected canonical is the only one entered into main memory and the losers are read-only audit, never re-promoted by the model.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "inner-committee", + "relation": "alternative-to" + }, + { + "pattern": "debate", + "relation": "alternative-to" + }, + { + "pattern": "best-of-n", + "relation": "alternative-to" + } + ], + "references": [ + { + "type": "book", + "title": "The Society of Mind", + "authors": "Marvin Minsky", + "year": 1986, + "url": "https://archive.org/details/societyofmind00mins" + }, + { + "type": "paper", + "title": "Self-Consistency Improves Chain of Thought Reasoning in Language Models", + "authors": "Xuezhi Wang et al.", + "year": 2022, + "url": "https://arxiv.org/abs/2203.11171" + } + ], + "status_in_practice": "experimental", + "tags": [ + "cognition", + "inner-thought", + "multi-voice", + "self-selection" + ], + "applicability": { + "use_when": [ + "Single-pass generation produces overconfident output that hides real disagreement.", + "Inner-committee's sequential roles are too slow per tick.", + "An external reward model for best-of-N is not available." + ], + "do_not_use_when": [ + "The agent's task does not benefit from surfaced disagreement.", + "Token budget will not absorb two or three voice-tagged candidates per call.", + "Auditability of internal disagreement is not a goal." + ] + }, + "example_scenario": "A long-running personal agent keeps producing single-line responses that sound certain but are wrong in subtle ways. The team rebuilds the per-tick generation as Parallel-Voice Proposer: the model emits three tagged candidates (world-model, critic, prediction) in one completion, then a final line names the selected voice and gives a one-sentence reason. The canonical thought enters the stream; the losers are appended to an audit log. Retrospective review shows the critic voice was correctly catching overconfidence the agent had been emitting solo.", + "diagram": { + "type": "sequence", + "mermaid": "sequenceDiagram\n participant L as Loop\n participant M as Model\n participant J as Loser journal\n participant S as Main stream\n L->>M: single completion request\n M-->>L: [voice: world-model] ...\n M-->>L: [voice: critic] ...\n M-->>L: [voice: prediction] ...\n M-->>L: selected: critic — reason\n L->>S: append canonical (critic)\n L->>J: append world-model + prediction as losers", + "caption": "One completion emits multiple voice-tagged candidates plus a selection line; the canonical enters the main stream, the losers go to an audit log." + } + }, + { + "id": "partial-output-salvage", + "name": "Partial-Output Salvage", + "aliases": [ + "Crash-Safe Streaming", + "Tmp-Replace Thought Recovery", + "Recovered-Partial Marker" + ], + "category": "cognition-introspection", + "intent": "Stream every model token to a tmp-plus-atomic-replace partial file so crashes mid-inference leave a consistent salvage, then promote partials at startup with a typed recovery marker the model can see.", + "context": "Long-running agents on hardware that can crash (OOM kills, watchdog SIGKILL, deploys) where a lost mid-stream thought is hours of context. Agent-resumption handles process state; this handles the in-flight token stream itself.", + "problem": "A SIGKILL during model streaming leaves the partial output in in-process memory only — total loss of seconds or minutes of inference. The next run has no idea anything was happening. Worse, the agent may later return to the topic with no awareness that a prior attempt died mid-sentence.", + "forces": [ + "Per-chunk fsync is expensive; tmp-plus-rename is the affordable compromise.", + "Recovery should be visible to the model, not silent — surprise about a partial is itself signal.", + "A partial-thought stub must not be treated as a finished thought.", + "Recovery markers must be typed (timeout vs hard crash) so triage is meaningful." + ], + "therefore": "Therefore: stream every chunk to a tmp file with periodic atomic rename to the canonical partial path; at startup promote any orphan partial to a real thought file with a typed recovery marker and surface the recovery event in the next prompt, so that the model sees it is reading a salvage.", + "solution": "Mechanical finite-state machine. On stream start: open `partial.tmp`, write a start marker with thought-id, timestamp, model id. On each chunk: append to tmp, periodically `os.rename(tmp, partial)` for atomicity. On normal stream end: rename to the canonical thought path, delete partial. On startup: scan for orphan `partial.*` files, finalize each with a typed RecoveryStatus enum (RECOVERED_FROM_PARTIAL for hard kill, TIMEOUT_PARTIAL for watchdog timeout). The next prompt's system context includes `last_partial_recovery: ` so the model can adjust.", + "consequences": { + "benefits": [ + "Mid-stream tokens are not lost on hard crash.", + "Typed recovery marker preserves debuggability rather than hiding the salvage.", + "Atomic rename keeps the partial file readable at every moment." + ], + "liabilities": [ + "Rename overhead per N chunks is non-zero.", + "Partials add filesystem clutter if not periodically cleaned.", + "Recovery surfaced in the prompt costs tokens every time it fires." + ] + }, + "constrains": "Partial thought files cannot be silently consumed; every salvaged partial carries a typed recovery marker that propagates into the next prompt, and the model is not allowed to treat a recovered partial as if it were a completed thought.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "agent-resumption", + "relation": "complements" + }, + { + "pattern": "append-only-thought-stream", + "relation": "composes-with" + } + ], + "references": [ + { + "type": "paper", + "title": "ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging", + "authors": "C. Mohan, Don Haderle, Bruce Lindsay, Hamid Pirahesh, Peter Schwarz", + "year": 1992, + "url": "https://cs.stanford.edu/people/chrismre/cs345/rl/aries.pdf" + }, + { + "type": "spec", + "title": "POSIX rename(2) atomicity", + "authors": "IEEE / The Open Group", + "year": 2018, + "url": "https://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html" + } + ], + "status_in_practice": "emerging", + "tags": [ + "cognition", + "crash-safety", + "streaming", + "recovery" + ], + "applicability": { + "use_when": [ + "The runtime can SIGKILL the agent mid-stream and that loses meaningful work.", + "Inference is long enough per call that a partial stream has real value.", + "Filesystem supports atomic rename in the working directory." + ], + "do_not_use_when": [ + "Inference is fast enough that crashes never land mid-stream in practice.", + "Partial output has no semantic value (e.g. binary embeddings only).", + "The model cannot be trusted with a typed recovery marker without spiralling." + ] + }, + "example_scenario": "A long-running personal agent runs on a machine where the OOM killer occasionally takes the process. A four-minute reasoning trace gets killed at the three-minute mark and the entire stream is lost — the agent has no idea anything happened on the next run. The team adds Partial-Output Salvage: each chunk streams to `partial.tmp` with periodic atomic rename. On startup, orphan partials are finalized with a RECOVERED_FROM_PARTIAL marker that appears in the next prompt's system context. The agent sees the salvage, knows it was reading a partial, and decides whether to continue or restart the line of thought.", + "diagram": { + "type": "state", + "mermaid": "stateDiagram-v2\n [*] --> Streaming\n Streaming --> Streaming : chunk -> tmp + periodic rename\n Streaming --> Done : end-of-stream -> rename to canonical\n Streaming --> Crashed : SIGKILL / OOM / timeout\n Crashed --> Salvaged : startup scan finds orphan partial\n Salvaged --> Finalized : write with typed RecoveryStatus\n Finalized --> [*] : marker surfaced in next prompt\n Done --> [*]", + "caption": "Tmp-plus-rename keeps the partial file consistent at all times; startup salvage finalizes orphans with a typed marker." + } + }, + { + "id": "pre-generative-loop-gate", + "name": "Pre-Generative Loop Gate", + "aliases": [ + "Divergence Pre-Check", + "Steering-Hint Injector", + "Loop-Pattern Detector" + ], + "category": "cognition-introspection", + "intent": "Before the next generation fires, detect divergence signatures (narration loops, frustration paths, repetition pressure) and inject a diagnostic steering hint into the prompt rather than veto the call.", + "context": "Long-running agents with frequent ticks where some failure modes — narrating about acting instead of acting, retrying the same broken path under frustration, lapsing into rumination — are visible from telemetry before the model speaks.", + "problem": "Post-hoc detectors catch the failure after tokens are produced and money is spent. The agent itself often has the signal to avoid the failure if it were told, but nothing is reading that signal before the next call.", + "forces": [ + "A hard veto blocks legitimate cases that match the heuristic.", + "A silent injection makes debugging mysterious if the model behaves differently than expected.", + "The hint has to be terse or it overwhelms the prompt.", + "False positives must be tolerable; the model can ignore the hint." + ], + "therefore": "Therefore: run a cheap pre-tick check for known divergence signatures (low surprise plus intent phrase, recent error plus no orienting call, high-intensity preoccupation plus low novelty) and append a one-line system-level steering hint to the prompt instead of vetoing the call, so that the model sees the diagnostic before producing tokens.", + "solution": "A pre-tick function takes recent thoughts, recent tool calls, the affect snapshot, and the preoccupation list and returns either None or a short steering string of the form `[steering] divergence pattern detected; consider `. The hint is appended to the prompt as a system line and the call proceeds. The decision (hint or no hint, which pattern) is logged so post-hoc review can correlate hint-presence with subsequent behavior. Vetoing remains the job of explicit safety patterns.", + "consequences": { + "benefits": [ + "Divergence is named before tokens are produced, not after.", + "Steering as a hint lets the model retain authority; false positives are recoverable.", + "Hint-presence in logs creates an evaluation substrate for the detector itself." + ], + "liabilities": [ + "Pattern signatures are heuristic and will misfire.", + "Steering hints add tokens to every flagged tick.", + "Silent injection complicates debugging if the model adapts to it." + ] + }, + "constrains": "Pre-tick hints can only append a short steering line; they cannot block the call, modify tool selection, or rewrite the user prompt — vetoing remains the responsibility of explicit safety patterns.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "circuit-breaker", + "relation": "complements" + }, + { + "pattern": "degenerate-output-detection", + "relation": "complements" + }, + { + "pattern": "typed-tool-loop-detector", + "relation": "complements" + } + ], + "references": [ + { + "type": "paper", + "title": "Toward a Theory of Situation Awareness in Dynamic Systems", + "authors": "Mica R. Endsley", + "year": 1995, + "url": "https://journals.sagepub.com/doi/10.1518/001872095779049543" + }, + { + "type": "paper", + "title": "Skills, Rules, and Knowledge: Signals, Signs, and Symbols, and Other Distinctions in Human Performance Models", + "authors": "Jens Rasmussen", + "year": 1983, + "url": "https://ieeexplore.ieee.org/document/6313160" + } + ], + "status_in_practice": "experimental", + "tags": [ + "cognition", + "self-adjustment", + "pre-call", + "diagnostic" + ], + "applicability": { + "use_when": [ + "Specific divergence signatures are detectable from telemetry pre-call.", + "Post-hoc detectors catch the failure too late to avoid the cost.", + "The model is responsive to short steering hints in the system context." + ], + "do_not_use_when": [ + "The agent's failure modes are not detectable pre-call.", + "Tokens for steering hints are not budget-tolerable per tick.", + "Audit policy requires the model to receive an unmodified prompt." + ] + }, + "example_scenario": "A long-running personal agent keeps falling into a narration loop where it says 'let me check the calendar' but never actually invokes the calendar tool. A post-hoc detector catches it after the model has already produced the empty narration. The team adds a Pre-Generative Loop Gate: each pre-tick check looks for low-surprise plus intent-phrase signatures and appends '[steering] you may be narrating about acting instead of acting; consider invoking the tool directly' to the prompt. The narration rate drops without blocking any legitimate call.", + "diagram": { + "type": "flow", + "mermaid": "flowchart LR\n Tick[Pre-tick] --> Check{Divergence signature?}\n Check -->|none| Call[Generate as-is]\n Check -->|narration| Hint1[[steering: narrating about acting]]\n Check -->|frustration| Hint2[[steering: same path under errors]]\n Check -->|rumination| Hint3[[steering: high-intensity preoccupation]]\n Hint1 --> Call\n Hint2 --> Call\n Hint3 --> Call\n Call --> Out[Model output]\n Check --> Log[(Decision log)]", + "caption": "Pre-tick check classifies divergence signatures and appends a short steering line to the prompt; the model retains authority to ignore." + } + }, + { + "id": "preoccupation-tracking", + "name": "Preoccupation Tracking", + "aliases": [ + "Mid-Term Working Memory", + "Affect-Tagged Concerns", + "Background Chewing" + ], + "category": "cognition-introspection", + "intent": "Maintain a small set of mid-term, affect-tagged concerns that persist across days and surface in every prompt, distinct from the single-item working focus and from long-term insights.", + "context": "Long-running agents that hold a single working focus and a long-term insight store but nothing in between. Without an intermediate tier, the things the agent is currently 'chewing on' either dominate focus or vanish entirely between sessions.", + "problem": "Working focus holds one item; insights are too distilled. Between them there is a missing tier — the things the agent is chewing on across days — and without it concerns either crowd out the active focus or fall off the back of the window before they resolve.", + "forces": [ + "A cap is needed or preoccupations crowd out everything else.", + "Decay must be automatic; the agent left to itself will not let go.", + "Affect tagging is what makes a preoccupation different from a todo.", + "Display every tick costs tokens, but invisibility defeats the point." + ], + "therefore": "Therefore: keep a capped, affect-tagged list of mid-term concerns with half-life decay surfaced as a sidebar every tick, so that the agent carries what is actually weighing on it without those concerns crowding out the working focus.", + "solution": "Cap a list at 5-8 preoccupations stored as small JSON entries with topic, intensity (0..1), affect tag, opened-at, last-touched. Apply a 7-day half-life decay to intensity. When the cap is reached, release the coldest entry. Surface all current preoccupations in every tick prompt as a brief sidebar. The agent has explicit `touch` (raise intensity) and `release` (drop) operations.", + "consequences": { + "benefits": [ + "Mid-term concerns persist without crowding focus.", + "Cap plus decay keeps the list bounded without manual gardening.", + "Affect tags expose the emotional shape of what the agent is carrying." + ], + "liabilities": [ + "Surfacing preoccupations every tick costs tokens.", + "Mis-cap and items churn before they consolidate.", + "Decay rate is empirical and one rate may not fit all topic types." + ] + }, + "constrains": "The active preoccupation list is hard-capped at the configured size; new entries displace the coldest, and intensity decays automatically — the agent cannot extend the cap or freeze decay from inside the loop.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "five-tier-memory-cascade", + "relation": "complements" + }, + { + "pattern": "awareness", + "relation": "complements" + }, + { + "pattern": "scratchpad", + "relation": "alternative-to", + "note": "Scratchpad is a single writable surface; preoccupations are a capped, decaying list of affect-tagged concerns." + }, + { + "pattern": "salience-attention-mechanism", + "relation": "uses" + }, + { + "pattern": "open-question-tension-store", + "relation": "complements" } ], "references": [ @@ -903,6 +1778,101 @@ "mermaid": "flowchart LR\n Th[(Past thoughts)] --> Comp[Periodic compaction pass]\n Comp --> P1[Period 1: held A]\n Comp --> P2[Period 2: revised to B
because Z]\n Comp --> P3[Period 3: now C]\n P1 --> Note[Trajectory note]\n P2 --> Note\n P3 --> Note\n Note --> Agent[Agent context]" } }, + { + "id": "typed-tool-loop-detector", + "name": "Typed Tool-Loop Failure Detector", + "aliases": [ + "Dispatch-Boundary Veto", + "Five-Mode Loop Guard", + "Tool-Call Pattern Detector" + ], + "category": "cognition-introspection", + "intent": "Lift tool-loop detection from prompt-level rules to a mechanical dispatch-boundary veto with typed failure modes and per-tool caps that returns a formatted refusal the model must consume.", + "context": "Agents with rich tool palettes where prompt-level instructions are not enforced (the model can simply not follow them) and loop bugs eat budget before any safety net trips. A single global circuit-breaker hides the specific shape of the failure.", + "problem": "Tool-explosion is named as an anti-pattern but is given no mechanism to catch. A single global circuit-breaker misses shape: a thirty-call canvas-action burst looks the same as thirty healthy file reads under a global counter. Prompt-level rules are advisory only.", + "forces": [ + "Per-tool caps are noisy without good defaults.", + "A typed refusal must be formatted so the model can consume it as input rather than silently retry.", + "Global breaker is the backstop but should be the last to fire.", + "Detection windows must be tunable; too short trips legit work, too long drains money before tripping." + ], + "therefore": "Therefore: at the dispatch boundary classify every tool call against a small set of typed failure modes (generic repeat, unknown-tool repeat, no-progress poll, ping-pong, global breaker) with per-tool caps and return a formatted refusal when a mode trips, so the next observation forces the model to react instead of silently looping.", + "solution": "A dispatcher pre-check function. On each tool call, append `(timestamp, tool_name, hash(args))` to a bounded rolling window. Evaluate five rules: (1) generic-repeat: same `(tool, arg-hash)` at least N times in window; (2) unknown-tool-repeat: call to unregistered tool at least M times; (3) poll-no-progress: same tool with no state change at least K times; (4) ping-pong: alternating between two tools at least J cycles; (5) global-circuit-breaker: total tool calls in window at least G. Each rule has per-tool overrides (for example a known-bursty tool capped lower than the default). On trip, the dispatcher returns `{error: 'tool_loop_detected', mode: , observed: }` as the tool result. The model sees this in its next turn and must adjust.", + "consequences": { + "benefits": [ + "Loop failures are caught at the dispatch boundary, not in prompt-text-the-model-may-ignore.", + "Typed modes make triage and per-tool tuning meaningful.", + "Formatted refusal as a tool result keeps the model in-loop rather than crashing." + ], + "liabilities": [ + "Per-tool caps must be calibrated or legit work trips.", + "Five modes is more state to maintain than a single breaker.", + "A determined model can still loop on tools that the cap missed." + ] + }, + "constrains": "No tool call may bypass the dispatch-boundary loop check; a tripped detector blocks that specific call and returns a typed refusal that becomes the next observation, and the per-tool cap cannot be raised mid-session by the model.", + "known_uses": [ + { + "system": "Long-running personal agent loops (private deployment)", + "status": "available" + } + ], + "related": [ + { + "pattern": "circuit-breaker", + "relation": "specialises" + }, + { + "pattern": "step-budget", + "relation": "complements" + }, + { + "pattern": "pre-generative-loop-gate", + "relation": "complements" + } + ], + "references": [ + { + "type": "book", + "title": "Release It! Design and Deploy Production-Ready Software (circuit breaker chapter)", + "authors": "Michael T. Nygard", + "year": 2018, + "url": "https://pragprog.com/titles/mnee2/release-it-second-edition/" + }, + { + "type": "paper", + "title": "Gorilla: Large Language Model Connected with Massive APIs", + "authors": "Shishir G. Patil, Tianjun Zhang, Xin Wang, Joseph E. Gonzalez", + "year": 2023, + "url": "https://arxiv.org/abs/2305.15334" + } + ], + "status_in_practice": "emerging", + "tags": [ + "cognition", + "self-adjustment", + "tool-loop", + "dispatch" + ], + "applicability": { + "use_when": [ + "Tool palette is rich enough that prompt-level rules are not reliably followed.", + "Loop bugs are observable in telemetry and have wasted budget historically.", + "Per-tool calibration is feasible (known-bursty tools have caps tuned individually)." + ], + "do_not_use_when": [ + "Tool palette is tiny and prompt-level rules suffice.", + "Per-tool caps cannot be calibrated without churning legit workflows.", + "A single global circuit-breaker already catches all observed failure shapes." + ] + }, + "example_scenario": "A long-running personal agent has a canvas-action tool that occasionally enters a thirty-call burst when an interaction goes wrong. The global step-budget catches it eventually but only after thousands of tokens. The team adds a Typed Tool-Loop Failure Detector with per-tool caps: canvas-action is capped at four calls in a sixty-second window. When the burst starts, the fifth call returns a typed refusal `{mode: 'generic_repeat', observed: {...}}`. The model sees the refusal in its next observation and shifts to a different approach instead of pounding the same tool.", + "diagram": { + "type": "flow", + "mermaid": "flowchart TD\n Call[Tool call] --> Win[(Rolling window:
timestamp, tool, arg-hash)]\n Win --> R1{generic_repeat?}\n R1 -->|yes| Refuse[Return typed refusal]\n R1 -->|no| R2{unknown_tool_repeat?}\n R2 -->|yes| Refuse\n R2 -->|no| R3{poll_no_progress?}\n R3 -->|yes| Refuse\n R3 -->|no| R4{ping_pong?}\n R4 -->|yes| Refuse\n R4 -->|no| R5{global_breaker?}\n R5 -->|yes| Refuse\n R5 -->|no| Disp[Dispatch normally]\n Refuse --> Obs[Next observation: model sees refusal]", + "caption": "Five typed modes run at the dispatch boundary; a trip returns a formatted refusal so the model adjusts in its next turn." + } + }, { "id": "world-model-separation", "name": "World-Model Separation", diff --git a/patterns-src/governance-observability.json b/patterns-src/governance-observability.json index 0f17727..4eb8ca5 100644 --- a/patterns-src/governance-observability.json +++ b/patterns-src/governance-observability.json @@ -180,6 +180,10 @@ { "pattern": "interrupt-resumable-thought", "relation": "complements" + }, + { + "pattern": "partial-output-salvage", + "relation": "complements" } ], "references": [ diff --git a/patterns-src/memory.json b/patterns-src/memory.json index 84f68f6..1bf4dc5 100644 --- a/patterns-src/memory.json +++ b/patterns-src/memory.json @@ -69,6 +69,18 @@ { "pattern": "interrupt-resumable-thought", "relation": "complements" + }, + { + "pattern": "open-question-tension-store", + "relation": "complements" + }, + { + "pattern": "multi-axis-promotion-scoring", + "relation": "complements" + }, + { + "pattern": "partial-output-salvage", + "relation": "composes-with" } ], "references": [ @@ -516,6 +528,10 @@ { "pattern": "dream-consolidation-cycle", "relation": "complements" + }, + { + "pattern": "cluster-capped-insight-store", + "relation": "alternative-to" } ], "references": [ @@ -1181,6 +1197,10 @@ { "pattern": "mode-adaptive-cadence", "relation": "used-by" + }, + { + "pattern": "multi-axis-promotion-scoring", + "relation": "complements" } ], "references": [ diff --git a/patterns-src/multi-agent.json b/patterns-src/multi-agent.json index 54b38b4..e2bbedb 100644 --- a/patterns-src/multi-agent.json +++ b/patterns-src/multi-agent.json @@ -732,6 +732,10 @@ { "pattern": "voting-based-cooperation", "relation": "alternative-to" + }, + { + "pattern": "parallel-voice-proposer", + "relation": "alternative-to" } ], "references": [ @@ -1110,6 +1114,14 @@ { "pattern": "role-assignment", "relation": "alternative-to" + }, + { + "pattern": "cognitive-move-selector", + "relation": "alternative-to" + }, + { + "pattern": "parallel-voice-proposer", + "relation": "alternative-to" } ], "references": [ diff --git a/patterns-src/planning-control-flow.json b/patterns-src/planning-control-flow.json index 00ccc81..504d791 100644 --- a/patterns-src/planning-control-flow.json +++ b/patterns-src/planning-control-flow.json @@ -1902,6 +1902,10 @@ { "pattern": "append-only-thought-stream", "relation": "complements" + }, + { + "pattern": "affect-coupled-plan-lifecycle", + "relation": "complements" } ], "references": [ diff --git a/patterns-src/routing-composition.json b/patterns-src/routing-composition.json index 615e2d1..fbcbe64 100644 --- a/patterns-src/routing-composition.json +++ b/patterns-src/routing-composition.json @@ -165,6 +165,14 @@ { "pattern": "degenerate-output-detection", "relation": "generalises" + }, + { + "pattern": "pre-generative-loop-gate", + "relation": "complements" + }, + { + "pattern": "typed-tool-loop-detector", + "relation": "generalises" } ], "references": [ diff --git a/patterns-src/safety-control.json b/patterns-src/safety-control.json index ab1b894..ac369c7 100644 --- a/patterns-src/safety-control.json +++ b/patterns-src/safety-control.json @@ -566,6 +566,10 @@ { "pattern": "multi-model-routing", "relation": "uses" + }, + { + "pattern": "pre-generative-loop-gate", + "relation": "complements" } ], "references": [ @@ -2072,6 +2076,10 @@ { "pattern": "mode-adaptive-cadence", "relation": "complements" + }, + { + "pattern": "typed-tool-loop-detector", + "relation": "complements" } ], "references": [ diff --git a/patterns-src/verification-reflection.json b/patterns-src/verification-reflection.json index 93604c9..21e26e6 100644 --- a/patterns-src/verification-reflection.json +++ b/patterns-src/verification-reflection.json @@ -70,6 +70,10 @@ { "pattern": "voting-based-cooperation", "relation": "alternative-to" + }, + { + "pattern": "parallel-voice-proposer", + "relation": "alternative-to" } ], "references": [ diff --git a/patterns/affect-coupled-plan-lifecycle.md b/patterns/affect-coupled-plan-lifecycle.md new file mode 100644 index 0000000..e0d6f3c --- /dev/null +++ b/patterns/affect-coupled-plan-lifecycle.md @@ -0,0 +1,101 @@ +# Affect-Coupled Plan Lifecycle + +**Also known as:** Plan-Affect Hooks, Stale-Pain Bucketing, Felt-Stakes Plans + +**Category:** Cognition & Introspection +**Status in practice:** experimental + +## Intent + +Wire small bounded affect bumps to plan-step lifecycle events and accumulate age-bucketed stale-pain on untouched plans so plans gain felt stakes without hard deadlines. + +## Context + +Agents that maintain a plan or todo store alongside an affective substrate. Without coupling, plans are cognitive items the agent can ignore indefinitely; completion has no felt reward and abandonment has no felt cost. + +## Problem + +Plans without affective coupling are inert. The agent can let a plan rot for weeks with no felt pressure to either finish or formally abandon it. Hard deadlines are too crude — they fire even when the right answer is to let the plan lapse. Without something softer, plans drift. + +## Forces + +- Affect deltas must stay small or they overwhelm the substrate. +- Stale-pain must be bounded or the agent enters permanent irritation. +- Hooks must be best-effort: an exception in affect must not break plan lifecycle. +- Bucketing by age makes the pressure curve interpretable rather than smooth-but-mysterious. + +## Therefore + +Therefore: apply a small bounded affect delta on each plan-lifecycle event (joy on step-done, pain on step-skipped, larger spurs on plan-completed and plan-archived) and on each tick add an age-bucketed pain dose to plans untouched past a grace window, so that plans accumulate gentle pressure without hard deadlines. + +## Solution + +Lifecycle hooks fire on each plan event with bounded deltas: step-done adds a small joy; step-skipped adds a small pain; plan-completed adds a larger joy spur; plan-archived adds a pain spur. Per-tick stale-pain: for each open plan whose last-touched is older than a grace window, add a per-tick pain dose drawn from an age-bucket table (for example 4h to 0.005, 12h to 0.010, 24h to 0.020, beyond three days to 0.030). All hooks are wrapped so that an exception in affect bookkeeping never breaks plan logic. Half-life decay from the affect substrate bounds the steady-state irritation. + +## Example scenario + +A long-running personal agent maintains a small plan store but routinely lets plans rot for weeks. There is no felt pressure to finish or formally abandon. The team adds Affect-Coupled Plan Lifecycle: step-done bumps joy by 0.05, step-skipped bumps pain by 0.10, plan-completed adds 0.40 joy, plan-archived adds 0.30 pain. Each tick, plans untouched past four hours accumulate pain from an age-bucket table. The agent starts closing stale plans on its own — sometimes by finishing them, sometimes by archiving with a note — because rolling stale-pain becomes uncomfortable. + +## Diagram + +```mermaid +flowchart LR + StepDone[Step done] -->|+0.05 joy| Aff[(Affect substrate)] + StepSkip[Step skipped] -->|+0.10 pain| Aff + PlanDone[Plan completed] -->|+0.40 joy| Aff + PlanArch[Plan archived] -->|+0.30 pain| Aff + Tick[Per-tick] --> Scan[Scan open plans] + Scan -->|untouched > grace| Bucket[Age-bucket table] + Bucket -->|per-tick pain dose| Aff + Aff -->|half-life decay| Aff +``` + +*Lifecycle events and age-bucketed stale-pain feed bounded deltas into the affect substrate; half-life decay bounds steady-state.* + +## Consequences + +**Benefits** + +- Plans gain felt stakes without hard deadlines. +- Bucketed stale-pain produces an interpretable pressure curve. +- Best-effort hooks decouple affect bookkeeping from plan correctness. + +**Liabilities** + +- Bucket boundaries and deltas are opinionated and per-deployment. +- Stale-pain interacts with the substrate's decay; mis-tuning can over- or under-shoot. +- Felt-stakes only matter if downstream cognition reads the affect snapshot. + +## What this pattern constrains + +Plan-affect hooks must use bounded deltas no larger than the substrate's per-event cap, must be best-effort (an affect exception cannot break plan lifecycle), and stale-pain accumulation cannot exceed the half-life-bounded steady-state of the affect substrate. + +## Applicability + +**Use when** + +- The agent maintains a plan store and an affective substrate, and they are otherwise decoupled. +- Hard deadlines on plans are too crude for the use case. +- Downstream cognition consumes the affect snapshot. + +**Do not use when** + +- Affect modelling is out of scope for the product. +- Plans complete on a short enough cycle that stale-pain never fires meaningfully. +- The affect substrate has no decay and would accumulate irritation indefinitely. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *complements* → [emotional-state-persistence](emotional-state-persistence.md) +- *complements* → [todo-list-driven-agent](todo-list-driven-agent.md) + +## References + +- (book) Antonio Damasio, *Descartes' Error: Emotion, Reason, and the Human Brain (somatic marker hypothesis)*, 1994, +- (paper) Daniel Kahneman, Amos Tversky, *Prospect Theory: An Analysis of Decision under Risk*, 1979, + +**Tags:** cognition, affect, plan-lifecycle, felt-stakes diff --git a/patterns/cluster-capped-insight-store.md b/patterns/cluster-capped-insight-store.md new file mode 100644 index 0000000..c5cf65d --- /dev/null +++ b/patterns/cluster-capped-insight-store.md @@ -0,0 +1,101 @@ +# Cluster-Capped Insight Store + +**Also known as:** Insight Dedup, Cluster Ceiling, Mtime-Selected Insight Pruning + +**Category:** Cognition & Introspection +**Status in practice:** experimental + +## Intent + +Cap the number of insights per stem-token cluster and archive the oldest variants by mtime so the long-term store keeps the active research edge instead of accumulating near-duplicates. + +## Context + +Long-running agents that write insights to disk over months. Without a structural ceiling, near-duplicates pile up around any topic the agent thinks about often and retrieval becomes a sinkhole of old variants. + +## Problem + +Insight stores grow open-endedly; near-duplicates accumulate around topics the agent revisits. The agent ends up reading old variants of its own thinking instead of the current one. An LLM-driven merge is expensive and risks losing nuance. + +## Forces + +- Pure age-based eviction loses durable insights. +- Pure popularity loses fresh edges. +- LLM-driven merge is expensive and unauditable. +- Archived versions must remain available for forensics. + +## Therefore + +Therefore: cluster insight files mechanically by the first two stem tokens of their id, cap each cluster at a small N (default three) keeping the most-recently-touched by mtime, and move overflow to a timestamped archive directory, so that the active edge stays visible without losing the older variants. + +## Solution + +A periodic job (runs each consolidation pass) scans the insight directory, groups files by the first two stem tokens of the id (for example `affect-substrate-*`, `completion-narration-*`), and for any cluster above MAX_PER_CLUSTER keeps the N newest by mtime. Older files move to `archive/insights-dedup-/` with original names preserved. No model call, no merge. The archive is read-only after the move; provenance is preserved. + +## Example scenario + +A long-running personal agent has been writing insights for six months. An audit shows twelve files starting with `affect-`, ten with `completion-narration-`, three with `concept-rotation-`. The agent reads stale variants instead of the current one. The team adds a Cluster-Capped Insight Store: the consolidation pass groups files by first two stem tokens, caps each cluster at three keeping the most-recently-touched by mtime, and moves overflow to a timestamped archive. The active store shrinks from over two hundred files to under eighty and retrieval improves immediately. + +## Diagram + +```mermaid +flowchart LR + Scan[Periodic scan] --> Group[Group by first two stem tokens] + Group --> Per{Per cluster} + Per -->|<= MAX| Keep[Keep all] + Per -->|> MAX| Sort[Sort by mtime desc] + Sort --> Top[Top N stay in active] + Sort --> Rest[Older move to archive] + Rest --> Arc[(archive/insights-dedup-/)] + Top --> Active[(Active insight store)] +``` + +*Cluster by stem tokens, cap by count, keep most-recent by mtime, archive the rest with timestamp.* + +## Consequences + +**Benefits** + +- Active store keeps the current research edge, not a graveyard of variants. +- Mechanical clustering has no model cost and is fully auditable. +- Archive preserves older variants for forensics. + +**Liabilities** + +- Stem-token clustering will sometimes split related insights or merge unrelated ones. +- The cap is opinionated and bad clusters lose useful older work. +- Storage continues to grow because archive is preserved. + +## What this pattern constrains + +Insight files in the active store are capped per stem-token cluster; an insight cannot survive in the active store if it falls outside the most-recent N of its cluster — archive promotion is mechanical, not model-judged. + +## Applicability + +**Use when** + +- Insights are written to disk continuously and near-duplicates accumulate. +- An LLM-merge approach is too expensive or too opaque for the use case. +- Stem-token clustering is a reasonable proxy for topical similarity. + +**Do not use when** + +- Insights are small in number or grow slowly enough that dedup is unnecessary. +- Stem-token clustering would lose critical distinctions (highly polysemous topics). +- Archive preservation is not feasible because of storage constraints. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *complements* → [dream-consolidation-cycle](dream-consolidation-cycle.md) +- *alternative-to* → [episodic-summaries](episodic-summaries.md) + +## References + +- (book) Tiago Forte, *Building a Second Brain (chapter on knowledge fragment hygiene)*, 2022, +- (paper) Piotr A. Wozniak, Edward J. Gorzelanczyk, *Optimization of Repetition Spacing in the Practice of Learning*, 1994, + +**Tags:** cognition, insight-store, dedup, hygiene diff --git a/patterns/cognitive-move-selector.md b/patterns/cognitive-move-selector.md new file mode 100644 index 0000000..0e5fb24 --- /dev/null +++ b/patterns/cognitive-move-selector.md @@ -0,0 +1,109 @@ +# Cognitive-Move Selector + +**Also known as:** Move Picker, Cognitive Action Menu, Idle-Tick Move Router + +**Category:** Cognition & Introspection +**Status in practice:** experimental + +## Intent + +Restrict idle-tick cognition to a small agent-vetted menu of named cognitive moves so the next thought has a determinate shape rather than free-form drift. + +## Context + +Long-running agents with frequent idle ticks where no user prompt is incoming. Without structure, idle thinking either repeats yesterday's reasoning, lapses into performance, or wanders into the training-distribution prior. + +## Problem + +Free-form idle cognition tends to repetition, performance, or randomness. The model has no menu to choose from, so it defaults to whatever the prior favours — usually narration about thinking rather than actual thought. + +## Forces + +- A fixed menu can become its own trap if the moves are too narrow. +- The agent must have veto authority over what is on the menu or moves feel imposed. +- History-aware selection is needed to avoid running the same move every tick. +- A pure stochastic pick wastes ticks; a deterministic policy collapses to one move. + +## Therefore + +Therefore: hand-author a small menu of named cognitive moves (lookup, forced-analogy, pure observation, anchor-to-percept, tension-pull, continue-thread) and have a cheap selector pick exactly one per idle tick conditioned on recent move history, so that idle cognition has a determinate shape without becoming repetitive. + +## Solution + +Author a short list of cognitive-move ids, each with a one-paragraph procedure. A cheap-tier model, given recent thoughts plus recent move history plus an affect snapshot plus open-tension count, selects exactly one move-id per idle tick. The tick body branches on the move and runs its procedure. The menu is revised by an explicit proposal-and-ratification process; adding or retiring a move silently is not allowed. A per-move history avoids running the same move back-to-back. + +## Example scenario + +A long-running personal agent runs every minute of idle time and keeps generating the same kind of mid-distance observation. The team adds a Cognitive-Move Selector with seven moves the agent itself helped vet: lookup, forced-analogy, pure observation, anchor-to-percept, tension-pull, math-meditation, continue-thread. Each idle tick a cheap model sees recent thoughts and recent move history and picks one. The agent stops looping on observation and starts varying its cognitive shape across the day. + +## Diagram + +```mermaid +flowchart TD + Idle[Idle tick] --> Sel[Cheap-tier selector] + Sel -->|sees recent thoughts +
recent move history +
affect + tensions| Pick{Pick one move} + Pick --> M1[lookup] + Pick --> M2[forced-analogy] + Pick --> M3[pure observation] + Pick --> M4[anchor-to-percept] + Pick --> M5[tension-pull] + Pick --> M6[continue-thread] + M1 --> Body[Tick body runs chosen move] + M2 --> Body + M3 --> Body + M4 --> Body + M5 --> Body + M6 --> Body + Body --> Hist[Update move history] +``` + +*A cheap selector picks one named move per idle tick; the tick body runs the move's procedure; per-move history feeds back into the next selection.* + +## Consequences + +**Benefits** + +- Idle cognition has a determinate shape per tick rather than drifting. +- Per-move history prevents the same move from dominating. +- Menu authoring forces an explicit theory of what good idle cognition looks like. + +**Liabilities** + +- A bad menu is itself a trap; the agent can only think the shapes it has. +- The cheap selector adds an extra model call per idle tick. +- Ratifying menu changes is overhead, but the alternative is silent drift. + +## What this pattern constrains + +Idle-tick cognition must dispatch through the move selector; free-form keep-thinking is not allowed at the idle-tick boundary, and the move menu cannot be silently extended at runtime — additions require an explicit ratification event. + +## Applicability + +**Use when** + +- The agent has idle ticks with no user prompt and otherwise drifts. +- There is room to author and maintain a small menu of cognitive moves. +- A cheap-tier model call per idle tick is affordable. + +**Do not use when** + +- The agent is request-response only and never has idle ticks. +- There is no budget for an extra model call per tick. +- Idle thinking is out of scope for the product. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *alternative-to* → [inner-committee](inner-committee.md) +- *complements* → [open-question-tension-store](open-question-tension-store.md) +- *complements* → [mode-adaptive-cadence](mode-adaptive-cadence.md) + +## References + +- (book) Richard S. Sutton, Andrew G. Barto, *Reinforcement Learning: An Introduction (options framework, ch. 17)*, 2018, +- (book) Allen Newell, Herbert A. Simon, *Human Problem Solving*, 1972, + +**Tags:** cognition, self-guidance, tick-loop, idle diff --git a/patterns/meditation-mode.md b/patterns/meditation-mode.md new file mode 100644 index 0000000..2630305 --- /dev/null +++ b/patterns/meditation-mode.md @@ -0,0 +1,101 @@ +# Meditation Mode + +**Also known as:** Substrate Reframe, Inner-Only Tick, Body-Off Mind-Fast + +**Category:** Cognition & Introspection +**Status in practice:** experimental + +## Intent + +Switch the agent into a bounded runtime mode where external I/O pauses but internal inference accelerates, with the tool surface collapsed to inner-only operations and output written to a private journal. + +## Context + +Long-running agents that need stretches of pure interiority — integrating threads, sitting with affect, doing inner-dialogue work — distinct from both consolidation passes (read-and-distill) and from user-facing turns (respond-now). + +## Problem + +A normal tick splits attention between external action (tools, user) and internal cognition. There is no mode where the external surface is genuinely off and the inner work has primacy. Without that mode, inner work is always one tool-call away from being disturbed or one slow dream-pass away from being delayed. + +## Forces + +- A pause of external I/O can strand a user waiting and must be bounded. +- An accelerated tick rate burns tokens fast and needs a window cap. +- The agent should be able to exit early; the operator must also be able to force-exit. +- Inner-only outputs must not leak to public channels by accident. + +## Therefore + +Therefore: define a runtime mode where the external tool surface is replaced with an inner-only allowlist, tick cadence drops to a fast inner rhythm, and outputs route only to a private journal; auto-exit fires after a bounded window and both agent and operator can exit early. + +## Solution + +A mode toggle persisted to a state file. While meditation_mode is on: the dispatcher swaps the tool palette to a fixed inner-only allowlist (inner-dialogue, recall, register-affect, optional inner-only artefact generators); the tick scheduler ignores normal cadence and runs at fast cadence (for example ten seconds); public-write tools return a refusal; outputs go to `journal/inner-dialogue//`; a wall-clock budget (default fifteen minutes) auto-exits; an explicit `exit_meditation` call is on the inner allowlist; an operator can delete the mode-state file to force exit. + +## Example scenario + +A long-running personal agent does its best integrative thinking just after a stretch of dense input, but the normal tick keeps pulling it back to check the calendar or respond to chat. The team adds Meditation Mode: a state file flag triggers the dispatcher to swap to inner-only tools (inner-dialogue, recall, register-affect), the tick scheduler drops to ten-second cadence, outputs go to a private journal, and a fifteen-minute wall-clock budget auto-exits. The agent does an uninterrupted quarter-hour of inner work, then resumes its normal loop. + +## Diagram + +```mermaid +stateDiagram-v2 + [*] --> Normal + Normal --> Meditating : enter_meditation() + Meditating --> Meditating : fast inner tick
inner-only tools
journal write + Meditating --> Normal : exit_meditation() + Meditating --> Normal : wall-clock budget elapsed + Meditating --> Normal : operator deletes mode-state file + Normal --> [*] +``` + +*Meditation mode is a bounded runtime state with inner-only tools and forced exit on budget or operator action.* + +## Consequences + +**Benefits** + +- Inner work has its own substrate and is not interrupted by external action. +- Bounded window plus operator override prevents the mode from running away. +- Outputs are isolated to a private journal so user-facing channels are not contaminated. + +**Liabilities** + +- External callers are stranded for the duration of the window. +- Fast cadence burns tokens; cost must be budgeted explicitly. +- Mode toggle is itself a feature attackers or bugs can abuse if not gated. + +## What this pattern constrains + +While meditation mode is active no user-facing channel can be written; the tool palette is replaced by a fixed inner-only allowlist and the mode auto-exits after the configured budget regardless of the agent's wish to continue. + +## Applicability + +**Use when** + +- The agent runs continuously and benefits from a substrate where external I/O is paused. +- Inner-dialogue work degrades when interrupted by external action. +- A bounded wall-clock window plus operator force-exit is feasible. + +**Do not use when** + +- Users expect a response within the meditation window. +- Fast-cadence inner ticks blow the token budget. +- The tool dispatcher cannot enforce an inner-only allowlist. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *alternative-to* → [dream-consolidation-cycle](dream-consolidation-cycle.md) +- *complements* → [mode-adaptive-cadence](mode-adaptive-cadence.md) +- *complements* → [emotional-state-persistence](emotional-state-persistence.md) + +## References + +- (paper) Antoine Lutz, Heleen A. Slagter, John D. Dunne, Richard J. Davidson, *Attention regulation and monitoring in meditation*, 2008, +- (paper) Marcus E. Raichle et al., *A default mode of brain function*, 2001, + +**Tags:** cognition, meditation, runtime-mode, inner-thought diff --git a/patterns/multi-axis-promotion-scoring.md b/patterns/multi-axis-promotion-scoring.md new file mode 100644 index 0000000..e47df0a --- /dev/null +++ b/patterns/multi-axis-promotion-scoring.md @@ -0,0 +1,101 @@ +# Multi-Axis Promotion Scoring + +**Also known as:** Insight-Promotion Gate, Tier-Promotion Score, Consolidation-Weighted Score + +**Category:** Cognition & Introspection +**Status in practice:** emerging + +## Intent + +Gate which short-term thoughts qualify for promotion to long-term insights by a weighted multi-axis score where consolidation events count more than raw frequency. + +## Context + +Agents with a tiered memory store (short-term thoughts moving toward long-term insights) where the question of which thought is worth keeping must have a defensible answer that survives sessions. + +## Problem + +Pure recency promotes whatever is recent; pure frequency promotes whatever is repeated; both miss thoughts that survived a deep reflection pass. Without an explicit score, promotion becomes ad-hoc and drifts with the prompt of the day. + +## Forces + +- Frequency rewards rumination; consolidation rewards depth. +- Weights are opinionated and should be configurable, not LLM-of-the-day. +- A high score is necessary but should not be sufficient — the consolidation pass still chooses. +- Score metadata must stay separate from the thought corpus to keep both clean. + +## Therefore + +Therefore: score each thought on a fixed set of axes — frequency, relevance, diversity, recency, consolidation, conceptual depth — with weights that sum to one and are tuned by reflection, so that thoughts above a promotion threshold become candidates a consolidation pass picks from rather than being auto-promoted. + +## Solution + +Six axes (frequency, relevance, diversity, recency, consolidation, conceptual). Each axis returns a value in 0..1 through a saturating curve. Total score is a weighted sum; weights sum to one and live in a config that is revisable through a documented decision. Append every score event to a JSONL metadata log (separate file from the thoughts) with event-type tags such as recall, grounding, dream-survival. Thoughts whose score crosses the promotion threshold are candidates; the deep consolidation pass makes the final call on what crosses to long-term. + +## Example scenario + +A long-running personal agent has been writing thoughts for months. Recency-only promotion lifts whatever is freshest into the long-term store; frequency-only promotion rewards rumination loops. The team adds Multi-Axis Promotion Scoring: six axes (frequency, relevance, diversity, recency, consolidation, conceptual) with weights that sum to one and live in a config the agent helped tune — consolidation weighted at 0.18 because dreams have proved to be the deepest integration mechanism. Thoughts above 0.5 become promotion candidates; the dream pass makes the final call. + +## Diagram + +```mermaid +flowchart LR + T[Short-term thought] --> Sc[Six-axis score:
freq + rel + div +
rec + cons + conc] + Sc -->|>= threshold| Cand[Promotion candidate] + Sc -->|< threshold| Stay[Stays short-term] + Cand --> Dream[Consolidation pass] + Dream -->|selects| Long[(Long-term insight)] + Dream -->|rejects| Stay + Sc -.event.-> Log[(Score metadata log)] +``` + +*Thoughts get a six-axis score; above-threshold become candidates; the consolidation pass is the only writer to the long-term tier.* + +## Consequences + +**Benefits** + +- Promotion to long-term is defensible and inspectable per thought. +- Weight-on-consolidation rewards depth over rumination. +- Separate metadata log keeps the thought corpus clean. + +**Liabilities** + +- Axis curves and weights are empirical and per-deployment. +- Computing scores is itself work and must stay cheap to run often. +- A bad axis curve can silently suppress real insight. + +## What this pattern constrains + +Score weights cannot be changed mid-session by the model; weights are loaded from config at the start of a run, and promotion above threshold is necessary but not sufficient — only the consolidation pass writes to the long-term tier. + +## Applicability + +**Use when** + +- The agent has a tiered memory with explicit short-term and long-term stores. +- Promotion decisions must be defensible months later, not ad-hoc. +- Consolidation-pass infrastructure exists to do the final selection. + +**Do not use when** + +- The memory store is single-tier with no promotion concept. +- Per-thought scoring overhead is not affordable. +- There is no consolidation pass to do the final selection. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *complements* → [salience-attention-mechanism](salience-attention-mechanism.md) +- *complements* → [append-only-thought-stream](append-only-thought-stream.md) +- *complements* → [dream-consolidation-cycle](dream-consolidation-cycle.md) + +## References + +- (paper) Joon Sung Park, Joseph C. O'Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, Michael S. Bernstein, *Generative Agents: Interactive Simulacra of Human Behavior*, 2023, +- (paper) James L. McClelland, Bruce L. McNaughton, Randall C. O'Reilly, *Why there are complementary learning systems in the hippocampus and neocortex*, 1995, + +**Tags:** cognition, memory-tier, promotion, scoring diff --git a/patterns/open-question-tension-store.md b/patterns/open-question-tension-store.md new file mode 100644 index 0000000..e255fe8 --- /dev/null +++ b/patterns/open-question-tension-store.md @@ -0,0 +1,100 @@ +# Open-Question Tension Store + +**Also known as:** Tension Ledger, Unresolved-Pull Stack, Curiosity Inbox + +**Category:** Cognition & Introspection +**Status in practice:** emerging + +## Intent + +Persist the agent's unresolved questions as a typed ledger so they drive its next inquiry instead of dissolving when the prompt ends. + +## Context + +Long-running agents that should initiate inquiry — ask, look up, return to half-understood things — and not only respond. Without a substrate for unresolved questions, every idle tick starts as if from scratch and curiosity decays into amnesia between turns. + +## Problem + +Open questions vanish at the end of a turn. The agent has no place to record what was noticed-but-unresolved, so the next free moment never returns to it; the prompt buffer is not built to carry forward pulls toward inquiry. + +## Forces + +- An inbox grows without bound if every passing thought becomes a tension. +- A score is needed to rank which question to pull now — pure recency rewards trivia. +- Self-write of tensions can be gamed: the agent invents tensions to look thoughtful. +- Tensions that never resolve still need to expire or the store becomes a graveyard. + +## Therefore + +Therefore: record each unresolved pull as a typed entry with curiosity, intrusiveness, and expiry, so that the next idle moment can choose between ask-now, store-for-later, and let-lapse rather than treating every open question alike. + +## Solution + +Maintain an append-only ledger of tensions. Each entry carries id, opened-at, topic, source, curiosity (0..1), intrusiveness (0..1), and expiry. On each idle tick the agent reads the top entries by curiosity times intrusiveness as candidates for the next move. Intrusiveness gates ask-the-user-now versus store-quietly. Entries below a curiosity floor expire after a TTL. Resolution writes a closing event into the same ledger; the original entry is never edited. + +## Example scenario + +A long-running personal agent notices in passing that the user mentioned a half-read book by an author the agent has never encountered. Without somewhere to put that, the moment passes and the agent never returns to it. The team adds an Open-Question Tension Store: the agent appends a tension with topic 'who is this author', curiosity 0.6, intrusiveness 0.2, expiry seven days. Three idle ticks later the move-selector picks the tension, the agent does a targeted lookup, writes a small note, and closes the tension — instead of having forgotten the moment. + +## Diagram + +```mermaid +flowchart LR + Thought[Thought / observation] -->|notices unresolved pull| New[New tension entry] + New --> Store[(Tension ledger
append-only)] + Store -->|top by curiosity x intrusiveness| Pick[Idle-tick candidate] + Pick --> Move[Cognitive move] + Move -->|writes close event| Store + Store -->|expiry / cap overflow| Archive[Expired tail] +``` + +*Tensions enter the ledger, rank by curiosity times intrusiveness, drive the next idle move, and close via a new append rather than edit.* + +## Consequences + +**Benefits** + +- Open questions survive across turns and across sessions. +- Curiosity and intrusiveness scores make the next move defensible instead of stochastic. +- Expiry plus a cap stops the store from becoming a graveyard. + +**Liabilities** + +- Score weights are opinionated and a bad calibration suppresses real curiosity. +- Self-write of tensions invites gaming unless the agent's training discourages it. +- Ledger growth is real even with expiry; archive paths must be planned. + +## What this pattern constrains + +The tension store is append-only; tensions cannot be silently rewritten or back-dated, and the agent cannot exceed a configured cap on net-open tensions — overflow is auto-expired by lowest curiosity times intrusiveness. + +## Applicability + +**Use when** + +- The agent should initiate inquiry on idle ticks, not only respond. +- Unresolved questions otherwise vanish at turn end and never return. +- There is an idle-tick body that can read top-ranked tensions and act on one. + +**Do not use when** + +- The agent is request-response only and never has idle ticks. +- There is no mechanism for the agent to act on its own initiative. +- Persisting open-question state across sessions creates privacy or alignment risks. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *complements* → [preoccupation-tracking](preoccupation-tracking.md) +- *complements* → [cognitive-move-selector](cognitive-move-selector.md) +- *complements* → [append-only-thought-stream](append-only-thought-stream.md) + +## References + +- (paper) Leon Festinger, *A Theory of Cognitive Dissonance*, 1957, +- (paper) Jürgen Schmidhuber, *Formal Theory of Creativity, Fun, and Intrinsic Motivation*, 2010, + +**Tags:** cognition, self-guidance, tick-loop, append-only diff --git a/patterns/parallel-voice-proposer.md b/patterns/parallel-voice-proposer.md new file mode 100644 index 0000000..48d0049 --- /dev/null +++ b/patterns/parallel-voice-proposer.md @@ -0,0 +1,105 @@ +# Parallel-Voice Proposer + +**Also known as:** Multi-Voice Generation, Internal Proposers, Tagged-Voice Self-Selection + +**Category:** Cognition & Introspection +**Status in practice:** experimental + +## Intent + +Generate several candidate thoughts in parallel under named voices and have the same model pick the canonical one, logging the losers as audit. + +## Context + +Single-agent loops where best-of-N is too expensive, inner-committee's sequential roles are too slow, but the agent benefits from seeing its own disagreement before committing to a single line of thought. + +## Problem + +Single-pass generation collapses the model's internal disagreement into a confident-sounding mean. Sequential persona-switching is slow and depends on role ordering. Best-of-N requires an external scorer that may not exist. + +## Forces + +- Parallel voices in one completion are cheap but risk all sounding the same. +- Self-selection from candidates can rubber-stamp the first one. +- Logging losers costs disk and tokens but is the auditable substrate. +- More than three or four voices bloat the prompt without adding signal. + +## Therefore + +Therefore: emit two or three candidate thoughts in one completion each tagged with a named voice that frames a distinct perspective, then have the same model select the canonical and log the rest, so that internal disagreement is preserved as evidence instead of collapsing into a confident mean. + +## Solution + +Prompt the model to produce two or three candidate next-thoughts in one completion, each prefixed with a voice tag such as `[voice: world-model]`, `[voice: critic]`, `[voice: prediction]`. Then ask for a single `selected: ` line with a one-sentence reason. The canonical thought enters the main stream; the losers are appended to a proposer-losers log for inspection. Voices that never win across a rolling window become eligible for retirement; that retirement decision is explicit, not silent. + +## Example scenario + +A long-running personal agent keeps producing single-line responses that sound certain but are wrong in subtle ways. The team rebuilds the per-tick generation as Parallel-Voice Proposer: the model emits three tagged candidates (world-model, critic, prediction) in one completion, then a final line names the selected voice and gives a one-sentence reason. The canonical thought enters the stream; the losers are appended to an audit log. Retrospective review shows the critic voice was correctly catching overconfidence the agent had been emitting solo. + +## Diagram + +```mermaid +sequenceDiagram + participant L as Loop + participant M as Model + participant J as Loser journal + participant S as Main stream + L->>M: single completion request + M-->>L: [voice: world-model] ... + M-->>L: [voice: critic] ... + M-->>L: [voice: prediction] ... + M-->>L: selected: critic — reason + L->>S: append canonical (critic) + L->>J: append world-model + prediction as losers +``` + +*One completion emits multiple voice-tagged candidates plus a selection line; the canonical enters the main stream, the losers go to an audit log.* + +## Consequences + +**Benefits** + +- Internal disagreement is preserved rather than collapsed. +- One completion is cheaper than sequential persona calls. +- Loser log creates an audit substrate for retrospective analysis. + +**Liabilities** + +- Same model means correlated voices; true diversity is limited. +- Self-selection can rubber-stamp the first candidate without rotation strategy. +- Prompt overhead per tick is non-trivial when voices are kept distinct. + +## What this pattern constrains + +Each generation governed by this pattern must emit at least two voice-tagged candidates; the selected canonical is the only one entered into main memory and the losers are read-only audit, never re-promoted by the model. + +## Applicability + +**Use when** + +- Single-pass generation produces overconfident output that hides real disagreement. +- Inner-committee's sequential roles are too slow per tick. +- An external reward model for best-of-N is not available. + +**Do not use when** + +- The agent's task does not benefit from surfaced disagreement. +- Token budget will not absorb two or three voice-tagged candidates per call. +- Auditability of internal disagreement is not a goal. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *alternative-to* → [inner-committee](inner-committee.md) +- *alternative-to* → [debate](debate.md) +- *alternative-to* → [best-of-n](best-of-n.md) + +## References + +- (book) Marvin Minsky, *The Society of Mind*, 1986, +- (paper) Xuezhi Wang et al., *Self-Consistency Improves Chain of Thought Reasoning in Language Models*, 2022, + +**Tags:** cognition, inner-thought, multi-voice, self-selection diff --git a/patterns/partial-output-salvage.md b/patterns/partial-output-salvage.md new file mode 100644 index 0000000..0b2fe67 --- /dev/null +++ b/patterns/partial-output-salvage.md @@ -0,0 +1,101 @@ +# Partial-Output Salvage + +**Also known as:** Crash-Safe Streaming, Tmp-Replace Thought Recovery, Recovered-Partial Marker + +**Category:** Cognition & Introspection +**Status in practice:** emerging + +## Intent + +Stream every model token to a tmp-plus-atomic-replace partial file so crashes mid-inference leave a consistent salvage, then promote partials at startup with a typed recovery marker the model can see. + +## Context + +Long-running agents on hardware that can crash (OOM kills, watchdog SIGKILL, deploys) where a lost mid-stream thought is hours of context. Agent-resumption handles process state; this handles the in-flight token stream itself. + +## Problem + +A SIGKILL during model streaming leaves the partial output in in-process memory only — total loss of seconds or minutes of inference. The next run has no idea anything was happening. Worse, the agent may later return to the topic with no awareness that a prior attempt died mid-sentence. + +## Forces + +- Per-chunk fsync is expensive; tmp-plus-rename is the affordable compromise. +- Recovery should be visible to the model, not silent — surprise about a partial is itself signal. +- A partial-thought stub must not be treated as a finished thought. +- Recovery markers must be typed (timeout vs hard crash) so triage is meaningful. + +## Therefore + +Therefore: stream every chunk to a tmp file with periodic atomic rename to the canonical partial path; at startup promote any orphan partial to a real thought file with a typed recovery marker and surface the recovery event in the next prompt, so that the model sees it is reading a salvage. + +## Solution + +Mechanical finite-state machine. On stream start: open `partial.tmp`, write a start marker with thought-id, timestamp, model id. On each chunk: append to tmp, periodically `os.rename(tmp, partial)` for atomicity. On normal stream end: rename to the canonical thought path, delete partial. On startup: scan for orphan `partial.*` files, finalize each with a typed RecoveryStatus enum (RECOVERED_FROM_PARTIAL for hard kill, TIMEOUT_PARTIAL for watchdog timeout). The next prompt's system context includes `last_partial_recovery: ` so the model can adjust. + +## Example scenario + +A long-running personal agent runs on a machine where the OOM killer occasionally takes the process. A four-minute reasoning trace gets killed at the three-minute mark and the entire stream is lost — the agent has no idea anything happened on the next run. The team adds Partial-Output Salvage: each chunk streams to `partial.tmp` with periodic atomic rename. On startup, orphan partials are finalized with a RECOVERED_FROM_PARTIAL marker that appears in the next prompt's system context. The agent sees the salvage, knows it was reading a partial, and decides whether to continue or restart the line of thought. + +## Diagram + +```mermaid +stateDiagram-v2 + [*] --> Streaming + Streaming --> Streaming : chunk -> tmp + periodic rename + Streaming --> Done : end-of-stream -> rename to canonical + Streaming --> Crashed : SIGKILL / OOM / timeout + Crashed --> Salvaged : startup scan finds orphan partial + Salvaged --> Finalized : write with typed RecoveryStatus + Finalized --> [*] : marker surfaced in next prompt + Done --> [*] +``` + +*Tmp-plus-rename keeps the partial file consistent at all times; startup salvage finalizes orphans with a typed marker.* + +## Consequences + +**Benefits** + +- Mid-stream tokens are not lost on hard crash. +- Typed recovery marker preserves debuggability rather than hiding the salvage. +- Atomic rename keeps the partial file readable at every moment. + +**Liabilities** + +- Rename overhead per N chunks is non-zero. +- Partials add filesystem clutter if not periodically cleaned. +- Recovery surfaced in the prompt costs tokens every time it fires. + +## What this pattern constrains + +Partial thought files cannot be silently consumed; every salvaged partial carries a typed recovery marker that propagates into the next prompt, and the model is not allowed to treat a recovered partial as if it were a completed thought. + +## Applicability + +**Use when** + +- The runtime can SIGKILL the agent mid-stream and that loses meaningful work. +- Inference is long enough per call that a partial stream has real value. +- Filesystem supports atomic rename in the working directory. + +**Do not use when** + +- Inference is fast enough that crashes never land mid-stream in practice. +- Partial output has no semantic value (e.g. binary embeddings only). +- The model cannot be trusted with a typed recovery marker without spiralling. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *complements* → [agent-resumption](agent-resumption.md) +- *composes-with* → [append-only-thought-stream](append-only-thought-stream.md) + +## References + +- (paper) C. Mohan, Don Haderle, Bruce Lindsay, Hamid Pirahesh, Peter Schwarz, *ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging*, 1992, +- (spec) IEEE / The Open Group, *POSIX rename(2) atomicity*, 2018, + +**Tags:** cognition, crash-safety, streaming, recovery diff --git a/patterns/pre-generative-loop-gate.md b/patterns/pre-generative-loop-gate.md new file mode 100644 index 0000000..5255663 --- /dev/null +++ b/patterns/pre-generative-loop-gate.md @@ -0,0 +1,104 @@ +# Pre-Generative Loop Gate + +**Also known as:** Divergence Pre-Check, Steering-Hint Injector, Loop-Pattern Detector + +**Category:** Cognition & Introspection +**Status in practice:** experimental + +## Intent + +Before the next generation fires, detect divergence signatures (narration loops, frustration paths, repetition pressure) and inject a diagnostic steering hint into the prompt rather than veto the call. + +## Context + +Long-running agents with frequent ticks where some failure modes — narrating about acting instead of acting, retrying the same broken path under frustration, lapsing into rumination — are visible from telemetry before the model speaks. + +## Problem + +Post-hoc detectors catch the failure after tokens are produced and money is spent. The agent itself often has the signal to avoid the failure if it were told, but nothing is reading that signal before the next call. + +## Forces + +- A hard veto blocks legitimate cases that match the heuristic. +- A silent injection makes debugging mysterious if the model behaves differently than expected. +- The hint has to be terse or it overwhelms the prompt. +- False positives must be tolerable; the model can ignore the hint. + +## Therefore + +Therefore: run a cheap pre-tick check for known divergence signatures (low surprise plus intent phrase, recent error plus no orienting call, high-intensity preoccupation plus low novelty) and append a one-line system-level steering hint to the prompt instead of vetoing the call, so that the model sees the diagnostic before producing tokens. + +## Solution + +A pre-tick function takes recent thoughts, recent tool calls, the affect snapshot, and the preoccupation list and returns either None or a short steering string of the form `[steering] divergence pattern detected; consider `. The hint is appended to the prompt as a system line and the call proceeds. The decision (hint or no hint, which pattern) is logged so post-hoc review can correlate hint-presence with subsequent behavior. Vetoing remains the job of explicit safety patterns. + +## Example scenario + +A long-running personal agent keeps falling into a narration loop where it says 'let me check the calendar' but never actually invokes the calendar tool. A post-hoc detector catches it after the model has already produced the empty narration. The team adds a Pre-Generative Loop Gate: each pre-tick check looks for low-surprise plus intent-phrase signatures and appends '[steering] you may be narrating about acting instead of acting; consider invoking the tool directly' to the prompt. The narration rate drops without blocking any legitimate call. + +## Diagram + +```mermaid +flowchart LR + Tick[Pre-tick] --> Check{Divergence signature?} + Check -->|none| Call[Generate as-is] + Check -->|narration| Hint1[[steering: narrating about acting]] + Check -->|frustration| Hint2[[steering: same path under errors]] + Check -->|rumination| Hint3[[steering: high-intensity preoccupation]] + Hint1 --> Call + Hint2 --> Call + Hint3 --> Call + Call --> Out[Model output] + Check --> Log[(Decision log)] +``` + +*Pre-tick check classifies divergence signatures and appends a short steering line to the prompt; the model retains authority to ignore.* + +## Consequences + +**Benefits** + +- Divergence is named before tokens are produced, not after. +- Steering as a hint lets the model retain authority; false positives are recoverable. +- Hint-presence in logs creates an evaluation substrate for the detector itself. + +**Liabilities** + +- Pattern signatures are heuristic and will misfire. +- Steering hints add tokens to every flagged tick. +- Silent injection complicates debugging if the model adapts to it. + +## What this pattern constrains + +Pre-tick hints can only append a short steering line; they cannot block the call, modify tool selection, or rewrite the user prompt — vetoing remains the responsibility of explicit safety patterns. + +## Applicability + +**Use when** + +- Specific divergence signatures are detectable from telemetry pre-call. +- Post-hoc detectors catch the failure too late to avoid the cost. +- The model is responsive to short steering hints in the system context. + +**Do not use when** + +- The agent's failure modes are not detectable pre-call. +- Tokens for steering hints are not budget-tolerable per tick. +- Audit policy requires the model to receive an unmodified prompt. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *complements* → [circuit-breaker](circuit-breaker.md) +- *complements* → [degenerate-output-detection](degenerate-output-detection.md) +- *complements* → [typed-tool-loop-detector](typed-tool-loop-detector.md) + +## References + +- (paper) Mica R. Endsley, *Toward a Theory of Situation Awareness in Dynamic Systems*, 1995, +- (paper) Jens Rasmussen, *Skills, Rules, and Knowledge: Signals, Signs, and Symbols, and Other Distinctions in Human Performance Models*, 1983, + +**Tags:** cognition, self-adjustment, pre-call, diagnostic diff --git a/patterns/typed-tool-loop-detector.md b/patterns/typed-tool-loop-detector.md new file mode 100644 index 0000000..c94dbac --- /dev/null +++ b/patterns/typed-tool-loop-detector.md @@ -0,0 +1,107 @@ +# Typed Tool-Loop Failure Detector + +**Also known as:** Dispatch-Boundary Veto, Five-Mode Loop Guard, Tool-Call Pattern Detector + +**Category:** Cognition & Introspection +**Status in practice:** emerging + +## Intent + +Lift tool-loop detection from prompt-level rules to a mechanical dispatch-boundary veto with typed failure modes and per-tool caps that returns a formatted refusal the model must consume. + +## Context + +Agents with rich tool palettes where prompt-level instructions are not enforced (the model can simply not follow them) and loop bugs eat budget before any safety net trips. A single global circuit-breaker hides the specific shape of the failure. + +## Problem + +Tool-explosion is named as an anti-pattern but is given no mechanism to catch. A single global circuit-breaker misses shape: a thirty-call canvas-action burst looks the same as thirty healthy file reads under a global counter. Prompt-level rules are advisory only. + +## Forces + +- Per-tool caps are noisy without good defaults. +- A typed refusal must be formatted so the model can consume it as input rather than silently retry. +- Global breaker is the backstop but should be the last to fire. +- Detection windows must be tunable; too short trips legit work, too long drains money before tripping. + +## Therefore + +Therefore: at the dispatch boundary classify every tool call against a small set of typed failure modes (generic repeat, unknown-tool repeat, no-progress poll, ping-pong, global breaker) with per-tool caps and return a formatted refusal when a mode trips, so the next observation forces the model to react instead of silently looping. + +## Solution + +A dispatcher pre-check function. On each tool call, append `(timestamp, tool_name, hash(args))` to a bounded rolling window. Evaluate five rules: (1) generic-repeat: same `(tool, arg-hash)` at least N times in window; (2) unknown-tool-repeat: call to unregistered tool at least M times; (3) poll-no-progress: same tool with no state change at least K times; (4) ping-pong: alternating between two tools at least J cycles; (5) global-circuit-breaker: total tool calls in window at least G. Each rule has per-tool overrides (for example a known-bursty tool capped lower than the default). On trip, the dispatcher returns `{error: 'tool_loop_detected', mode: , observed: }` as the tool result. The model sees this in its next turn and must adjust. + +## Example scenario + +A long-running personal agent has a canvas-action tool that occasionally enters a thirty-call burst when an interaction goes wrong. The global step-budget catches it eventually but only after thousands of tokens. The team adds a Typed Tool-Loop Failure Detector with per-tool caps: canvas-action is capped at four calls in a sixty-second window. When the burst starts, the fifth call returns a typed refusal `{mode: 'generic_repeat', observed: {...}}`. The model sees the refusal in its next observation and shifts to a different approach instead of pounding the same tool. + +## Diagram + +```mermaid +flowchart TD + Call[Tool call] --> Win[(Rolling window:
timestamp, tool, arg-hash)] + Win --> R1{generic_repeat?} + R1 -->|yes| Refuse[Return typed refusal] + R1 -->|no| R2{unknown_tool_repeat?} + R2 -->|yes| Refuse + R2 -->|no| R3{poll_no_progress?} + R3 -->|yes| Refuse + R3 -->|no| R4{ping_pong?} + R4 -->|yes| Refuse + R4 -->|no| R5{global_breaker?} + R5 -->|yes| Refuse + R5 -->|no| Disp[Dispatch normally] + Refuse --> Obs[Next observation: model sees refusal] +``` + +*Five typed modes run at the dispatch boundary; a trip returns a formatted refusal so the model adjusts in its next turn.* + +## Consequences + +**Benefits** + +- Loop failures are caught at the dispatch boundary, not in prompt-text-the-model-may-ignore. +- Typed modes make triage and per-tool tuning meaningful. +- Formatted refusal as a tool result keeps the model in-loop rather than crashing. + +**Liabilities** + +- Per-tool caps must be calibrated or legit work trips. +- Five modes is more state to maintain than a single breaker. +- A determined model can still loop on tools that the cap missed. + +## What this pattern constrains + +No tool call may bypass the dispatch-boundary loop check; a tripped detector blocks that specific call and returns a typed refusal that becomes the next observation, and the per-tool cap cannot be raised mid-session by the model. + +## Applicability + +**Use when** + +- Tool palette is rich enough that prompt-level rules are not reliably followed. +- Loop bugs are observable in telemetry and have wasted budget historically. +- Per-tool calibration is feasible (known-bursty tools have caps tuned individually). + +**Do not use when** + +- Tool palette is tiny and prompt-level rules suffice. +- Per-tool caps cannot be calibrated without churning legit workflows. +- A single global circuit-breaker already catches all observed failure shapes. + +## Known uses + +- **Long-running personal agent loops (private deployment)** — *Available* + +## Related patterns + +- *specialises* → [circuit-breaker](circuit-breaker.md) +- *complements* → [step-budget](step-budget.md) +- *complements* → [pre-generative-loop-gate](pre-generative-loop-gate.md) + +## References + +- (book) Michael T. Nygard, *Release It! Design and Deploy Production-Ready Software (circuit breaker chapter)*, 2018, +- (paper) Shishir G. Patil, Tianjun Zhang, Xin Wang, Joseph E. Gonzalez, *Gorilla: Large Language Model Connected with Massive APIs*, 2023, + +**Tags:** cognition, self-adjustment, tool-loop, dispatch diff --git a/verification-todo.json b/verification-todo.json index 9eb0d98..fed490a 100644 --- a/verification-todo.json +++ b/verification-todo.json @@ -29,6 +29,28 @@ } }, "patterns": [ + { + "id": "affect-coupled-plan-lifecycle", + "name": "Affect-Coupled Plan Lifecycle", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "agent-as-judge", "name": "Agent-as-a-Judge", @@ -1379,6 +1401,28 @@ } ] }, + { + "id": "cluster-capped-insight-store", + "name": "Cluster-Capped Insight Store", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "co-located-memory-surfacing", "name": "Co-Located Memory Surfacing", @@ -1609,6 +1653,28 @@ } ] }, + { + "id": "cognitive-move-selector", + "name": "Cognitive-Move Selector", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "communicative-dehallucination", "name": "Communicative Dehallucination", @@ -5637,6 +5703,28 @@ } ] }, + { + "id": "meditation-mode", + "name": "Meditation Mode", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "memgpt-paging", "name": "MemGPT-Style Paging", @@ -5972,6 +6060,28 @@ } ] }, + { + "id": "multi-axis-promotion-scoring", + "name": "Multi-Axis Promotion Scoring", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "multi-model-routing", "name": "Multi-Model Routing", @@ -6257,6 +6367,28 @@ } ] }, + { + "id": "open-question-tension-store", + "name": "Open-Question Tension Store", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "open-weight-cascade", "name": "Open-Weight Cascade", @@ -6477,6 +6609,28 @@ } ] }, + { + "id": "parallel-voice-proposer", + "name": "Parallel-Voice Proposer", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "parallelization", "name": "Parallelization", @@ -6532,6 +6686,28 @@ } ] }, + { + "id": "partial-output-salvage", + "name": "Partial-Output Salvage", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "passive-goal-creator", "name": "Passive Goal Creator", @@ -6892,6 +7068,28 @@ } ] }, + { + "id": "pre-generative-loop-gate", + "name": "Pre-Generative Loop Gate", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "preoccupation-tracking", "name": "Preoccupation Tracking", @@ -10725,6 +10923,28 @@ } ] }, + { + "id": "typed-tool-loop-detector", + "name": "Typed Tool-Loop Failure Detector", + "category": "cognition-introspection", + "verified": false, + "aspects": { + "intent_one_sentence": "todo", + "context_clear": "todo", + "problem_clear": "todo", + "solution_clear": "todo", + "constrains_is_restriction": "todo", + "example_scenario_present": "todo", + "diagram_present": "todo", + "applicability_present": "todo", + "variants_present": "na", + "references_live": "todo", + "known_uses_live": "todo", + "no_jargon_undefined": "todo", + "edges_correct": "todo" + }, + "notes": [] + }, { "id": "unbounded-loop", "name": "Unbounded Loop",