
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.
- Installs
- 6.8K
- Last 24h
- +32
- Trending rank
- #4280
- Security
- Pass
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/rorkai/app-store-connect-cli-skills --skill asc-workflow- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads asc-workflow automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
Security audits
Independent scans of the skill's instructions and bundled files.
SKILL.md
The instructions your agent reads when the skill is triggered.
asc workflow
Use this skill when you need lane-style automation inside the CLI using:
asc workflow validateasc workflow listasc 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
- Author
.asc/workflow.json. - Validate structure and references:
asc workflow validate
- Discover public workflows:
asc workflow list
asc workflow list --all
- Preview execution:
asc workflow run --dry-run beta BUILD_ID:123456789 GROUP_ID:abcdef
- Execute:
asc workflow run beta BUILD_ID:123456789 GROUP_ID:abcdef
- 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" runshell commandworkflowsub-workflow callnamelabelifconditional var namewithenv overrides for workflow-call stepsoutputsmap for JSON stdout extraction from named run stepsretryfixed-delay retry policy for arunsteptimeoutpositive per-attempt duration for arunstep
- string shorthand:
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
outputsmust have a reference-safename. - Outputs are allowed on
runsteps, 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.
Bounded retry and timeout
Add retry only to commands you have determined are safe to repeat. The runner does not classify commands or retry mutations on its own.
{
"name": "resolve_build",
"run": "asc builds info --app $APP_ID --latest --platform IOS --output json",
"retry": {
"max_attempts": 3,
"delay": "5s"
},
"timeout": "2m"
}
retry.max_attempts counts the first attempt and must be between 2 and 100. Retry delays and timeouts must be positive durations no longer than 24 hours. Both fields work only on run steps, not workflow calls or lifecycle hooks.
A timeout without retry is terminal because the command may have completed remotely. Pairing retry and timeout is the explicit signal that another attempt is safe. Resume requires either a successful checkpoint or a retry-enabled failed step; output-extraction failures cannot be resumed.
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-id $BUILD_ID --metadata-dir ./metadata --confirm --output json"
},
{
"name": "submit",
"if": "SUBMIT_FOR_REVIEW",
"run": "asc review submit --app $APP_ID --version $VERSION --build-id $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.jsonlike 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
--confirmfor mutating steps. - Use
asc validate,asc release stage,asc review submit, andasc publish appstore; do not use removed submission commands.
FAQ
What does the asc-workflow skill do?
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.
How do I install asc-workflow?
Run npx skills add https://github.com/rorkai/app-store-connect-cli-skills --skill asc-workflow in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/asc-workflow/ (personal) or .claude/skills/asc-workflow/ (project).
Which AI agents can use asc-workflow?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is asc-workflow safe to install?
Security partners have reviewed it: Gen Agent Trust Hub passed; Socket passed; Snyk passed. As with any skill, read the SKILL.md and bundled scripts before installing.
Who maintains asc-workflow?
It is published by rorkai in rorkai/app-store-connect-cli-skills. It has 6,770 recorded installs.
More from rorkai/app-store-connect-cli-skills
asc-cli-usage
rorkai/app-store-connect-cli-skills
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.
asc-release-flow
rorkai/app-store-connect-cli-skills
Orchestrate App Store releases with asc, including staging a version, uploading or building an artifact, publishing, and submitting for review. Use when the user wants to prepare or execute a release. Keep Game Center item preparation in this skill; route other readiness failures, stuck submissions, cancellation, and retry decisions to asc-submission-health.
asc-submission-health
rorkai/app-store-connect-cli-skills
Diagnose App Store submission blockers and operate review health with asc, including readiness validation, repair routing, status monitoring, cancellation, and retry decisions. Use when validation fails, a version is not in a valid state, review status is unclear or stuck, or a failed submission must be repaired and retried. For staging, upload, publication, and submission execution, use asc-release-flow.
asc-metadata-sync
rorkai/app-store-connect-cli-skills
Sync, validate, and apply App Store metadata and store assets with asc. Use when updating localizations, keywords, App Clip or preview assets, Asset Library media and placements, or migrating legacy fastlane metadata.
asc-xcode-build
rorkai/app-store-connect-cli-skills
Build, archive, export, and manage Xcode version/build numbers with asc, including portable iOS compilation and packaging. Use when creating an IPA or PKG for App Store Connect, TestFlight, or registered-device release testing.
asc-id-resolver
rorkai/app-store-connect-cli-skills
Resolve App Store Connect IDs (apps, builds, app and digital-goods versions, groups, testers) from human-friendly names using asc. Use when commands require IDs.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。