feat(skill): add read_skill for inline skill loading in plan mode (#3491)#3713
Merged
Conversation
run_skill is ReadOnly()=false because subagent skills can spawn writer tool calls, so plan mode (read-only) blocks ALL skill use — including inline skills, which only render a body and have no side effects. That made it impossible to consult a playbook while planning (#3491). Add read_skill: a read-only counterpart that renders an inline skill body and rejects subagent skills (pointing the model at run_skill). Being ReadOnly it stays available in plan mode. Added to SubagentMetaTools so spawned agents don't inherit it. Closes #3491
SuMuxi66
pushed a commit
to SuMuxi66/DeepSeek-Reasonix
that referenced
this pull request
Jun 10, 2026
…sengine#3713) run_skill is ReadOnly()=false because subagent skills can spawn writer tool calls, so plan mode (read-only) blocks ALL skill use — including inline skills, which only render a body and have no side effects. That made it impossible to consult a playbook while planning (esengine#3491). Add read_skill: a read-only counterpart that renders an inline skill body and rejects subagent skills (pointing the model at run_skill). Being ReadOnly it stays available in plan mode. Added to SubagentMetaTools so spawned agents don't inherit it. Closes esengine#3491 Co-authored-by: reasonix <reasonix@deepseek.com>
dorokuma
pushed a commit
to dorokuma/DeepSeek-Reasonix
that referenced
this pull request
Jun 10, 2026
…sengine#3713) run_skill is ReadOnly()=false because subagent skills can spawn writer tool calls, so plan mode (read-only) blocks ALL skill use — including inline skills, which only render a body and have no side effects. That made it impossible to consult a playbook while planning (esengine#3491). Add read_skill: a read-only counterpart that renders an inline skill body and rejects subagent skills (pointing the model at run_skill). Being ReadOnly it stays available in plan mode. Added to SubagentMetaTools so spawned agents don't inherit it. Closes esengine#3491 Co-authored-by: reasonix <reasonix@deepseek.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem (#3491)
In plan mode the agent can't load a skill:
run_skillisReadOnly()=false(a subagent skill may call writer tools), so the read-only plan-mode gate blocks it — even for inline skills, which only render a body and have zero side effects. Plan mode then can't consult a playbook.Fix
Add
read_skill, a read-only counterpart:ReadOnly() = true→ callable in plan mode.renderInline), samename/argumentsschema asrun_skill.run_skill/the dedicated tool, so it can never execute a subagent (which is whyrun_skillstays gated).run_skill, and added toSubagentMetaTools()so spawned agents don't inherit it.Test plan
internal/skill:TestReadSkillLoadsInlineAndIsReadOnly(loads inline + ReadOnly),TestReadSkillRejectsSubagent. Pass.go test ./internal/skill ./internal/agentgreen;go vet+golangci-lint(0 issues) + gofmt clean.Closes #3491