Skip to content

Conversation

@IgorWarzocha
Copy link

@IgorWarzocha IgorWarzocha commented Dec 22, 2025

Don't shoot the messenger, purely vibecoded.

Summary

Add ability to filter which skills are visible to each agent via a new skills field in agent configuration.

This addresses the issue where all discovered skills are loaded into the system prompt for every agent, causing:

  • Skill leakage across inappropriate agent contexts
  • No way to scope skills to specific agent types
  • Unnecessary context in specialized agents

Usage

In opencode.json:

{
  "agent": {
    "excel-maestro": {
      "skills": {
        "spreadsheets": true
      }
    },
    "read-only-explorer": {
      "skills": {
        "git-*": false
      }
    }
  }
}

In agent markdown frontmatter (.opencode/agent/excel-maestro.md):

---
mode: all
skills:
  spreadsheets: true
---

Behavior

  • Whitelist mode: When any true values are present, only skills matching a true pattern are shown
  • Blacklist mode: When only false values are present, all skills except those matching false patterns are shown
  • No config: All skills visible (backwards compatible)

Uses the same wildcard pattern matching as existing tools filtering.

Changes

  • config/config.ts: Added skills field to Agent schema
  • agent/agent.ts: Added skills to Agent.Info type and state builder
  • skill/skill.ts: Added filter() and forAgent() functions
  • session/system.ts: Updated skills() to accept optional filter parameter
  • session/prompt.ts: Pass agent's skills filter to SystemPrompt.skills()
  • Tests for filtering logic and markdown frontmatter support

Add ability to filter which skills are visible to each agent via the
'skills' field in agent configuration (opencode.json or markdown frontmatter).

Supports two modes:
- Whitelist mode: when any true values present, only matching skills shown
- Blacklist mode: when only false values, exclude matching skills

Examples:
  # Only show spreadsheets skill to excel agent
  skills:
    spreadsheets: true

  # Hide git skills from read-only agent
  skills:
    "git-*": false

Uses same wildcard pattern matching as tools filtering.
@thdxr
Copy link
Contributor

thdxr commented Dec 22, 2025

hang onto this - we're reworking a bunch of permissions stuff and this can come after that

@airtonix
Copy link
Contributor

Looks like #6000 makes this not needed?

@malhashemi
Copy link
Contributor

Looks like #6000 makes this not needed?

True denied skills are already filtered out of agents context

@IgorWarzocha
Copy link
Author

IgorWarzocha commented Dec 24, 2025

See, the original idea was similar, I am now leaning towards an entirely different thing.

Current implementation basically loads all the skills into all agents unless you edit them. There needs to be something that allows easier allow/deny skills and I believe they should all be disabled as default.

opencode agent create should probably include a step to add/remove skills to the agent config. and I believe we're getting to a point where opencode agent edit just to edit the frontmatter is a necessity.

#6103

@malhashemi
Copy link
Contributor

See, the original idea was similar, I am now leaning towards an entirely different thing.

Current implementation basically loads all the skills into all agents unless you edit them. There needs to be something that allows easier allow/deny skills and I believe they should all be disabled as default.

opencode agent create should probably include a step to add/remove skills to the agent config. and I believe we're getting to a point where opencode agent edit just to edit the frontmatter is a necessity.

Actually global deny is very easy in your config simply:

permission.skill: {* : deny}

Would deny it globally this is how I have it setup at the moment. Also there is a new permission system in the works so lets hold on till release.

@malhashemi
Copy link
Contributor

Having said that I agree that some guided configurations on the agent setup process would be nice to have. So thats a direction worth taking

@IgorWarzocha
Copy link
Author

See, the original idea was similar, I am now leaning towards an entirely different thing.
Current implementation basically loads all the skills into all agents unless you edit them. There needs to be something that allows easier allow/deny skills and I believe they should all be disabled as default.
opencode agent create should probably include a step to add/remove skills to the agent config. and I believe we're getting to a point where opencode agent edit just to edit the frontmatter is a necessity.

Actually global deny is very easy in your config simply:

permission.skill: {* : deny}

Would deny it globally this is how I have it setup at the moment. Also there is a new permission system in the works so lets hold on till release.

Yeah agree but it's the defaults that are the problem - creating a build agent config is not something that everyone does. I can see how having all the skills enabled as default can be problematic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants