agent-config
Create, update, or audit AGENTS.md (default) or CLAUDE.md agent instructions: set up, prune, add a rule, or merge CLAUDE.md or…
Optimize a site or app for SEO, AI-bot search and app-store search in one run: detect web vs store, run each audit once, merge one prioritized report; fixes only via member gates. Don't use for one fix (seo-ai-optimizer, aso-marketing).
$ npx -y skills add luongnv89/skills --skill search-optimizer --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/search-optimizerContext preview
The summary Claude sees to decide when to auto-load this skill.
Optimize a site or app for SEO, AI-bot search and app-store search in one run: detect web vs store, run each audit once, merge one prioritized report; fixes only via member gates. Don't use for one fix (seo-ai-optimizer, aso-marketing).
name: search-optimizer description: "Optimize a site or app for SEO, AI-bot search and app-store search in one run: detect web vs store, run each audit once, merge one prioritized report; fixes only via member gates. Don't use for one fix (seo-ai-optimizer, aso-marketing)." license: MIT effort: high dependencies: - seo-ai-optimizer - website-agent-readiness - viral-product-evaluator - aso-marketing metadata: version: 1.1.0 author: "Luong NGUYEN <luongnv89@gmail.com>" architecture: "orchestrator (detect target → web and/or store branch → member audits with skip-checks → merged report)"
One invocation for "optimize for SEO / AI-bot search / app-store search". This skill does no auditing of its own: it detects the target type; evidence is captured once, the live scan runs at most once, overlapping checks are skipped where the member supports skip-checks, and remaining overlaps are merged into one row per defect in **one** prioritized report. It is **audit-first**: every write happens inside a member's own approval gate. This file stays short to protect the context budget; load `references/` files only at the phase that names them.
| Branch | Member | Owns | Required? | |---|---|---|---| | web | `seo-ai-optimizer` | `meta-tags,robots-sitemap,structured-data,llms-txt,crawler-access` + all codebase fixes | required | | web | `website-agent-readiness` | `agent-readiness-scan,markdown-pages` (plans only, never fixes) | optional | | web, store | `viral-product-evaluator` | `virality` (skips `meta-tags` on the web branch) | optional | | store | `aso-marketing` | the store listing: keywords, metadata, localization | required |
Matrix, fallback cases and per-member `skip-checks`: `references/check-ownership.md`.
| Signal | Branch | |---|---| | Public URL, or a repo with HTML/templates, `next.config.*`, `astro.config.*`, `public/robots.txt`, `sitemap*` | **web** | | `Info.plist`, `*.xcodeproj`, `build.gradle*` with `applicationId`, `fastlane/metadata/`, an App Store / Play listing URL | **store** | | Both kinds of signal, or the user asks for both | **both** — web branch, then store branch; viral-product-evaluator runs **once** | | Neither | Ask one question: "Website search, app-store search, or both?" — wait for the answer |
outside the checkout, so the orchestrator itself never writes into the repo.
This skill invokes the four members declared in frontmatter `dependencies`. Run this once, in Phase 1 after branch detection and before intake:
if command -v asm >/dev/null && asm deps --help >/dev/null 2>&1; then asm deps discover search-optimizer --json || echo "discover failed; acquire still runs" >&2 echo "so_mode=lease" else echo "asm deps unavailable: npm install -g agent-skill-manager@latest" >&2 echo "so_mode=installed" fi printf 'so_session=%s\n' "search-optimizer-$(date +%s)-$$" # record it; reuse it verbatim
1. Check only the members of the detected branch: web → seo-ai-optimizer, viral-product-evaluator, and website-agent-readiness when the target has a public URL; store → aso-marketing, viral-product-evaluator; both → the union. Never acquire a member whose branch the run does not reach. 2. With `so_mode=lease`, run `asm deps acquire <member> --session <so_session> --json` for each member from step 1. Record each returned `skillMdPath` and read that file directly. 3. With `so_mode=installed`, test each member from step 1 with `test -f "$HOME/.claude/skills/<member>/SKILL.md" || test -f "$HOME/.agents/skills/<member>/SKILL.md"`, falling back to `asm list -p claude --json | grep '"<member>"'`, because same-repo skills can be installed without the registry knowing the bare name. Record the path that exists. 4. seo-ai-optimizer (web) and aso-marketing (store) are **required** for their branch. If one fails step 2 or 3, print `Missing skill: <member> — install: asm install github:luongnv89/skills:skills/<member> -p claude --yes` and stop before intake; write nothing. In a "both" run, offer to rerun with only the branch whose required member is installed. 5. website-agent-readiness and viral-product-evaluator are **optional**: a miss is fail-soft. Skip the member, fall back per `references/check-ownership.md`, and list its checks under "Not covered" with the install line. 6. **Release in `finally`.** If any acquire ran, run `asm deps release --session <so_session> --json` once at every terminal outcome, stops included, before the Final response. List a failed release under `Uncertainty:`.
Never substitute one member for another or hand-run a member's workflow inline. Members run their own preflights for their own dependencies (seo-ai-optimizer checks website-agent-readiness for its Step 8); this preflight covers only what search-optimizer invokes directly.
The orchestrator writes only to the output dir. Members that write into a git repo (seo-ai-optimizer Step 6, aso-marketing Phase 4) — or an output dir the user placed in a repo — sync first:
git remote get-url origin >/dev/null || { echo "No origin remote — stop and ask" >&2; exit 1; }
branch="$(git rev-parse --abbrev-ref HEAD)"
stashed=0
if [ -n "$(git status --porcelain)" ]; then
git stash push -u -m "pre-search-optimizer" || { echo "Stash failed — stop and ask" >&2; exit 1; }
stashed=1
fi
git fetch origin && git pull --rebase origin "$branch" || {
echo "Sync failed — stop and ask (stashed=$stashed: changes are in the pre-search-optimizer stash)" >&2; exit 1; }
if [ "$stashed" = 1 ]; then
git stash pop || { echo "Stash pop conflict — stop and ask" >&2; exit 1; }
fiOn any `stop a
One command drops a tested, versioned skill into your agent. No more ad-hoc prompts. The same rigorous steps run every time. Skills are independent files.
Create, update, or audit AGENTS.md (default) or CLAUDE.md agent instructions: set up, prune, add a rule, or merge CLAUDE.md or…
Find open AI engineering jobs that fit a candidate, verify location and apply links, and assess each employer's product. Use for…
Generate App Store screenshots and header/search images for iPhone, iPad and Mac from a codebase or landing page, or re-render a…
Audit iOS/macOS apps against App Store Review Guidelines before submission, with evidence-backed verdicts and fixes. Don't use…
Optimize App Store and Google Play listings via a 7-phase, plan-approval-gated ASO workflow (keyword strategy, metadata,…
Generate a commit message, stage all changes, and push to remote after scanning for secrets, large files, and protected-branch…