Skip to main content

Design Pattern Cheatsheet (English)

Python equivalents are illustrative. Example source points to Claude Code (TypeScript) or this repo’s experiments/ where the idea shows up clearly.

PatternOne-linerPython sketchExample source
Async iterator / generatorStream events asynchronously; consumer pulls the next step.async def loop(): yield eventsrc/query.ts; experiments/exp_03_core_agent_loop/main.py
Immutable snapshotReplace state with a new object each turn; no in-place mutation.@dataclass(frozen=True) + replace()experiments/exp_03_core_agent_loop/main.py
StrategyPluggable algorithms (e.g., LLM providers).ABC + multiple implementationsexperiments/shared/llm_client.py
RegistryMap names to tools or handlers.dict[str, Callable]src/utils/toolSearch.ts; experiments/exp_04_tool_system/main.py
Chain of responsibilityPass a request along handlers until one accepts (e.g., permissions).List of handle(req)src/utils/permissions/; experiments/exp_05_permission_engine/main.py
FacadeOne entrypoint over a complex subsystem.Wrapper classexperiments/shared/llm_client.py; src/utils/model/model.ts
AdapterTranslate an external protocol to an internal interface.Thin wrapper over a SDKtools/MCPTool/MCPTool.ts; experiments/exp_09_mcp_client/main.py
Observer / pub-subSubscribers react to streamed events.asyncio.Queue + consumerssrc/utils/stream.ts; experiments/exp_12_streaming_api/main.py
StateExplicit states and transitions for loop control.Enum + branchingexperiments/exp_03_core_agent_loop/main.py
CommandEncapsulate an action for queueing or retry.dataclass + run(ctx)src/commands/; experiments/exp_15_command_system/main.py
Template methodFixed skeleton; subclasses override steps.Base run() calling _step_*src/services/compact/compact.ts
Leader–worker / queueCoordinator enqueues; workers dequeue.asyncio.Queuesrc/utils/swarm/; experiments/exp_10_multi_agent/main.py