"""15: Skills (dispatch /security-check), CLAUDE.md loading, and system prompt variants.""" import asyncio from claude_agent_sdk import AssistantMessage, ClaudeAgentOptions, ResultMessage, SystemMessage, ToolUseBlock, query from demo_util import PROJECT async def main(): # --- A: dispatch a project skill by name ------------------------------------------- print("=== A: /security-check skill ===") async for message in query( prompt="/security-check", options=ClaudeAgentOptions(cwd=PROJECT, setting_sources=["project"], skills="all", allowed_tools=["Read", "Grep", "Glob"], max_turns=8), ): if isinstance(message, SystemMessage) and message.subtype == "init": print("skills loaded:", message.data.get("skills")) print("'security-check' in slash_commands:", "security-check" in message.data.get("slash_commands", [])) elif isinstance(message, AssistantMessage): for block in message.content: if isinstance(block, ToolUseBlock): print(f" tool: {block.name}") elif isinstance(message, ResultMessage): print("result:\n", message.result) # --- B: CLAUDE.md conventions are followed when the project source is loaded -------- print("\n=== B: CLAUDE.md loaded (setting_sources=['project']) vs not ([]) ===") for sources in (["project"], []): try: async for message in query( prompt="Without using any tools: do you have project-specific instructions about type hints? " "Answer yes or no, then quote them if yes.", options=ClaudeAgentOptions(cwd=PROJECT, setting_sources=sources, tools=[], max_turns=2), ): if isinstance(message, ResultMessage): print(f"setting_sources={sources}: {message.result!r}") except Exception as error: print(f"setting_sources={sources}: ended with error: {error}") # --- C: system prompt variants ---------------------------------------------------- print("\n=== C: system prompt variants ===") variants = { "default (minimal)": None, "claude_code preset + append": {"type": "preset", "preset": "claude_code", "append": "Always end your reply with the word BANANA."}, "custom string": "You are a pirate. Answer in one short pirate sentence.", } for label, sp in variants.items(): async for message in query( prompt="Who are you and what can you do? One sentence.", options=ClaudeAgentOptions(cwd=PROJECT, system_prompt=sp, tools=[], max_turns=2, setting_sources=[]), ): if isinstance(message, ResultMessage): print(f"[{label}] {message.result!r}") asyncio.run(main())