src/autoskillit/skills_extended/setup-project/SKILL.md
Explore a target project and generate tailored recipes and config through an interactive workflow. Use when user wants to onboard a new project to AutoSkillit, says "setup project", or wants a starting point config.
npx skillsauth add talont-org/autoskillit setup-projectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Explore a target project and generate tailored recipes and AutoSkillit config through an interactive, workflow-first UX.
.autoskillit/config.yaml and wants a starting point/autoskillit:setup-project {project_dir}
project_dir — Absolute path to the target project to onboardNEVER:
{{AUTOSKILLIT_TEMP}}/setup-project/ directory (until the summary gate)make in generated examples — use Taskfile/task if a task runner is neededreset_guard_marker config — that's a workspace concern, not project setupbase_branch = main — detect the current branchrun_in_background: true is prohibited)ALWAYS:
model: "sonnet" when spawning all subagents via the Task toolExtract project_dir from the prompt. Invocation: /autoskillit:setup-project {project_dir}. If missing, abort: "Usage: /autoskillit:setup-project /absolute/path/to/project". Resolve to absolute path. Verify the directory exists.
Validate project_dir before exploring: Confirm {project_dir} exists and is a git
repository before launching subagents:
ls "{project_dir}"
git -C "{project_dir}" rev-parse --is-inside-work-tree
If the directory does not exist or is not a git repo, stop immediately and report the error to
the user. Do not assume any internal paths (src/, tests/, etc.) exist until the directory
structure has been verified in Step 1.
Then prompt the user:
"Would you like me to also scan your Claude Code conversation history for this project to identify recurring patterns that could become recipes?"
Store the answer for Step 1.
Launch parallel Explore subagents against project_dir. If the user opted into history mining, include Subagent E in the same parallel launch:
Subagent A — Language & Build System:
pyproject.toml, setup.py, package.json, go.mod, Cargo.toml, build.gradle, pom.xmlTaskfile.yml, justfileTaskfile.yml has install-worktree task use ["task", "install-worktree"]; for Python+uv use ["uv", "venv", ".venv", "&&", "uv", "pip", "install", "-e", ".[dev]", "--python", ".venv/bin/python"]; for Python+pip use ["python", "-m", "venv", ".venv", "&&", ".venv/bin/pip", "install", "-e", ".[dev]"]; for Node npm use ["npm", "install"]; for Node pnpm use ["pnpm", "install"]; for Rust use ["cargo", "fetch"]; for Go use ["go", "mod", "download"]Subagent B — Test Framework:
pytest.ini, pyproject.toml [tool.pytest], conftest.py, tests/jest.config.*, vitest.config.*, .mocharc.**_test.go files#[test] in source filesSubagent C — Project Structure & Critical Paths:
src/, lib/, pkg/, app/, internal/)classify_fix.path_prefixespnpm-workspace.yaml, Cargo.toml [workspace], go.work, Nx project.json, Lerna lerna.jsonSubagent D — Existing AutoSkillit Config:
.autoskillit/config.yaml — read if present.autoskillit/recipes/ — list any recipesCLAUDE.md — extract project constraints.autoskillit/workflows/ — list any custom workflowsSubagent E — Current Git Branch:
git -C {project_dir} branch --show-currentbase_branch in generated scriptsSubagent F+ — Conversation History Mining (only if user opted in):
Claude Code stores conversation history at ~/.claude/projects/<encoded-path>/ as JSONL files (one per session). The path encoding replaces / and _ with - (e.g., /home/user/my_project -> -home-user-my-project).
project_dir.jsonl files in ~/.claude/projects/<encoded-name>/, including subagent files in <session-uuid>/subagents/agent-*.jsonlEach history-mining subagent:
type: "user" messages where content contains <command-name>/skill-name</command-name>. Extract skill name and args.type: "assistant" messages -> message.content[] items with type: "tool_use". Extract name and input. Build ordered tool-call sequences per session.Bash(git checkout) -> Edit -> Edit -> Bash(pytest) -> Bash(git commit))./autoskillit:investigate -> /autoskillit:rectify -> /autoskillit:implement-worktree).run_cmd commands: Exact shell commands run frequently via Bash tool.Consolidate subagent findings into a structured profile:
["pytest", "-v"])clean target, npm script, etc.)git worktree add)base_branch default)Before presenting anything interactively, write the full analysis (project profile, workflow patterns, candidate workflows, shell command patterns) to:
{{AUTOSKILLIT_TEMP}}/setup-project/analysis_{project_name}_{YYYY-MM-DD_HHMMSS}.md
Tell the user: "Full analysis saved to {path} for your review."
Interactive flow. For each candidate workflow discovered:
Always offer the standard implementation pipeline first (plan → dry-walkthrough → implement → test → merge), even if not discovered in history. This is the core AutoSkillit workflow.
For each candidate workflow (including the standard one):
.claude/skills/<name>/SKILL.md) and as a bundled autoskillit skill"These skills exist in both your project and AutoSkillit's bundled set:
<name>→ local (bare/<name>) or bundled (/autoskillit:<name>)? Local versions are recommended. Should I use local for all, or do you want to pick individually?" List each conflicting skill name on its own line in the prompt.
/autoskillit:write-recipe using the Skill tool to generate the script. The agent already has full context from the exploration phases (workflow name, detected variables like project_dir/work_dir/base_branch, tool call sequence, routing logic) — no explicit parameter passing is needed. write-recipe uses that context directly to produce a clean script.list_recipes MCP tool, loaded via load_recipe, the agent interprets the YAML and executes the steps), show the generated script contentFill in detected values: test command, base branch, project-specific notes, any detected quirks. Use the two-directory model (project_dir + work_dir) in generated scripts. If work_dir equals project_dir, note that add_dir is not needed.
Interactive config suggestion flow:
reset_guard_marker — that's a workspace concern, not project setup"What is your default base branch? (e.g., 'develop' for the 3-tier model, 'main' for the classic model)" Default:
developIf the user selects a value different from the package default (develop), add it to the config diff as:
branching:
default_base_branch: {user_choice}
If no config exists, present the suggested config in full. If config exists, only highlight missing or suboptimal settings.
NEVER include
github.token, API keys, credentials, secrets, or any secret-like values inconfig.yaml. Tokens belong exclusively in.autoskillit/.secrets.yaml, which is gitignored. Only include fields documented in the config schema — do not invent new fields or extrapolate from existing ones.
Suggested config template:
test_check:
# Single command (most projects):
command: {detected test command as list}
# Multi-surface projects (e.g. Rust + Python e2e):
# commands:
# - [cargo, nextest, run]
# - [task, e2e-check]
# timeout: 600
# classify_fix:
# path_prefixes:
# - {detected critical paths}
# reset_workspace:
# command: {detected reset command}
# preserve_dirs: []
# worktree_setup:
# command: {detected worktree setup command}
Following the Terraform plan→apply pattern, show a summary of everything approved before touching disk:
.autoskillit/recipes/{name}.yamlThis prevents incremental approval fatigue and gives the user a single clear decision point.
Write a concise summary to terminal:
Do NOT include:
Artifacts created:
{{AUTOSKILLIT_TEMP}}/setup-project/analysis_{project_name}_{YYYY-MM-DD_HHMMSS}.md — full analysis (always).autoskillit/recipes/{name}.yaml — approved recipes.autoskillit/config.yaml — updated config (if changes approved)After the summary confirmation gate completes (Step 7), emit the following structured output tokens as the very last lines of your text output:
IMPORTANT: Emit the structured output tokens as literal plain text with no markdown formatting on the token names. Do not wrap token names in
**bold**,*italic*, or any other markdown. The adjudicator performs a regex match on the exact token name — decorators cause match failure.
analysis_path = {absolute_path_to_analysis_file}
config_path = {absolute_path_to_config_file}
Emit config_path only if .autoskillit/config.yaml was written in this session.
If no config changes were applied, omit the config_path= line.
development
Generate YAML recipes for .autoskillit/recipes/. Use when user says "make script skill", "generate script", "script a workflow", "write a script", "create a script", "new recipe", "write a pipeline", or when loaded by other skills for script formatting.
data-ai
Create Uncertainty Representation visualization planning spec showing error bar definitions, distribution-aware alternatives, and multi-seed variance protocols. Statistical lens answering "How is uncertainty honestly represented?"
data-ai
Create Temporal Dynamics visualization planning spec showing axis scaling (linear vs log), smoothing disclosure, epoch/step alignment, run aggregation (mean + variance bands), early-stopping markers, and wall-clock vs step-count x-axis. Temporal lens answering "Are training dynamics shown clearly and honestly?"
data-ai
Create Narrative Story Arc visualization planning spec showing visual consistency across the report (same color = same model everywhere), logical figure progression, redundant figure detection, and narrative dependency between figures. Narrative lens answering "Do the figures tell a coherent story across the report?"