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)

Workflow

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)Reusable workflow calls 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)
concurrencyConcurrency groups are a server-side queue/cancel mechanism; there is no persistent local server to coordinate across runs

Jobs

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>.concurrencySee 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)
jobs.<id>.secretsUse .env.agent-ci file instead

Strategy

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

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

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

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