agentsclimarketplace

Preflight

Skill wujiajun4/preflight

L1: 6 content checks + 3 distribution checks. Don't just write good code — make sure people can find it. L2: full pipeline with --strict, --fix, and --distribute modes. | 中文触发:AI 工具。 Use this skill when the user mentions tool / skill / utility / AI 助手 / agent tool.From its SKILL.md

Install
npx -y skills add wujiajun4/preflight

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 5 commands, including `ls README.md 2>/dev/null && echo "HAS_README" || echo "NO_README"` and 4 more.
  • fetches URLsInstructs the agent to fetch 1 URL, including https://api.github.com/repos/{owner}/{repo}/topics.

SKILL.md

12.2 KB, ~3.2k tokens by cl100k_base, as published. Nobody here has run it

<!-- LEVEL 1 — Read this first -->
ModeChecksUse when
preflight6 content checksEvery release
preflight --distribute6 content + 3 distributionPublishing a skill/product
preflight --strict10 content checksPolishing pass
preflight --fixAuto-fix common issuesQuick cleanup
<!-- LEVEL 2 — Full pipeline starts here -->

Preflight — "Don't ship half-baked. Don't ship invisible."

The Problem (v2.0 insight)

v1.0 caught content bugs — placeholders, missing LICENSE, private tools. But after pushing 4 products and getting zero organic discovery, the real gap became clear:

Content quality ≠ distribution quality.

You can have a perfect README, but if your repo has no topics, it's invisible to GitHub search. If it's not on skills.sh, the 67-platform skill ecosystem can't find it. If the install command appears once buried in the README, nobody knows how to use it.

Modes

ModeChecksWhen
Default (preflight)#1–6 ContentEvery release
Distribute (preflight --distribute)#1–6 Content + #7–9 DistributionPublishing a skill or public product
Strict (preflight --strict)#1–10 AllFinal polish pass
Fix (preflight --fix)#1–6 + auto-patchQuick cleanup

The Nine Checks

Content Checks (#1–6)

#CheckWhy it matters
1PlaceholdersYOUR_USERNAME, TODO, FIXME in published code is embarrassing
2LICENSE fileDeclaring MIT without a LICENSE file = legally ambiguous
3No private tool refsctx_fetch_and_index, ctx_execute only work on your machine
4.gitignore existsWithout it, .DS_Store and logs leak into the repo
5Bilingual READMEEnglish-only misses half your audience; Chinese-only misses the other half
6File structureMissing README? Missing SKILL.md? Ship the full package

Distribution Checks (#7–9) — only in --distribute mode

#CheckWhy it mattersHow to verify
7GitHub TopicsEmpty topics = invisible to GitHub searchgh api repos/{owner}/{repo}/topics → must have ≥5
8skills.sh discoverableThis is the 67-platform skill marketplaceCheck: repo has skill + agent-skills topics AND a SKILL.md with user-invocable: true
9Install command visibilityUsers need to see the command 3+ times to actCount npx skills add or git clone occurrences in README.md → should appear ≥3 times

Pipeline

Step 1: Detect Project Type

ls README.md 2>/dev/null && echo "HAS_README" || echo "NO_README"
ls SKILL.md 2>/dev/null && echo "HAS_SKILL" || echo "NO_SKILL"
ls package.json 2>/dev/null && echo "NPM" || true
# Extract repo name from git remote for API checks
git remote get-url origin 2>/dev/null | sed 's/.*github.com[:\/]\(.*\)\.git/\1/'

Step 2: Run Content Checks (#1–6)

echo "=== CHECK 1: PLACEHOLDERS ==="
PLACEHOLDER_FILES=$(grep -rn 'YOUR_USERNAME\|<<<TODO>>>\|FIXME\|XXX_REPLACE_ME' \
  README.md SKILL.md LICENSE CHANGELOG.md package.json 2>/dev/null)
if [ -z "$PLACEHOLDER_FILES" ]; then
  echo "PASS: No placeholder strings found"
else
  echo "FAIL: Placeholders found:"
  echo "$PLACEHOLDER_FILES"
fi

echo "=== CHECK 2: LICENSE ==="
if ls LICENSE* 1>/dev/null 2>&1; then
  echo "PASS: LICENSE file exists"
else
  echo "FAIL: No LICENSE file found"
fi

echo "=== CHECK 3: PRIVATE TOOL REFS ==="
PRIV_TOOLS=$(grep -rn 'ctx_fetch_and_index\|ctx_execute_file\|ctx_batch_execute\|ghost_os\|mcp__ghost-os' \
  SKILL.md README.md 2>/dev/null)
if [ -z "$PRIV_TOOLS" ]; then
  echo "PASS: No private tool references found"
else
  echo "FAIL: Private tool references found:"
  echo "$PRIV_TOOLS"
fi

echo "=== CHECK 4: GITIGNORE ==="
if ls .gitignore 1>/dev/null 2>&1; then
  HAS_DSSTORE=$(grep -c '\.DS_Store' .gitignore 2>/dev/null || echo 0)
  echo "PASS: .gitignore exists (covers .DS_Store: $([ "$HAS_DSSTORE" -gt 0 ] && echo 'yes' || echo 'no'))"
else
  echo "FAIL: No .gitignore file found"
fi

echo "=== CHECK 5: BILINGUAL ==="
README_LINES=$(wc -l < README.md 2>/dev/null || echo 0)
if [ "$README_LINES" -gt 0 ]; then
  HAS_EN=$(grep -c '[A-Za-z]\{20,\}' README.md 2>/dev/null || echo 0)
  HAS_CN=$(grep -c '[\x{4e00}-\x{9fff}]\{4,\}' README.md 2>/dev/null || echo 0)
  echo "README: $README_LINES lines, EN segments: $HAS_EN, CN segments: $HAS_CN"
  if [ "$HAS_EN" -gt 0 ] && [ "$HAS_CN" -gt 0 ]; then
    echo "PASS: README has both English and Chinese content"
  elif [ "$HAS_EN" -gt 0 ]; then
    echo "WARN: README is English-only"
  elif [ "$HAS_CN" -gt 0 ]; then
    echo "WARN: README is Chinese-only"
  fi
else
  echo "SKIP: No README.md found"
fi

echo "=== CHECK 6: FILE STRUCTURE ==="
FILES_OK=true
for f in README.md .gitignore; do
  if [ ! -f "$f" ]; then echo "MISSING: $f"; FILES_OK=false; fi
done
if [ -f "SKILL.md" ]; then
  for f in SKILL.md LICENSE assets/; do
    if [ ! -e "$f" ]; then echo "MISSING (skill): $f"; FILES_OK=false; fi
  done
fi
$FILES_OK && echo "PASS: File structure complete" || echo "FAIL: Missing files detected"

Step 3: Run Distribution Checks (#7–9) — only in --distribute mode

These checks need network access. Use ctx_execute (Node.js) to query GitHub API:

// CHECK 7: GitHub Topics
const resp = await fetch('https://api.github.com/repos/{owner}/{repo}/topics', {
  headers: { 'Accept': 'application/vnd.github+json', 'User-Agent': 'preflight' }
});
const data = await resp.json();
const topics = data.names || [];
if (topics.length >= 5) {
  console.log('PASS: ' + topics.length + ' GitHub topics set: ' + topics.join(', '));
} else if (topics.length > 0) {
  console.log('WARN: Only ' + topics.length + ' topics. Recommend ≥5. Missing: claude-code, skill, agent-skills');
} else {
  console.log('FAIL: ZERO GitHub topics. Repo is invisible to search.');
  console.log('→ Fix: Add topics at github.com/{owner}/{repo}/settings (top of page)');
  console.log('→ Recommended: claude-code, skill, agent-skills, developer-tools, {domain-specific}');
}

// CHECK 8: skills.sh discoverable
// Read SKILL.md frontmatter
const skillContent = require('fs').readFileSync('SKILL.md', 'utf8');
const isUserInvocable = skillContent.includes('user-invocable: true');
const hasSkillTag = topics.some(t => t === 'skill' || t === 'agent-skills');
if (hasSkillTag && isUserInvocable) {
  console.log('PASS: skills.sh will auto-index this skill (topics + SKILL.md ok)');
} else {
  console.log('WARN: May not be auto-discovered by skills.sh');
  if (!hasSkillTag) console.log('→ Add topic: skill or agent-skills');
  if (!isUserInvocable) console.log('→ Set user-invocable: true in SKILL.md frontmatter');
}

// CHECK 9: Install command visibility
const readme = require('fs').readFileSync('README.md', 'utf8');
const installCount = (readme.match(/npx skills add/g) || []).length +
                     (readme.match(/git clone.*github\.com\/{owner}\/{repo}/g) || []).length;
if (installCount >= 3) {
  console.log('PASS: Install command appears ' + installCount + ' times in README');
} else if (installCount > 0) {
  console.log('WARN: Install command only appears ' + installCount + ' times. Recommend ≥3.');
  console.log('→ Add it: below header, in Install section, and in footer');
} else {
  console.log('FAIL: No install command found in README');
  console.log('→ Add: npx skills add {owner}/{repo} -g');
}

Step 4: Output the Report Card

## Preflight Report — {project_name}

### Content (#1–6)
| # | Check | Result | Detail |
|---|-------|--------|--------|
| 1 | Placeholders | ✅ PASS | No YOUR_USERNAME/TODO/FIXME found |
| 2 | LICENSE | ✅ PASS | MIT license present |
| 3 | Private tools | ✅ PASS | Clean |
| 4 | .gitignore | ✅ PASS | Exists, covers .DS_Store |
| 5 | Bilingual | ⚠️ WARN | English-only README |
| 6 | File structure | ✅ PASS | README+SKILL+LICENSE+gitignore+assets |

### Distribution (#7–9) [--distribute mode]
| # | Check | Result | Detail |
|---|-------|--------|--------|
| 7 | GitHub Topics | ❌ FAIL | 0 topics set. Repo invisible to GitHub search. |
| 8 | skills.sh | ⚠️ WARN | Missing 'skill' topic. Add it for auto-indexing. |
| 9 | Install visibility | ⚠️ WARN | Install command appears only 1 time. Add 2+ more. |

**Verdict: Content 5/6, Distribution 0/3. Fix #7 before shipping.**

Step 5 (Optional): Auto-Fix Mode (--fix)

  • Placeholders → replace YOUR_USERNAME with detected GitHub user
  • LICENSE → generate MIT template with current year
  • .gitignore → create with .DS_Store, *.log, node_modules/
  • Private tool refs → warn but don't auto-replace (needs human judgment)
  • NEW: README install command → if missing from header, inject <code>npx skills add ...</code> after badge row

Strict Mode (--strict)

Adds #10–13: 10. Markdown links not broken 11. No trailing whitespace 12. All image paths resolve 13. CHANGELOG.md has entry for current version

Rules

  • Never modifies files unless --fix is explicitly passed.
  • Distribution checks need network. They call GitHub API. In sandbox, use ctx_execute Node.js.
  • Distribution checks are warnings by default in preflight, FAILs in --distribute.
  • The report card is the product. Table + verdict, no walls of text.
  • Failures are specific. "0 GitHub topics" not "distribution issues."

v2.0 Changelog

WhatWhy
--distribute modeContent quality ≠ distribution quality. 4 shipped products got 0 organic discovery.
Check #7: GitHub TopicsEmpty topics = invisible to GitHub search. Caught on 2026-06-06 launch.
Check #8: skills.sh discoverable67-platform ecosystem can't find skills without skill topic + SKILL.md.
Check #9: Install visibilityUsers need 3+ install command sightings to act. Hot repos have 24-26.
Progressive disclosureL1 100-token mode summary for fast routing.
Structured triggersKeywords + events for auto-invoke.

v2.0.1 (2026-06-07)

WhatWhy
FIX: Move argument-hint to dedicated frontmatter fieldWas crammed in description after 126 SKILL.md bulk rewrite — same regression that hit brain-sync and tool-eval
FIX: Add CJK trigger inline in descriptionStandard pattern from skill-lens v1.1.0
NEW: Add triggers.phases blockMaps 9 checks to execution phases (placeholders, license, private-tools, gitignore, bilingual, file-structure, github-topics, skills-sh, install-visibility)
NEW: v2.0.1 changelog sectionTransparency for patch-level changes
FIX: git remote URL cleanedWas leaking old PAT ghp_TVHOf*** (旧 token 已撤销,仅前 10 字符保留供识别)

Security Note

This skill is an instruction-only skill (no scripts). For related skills with scripts, see lens.cjs in skill-lens and the secure-push pattern documentation. Key principles:

  • Never write full PAT tokens in documentation — use ghp_TVHOf*** masked form
  • Always run git remote set-url after push to clean embedded old PATs
  • GitHub secret scanner watches SKILL.md content — not just commit messages</mm:think>

What ships with it: 4 files

7.2 KB alongside SKILL.md

assets/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.