# Tool Affordance Map Maintenance mode: hybrid: tool names/schemas are boot-harvested from shipped tool plugins; required services and shipped aliases are classified in `scripts/gen-doc-graphs.ts` with a completeness guard. This page connects the model-visible tools to the plugin packages and service seams behind them. For exact JSON Schemas, see [tool-catalog/tools.md](../tool-catalog/tools.md). ```mermaid flowchart LR model["Model request tools[]"] toolpkg__deepseek_ai_dsh_tool_bash["tool-bash
bash, bash_kill, bash_output"] model --> toolpkg__deepseek_ai_dsh_tool_bash requires_ctx_tools["ctx.tools"] toolpkg__deepseek_ai_dsh_tool_bash --> requires_ctx_tools requires_ctx_bash["ctx.bash"] toolpkg__deepseek_ai_dsh_tool_bash --> requires_ctx_bash toolpkg__deepseek_ai_dsh_tool_fs["tool-fs
edit, read, write"] model --> toolpkg__deepseek_ai_dsh_tool_fs toolpkg__deepseek_ai_dsh_tool_fs --> requires_ctx_tools requires_ctx_fs["ctx.fs"] toolpkg__deepseek_ai_dsh_tool_fs --> requires_ctx_fs requires_ctx_systemPrompt["ctx.systemPrompt"] toolpkg__deepseek_ai_dsh_tool_fs --> requires_ctx_systemPrompt toolpkg__deepseek_ai_dsh_tool_subagent["tool-subagent
subagent"] model --> toolpkg__deepseek_ai_dsh_tool_subagent toolpkg__deepseek_ai_dsh_tool_subagent --> requires_ctx_tools requires_ctx_subagents["ctx.subagents"] toolpkg__deepseek_ai_dsh_tool_subagent --> requires_ctx_subagents toolpkg__deepseek_ai_dsh_tool_todo["tool-todo
todo_write"] model --> toolpkg__deepseek_ai_dsh_tool_todo toolpkg__deepseek_ai_dsh_tool_todo --> requires_ctx_tools requires_owning_Agent_session["owning Agent session"] toolpkg__deepseek_ai_dsh_tool_todo --> requires_owning_Agent_session toolpkg__deepseek_ai_dsh_tool_web["tool-web
web_fetch, web_search"] model --> toolpkg__deepseek_ai_dsh_tool_web toolpkg__deepseek_ai_dsh_tool_web --> requires_ctx_tools requires_ctx_web["ctx.web"] toolpkg__deepseek_ai_dsh_tool_web --> requires_ctx_web toolpkg__deepseek_ai_dsh_tool_web --> requires_ctx_systemPrompt ``` | Tool package | Model-visible names | Requires | Writes / affects | Shipped aliases | Note | | --- | --- | --- | --- | --- | --- | | `@deepseek-ai/dsh-tool-bash` | `bash`, `bash_kill`, `bash_output` | `ctx.tools`, `ctx.bash` | `tool/call`, `tool/result`, `context/message via agent.inject() for background completion notices` | - | The bash/bash_output/bash_kill tools are model-facing consumers of the bash executor seam. | | `@deepseek-ai/dsh-tool-fs` | `edit`, `read`, `write` | `ctx.tools`, `ctx.fs`, `ctx.systemPrompt` | `tool/call`, `fs/write-intent or fs/edit-intent for mutations`, `fs/observed after successful file operations`, `tool/result` | - | read/write/edit are the model-facing filesystem tools; read windowing lives here, while read-before-edit policy is supplied by fs-policy through fs/* events. | | `@deepseek-ai/dsh-tool-subagent` | `subagent` | `ctx.tools`, `ctx.subagents` | `tool/call`, `tool/result`, `child session events through the chosen provider` | `subagent`, `subagent_fork` | The default package schema registers subagent; shipped coding/acp configs load it twice to expose spawn and fork backends. | | `@deepseek-ai/dsh-tool-todo` | `todo_write` | `ctx.tools`, `owning Agent session` | `tool/call`, `todo/write`, `tool/result` | - | todo_write is session-owned state; UIs render the latest todo/write event as a checklist or ACP plan. | | `@deepseek-ai/dsh-tool-web` | `web_fetch`, `web_search` | `ctx.tools`, `ctx.web`, `ctx.systemPrompt` | `tool/call`, `tool/result` | - | web_search and web_fetch keep provider selection behind ctx.web so model-visible schemas stay stable across backend swaps. |