Android/Kotlin agent skill stack: sticky /stuc-mode, named principles, playbooks, and a verification loop that drives the android CLI after Gradle assemble.
Public repo: edivad1999/stuc-stack. This tree does not vendor chrisbanes/skills, android/skills, or the android-cli skill. Install those upstreams first, then this plugin, then /setup-stuc.
Manifests in this repo: Cursor (.cursor-plugin/), Claude Code (.claude-plugin/), Codex (.codex-plugin/). No other agent manifests ship here.
chrisbanes/skills (skills.sh, HEAD clusters):
npx skills add chrisbanes/skills
Put the Android CLI on PATH (download), then:
android init
android skills add --all
Confirm with which android / android -V. Codex: android skills add --agent=codex --all.
A fresh chrisbanes install provides compose-state-and-effects, compose-performance, compose-component-design, kotlin-concurrency-and-flow, kotlin-api-design, kotlin-control-flow, gradle-run, plus compose-animations, compose-focus-navigation, compose-ui-testing-patterns. /setup-stuc probes those names and fails closed if they are missing.
Cursor plugin.json has no dependencies field. Claude Code still needs the two upstream plugins installed first (see Claude Code below).
Codex extras:
codex plugin marketplace add chrisbanes/skills --ref main
codex plugin add chrisbanes-skills@chrisbanes-skills
This plugin is not listed on the Cursor Marketplace. /add-plugin stuc-stack will not resolve until it is.
Cursor can import a public GitHub plugin as a personal marketplace:
/add-plugin https://github.com/edivad1999/stuc-stack
Turn on Include third-party Plugins, Skills, and other configs, then reload. That import can pin to the first-seen commit; if skills stay stale, use the local load below.
Official local load (clone + ~/.cursor/plugins/local):
git clone https://github.com/edivad1999/stuc-stack.git
cd stuc-stack
mkdir -p ~/.cursor/plugins/local
ln -sfn "$(pwd)" ~/.cursor/plugins/local/stuc-stack
Then Developer: Reload Window. If the plugin stays hidden, enable third-party plugins in Settings.
Teams/Enterprise can also use Dashboard → Plugins → Add Marketplace → Import from Repo with the same GitHub URL.
Add the upstream marketplaces and install those plugins before stuc-stack. Bare names would resolve as …@stuc-stack; chrisbanes and android are not in this marketplace.
/plugin marketplace add chrisbanes/skills
/plugin install chrisbanes-skills@chrisbanes-skills
/plugin marketplace add android/skills
/plugin install android-skills@android-skills
/plugin marketplace add edivad1999/stuc-stack
/plugin install stuc-stack@stuc-stack
Same from a shell:
claude plugin marketplace add chrisbanes/skills
claude plugin install chrisbanes-skills@chrisbanes-skills
claude plugin marketplace add android/skills
claude plugin install android-skills@android-skills
claude plugin marketplace add edivad1999/stuc-stack
claude plugin install stuc-stack@stuc-stack
This plugin's Claude dependencies are chrisbanes-skills@chrisbanes-skills and android-skills@android-skills. Cross-marketplace resolve needs those two marketplaces already added. /setup-stuc fails closed if the skills are missing.
Add chrisbanes first (see Required upstreams), then:
codex plugin marketplace add edivad1999/stuc-stack --ref main
codex plugin add stuc-stack@stuc-stack
/setup-stuc
It writes the model rule, doctors upstreams, and associates docs/verify-* skills (stuc-stack: true only) with this harness via a thin delegate. Doctoring the binary is not a device proof.
Tailored from the pstack engineering stack (MIT, Lauren Tan). Copyright retained in LICENSE. Version here is 0.1.0; it does not impersonate pstack 0.14.3.
Project-local verification skill + feature-map shape follows poteto/verification-skill-example (fictional Atlas map). In this plugin that shape is Android: Gradle assemble, the android CLI, android-verify, no Node check.sh. Canonical files live in docs/verify-<app>/; Cursor/Claude/Codex only get a thin delegate. Sample: skills/create-verification-skill/references/verify-notes-example/.
/stuc-mode for non-trivial work. Compose/Kotlin design goes through stuc-chrisbanes, then the installed chrisbanes router using-chrisbanes-skills, then cluster names. Google workflows route to android/skills leaf names. Device proof is /android-verify (Gradle assemble, then the android binary). Gradle execution uses the installed chrisbanes gradle-run skill, not a copy in this plugin.
Opinionated overlays come from the author’s Android/Kotlin work, restated without a particular product’s module graph. Follow the repo in front of you.
Catalog, roles, and generic engineering behavior match pstack. Examples and Android overlays differ. This is not a parallel methodology.
- Android/Kotlin surface. Playbooks drive live proof with
android-verify+ the officialandroid-cliskill. Gradle still builds;android runonly deploys prebuilt APKs. This stack does not callcursor-team-kit(control-ui,control-cli,/deslop). - Same generic engineering machine, Android examples.
how,why,unslop,architect,tdd,arena,eval, playbooks,create-verification-skill/maintain-verification-skillkeep pstack structure, triggers, and rules. TypeScript / Linear /retry.tsillustrations are Gradle / Compose /androidCLI / Jira-or-GitHub.architectstill runs on function-boundary crossing (arena,not implementedbodies, design-it-twice). Copy-the-last-screen / smallest-diff may skip witharchitect skipped: …— a thin exception, not a rewrite of architect. - TypeScript pack dropped. There is no
typescript-best-practices/. Kotlin type/API discipline iskotlin-best-practicesplus chrisbanes Kotlin clusters by name. - Android glue (this plugin only).
android-verify(Drive loop),kotlin-best-practices(replacement for typescript-best-practices),stuc-chrisbanes(not namedusing-chrisbanes-skills),using-android-skills. Project-localverify-<app>skills are generated intodocs/verify-<app>/in the consuming repo (skill + feature map); harnesses get thin delegates.gradle-runandkotlin-control-floware not shipped here; they are chrisbanes skills on HEAD. - Upstreams referenced, not vendored.
stuc-chrisbanes(install / fail closed / when) plus the installed chrisbanes routerusing-chrisbanes-skills, andusing-android-skills, route to current names and fail closed. Manifestskills:/agents:paths stay inside this directory. Officialandroid-cliis named, never pasted. - Verification contract. Do not claim device/screenshot coverage that was not run. Name Gradle tasks,
androidcommands, and devices. One device serial per run (principle-separate-before-serializing-shared-state). - Multi-agent packaging. pstack ships Cursor (
.cursor-plugin/) only. This directory also has.claude-plugin/(withdependencies) and.codex-plugin/pointing at the sameskills/tree.
- Renames.
poteto-mode→stuc-mode;setup-pstack→setup-stuc(writes~/.cursor/rules/stuc-stack-models.mdc);poteto-agent→stuc-agent. - Catalog vs pstack (names/purposes). Kept:
how,why,unslop,architect,arena,eval,tdd,swarm,interrogate,create-verification-skill,maintain-verification-skill, the 21principle-*leaves, playbooks including babysit. Renamed:poteto-mode→stuc-mode,setup-pstack→setup-stuc,typescript-best-practices→kotlin-best-practices. Dropped: Benny automations. Added (Android glue only):android-verify,stuc-chrisbanes,using-android-skills. - No Benny.
automations/benny/is not in this tree. - Glue skill names.
stuc-chrisbanes,using-android-skills,android-verify,kotlin-best-practices. Cluster routing is the installed chrisbanes skillusing-chrisbanes-skills. Chrisbanes ownsgradle-run/kotlin-control-flow/ Compose and Kotlin clusters. - Cursor vs Claude deps. Cursor cannot declare plugin dependencies and this plugin is not on the Cursor Marketplace. Enablement is Customize /
.cursor/settings.jsonplus skill-name fail-closed. Load with/add-plugin https://github.com/edivad1999/stuc-stackor~/.cursor/plugins/local. Claude Code depends onchrisbanes-skills@chrisbanes-skillsandandroid-skills@android-skills(upstream marketplaces, not this one). Codex has no plugin deps; addedivad1999/stuc-stackthencodex plugin add stuc-stack@stuc-stack. - Guide filename.
docs/guide/02-stuc-mode.md(not02-poteto-mode.md). - No pstack guide art. Copied
docs/guide/images/*.jpgwere deleted; markdown image embeds were removed. - Harness-agnostic verify skills. Generated
verify-<app>lives indocs/verify-<app>/(skill +features/map)..cursor/skills,.claude/skills, and.codex/skillsonly get a thin delegate./setup-stucassociatesstuc-stack: trueskills with the current harness and does not copy chrisbanes or android/skills into the project. - Not in this plugin: chrisbanes workflow extras (
to-plan,shepherd,implement-with-subagents,run-github-project,grounded-writing) stay upstream. Install vianpx skills add chrisbanes/skills. Local~/.agents/skills/(or this repo’s gitignored.agents/skills/) is the install location, not a vendor tree.