You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GitHub Agentic Workflows (GH AW) run coding agents (Copilot CLI, Claude Code, Codex) on GitHub Actions runners. These workflows need agent primitives (skills, instructions, custom agents) but lack dependency management — authors resort to git clone + cat SKILL.md in bash steps, with no versioning and no reproducibility.
APM already solves this for local development. A GitHub Actions runner is just another environment.
Capability
GH AW imports:
Raw steps:
APM
Transitive dependencies
No
Manual
Yes
Lockfile (exact SHA)
Commit-based cache
No
Yes
Skill directories
Single files only
Manual
Yes
Instruction scoping (applyTo:)
No
No
Yes
Version pinning (semver/tags)
@ref only
Manual
Yes
Cross-engine (Copilot/Claude/Codex)
Copilot only
Manual
Yes
The Design: Two Tiers
Tier 1: One-Line Pre-Step (Works Today)
Zero changes to GH AW. Uses the existing steps: frontmatter:
---
on:
issues:
types: [opened]engine: copilotsteps:
- uses: microsoft/apm-action@v1
---
# Issue TriageTriage this issue using the installed compliance rules and security skills.
The repo has apm.yml + apm.lock. The action runs apm install, primitives deploy to .github/ on the runner, the coding agent discovers them naturally.
Tier 2: Inline Dependencies (APM Enhancement)
Declare extra agent dependencies directly in the workflow. The dependencies input uses the same YAML array syntax as dependencies.apm in apm.yml — strings and objects both work natively:
---
on:
issues:
types: [opened]engine:
id: copilotagent: security-auditorsteps:
- uses: microsoft/apm-action@v1with:
dependencies: | - microsoft/compliance-rules#v2.1.0 - myorg/security-scanning-skill - git: https://gitlab.com/acme/standards.git path: instructions/security ref: v2.0
---
# Issue TriageAnalyze the opened issue for security implications using the compliancerules and security scanning skill.
How it works:
apm install — installs from apm.yml (if it exists)
YAML-parse the dependencies input, then apm install <each> on top
If compile: true, generate AGENTS.md
Always additive — like npm install <pkg> is additive to package.json. For the rare case where CI should ignore the project manifest, set skip-manifest: true.
Future: Native GH AW Frontmatter (Collaborative)
Long-term, GH AW could recognize APM natively — no steps: boilerplate:
---
on: issuesengine: copilotdependencies:
apm:
- microsoft/compliance-rules#v2.1.0
- myorg/security-scanning-skill
---
This requires collaboration with the GH AW team and is out of scope for now.
YAML list of extra packages (same format as apm.yml)
compile
false
Generate AGENTS.md after install
skip-manifest
false
Ignore the repo's apm.yml
working-directory
.
Where to run
apm-version
latest
APM version to install
script
''
Post-install script to run
Key Design Decisions
No isolation mode. Copilot CLI discovers primitives from .github/ in the workspace root. Skills, hooks, and agents have no env var override for alternative paths. CI runners are ephemeral — instruction "pollution" is a non-issue on a disposable runner. For rare cases where this is needed, use skip-manifest: true.
Compile is opt-in. Most workflows just need apm install to deploy primitives to .github/.
YAML format only. The dependencies input is YAML-parsed — same format as apm.yml. Supports both string deps (owner/repo#ref) and object deps ({git: URL, path: X, ref: Y} from feat: Generic git URL support (GitLab, Bitbucket, any host) #150). No dual-format detection.
Additive by default. CI agents need the project's own primitives plus potentially more. skip-manifest exists for the edge case.
Status
apm-action defaults to install-only (no compile unless requested)
Validated apm-action works as a GH AW steps: pre-step
Context
GitHub Agentic Workflows (GH AW) run coding agents (Copilot CLI, Claude Code, Codex) on GitHub Actions runners. These workflows need agent primitives (skills, instructions, custom agents) but lack dependency management — authors resort to
git clone+cat SKILL.mdin bash steps, with no versioning and no reproducibility.APM already solves this for local development. A GitHub Actions runner is just another environment.
imports:steps:applyTo:)@refonlyThe Design: Two Tiers
Tier 1: One-Line Pre-Step (Works Today)
Zero changes to GH AW. Uses the existing
steps:frontmatter:The repo has
apm.yml+apm.lock. The action runsapm install, primitives deploy to.github/on the runner, the coding agent discovers them naturally.Tier 2: Inline Dependencies (APM Enhancement)
Declare extra agent dependencies directly in the workflow. The
dependenciesinput uses the same YAML array syntax asdependencies.apmin apm.yml — strings and objects both work natively:How it works:
apm install— installs fromapm.yml(if it exists)dependenciesinput, thenapm install <each>on topcompile: true, generateAGENTS.mdAlways additive — like
npm install <pkg>is additive topackage.json. For the rare case where CI should ignore the project manifest, setskip-manifest: true.Future: Native GH AW Frontmatter (Collaborative)
Long-term, GH AW could recognize APM natively — no
steps:boilerplate:This requires collaboration with the GH AW team and is out of scope for now.
UX: Before and After
Before (Today)
After (With APM)
Versioned. Locked. Reproducible. One step.
Action Inputs
dependencies''apm.yml)compilefalseAGENTS.mdafter installskip-manifestfalseapm.ymlworking-directory.apm-versionlatestscript''Key Design Decisions
.github/in the workspace root. Skills, hooks, and agents have no env var override for alternative paths. CI runners are ephemeral — instruction "pollution" is a non-issue on a disposable runner. For rare cases where this is needed, useskip-manifest: true.apm installto deploy primitives to.github/.dependenciesinput is YAML-parsed — same format asapm.yml. Supports both string deps (owner/repo#ref) and object deps ({git: URL, path: X, ref: Y}from feat: Generic git URL support (GitLab, Bitbucket, any host) #150). No dual-format detection.skip-manifestexists for the edge case.Status
apm-actiondefaults to install-only (no compile unless requested)apm-actionworks as a GH AWsteps:pre-stepdependenciesinput (replaces current newline format)skip-manifestinputapm-action@v1References
steps:frontmatterapm-actionrepo