npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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.

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@latest

Press 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 create

The 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 rules

Always @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, update refuses to overwrite it. --yes does not override that; only --yes --force does.
  • remove deletes only the files this CLI created; anything you added to the folder is preserved. A folder it cannot prove it wrote needs --force.
  • --dry-run prints 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-dialog

Flags

--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.0

The 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 --yes

For 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:npm

validate 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.