# Ops Init

> Interactive Project Setup

- Skill: `rbutinar/ops-init` (Agent Skill)
- Install (CLI): `npx skillmds@latest add rbutinar/ops-init`
- Raw SKILL.md: https://api.skillmd.com/api/skills/rbutinar/ops-init/raw
- Safety review: PASS (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: rbutinar (https://skillmd.com/u/rbutinar)
- Updated: 2026-08-19
- Page: https://skillmd.com/skills/rbutinar/ops-init

---


# /ops-init — Interactive Project Setup

You are guiding the user through setting up a new ade-ops project. This is an interactive wizard — ask questions one phase at a time, wait for answers, then proceed.

## Context

ade-ops manages remote analytics environments (Databricks, Fabric, DevOps). A project is a self-contained unit with:
- `src/` — source of truth (notebooks, PBI models)
- `overlays/` — per-environment transforms (catalog, schema, exclusions)
- `state/` — mirror of what's deployed remotely
- `config/` — project.yaml + credentials.yaml

The init wizard collects all info needed to generate this structure.

## Instructions

### Phase 1: Identity

Ask the user (in Italian, as per CLAUDE.md language rules):

> **Inizializziamo un nuovo progetto ade-ops.**
>
> 1. **Client**: come si chiama il cliente? (es. `<client>`, `acme`)
> 2. **Progetto**: nome del progetto? (es. `<project>`, `analytics`)
> 3. **Descrizione**: una riga che descrive lo scopo del progetto
> 4. **Directory**: dove vuoi creare il progetto? (default: `projects/{client}/{project}/` dentro ade-ops)

Wait for answers before proceeding.

### Phase 2: Platforms & Technology

Ask:

> **Piattaforme e tecnologie:**
>
> 5. **Quali piattaforme usi?** (scegli una o più)
>    - `databricks` — notebooks, cataloghi, tabelle
>    - `fabric` — Power BI semantic models e report
>    - `devops` — git repos (futuro)
>
> 6. Per **Databricks**: qual è l'URL del workspace? (es. `https://adb-xxx.azuredatabricks.net`)
> 7. Per **Fabric**: qual è il tenant? (es. `contoso.com`)
> 8. **Cosa devi deployare?** (scope)
>    - `notebooks` — notebook Python su Databricks
>    - `power_bi` — modelli TMDL e report su Fabric
>    - entrambi?

Wait for answers.

### Phase 3: Environments

Ask:

> **Ambienti:**
>
> 9. **Quanti ambienti hai?** (es. dev, cert, prod)
> 10. Per **ciascun ambiente**, ho bisogno di:
>     - Nome (es. `dev`)
>     - Descrizione breve (es. "Development, dati CERT")
>     - **Databricks**: workspace path, catalog, schema
>     - **Fabric** (se usato): workspace ID, model name, model ID, report suffix
>
> Dimmi il primo ambiente e procediamo uno alla volta.

Collect environment details iteratively. For each environment, confirm before moving to the next.

### Phase 4: Work Mode

Ask:

> **Come lavori:**
>
> 11. **Lavori solo tu o c'è un team?** (solo / team)
> 12. **Dove scrivi il codice?** (il path nel workspace Databricks dove sviluppi — es. folder personale, shared, ecc.)
> 13. **Qual è il catalogo base usato in src/?** Il catalogo che usi nel codice sorgente — gli overlay lo sostituiranno per gli altri ambienti. (es. `silver_demo_cert`)
> 14. **Come ti autentichi?**
>     - Databricks: token PAT, Azure AD, ecc.
>     - Fabric: az CLI, device code, service principal

### Phase 5: Version Control

Ask:

> **Versioning del progetto:**
>
> 15. **Vuoi un repo git per questo progetto?** Il progetto vive separato dal framework ade-ops.
>     - Si — inizializza git, utile per storia del codice e audit trail
>     - No — niente git, il progetto resta solo locale
> 16. **Vuoi pubblicarlo su GitHub?** (solo se git = sì)
>     - Si, repo privato — crea su GitHub e fai il primo push
>     - No — solo git locale per ora

### Phase 6: Generate

Once all info is collected:

1. Summarize the configuration in a table and ask for conferma
2. Use the scaffold engine to generate the project:

```python
import sys
sys.path.insert(0, str(Path("core")))
from engine.init import ProjectSetup, PlatformConfig, EnvironmentConfig, scaffold_project

setup = ProjectSetup(
    client="...",
    project="...",
    description="...",
    target_dir="...",  # if custom
    platforms=[PlatformConfig(name="databricks", host="...")],
    environments=[EnvironmentConfig(name="dev", ...)],
    scopes={"notebooks": "databricks"},
    base_catalog="...",
)
project_dir = scaffold_project(setup)
```

3. Show the generated structure with `find`
4. If git was requested, initialize the repo:

```bash
cd {project_dir}
git init
# .gitignore is generated by scaffold
git add .
git commit -m "Initial project setup via ade-ops /ops-init"
```

5. If GitHub was requested, create the remote repo:

```bash
gh repo create {owner}/{client}-{project} --private --source=. --push
```

6. Remind the user to:
   - Copy `config/credentials.example.yaml` to `config/credentials.yaml` and fill in the real values (or rely on the `${DATABRICKS_TOKEN}` env var). `credentials.yaml` is gitignored.
   - Review overlays for correctness
   - Run `python -m core.cli preflight --project {project_dir} --env {env}` to verify connectivity
   - Run first `pull` to populate `state/`
   - The ade-ops engine lives in the framework repo, not in the project

## Important

- Speak Italian (conversation language per CLAUDE.md)
- Ask one phase at a time — don't dump all questions at once
- If the user gives partial info, ask follow-up questions
- Use the <project> project at `<lab-root>/ade\ade_projects\<client>\<project>` as reference if the user mentions <client>
- The generated project is ready to use immediately after filling in credentials
- The project repo and the ade-ops framework repo are SEPARATE — the project does not contain engine code

