YAML Compatibility

Agent CI aims to run real GitHub Actions workflows locally. Below is current support against the official workflow syntax.

Supported⚠️PartialNot supported🟡Ignored (no-op)🚫Not planned

Workflow

Top-level keys that control when and how a workflow runs — triggers, environment defaults, and concurrency.

KeyStatusNotes
name
run-name🟡Parsed but not displayed
on (push, pull_request)Branch/path filters evaluated by --all
on (schedule, workflow_dispatch)🟡Accepted but triggers are not simulated
on (workflow_call)⚠️Local refs (./) inlined into caller graph; remote refs, inputs/outputs, and nesting not supported
on (other events)🟡Parsed, not simulated
envWorkflow-level env propagated to steps
defaults.run.shellPassed through to the runner
defaults.run.working-directoryPassed through to the runner
permissions🟡Accepted, not enforced (mock GITHUB_TOKEN)
concurrency🚫Concurrency groups are a server-side queue/cancel mechanism; there is no persistent local server to coordinate across runs

Jobs

Per-job configuration — runner selection, dependencies, conditional execution, containers, and service sidecars.

KeyStatusNotes
jobs.<id>Multiple jobs in a single workflow
jobs.<id>.name
jobs.<id>.needsTopological sort into dependency waves
jobs.<id>.if⚠️Simplified evaluator: always(), success(), failure(), ==/!=, &&/||
jobs.<id>.runs-on🟡Accepted; always runs in a Linux container
jobs.<id>.environment🟡Accepted, not enforced
jobs.<id>.env
jobs.<id>.defaults.runshell, working-directory
jobs.<id>.outputsResolved via resolveJobOutputs, accumulated across waves
jobs.<id>.timeout-minutes
jobs.<id>.continue-on-error
jobs.<id>.concurrency🚫See workflow-level concurrency
jobs.<id>.containerShort & long form; image, env, ports, volumes, options
jobs.<id>.servicesSidecar containers with image, env, ports, options
jobs.<id>.uses (reusable workflows)⚠️Local refs (./) expanded inline; remote refs skipped with warning
jobs.<id>.secrets🚫Agent CI cannot access GitHub's secret storage — use .env.agent-ci file instead

Strategy

Matrix builds and failure behavior — how jobs are multiplied across configurations and when to stop on errors.

KeyStatusNotes
strategy.matrixCartesian product expansion
strategy.matrix.include
strategy.matrix.exclude
strategy.fail-fastRespects false to continue on failure
strategy.max-parallelControlled by host concurrency, not per-job

Steps

Individual step configuration — shell commands, action references, conditional execution, and environment variables.

KeyStatusNotes
steps[*].id
steps[*].nameExpression expansion in names
steps[*].if⚠️Evaluated by runner; steps.*.outputs.cache-hit resolves to empty string
steps[*].runMultiline scripts, ${{ }} expansion
steps[*].usesPublic actions downloaded via GitHub API
steps[*].uses (local, e.g. ./)Local actions defined within the repo are not supported; agent-ci fails fast with a clear error
steps[*].withExpression expansion in values
steps[*].envExpression expansion in values
steps[*].working-directory
steps[*].shellPassed through to the runner
steps[*].continue-on-error
steps[*].timeout-minutes

Expressions

The ${{ }} expression language — built-in functions, context variables, and operators available in workflow YAML.

KeyStatusNotes
hashFiles(...)SHA-256 of matching files, multi-glob
format(...)Template substitution with recursive expansion
matrix.*
secrets.*Via .env.agent-ci file
runner.osAlways returns Linux
runner.archAlways returns X64
github.sha, github.ref_name, etc.⚠️Returns static/dummy values
github.event.*⚠️Returns empty strings
strategy.job-total, strategy.job-index
steps.*.outputs.*⚠️Resolves to empty string at parse time
needs.*.outputs.*⚠️Resolved from needsContext when provided
Boolean/comparison operators⚠️==, !=, &&, || in job-level if
toJSON, fromJSON
contains, startsWith, endsWith
success(), failure(), always(), cancelled()Evaluated by Agent CI for job-level if

GitHub API

Interactions with GitHub's API — action downloads, common actions (cache, checkout, setup-*), artifacts, and tokens.

KeyStatusNotes
Action downloadsResolves tarballs from github.com
actions/cacheLocal filesystem cache with bind-mount fast path
actions/checkoutWorkspace is rsynced; configured with clean: false
actions/setup-node, actions/setup-python, etc.Run natively within the runner
actions/upload-artifact / download-artifactLocal filesystem storage
GITHUB_TOKENMock token, all API calls answered locally
Workflow commands (::set-output::, ::error::, etc.)Handled by the runner