@hungvv/android-gv
v1.3.0
Published
Opinionated Android agent skills for one team's conventions - Claude Code, Cursor, Codex, Antigravity. Not a general-purpose Android kit.
Maintainers
Readme
Android GV Skills
Agent skills that encode one team's Android conventions for Claude Code, Cursor, Codex and Antigravity.
This is one team's kit, published publicly only so that team can install it anywhere. It is not a general-purpose Android skill set. The rules describe how one codebase builds screens, repositories, dialogs, lists and tracking, and several of them will contradict how your project works. Read it as a reference, not as advice to follow.
npx -y @hungvv/android-gv@latestPress Enter four times: all skills → Claude + Cursor + Codex → Global → Yes. Same command on Windows, macOS and Linux; run it again to update.
Also included: Google's own Android skills
Alongside this team's android-gv-* skills, the package mirrors
github.com/android/skills — Google's own official Android agent
skills (Apache License 2.0) — into google-android-*-prefixed skills (r8-analyzer, camerax,
agp-9-upgrade, edge-to-edge, and others). They show up under their own "Google Android Skills"
group in the install menu and are selected by default along with everything else. They are Google's
content, unmodified beyond the name prefix and an added version/upstreamHash — not authored,
reviewed, or endorsed by this project. npm run sync:google refreshes the mirror; it runs
automatically as the first step of every release. See google-skills/NOTICE.md for the full
attribution and google-skills/LICENSE.txt for the license text.
What is in it
Ten skills. An agent loads one when the task matches its description — you do not call them by hand,
though you can (/android-gv-screen).
| Skill | Loads when you are |
|---|---|
| android-gv-project-structure | creating or moving any file — decides the owning module and what to reuse |
| android-gv-screen | building a Fragment, Activity, ViewModel, navigation |
| android-gv-repository | adding an API endpoint, entity, model, mapper, DI binding |
| android-gv-dialog | building a Dialog or BottomSheetDialog |
| android-gv-list | building a list, grid or pager |
| android-gv-layout-xml | writing XML layouts, DataBinding, constraints, styles |
| android-gv-figma | turning a Figma frame into an Android layout |
| android-gv-tracking | adding or auditing Firebase analytics events |
| android-gv-review | reviewing code for crashes, ANRs, leaks, security |
| android-gv-release-check | verifying a build before release |
android-gv-project-structure is the root: every skill that writes code goes through it first to
decide placement, then follows its rules on reuse, on asking instead of guessing, and on which rule
wins when two disagree.
Plus two always-on rules
A skill only loads when its description matches the task. A rule is read on every turn, so it carries what must never be missed. Two of them, each versioned on its own:
| Rule | Carries |
|---|---|
| android-gv-core | which skill owns which task, never guess, reuse before you write, every name here is an example, use the connected tools, report only what you ran |
| android-gv-thinking | think before coding, simplicity first, surgical changes, work against a verifiable goal |
Each rule is the short form and names the skill that owns the long one. They install with the skills
(--no-rules opts out) and land in the file your agent already reads on startup, between two markers
— everything else in that file is left alone:
| Agent | Global | Per project |
|---|---|---|
| Claude Code | ~/.claude/CLAUDE.md | CLAUDE.md |
| Cursor | ~/.cursor/rules/<rule>.mdc | .cursor/rules/<rule>.mdc |
| Codex | ~/.codex/AGENTS.md | AGENTS.md |
| Antigravity | ~/.gemini/GEMINI.md | .agents/rules/<rule>.md |
Claude Code and Codex keep both rules in one file, one marker block each; Cursor gets a file per
rule, because that is what its rules/ folder expects. Antigravity is a mix: one file per rule in
.agents/rules/ per project, but a single block file at global scope — ~/.gemini/GEMINI.md, which
Antigravity always auto-loads into every session's context.
Antigravity's per-rule frontmatter is unconfirmed. Google's docs describe four rule activation modes but do not publish the YAML schema, so the CLI reuses Windsurf's (
trigger: always_on) as a best-effort guess. If your installed Antigravity ignores the rule file, check its actual schema and file an issue.
Edit a block by hand and the CLI stops touching it until you pass --force. The rules commands
are under Install.
Written to survive a different codebase. Class names, helper names, resource names and libraries
in the examples (BaseFragment, DataState, setPreventDoubleClick, _16sdp, Epoxy, MMKV, Hilt)
are one project's spelling of a role. Each skill tells the agent to find this repository's
equivalent, follow the neighbouring feature when there is none, and never add a dependency for one
feature. Reference files carrying copyable code open by saying so.
Install
No account, no token, no configuration:
npx @hungvv/android-gv@latest # install (interactive)
npx @hungvv/android-gv@latest install --all --global --yes # no prompts
npx @hungvv/android-gv@latest list --global # what is installed
npx @hungvv/android-gv@latest remove screen # remove one skill (short name OK)
npx @hungvv/android-gv@latest remove <name> --force # remove a folder the CLI did not createThe always-on rules ride along with install and update. Drive them on their own — name a rule
(core, thinking) to work on just that one, omit it for all of them:
npx @hungvv/android-gv@latest rules status # which context files hold which rule
npx @hungvv/android-gv@latest rules install # write them without touching the skills
npx @hungvv/android-gv@latest rules install --agent claude,codex # pick the agents
npx @hungvv/android-gv@latest rules install thinking # one rule only (short name OK)
npx @hungvv/android-gv@latest rules remove # take the blocks out, keep the rest
npx @hungvv/android-gv@latest rules remove core # remove one, leave the other in place
npx @hungvv/android-gv@latest rules install --force # overwrite a block you edited by hand
npx @hungvv/android-gv@latest install --all --yes --no-rules # skills only, no rulesAlways @latest. The CLI only knows the skills bundled in the package it runs from — a cached
older package cannot see newer skill content.
No Node on the machine?
The installers ship inside the package, so one command still does everything. It asks the same four
questions, resolves the newest version itself, and needs only curl/Invoke-WebRequest and tar
(tar.exe ships with Windows 10 1803 and later).
# macOS / Linux / Git Bash
curl -fsSL "https://registry.npmjs.org/@hungvv/android-gv/-/android-gv-$(curl -fsSL https://registry.npmjs.org/@hungvv/android-gv | grep -o '"latest":"[^"]*"' | cut -d'"' -f4).tgz" | tar -xz -C /tmp && bash /tmp/package/scripts/install-skills.sh# Windows PowerShell
$p="https://registry.npmjs.org/@hungvv/android-gv";$t="$env:TEMP\agv";New-Item -ItemType Directory -Force $t|Out-Null;Invoke-WebRequest "$p/-/android-gv-$((Invoke-RestMethod $p).'dist-tags'.latest).tgz" -OutFile "$t\p.tgz";tar -xzf "$t\p.tgz" -C $t;& "$t\package\scripts\install-skills.ps1"Re-run to update. These folders carry no CLI metadata, so a later remove needs --force.
Where skills are installed
| Agent | Global | Per project |
|---|---|---|
| Claude Code | ~/.claude/skills/<name>/ | .claude/skills/<name>/ |
| Cursor | ~/.cursor/skills/<name>/ | .cursor/skills/<name>/ |
| Codex | ~/.agents/skills/<name>/ | .agents/skills/<name>/ |
| Antigravity | ~/.gemini/config/skills/<name>/ and ~/.gemini/antigravity-ide/builtin/skills/<name>/ | .agents/skills/<name>/ (shared with Codex) |
Codex and Antigravity read the same .agents/skills directory at project scope, so files are
written once and removing that target affects both. At global scope, Antigravity writes to two
directories: its own config/skills/ and the IDE's antigravity-ide/builtin/skills/ — both were
confirmed against a live install (not documented publicly by Google).
Global is the default and needs no manifest in your repo. .android-skills.json only appears when
you deliberately install with project scope.
Safe by default
- Re-running install is idempotent: unchanged skills are skipped.
- If you edited an installed skill,
updaterefuses to overwrite it.--yesdoes not override that; only--yes --forcedoes. removedeletes only the files this CLI created; anything you added to the folder is preserved. A folder it cannot prove it wrote needs--force.--dry-runprints every path and changes nothing.
Every skill is namespaced android-gv-* so it cannot collide with another kit inside a shared
directory like .agents/skills. The CLI accepts the short form:
android-gv install screen dialog # same as android-gv-screen android-gv-dialogFlags
--all, --agent claude,cursor,codex,antigravity, --global, --yes, --force, --dry-run,
--verbose, --cwd <dir>, --no-rules.
In CI there are no prompts: pass --all --global --yes (agents default to claude,cursor,codex) or
name the skills and agents explicitly.
Versioning
@hungvv/android-gv 1.0.2 # snapshot of the whole kit + CLI
├── android-gv-review 3.4.0 # per-skill content version
├── android-gv-screen 1.7.0
└── android-gv-tracking 1.5.0The package version moves whenever anything ships; each skill carries its own version in its frontmatter, and an edited skill must bump it or the release gate fails. Pin or roll back the whole kit with an exact version:
npx -y @hungvv/[email protected] install --all --global --yesFor maintainers
Everything lives in skills/. There is no registry file to edit.
npm run skill:new -- room "Architecture" # -> skills/android-gv-room, prefix added for you
# edit skills/android-gv-room/SKILL.md
npm run validate && npm test
npm version minor && npm run check:npm && npm run publish:npmvalidate checks frontmatter, the group whitelist, required sections, and warns when a reference
file ships copyable code without the adaptation header. Version rules and the SKILL.md style guide
are in docs/AUTHORING.md; publishing and the three install channels are in
docs/PUBLISH.md.
License
UNLICENSED — published for the team's own installation. All rights reserved.
