Isomorphic tool system: toolDefinition() with Zod schemas, .server() and .client() implementations, passing tools to both chat() on server and useChat/clientTools on client, tool approval flows with needsApproval and bound interrupts (resolveInterrupt), lazy tool discovery with lazy:true, rendering ToolCallPart and ToolResultPart in UI.
Low
Low-risk findings.
2 low severity findings. Worth noting, but not necessarily harmful.
The skill exposes the agent to untrusted, user-generated content from public third-party sources, creating a risk of indirect prompt injection. This includes browsing arbitrary URLs, reading social media posts or forum comments, and analyzing content from unknown websites.
The runtime path `/api/chat/route.ts` ingests outsider-authored free text via `const { messages } = await request.json()` and passes it directly into `chat({ ..., messages, tools: [...] })`, enabling indirect prompt injection through the user’s chat messages.
The skill fetches instructions or code from an external URL at runtime, and the fetched content directly controls the agent’s prompts or executes code. This dynamic dependency allows the external source to modify the agent’s behavior without any changes to the skill itself.
The skill calls createMCPClient/createMCPClients at runtime against external MCP endpoints (e.g. 'https://mcp.example.com/mcp', 'https://mcp.github.com/mcp', 'https://mcp.linear.app/mcp'), which discover and supply server-hosted tools that directly affect the agent's behavior and execute remotely, so these URLs are runtime dependencies that can control prompts/tool execution.
2822885
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.