/asc-workflow
Define, validate, run, resume, and audit repo-local multi-step automations with current `asc workflow` and `.asc/workflow.json`, including step outputs and safe release/TestFlight workflows.
$ npx -y skills add rudrankriyam/asc-skills --skill asc-workflow --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/asc-workflow
Context preview
The summary Claude sees to decide when to auto-load this skill.
Define, validate, run, resume, and audit repo-local multi-step automations with current `asc workflow` and `.asc/workflow.json`, including step outputs and safe release/TestFlight workflows.
SKILL.md
asc-workflow.SKILL.mdname: asc-workflow
description: Define, validate, run, resume, and audit repo-local multi-step automations with current `asc workflow` and `.asc/workflow.json`, including step outputs and safe release/TestFlight workflows.
asc workflow
Use this skill when you need lane-style automation inside the CLI using:
- `asc workflow validate`
- `asc workflow list`
- `asc workflow run`
Workflows are repo-local automation files. They run trusted shell commands, stream step output to stderr, and keep stdout as machine-readable JSON.
Command discovery
Always verify flags with:
asc workflow --help
asc workflow validate --help
asc workflow list --help
asc workflow run --help
End-to-end flow
1. Author `.asc/workflow.json`. 2. Validate structure and references:
asc workflow validate
3. Discover public workflows:
asc workflow list
asc workflow list --all
4. Preview execution:
asc workflow run --dry-run beta BUILD_ID:123456789 GROUP_ID:abcdef
5. Execute:
asc workflow run beta BUILD_ID:123456789 GROUP_ID:abcdef
6. If a recoverable run fails, resume with the run ID from the JSON result:
asc workflow run release --resume "release-20260312T120000Z-deadbeef"
Do not pass extra `KEY:VALUE` params with `--resume`; the saved workflow file, params, and persisted outputs are reused.
File location and format
- Default path: `.asc/workflow.json`
- Override path: `asc workflow run --file ./path/to/workflow.json <name>`
- JSONC comments are supported.
- Top-level hooks: `before_all`, `after_all`, `error`
- Workflow keys: `description`, `private`, `env`, `steps`
- Step forms:
- string shorthand: `"echo hello"`
- `run` shell command
- `workflow` sub-workflow call
- `name` label
- `if` conditional var name
- `with` env overrides for workflow-call steps
- `outputs` map for JSON stdout extraction from named run steps
Outputs
Run steps can declare outputs. The command must emit JSON on stdout, so pass `--output json` for `asc` commands that produce outputs.
Output references use:
${steps.step_name.OUTPUT_NAME}Rules:
- A step that declares `outputs` must have a reference-safe `name`.
- Outputs are allowed on `run` steps, not workflow-call steps.
- Output-producing names must be unique across workflows that can execute together in the same run graph.
- Persisted outputs are stored in workflow run state, so do not map secrets into outputs.
Runtime params
`asc workflow run <name> [KEY:VALUE ...]` supports both separators:
asc workflow run beta VERSION:2.1.0
asc workflow run beta VERSION=2.1.0
Repeated keys are last-write-wins. In shell commands, reference params through shell expansion like `$VERSION`.
Env precedence
Main workflow run:
definition.env < workflow.env < CLI params
Sub-workflow call with `with`:
sub-workflow env < caller env and params < step with
Conditionals
Add `"if": "VAR_NAME"` to a step. Truthy values are `1`, `true`, `yes`, `y`, and `on`, case-insensitive. Lookup checks merged workflow env/params first, then process environment.
Example workflow
{
"env": {
"APP_ID": "123456789",
"VERSION": "1.0.0",
"GROUP_ID": ""
},
"before_all": "asc auth status",
"after_all": "echo workflow_done",
"error": "echo workflow_failed",
"workflows": {
"beta": {
"description": "Resolve the latest build and distribute it to TestFlight",
"steps": [
{
"name": "resolve_build",
"run": "asc builds info --app $APP_ID --latest --platform IOS --output json",
"outputs": {
"BUILD_ID": "$.data.id"
}
},
{
"name": "list_groups",
"run": "asc testflight groups list --app $APP_ID --limit 20 --output json"
},
{
"name": "add_build_to_group",
"if": "GROUP_ID",
"run": "asc builds add-groups --build-id ${steps.resolve_build.BUILD_ID} --group $GROUP_ID"
}
]
},
"release": {
"description": "Validate, stage, and submit an App Store version",
"steps": [
{
"name": "validate",
"run": "asc validate --app $APP_ID --version $VERSION --platform IOS --output json"
},
{
"name": "stage",
"run": "asc release stage --app $APP_ID --version $VERSION --build $BUILD_ID --metadata-dir ./metadata/version/$VERSION --confirm --output json"
},
{
"name": "submit",
"if": "SUBMIT_FOR_REVIEW",
"run": "asc review submit --app $APP_ID --version $VERSION --build $BUILD_ID --confirm --output json"
}
]
},
"publish-appstore": {
"description": "High-level upload plus App Store review submission",
"steps": [
{
"name": "publish",
"run": "asc publish appstore --app $APP_ID --ipa ./build/MyApp.ipa --version $VERSION --wait --submit --confirm --output json"
}
]
}
}
}Useful invocations
asc workflow validate | jq -e '.valid == true'
asc workflow list --pretty
asc workflow list --all --pretty
asc workflow run --dry-run beta BUILD_ID:123 GROUP_ID:grp_abc
asc workflow run beta BUILD_ID:123 GROUP_ID:grp_abc | jq -e '.status == "ok"'
asc workflow run release BUILD_ID:123 SUBMIT_FOR_REVIEW:true
asc workflow run release --resume "release-20260312T120000Z-deadbeef"
Safety rules
- Treat `.asc/workflow.json` like code; only run trusted workflow files.
- Avoid running workflows from untrusted PRs with secrets.
- Keep workflow files in version control.
- Validate first, dry-run next, then run.
- Use explicit IDs and `--confirm` for mutating steps.
- Use `asc validate`, `asc release stage`, `asc review submit`, and `asc publish appstore`; do not use removed submission commands.
Read more
name: asc-workflow description: Define, validate, run, resume, and audit repo-local multi-step automations with current `asc workflow` and `.asc/workflow.json`, including step outputs and safe release/TestFlight workflows.
asc workflow
Use this skill when you need lane-style automation inside the CLI using:
- `asc workflow validate`
- `asc workflow list`
- `asc workflow run`
Workflows are repo-local automation files. They run trusted shell commands, stream step output to stderr, and keep stdout as machine-readable JSON.
Command discovery
Always verify flags with:
asc workflow --help asc workflow validate --help asc workflow list --help asc workflow run --help
End-to-end flow
1. Author `.asc/workflow.json`. 2. Validate structure and references:
asc workflow validate
3. Discover public workflows:
asc workflow list asc workflow list --all
4. Preview execution:
asc workflow run --dry-run beta BUILD_ID:123456789 GROUP_ID:abcdef
5. Execute:
asc workflow run beta BUILD_ID:123456789 GROUP_ID:abcdef
6. If a recoverable run fails, resume with the run ID from the JSON result:
asc workflow run release --resume "release-20260312T120000Z-deadbeef"
Do not pass extra `KEY:VALUE` params with `--resume`; the saved workflow file, params, and persisted outputs are reused.
File location and format
- Default path: `.asc/workflow.json`
- Override path: `asc workflow run --file ./path/to/workflow.json <name>`
- JSONC comments are supported.
- Top-level hooks: `before_all`, `after_all`, `error`
- Workflow keys: `description`, `private`, `env`, `steps`
- Step forms:
- string shorthand: `"echo hello"`
- `run` shell command
- `workflow` sub-workflow call
- `name` label
- `if` conditional var name
- `with` env overrides for workflow-call steps
- `outputs` map for JSON stdout extraction from named run steps
Outputs
Run steps can declare outputs. The command must emit JSON on stdout, so pass `--output json` for `asc` commands that produce outputs.
Output references use:
${steps.step_name.OUTPUT_NAME}Rules:
- A step that declares `outputs` must have a reference-safe `name`.
- Outputs are allowed on `run` steps, not workflow-call steps.
- Output-producing names must be unique across workflows that can execute together in the same run graph.
- Persisted outputs are stored in workflow run state, so do not map secrets into outputs.
Runtime params
`asc workflow run <name> [KEY:VALUE ...]` supports both separators:
asc workflow run beta VERSION:2.1.0 asc workflow run beta VERSION=2.1.0
Repeated keys are last-write-wins. In shell commands, reference params through shell expansion like `$VERSION`.
Env precedence
Main workflow run:
definition.env < workflow.env < CLI params
Sub-workflow call with `with`:
sub-workflow env < caller env and params < step with
Conditionals
Add `"if": "VAR_NAME"` to a step. Truthy values are `1`, `true`, `yes`, `y`, and `on`, case-insensitive. Lookup checks merged workflow env/params first, then process environment.
Example workflow
{
"env": {
"APP_ID": "123456789",
"VERSION": "1.0.0",
"GROUP_ID": ""
},
"before_all": "asc auth status",
"after_all": "echo workflow_done",
"error": "echo workflow_failed",
"workflows": {
"beta": {
"description": "Resolve the latest build and distribute it to TestFlight",
"steps": [
{
"name": "resolve_build",
"run": "asc builds info --app $APP_ID --latest --platform IOS --output json",
"outputs": {
"BUILD_ID": "$.data.id"
}
},
{
"name": "list_groups",
"run": "asc testflight groups list --app $APP_ID --limit 20 --output json"
},
{
"name": "add_build_to_group",
"if": "GROUP_ID",
"run": "asc builds add-groups --build-id ${steps.resolve_build.BUILD_ID} --group $GROUP_ID"
}
]
},
"release": {
"description": "Validate, stage, and submit an App Store version",
"steps": [
{
"name": "validate",
"run": "asc validate --app $APP_ID --version $VERSION --platform IOS --output json"
},
{
"name": "stage",
"run": "asc release stage --app $APP_ID --version $VERSION --build $BUILD_ID --metadata-dir ./metadata/version/$VERSION --confirm --output json"
},
{
"name": "submit",
"if": "SUBMIT_FOR_REVIEW",
"run": "asc review submit --app $APP_ID --version $VERSION --build $BUILD_ID --confirm --output json"
}
]
},
"publish-appstore": {
"description": "High-level upload plus App Store review submission",
"steps": [
{
"name": "publish",
"run": "asc publish appstore --app $APP_ID --ipa ./build/MyApp.ipa --version $VERSION --wait --submit --confirm --output json"
}
]
}
}
}Useful invocations
asc workflow validate | jq -e '.valid == true' asc workflow list --pretty asc workflow list --all --pretty asc workflow run --dry-run beta BUILD_ID:123 GROUP_ID:grp_abc asc workflow run beta BUILD_ID:123 GROUP_ID:grp_abc | jq -e '.status == "ok"' asc workflow run release BUILD_ID:123 SUBMIT_FOR_REVIEW:true asc workflow run release --resume "release-20260312T120000Z-deadbeef"
Safety rules
- Treat `.asc/workflow.json` like code; only run trusted workflow files.
- Avoid running workflows from untrusted PRs with secrets.
- Keep workflow files in version control.
- Validate first, dry-run next, then run.
- Use explicit IDs and `--confirm` for mutating steps.
- Use `asc validate`, `asc release stage`, `asc review submit`, and `asc publish appstore`; do not use removed submission commands.
A collection of Agent Skills for shipping with the asc cli (asc). These skills help agents run builds, TestFlight, metadata, submissions, signing, and Apple Ads workflows. This is a community-maintained, unofficial skill pack and is not affiliated with Apple.
Other skills on asc.
- /asc-app-create-ui
Create a new App Store Connect app record via browser automation. Use when there is no public API for app creation and you need an agent to drive the New App form.
Open skill - /asc-apple-ads
Use when managing Apple Ads with asc, including auth, org lookup, campaigns, ad groups, ads, keywords, reports, raw API calls, and safe live testing.
Open skill - /asc-aso-audit
Run an offline ASO audit on canonical App Store metadata under `./metadata` and surface keyword gaps using Astro MCP. Use after pulling metadata with `asc metadata pull`.
Open skill - /asc-build-lifecycle
Track build processing, find latest builds, and clean up old builds with asc. Use when managing build retention or waiting on processing.
Open skill - /asc-cli-usage
Guidance for using asc cli in this repo (flags, output formats, pagination, auth, and discovery). Use when asked to run or design asc commands or interact with App Store Connect via the CLI.
Open skill - /asc-crash-triage
Triage TestFlight crashes, beta feedback, and performance diagnostics using asc. Use when the user asks about TF crashes, TestFlight crash reports, beta tester feedback, app hangs, disk writes, launch diagnostics, or wants a crash summary for a build or app.
Open skill

