New to FORGE? Start a free 30-day trial

Agent Skills

Updated on Oct 1, 2026

Skills are packages of instructions that AI agents load on demand. Forge uses them to tell agents how to work with your issue tracker, ticket tracker, code platform, and security scanner. Skills follow the Agent Skills standard and work with GitHub Copilot, Claude Code, and OpenCode.

Install skills

During initialization

frg config init installs only the skills required by tools that use method = "skill", which is the default for built-in tools:

bash
frg config init --issues github_issues --code github

This command exports issue-read-github and pr-read-github to .agents/skills/.

Export all built-in skills

bash
frg config export --skills

This command exports all 18 built-in skills. Existing skills are skipped unless you add --force. Custom skills are never generated; create them yourself.

OptionDescription
--skillsExport built-in skill files to .agents/skills/
--scope <SCOPE>project exports to <repo>/.agents/skills/. user exports to ~/.agents/skills/.
--forceOverwrite existing files

Without --scope, Forge detects the scope from where it found your configuration: repository configuration (.forge/config/) uses project scope, and user configuration (~/.config/forge/) uses user scope.

bash
frg config export --skills --scope=user

Built-in skills

Tool typeToolSkills
Issue trackergithub_issuesissue-read-github
Issue trackerjiraissue-read-jira
Issue trackerazure_devopsissue-read-azure-devops
Issue trackershortcutissue-read-shortcut
Code platformgithubpr-read-github
Code platformgithub_enterprisepr-read-github-enterprise
Code platformbitbucketpr-read-bitbucket
Code platformazure_devopspr-read-azure-devops
Ticket trackergithub_issuesticket-read-github, ticket-respond-github
Ticket trackerjiraticket-read-jira, ticket-respond-jira
Ticket trackerazure_devopsticket-read-azure-devops, ticket-respond-azure-devops
Ticket trackershortcutticket-read-shortcut, ticket-respond-shortcut
Security scannerpolarisscanner-read-polaris
Security scannergithub_sastscanner-read-github

Tools that use method = "local" do not use skills.

Skill structure

text
skill-name/
├── SKILL.md # Required: frontmatter and instructions
└── references/ # Optional: detailed documents loaded on demand

SKILL.md starts with YAML frontmatter:

yaml
---
name: issue-read-github
description: >
 Retrieves and reads issues from GitHub using the gh CLI.
 Use when working with GitHub issues.
version: "1.0.0"
---
FieldRequiredDescription
nameYesMust match the directory name
descriptionYesWhat the skill does and when to use it
versionYesVersion string that Forge compares during export

The body contains imperative instructions for the agent, for example commands such as gh issue list --state closed.

Customize a skill

  1. Open .agents/skills/<skill-name>/SKILL.md.
  2. Edit the body to match your team's practices, such as required labels or VPN access.
  3. For long material, add files under references/ and point to them from SKILL.md, for example: "See references/jql-syntax.md for complex JQL patterns."
  4. Commit the skill so your team shares it.

Create a skill for a custom tool

  1. In toolchain.toml, set method = "skill" and, optionally, skill_name. Reference {{skill_name}} in the description:
toml
[issue_tracker]
name = "acme_tracker"
type = "custom"
method = "skill"
skill_name = "acme-issue-read"
description = "Use the {{skill_name}} skill to read ACME issues."
  1. Create .agents/skills/acme-issue-read/SKILL.md.

Forge replaces {{skill_name}} with the skill name when it builds the prompt. If you omit skill_name, it defaults to the tool name.

Naming

Use lowercase kebab-case, for example acme-deploy-prod. The prefixes issue-, pr-, ticket-, and scanner- are reserved for built-in skills. Forge warns when a custom skill uses a reserved prefix.

Skill scope

ScopeLocationUse for
Project<repo>/.agents/skills/Team conventions, committed to version control
User~/.agents/skills/Personal skills available in all projects

The agent discovers skills from both locations. A project skill generally takes precedence over a user skill with the same name.

Update built-in skills

Forge does not update skills automatically, so your edits are preserved. When the version of an exported skill differs from the built-in version, frg config export --skills reports the differences. Example output (abbreviated):

text
Skill updates available:
 - issue-read-github: v1.0.0 → v1.1.0

Run 'frg config export --skills --force' to update

To update:

  1. Back up your changes:
bash
cp -r .agents/skills/ .agents/skills-backup/
  1. Overwrite the skills:
bash
frg config export --skills --force
  1. Merge your customizations back from .agents/skills-backup/.

Forge only detects that the version strings differ. It does not check which version is newer.

Troubleshooting

The agent does not load a skill

Cause: The skill is in the wrong location or has invalid frontmatter.

Solution:

  1. Confirm that the file is at .agents/skills/<skill-name>/SKILL.md.
  2. Confirm that the frontmatter is valid YAML between --- lines.
  3. Confirm that name matches the directory name exactly.

A skill update is not detected

Cause: The version field is missing or is not in the frontmatter.

Solution:

  1. Add a non-empty version to the frontmatter.
  2. Run frg config export --skills --force to replace the file.

The agent ignores a custom skill

Cause: The tool does not use the skill method, or the description does not name the skill.

Solution:

  1. Set method = "skill" in toolchain.toml.
  2. Set skill_name and reference {{skill_name}} in description.
  3. Create .agents/skills/<skill_name>/SKILL.md. Forge does not export custom skills.

See Also