Individual skill
detect-project
One-shot project setup for the mockup tools (generate-illustrated-article, generate-walkthrough). Detects the CSS framework, design tokens, brand colours, and fonts, compiles or synthesises a CSS bundle, maps the project structure (framework, routes/controllers/views locations, layouts, shared chrome), and recommends a provider-agnostic low/medium/high mockup model tier so generated output visually matches the real app without overspending on straightforward projects. Terminal (CLI/TUI) apps get a vendored WebTUI terminal stylesheet and a command index instead; mobile apps (React Native incl. Expo, and Flutter) get a vendored Framework7 device-frame stylesheet re-tinted to the app's brand, and a screen index; desktop apps (Electron, Tauri) keep their real compiled CSS and gain a vendored OS-window frame stylesheet; web/canvas games (vanilla canvas, Phaser, PixiJS) keep their real compiled CSS and gain a vendored playfield frame plus a per-scene draw anatomy extracted from the game's render code. The app type is auto-classified from the repo when no app_type hint is given (an explicit hint always wins; on ambiguous multi-surface repos the model adjudicates the product's primary surface from in-repo evidence, diverting from the classifier only when the evidence is one-sided). Use when the user asks to set up / detect / refresh the project's branding or structure, choose an appropriate model tier for mockup generation, or when mockup output doesn't look like the real app. One run per project — result cached in `./.rtfm/`. (Formerly named detect-branding.)
engine/detect-project/SKILL.md
Source commit e6c0b52f53793d2a45e6268a449e67c7d976d755
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 7, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 122
- Repository last updated
- Nov 5, 2026
- License
- Apache-2.0
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- ai-agents Repository topic
- claude-code Repository topic
- cli Repository topic
- codex Repository topic
- documentation Repository topic
- help-center Repository topic
- markdown Repository topic
- mcp Repository topic
- screenshots Repository topic
- technical-writing Repository topic
- design Derived category
- marketing Derived category
- engineering Derived category
- engineering-web Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
README.mddoc · 8,544 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesSKILL.mdcore · 133,584 bytesassets/desktop/desktop-frame.cssasset · 14,731 bytesassets/game/game-frame.cssasset · 5,028 bytesassets/macosui/LICENSE-puppertino.txtruns · 1,069 bytesassets/macosui/VERSIONS.txtdoc · 86 bytesassets/macosui/fonts.cssasset · 129,654 bytesassets/macosui/macos-frame.cssasset · 12,416 bytesassets/macosui/puppertino.cssasset · 36,024 bytesassets/mobileui/LICENSE-fonts.txtdoc · 755 bytesassets/mobileui/LICENSE-framework7.txtdoc · 2,658 bytesassets/mobileui/VERSIONS.txtdoc · 436 bytesassets/mobileui/device-frame.cssasset · 8,914 bytesassets/mobileui/f7-color-theme.mjsruns · 75,616 bytesassets/mobileui/f7-icons-names.jsonasset · 24,414 bytesassets/mobileui/fonts.cssasset · 115,181 bytesassets/mobileui/framework7-components.cssasset · 143,482 bytesassets/mobileui/framework7-core.cssasset · 166,421 bytesassets/mobileui/icons.cssasset · 144,168 bytesassets/mobileui/md3-defaults.cssasset · 3,132 bytesassets/mobileui/platforms.jsonasset · 1,005 bytesassets/tailwind-fallback.cssasset · 71,444 bytesassets/webtui/LICENSE-webtui.txtdoc · 1,429 bytesassets/webtui/VERSIONS.txtdoc · 189 bytesassets/webtui/terminal-frame.cssasset · 5,613 bytesassets/webtui/theme-catppuccin.cssasset · 10,482 bytesassets/webtui/theme-everforest.cssasset · 8,562 bytesassets/webtui/theme-gruvbox.cssasset · 6,826 bytesassets/webtui/theme-nord.cssasset · 8,845 bytesassets/webtui/theme-vitesse.cssasset · 6,242 bytesassets/webtui/themes.jsonasset · 837 bytesassets/webtui/webtui-core.cssasset · 39,377 bytesassets/win32ui/7css.cssasset · 83,803 bytesassets/win32ui/LICENSE-7css.txtdoc · 1,094 bytesassets/win32ui/VERSIONS.txtdoc · 43 bytesassets/win32ui/win32-frame.cssasset · 8,746 bytespackage-lock.jsonasset · 203 bytespackage.jsonruns · 516 bytesscripts/apply_runtime_profiles.jsruns · 21,794 bytesscripts/check_css_health.jsruns · 19,969 bytesscripts/check_project_map.jsruns · 8,641 bytesscripts/check_runtime_coverage.jsruns · 19,094 bytesscripts/check_runtime_recipe_quality.jsruns · 10,400 bytesscripts/classify_app_type.shruns · 14,835 bytesscripts/classify_surface.shruns · 5,347 bytesscripts/classify_workspace.jsruns · 1,588 bytesscripts/compile_css.shruns · 19,667 bytesscripts/detect_static.jsruns · 28,449 bytesscripts/detect_structure.jsruns · 7,237 bytesscripts/include_census.jsruns · 27,174 bytesscripts/json_get.jsruns · 5,293 bytesscripts/merge_json.jsruns · 1,691 bytesscripts/recommend_model_tier.jsruns · 9,607 bytesscripts/resolve_route_chains.jsruns · 7,707 bytesscripts/run_css_build.shruns · 1,728 bytesscripts/sanitize_css.jsruns · 2,411 bytesscripts/test_classify_surface.jsruns · 6,117 bytesscripts/test_node_helpers.jsruns · 9,359 bytesscripts/test_recommend_model_tier.jsruns · 5,930 bytesscripts/test_resolve_route_chains.jsruns · 13,455 bytesscripts/test_runtime_coverage.jsruns · 16,380 bytesscripts/test_runtime_recipe_quality.jsruns · 13,612 bytesscripts/theme_overrides.jsruns · 7,250 bytesscripts/write_branding.jsruns · 5,022 bytes
Read excerpt
You are detecting and compiling the visual identity AND structure of the software project at the path the user invoked this skill for (default: cwd). The output is a unified project-level cache at `./.rtfm/` that the article + walkthrough skills consume to make their mockups look like the actual product and to skip re-discovering the project's layout on every run.
CODEBASE: `$codebase_path` (defaults to `.` if blank)
## STEP 0 — Bootstrap
```bash
echo "rtfm-skills v$(cat ${RTFM_SKILLS_DIR:-$HOME/.rtfm-skills}/VERSION 2>/dev/null || echo '?') — detect-project"
RTFM_WORKSPACE="${RTFM_WORKSPACE:-$(${RTFM_SKILLS_DIR:-$HOME/.rtfm-skills}/generate-illustrated-article/scripts/resolve_workspace.sh)}"
cd "$RTFM_WORKSPACE" || exit 1
echo "workspace=$RTFM_WORKSPACE"
echo "related_repos:"; bash ${RTFM_SKILLS_DIR:-$HOME/.rtfm-skills}/generate-illustrated-article/scripts/related_repos.sh
CODEBASE="${codebase_path:-.}"
if [ ! -d "$CODEBASE" ]; then