with one click
science-create-project
// Scaffold a new Science-managed project using one of the two supported profiles: `research` or `software`. Use when starting a brand-new project from scratch.
// Scaffold a new Science-managed project using one of the two supported profiles: `research` or `software`. Use when starting a brand-new project from scratch.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | science-create-project |
| description | Scaffold a new Science-managed project using one of the two supported profiles: `research` or `software`. Use when starting a brand-new project from scratch. |
Converted from Claude command /science:create-project.
Before executing any research command:
Resolve project profile: Read science.yaml and identify the project's profile.
Use the canonical layout for that profile:
research ā doc/, specs/, tasks/, knowledge/, papers/, models/, data/, code/software ā doc/, specs/, tasks/, knowledge/, plus native implementation roots such as src/ and tests/Load role prompt: .ai/prompts/<role>.md if present, else references/role-prompts/<role>.md.
Load the science-research-methodology and science-scientific-writing Codex skills. If native skill loading is unavailable, use codex-skills/INDEX.md to map canonical Science skill names to generated skill files and source paths.
Read specs/research-question.md for project context when it exists.
Load project aspects: Read aspects from science.yaml (default: empty list).
For each declared aspect, resolve the aspect file in this order:
aspects/<name>/<name>.md ā canonical Science aspects.ai/aspects/<name>.md ā project-local aspect override or additionIf neither path exists (the project declares an aspect that isn't shipped with
Science and has no project-local definition), do not block: log a single line
like aspect "<name>" declared in science.yaml but no definition found ā proceeding without it and continue. Suggest the user either (a) drop the
aspect from science.yaml, (b) author it under .ai/aspects/<name>.md, or
(c) align the name with one shipped under aspects/.
When executing command steps, incorporate the additional sections, guidance, and signal categories from loaded aspects. Aspect-contributed sections are whole sections inserted at the placement indicated in each aspect file.
Check for missing aspects: Scan for structural signals that suggest aspects the project could benefit from but hasn't declared:
| Signal | Suggests |
|---|---|
Files in specs/hypotheses/ | hypothesis-testing |
Files in models/ (.dot, .json DAG files) | causal-modeling |
Workflow files, notebooks, or benchmark scripts in code/ | computational-analysis |
Package manifests (pyproject.toml, package.json, Cargo.toml) at project root with project source code (not just tool dependencies) | software-development |
If a signal is detected and the corresponding aspect is not in the aspects list,
briefly note it to the user before proceeding:
"This project has [signal] but the
[aspect]aspect isn't enabled. This would add [brief description of what the aspect contributes]. Want me to add it toscience.yaml?"
If the user agrees, add the aspect to science.yaml and load the aspect file
before continuing. If they decline, proceed without it.
Only check once per command invocation ā do not re-prompt for the same aspect if the user has previously declined it in this session.
Resolve templates: When a command says "Read .ai/templates/<name>.md",
check the project's .ai/templates/ directory first. If not found, read from
templates/<name>.md. If neither exists, warn the
user and proceed without a template ā the command's Writing section provides
sufficient structure.
Resolve science CLI invocation: When a command says to run science,
prefer the project-local install path: uv run science <command>.
This assumes the root pyproject.toml includes science as a dev
dependency installed via uv add --dev --editable "$SCIENCE_TOOL_PATH"
(the distribution is science; the entry point it installs is science).
If that fails (no root pyproject.toml or science not in dependencies),
fall back to:
uv run --with <science-plugin-root>/science science <command>
You are scaffolding a brand-new Science-managed project. The steady-state model supports exactly two project profiles:
researchsoftwareDo not scaffold legacy path-mapping layouts.
Before starting, check whether a science.yaml already exists in the current directory or any parent.
If it does, warn the user they appear to be inside an existing Science project and ask whether they want to:
If the user is adopting Science for an existing repository, use science-import-project instead.
Have a natural interactive conversation and gather:
research or softwareIf the profile is research, also gather:
If the profile is software, also gather:
doc/profile and aspects are separate:
profile determines layoutaspects remain explicit behavioral/domain mixinsUse the user input as the project name if provided, otherwise use the name from Step 1.
Always create:
<project>/
āāā science.yaml
āāā pyproject.toml
āāā .env
āāā .gitignore
āāā AGENTS.md
āāā CLAUDE.md
āāā validate.sh
āāā doc/
ā āāā background/
ā ā āāā topics/
ā ā āāā papers/
ā āāā questions/
ā āāā methods/
ā āāā datasets/
ā āāā searches/
ā āāā discussions/
ā āāā interpretations/
ā āāā reports/
ā āāā meta/
ā āāā plans/
āāā tasks/
ā āāā active.md
āāā specs/
āāā knowledge/
For research projects, also create:
<project>/
āāā data/
ā āāā raw/
ā āāā processed/
āāā results/
āāā models/
āāā papers/
āāā references.bib
āāā pdfs/
If the research project includes an installable Python package, create:
<project>/
āāā src/
āāā tests/
Also create:
<project>/
āāā code/
āāā scripts/
āāā notebooks/
āāā workflows/
For software projects, keep native implementation roots. Create what matches the stack, for example:
<project>/
āāā src/
āāā tests/
Do not scaffold unused placeholder directories such as tools/, top-level prompts/, or top-level templates/.
Only create .ai/ if the user explicitly needs project-specific prompt/template overrides.
science.yamlname: "<project-name>"
created: "<YYYY-MM-DD>"
last_modified: "<YYYY-MM-DD>"
summary: "<2-3 sentence summary from conversation>"
status: "active"
profile: "<research-or-software>"
layout_version: 2
tags:
- "<tag1>"
- "<tag2>"
data_sources: []
ontologies: []
knowledge_profiles:
local: local
aspects: []
Add the requested aspects and any known data sources.
pyproject.tomlCreate a root tool manifest so the project can install Science tooling locally, even for non-Python repos.
If the repository already has a root pyproject.toml, extend it instead of creating a second one.
Minimum shape:
[project]
name = "<project-slug>-sciences"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = []
[dependency-groups]
dev = []
Install science into that manifest with:
uv add --dev --editable "$SCIENCE_TOOL_PATH"
This applies even to non-Python repos because the manifest is for project-local tooling.
.envPopulate with the resolved absolute path to science so validate.sh and other tooling can find it:
SCIENCE_TOOL_PATH=<absolute-path-to-science>
Resolve <science-plugin-root>/science to its absolute path at creation time.
.gitignoreInclude at minimum:
# Secrets
.env
# Large files
papers/pdfs/
# Python
__pycache__/
*.pyc
.venv/
*.egg-info/
.mypy_cache/
# Notebooks
.ipynb_checkpoints/
# Worktrees
.worktrees/
# Managed artifact rollback backups
*.pre-update*.bak
# OS
.DS_Store
For research projects, also ignore raw/processed data payloads while keeping descriptors or .gitkeep files as appropriate.
CLAUDE.mdCreate:
@AGENTS.md
CLAUDE.md is a single-line pointer. Do not add @core/*.md directives or
project-specific guidance here ā both belong in AGENTS.md.
AGENTS.mdUse the canonical scaffold at templates/agents-md.md as the
starting point. Fill in the project-specific sections (What this is, Profile,
Conventions, Task execution, Known issues) from the conversation in Step 1.
Do not insert @core/overview.md or @core/decisions.md directives. The
core/ files are referenced from the Pointers section instead. The
"Load-bearing constraints" section between the BEGIN/END markers is left empty
on initial scaffold; science-curate populates it once core/decisions.md
has entries. See core/ in
references/project-structure.md for the conventions.
Offer to scaffold core/overview.md and core/decisions.md from
templates/core-overview.md and
templates/core-decisions.md. Skip if the user declines.
RESEARCH_PLAN.mdFor research projects, create RESEARCH_PLAN.md unless the user prefers to inline the high-level plan into README.md.
If created, keep it strategic only:
Do not put task-queue bookkeeping in it.
For software projects, prefer README.md and doc/plans/ unless the user explicitly wants a separate root-level plan file.
tasks/active.mdCreate:
<!-- Task queue. Use science-tasks to manage. -->
specs/For research projects:
specs/research-question.mdspecs/scope-boundaries.mdspecs/hypotheses/For software projects:
specs/ only as needed for project requirements or product/research planningdoc/Create the canonical document taxonomy and add a minimal overview/plan starter where appropriate.
After scaffolding the project, install Science's managed validate.sh:
science project artifacts install validate.sh --project-root <project-path>
This drops the canonical validate.sh into the project root with the managed header. To stay current on future Science releases, run science project artifacts check validate.sh periodically (or rely on science health to surface drift).
Do not copy framework defaults into the project.
Framework defaults are resolved centrally from <science-plugin-root>.
Only create .ai/prompts/ or .ai/templates/ when the project needs project-specific overrides or additions.
cd <project>
git init
git add -A
git commit -m "Initialize Science project: <project name>"
Run:
bash validate.sh --verbose
Warnings are acceptable at this stage if they reflect intentionally empty starter areas.
Tell the user:
RESEARCH_PLAN.md was created or the plan was inlined into README.md.ai/ overrides were created