Repository navigation
Bug: Los subagentes heredan permisos deny del agente primario via deriveSubagentSessionPermission(), sobrescribiendo sus propios allow (regresion desde v1.14.46) #28052
Description
Descripcion
Cuando se usa la herramienta task para delegar trabajo a un subagente, el subagente hereda TODAS las reglas deny del agente primario a traves de deriveSubagentSessionPermission(). Debido a la evaluacion "ultima coincidencia gana" (last-match-wins), estas reglas deny heredadas sobrescriben los permisos allow explicitos que el subagente tiene definidos en su frontmatter YAML.
Esto rompe efectivamente el patron commander+worker: un agente primario con permisos restringidos (ej: edit: deny) no puede delegar tareas de escritura a un subagente que tiene edit: allow en su propia configuracion.
Pasos para reproducir
- Configurar un agente primario con
edit: denyenopencode.jsonc:
{
"permission": {
"edit": "deny"
}
}- Crear un subagente con
edit: allowen su frontmatter:
---
name: mi-escritor
mode: subagent
permission:
edit: allow
----
Desde el agente primario, delegar una tarea al subagente via
task -
El subagente NO tendra la herramienta
writedisponible, a pesar de teneredit: allowen su propio frontmatter.
Comportamiento esperado
Los permisos explicitos de un subagente deberian tener prioridad sobre los permisos heredados del agente primario. Si un subagente tiene edit: allow en su frontmatter, deberia tener acceso a las herramientas write, edit y apply_patch independientemente de los permisos del agente primario.
Comportamiento actual
El subagente hereda las reglas deny del agente primario. Debido a la evaluacion last-match-wins, el deny heredado sobrescribe el allow del subagente. La herramienta write (y otras herramientas de edicion) no estan disponibles para el subagente.
Analisis tecnico
El bug esta en deriveSubagentSessionPermission() en packages/opencode/src/agent/subagent-permissions.ts, que:
- Filtra las reglas
denydel agente padre conparentAgent.permission.filter(rule => rule.action === "deny" && rule.permission === "edit") - Las anade al conjunto de permisos de la sesion del subagente
- El runtime evalua
Permission.merge(subagent.permission, session.permission)enpackages/opencode/src/permission/index.ts(linea 267) - Como
Permission.merge()hacerulesets.flat(), y las reglasdenyheredadas aparecen DESPUES de las reglasallowdel subagente en el array, la evaluacion last-match-wins hace que ganen losdeny
Issues relacionados
- Subagent parent deny inheritance over-constrains delegated agents with explicit permissions #26700 — "Subagent parent deny inheritance over-constrains delegated agents with explicit permissions" (cerrado, el fix fue parcial)
- Bug: Subagents no longer have access to tools (in commander+worker pattern) #26758 — "Bug: Subagents no longer have access to tools (in commander+worker pattern)" (cerrado)
- [BUG] Subagent keeps parent agent persmissions #26873 — "[BUG] Subagent keeps parent agent permissions" (cerrado)
- [FEATURE]: Insane. Add independent agents back. #27123 — "[FEATURE]: Insane. Add independent agents back." (cerrado)
- Subagent can call plan_exit to escape plan mode #27886 — "Subagent can call plan_exit to escape plan mode" (abierto, v1.15.3)
- PR fix(task): subagent inherits parent agent's deny rules (Plan Mode security bypass) #26597 — "fix(task): subagent inherits parent agent's deny rules" (fusionado, introdujo la regresion)
La regresion original se introdujo en v1.14.46 por el PR #26597 (fix para #26514: "Subagents Bypass Plan Mode READ-ONLY Restrictions"). El issue #26700 se suponia que arreglaria esto pero el fix parece incompleto — sigue heredando los deny del padre.
Workaround
Actualmente, el unico workaround es NO usar deny en el agente primario para los permisos que los subagentes necesitan. Usar ask en lugar de deny permite que los subagentes hereden ask que su propio allow puede sobrescribir. Sin embargo, esto no es ideal para configuraciones orientadas a seguridad donde el agente primario no deberia tener capacidades de edicion.
Entorno
- Version de OpenCode: 1.15.3
- SO: Windows (nativo, no WSL)
- Patron de agentes: Coordinador primario con
edit: deny+ subagentes conedit: allow
Activity
github-actions commentedon May 17, 2026
This issue might be a duplicate of an existing open issue. Please check:
edit: denycauses subagents withedit: allowin their frontmatter to lose edit access, affecting v1.14.46+.If your issue adds new details or context beyond #27497, please note that in a comment there. Otherwise, consider closing this one to consolidate the discussion.
ROKO108 commentedon May 29, 2026
¿Cuándo se va a solucionar esto?
ROKO108 commentedon Jul 14, 2026
@jlongster ¿Se sabe algo de esto? ¿Se va a solucionar en alguna actualización futura?
ROKO108 commentedon Aug 18, 2026