dsh-asc
App Store Connect CLI (asc) as a native tool for DeepSeek Harness — structured argv, JSON output, no-shell execution.
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 29, 2026
- Updated
- Aug 29, 2026
Introduction
dsh-asc
App Store Connect CLI (
asc) as a native tool for DeepSeek Harness (DSH).
dsh-asc registers a single agent tool, asc, that wraps the open-source
App Store Connect CLI (rorkai/App-Store-Connect-CLI)
binary — 76 top-level command groups backed by 1,200+ App Store Connect API
endpoints: TestFlight, build uploads, App Store releases, Apple Ads, code
signing, screenshots, metadata & keywords, subscriptions, analytics, Xcode
Cloud, marketplace resources, and alternative distribution.
The tool takes structured arguments (an argv token array) and returns asc's JSON output losslessly. No shell is involved, so a model-supplied argument list can never be interpreted as shell commands.
Features
- Structured invocation — pass
["apps","list"]instead of a free-form string. - JSON out by default — asc auto-detects non-interactive mode and emits JSON; you get
{ ok, exitCode, stdout, stderr }. - Shell-injection safe — runs via
execFile('asc', argv)with no shell. - Built-in safety rails — destructive operations still require asc's explicit
--confirm. - Shared auth — reuses
asc auth login,~/.asc/config.json, orASC_*env vars from the host environment.
Requirements
ascinstalled locally:curl -fsSL https://asccli.sh/install | bashorbrew install asc- Authenticated:
asc auth login(or setASC_KEY_ID/ASC_ISSUER_ID/ASC_PRIVATE_KEY/ASC_PRIVATE_KEY_B64)
Install
# local checkout
dsh plugin --profile web add ./dsh-asc
# from GitHub
dsh plugin --profile web add github:Tangweiwei227/dsh-asc
Then restart dsh web (or your profile). New sessions get the asc tool.
Usage
Just ask your agent in natural language — it will call the asc tool:
- "List the apps on my account"
- "Upload this build to TestFlight"
- "Pull localized metadata for this app"
- "Check my current asc auth status"
Under the hood the agent calls:
asc: ["apps", "list"]
asc: ["builds", "upload", "--app", "123", "--ipa", "build.ipa"]
asc: ["metadata", "pull", "--app", "123"]
asc: ["auth", "status"]
How it works
- The plugin is a plain Cordis plugin:
inject = ['tools']waits for the tools service, thenctx.tools.register(defineTool({...}))publishes theasctool into the global registry. execFile('asc', argv)runs the binary with no shell, so arguments are never interpreted as a command line.- asc emits JSON when stdout is not a TTY; results pass through verbatim.
- Tool timeout is 300 s to leave room for long-running upload/wait workflows; stdout buffer is capped at 64 MB.
Development
pnpm install
pnpm build # src/ → lib/
pnpm check # type-check + build
License
MIT — see LICENSE. The asc CLI itself is MIT-licensed by its authors.