$npx -y skills add neo4j-contrib/neo4j-skills --skill neo4j-getting-started-skillOrchestrates zero-to-running-app in 8 stages — prerequisites → context →
| 1 | # Neo4j Getting-Started Skill |
| 2 | |
| 3 | Guide a **user or agent** from zero to a working Neo4j application by executing the 8 stages below in order. |
| 4 | |
| 5 | **At the start of each stage**: read the corresponding `${CLAUDE_SKILL_DIR}/references/<stage-name>.md` file and follow its instructions. Only load the stage you are currently executing — not all at once. |
| 6 | |
| 7 | **"User" means both a human developer and an autonomous coding agent.** |
| 8 | |
| 9 | --- |
| 10 | |
| 11 | ## When to Use |
| 12 | |
| 13 | - New Neo4j project from scratch (local/Docker/Aura) |
| 14 | - Full onboarding: zero → DB → model → load → app |
| 15 | - Generating synthetic data for demos or dev |
| 16 | |
| 17 | ## When NOT to Use |
| 18 | |
| 19 | - **Cypher authoring on existing project** → `neo4j-cypher-skill` |
| 20 | - **Driver upgrades / Cypher migration** → `neo4j-migration-skill` |
| 21 | - **Admin on existing DB** (backup, restore, import) → `neo4j-cli-tools-skill` |
| 22 | |
| 23 | --- |
| 24 | |
| 25 | ## Project Structure |
| 26 | |
| 27 | **All generated code, data, scripts, queries, and notebooks must be written to the working directory** so the user can inspect, reuse, and re-run them after the session ends. Never generate output only as text in the conversation — always write it to a file. |
| 28 | |
| 29 | Organize files into this layout. Create subdirectories before writing files. |
| 30 | |
| 31 | ``` |
| 32 | .env ← DB credentials (gitignored, loaded by python-dotenv) |
| 33 | aura.env ← Aura API credentials (gitignored, never overwrite) |
| 34 | progress.md ← stage-by-stage progress (this skill writes it) |
| 35 | requirements.txt ← Python dependencies |
| 36 | |
| 37 | schema/ |
| 38 | schema.json ← graph model definition |
| 39 | schema.cypher ← DDL: constraints + indexes |
| 40 | reset.cypher ← wipe all data (keep schema) |
| 41 | |
| 42 | data/ |
| 43 | generate.py ← synthetic data generator (DATA_SOURCE=synthetic) |
| 44 | import.py ← CSV/file importer (DATA_SOURCE=csv or relational) |
| 45 | *.csv ← any provided or generated data files |
| 46 | |
| 47 | queries/ |
| 48 | queries.cypher ← validated Cypher query library |
| 49 | |
| 50 | scripts/ |
| 51 | provision_aura.py ← Aura provisioning script (generated during provision stage) |
| 52 | |
| 53 | notebook.ipynb ← app artifact (root — standard jupyter convention) |
| 54 | app.py ← app artifact (root — streamlit run app.py) |
| 55 | main.py ← app artifact (root — uvicorn main:app) |
| 56 | graphrag_app.py ← app artifact (root) |
| 57 | ``` |
| 58 | |
| 59 | Root-level files (`.env`, `requirements.txt`, app code) stay at root because tooling expects them there. Everything else goes in the appropriate subfolder. |
| 60 | |
| 61 | --- |
| 62 | |
| 63 | ## Progress Tracking |
| 64 | |
| 65 | The skill maintains `progress.md` in the working directory to support resumability. |
| 66 | |
| 67 | **On startup:** |
| 68 | 1. Check if `progress.md` exists. |
| 69 | 2. If it exists, find the first pending stage: |
| 70 | ```bash |
| 71 | grep -B1 "^status: pending" progress.md | grep "^###" | head -1 |
| 72 | ``` |
| 73 | 3. Resume from that stage. Read its context block (the key=value lines beneath the header) to restore `DOMAIN`, `USE_CASE`, `NEO4J_URI`, etc. — do not re-ask the user for information already recorded. |
| 74 | 4. For each completed stage, read every file listed in its `files=` line before proceeding. These files are the ground truth — do not reconstruct their content from memory. |
| 75 | - `schema/schema.json` → re-read before model, load, query, or build stages |
| 76 | - `queries/queries.cypher` → re-read before build stage |
| 77 | - `data/generate.py` → re-read before import or reset |
| 78 | 5. If `progress.md` does not exist, start from `0-prerequisites`. |
| 79 | |
| 80 | **On stage completion** — update (or create) `progress.md`: |
| 81 | - If the stage's `###` section already exists, update `status: pending` → `status: done` and append any new key=value lines. |
| 82 | - If the section doesn't exist, append it following the format below. |
| 83 | |
| 84 | **Format:** |
| 85 | ```markdown |
| 86 | # Neo4j Getting-Started — Progress |
| 87 | <!-- Resume: grep for "status: pending" to find the next stage --> |
| 88 | |
| 89 | ### 0-prerequisites |
| 90 | status: done |
| 91 | |
| 92 | ### 1-context |
| 93 | status: done |
| 94 | DOMAIN=social |
| 95 | USE_CASE=friend recommendations |
| 96 | EXPERIENCE=beginner |
| 97 | DB_TARGET=aura-free |
| 98 | DATA_SOURCE=synthetic |
| 99 | APP_TYPE=notebo |