wren-onboarding
Wren Onboarding — Agent Workflow
This skill walks the agent through onboarding — environment checks, project scaffolding, profile creation, MDL generation, and first query. Procedural details, per-datasource setup notes, and the troubleshooting playbook live in the docs, not here. The skill's job is to enforce the agent-side rules (one step per turn, never ask for credentials in chat) and to dispatch the agent to the right doc / sibling skill at each step.
Reference docs (the skill points to these — never duplicate their content):
docs/get_started/installation.md— CLI install + skill installdocs/get_started/connect.md— full connection procedure, per-datasource setup notes, complete troubleshooting playbookdocs/get_started/quickstart.md— bundledjaffle_shopdemo
Version check
Silently fetch https://raw.githubusercontent.com/Canner/wren-engine/main/skills/versions.json. Compare the wren-onboarding key with this skill's version (from the frontmatter above). If the remote version is newer, notify the user:
A newer version of the wren-onboarding skill is available. Update with:
npx skills add Canner/wren-engine --skill wren-onboarding
Continue regardless of update status.
Mode of operation — READ THIS FIRST
One step per round-trip. Each numbered step below is its own turn: explain briefly, ask only what the step needs, run the command(s), confirm, move on.
- ❌ Never collect information for future steps upfront. Do not ask for project name + database type + credentials in one message.
- ❌ Never ask for credentials in chat — not host, port, user, password, tokens, anything. Credentials always go through
.env. The user fills the file in their editor; the agent never sees the values. - ❌ Never query the database before MDL is built via the
wren-generate-mdlskill. - ❌ Never invent connection field names. Always run
wren docs connection-info <ds>to see the real fields — it's introspected from the live Pydantic schema, so it's always correct. - ✅ Wait for each command to finish, report its output in plain language, then move on.
- ✅ For any error, consult
connect.md#troubleshootingand surface the relevant section to the user — don't carry a copy of the playbook here.
Preflight (environment only — no user questions about the project)
Read-only checks. Report findings, do not ask about project / credentials / datasource yet.
python3 --version— requires Python 3.11+. If older, ask the user to upgrade and stop.- Check virtualenv:
python3 -c "import sys; print(sys.prefix != sys.base_prefix)". IfFalse, offer to create one (python3 -m venv .venv && source .venv/bin/activate). PEP 668 systems will need this. wren --version— if already installed, confirm before reinstalling.pwd— record it. Don't ask where the project should live yet.
Report findings as a 4-bullet list, then continue.
Early branch — demo or own database?
"Try the bundled
jaffle_shopdemo first (~30s, no DB needed), or connect your own database?"
- demo → point at
quickstart.mdand stop this skill. - own DB → continue.
Step 1 — Collect project name + database type
These two are the only thing Step 2 needs; ask both together so the user has a clean handoff:
"Two things before I scaffold:
- Project name — I'll create
~/<name>/andcdinto it.- Database type — run
wren docs connection-info(no argument) to see the full list, or pick a common one:postgres,mysql,bigquery,snowflake,clickhouse,trino,duckdb, …"
Wait for both. Don't ask for credentials.
Step 2 — Project setup (batch)
Side effects: creates ~/<project>/, installs wren-engine[<ds>,main], scaffolds project files, writes an empty .env template.
Run as a batch — report each command briefly, then end with one "please fill .env" ask:
-
mkdir -p ~/<project> && cd ~/<project>. Refuse to overwrite an existingwren_project.yml. -
pip install "wren-engine[<ds>,main]". For datasource-specific install gotchas (macOS mysql, etc.), seeconnect.md#per-datasource-setup-notes. -
wren context init --emptyto scaffold without placeholder examples. Editwren_project.ymlto setdata_source: <ds>. -
Generate the
.envtemplate by introspecting the connector:wren docs connection-info <ds> --format mdUse the field list to write
.envwith<DS>_<FIELD>=keys (UPPER_SNAKE), values empty. Example for postgres:POSTGRES_HOST= POSTGRES_PORT=5432 POSTGRES_DATABASE= POSTGRES_USER= POSTGRES_PASSWORD=Special encodings (BigQuery base64, Snowflake account format, Athena AWS creds, etc.) are documented in
connect.md#per-datasource-setup-notes. Surface the relevant section to the user verbatim — don't paraphrase. -
Add
.envto.gitignoreif the project is a git repo. Suggestchmod 600 .env. -
Tell the user: project is ready,
.envis at<path>, please fill every value and reply "done".
Step 3 — Create the connection profile
Only after the user replies "done".
Write /tmp/conn.yml with every field as a ${VAR} placeholder matching the .env keys you generated in Step 2:
datasource: <ds>
host: ${<DS>_HOST}
port: ${<DS>_PORT}
# … one line per field from `wren docs connection-info <ds>`
Then:
wren profile add <project> --from-file /tmp/conn.yml
Validation runs automatically. The CLI overwrites profiles silently — there is no --force flag.
- ✓ Success → continue to Step 4.
- ⚠ Any warning → consult
connect.md#troubleshootingfor the exact symptom (missing secret, driver auth failure, ValidationError, unreachable host, …) and tell the user what to fix.
Step 4 — Generate MDL (hand off)
⚠️ The agent must build MDL before any data query. Queries against tables not in MDL will fail.
Invoke the wren-generate-mdl skill. It walks the agent through table introspection, type normalization, and YAML generation. When it finishes, return here and run:
wren context validate
wren context build
Report the model count and any validate warnings.
Memory recommendation: count models with wren context show | grep -c '^model:'. If >= 200, suggest pip install "wren-engine[memory]" + wren memory index (~800 MB). If < 200, skip.
Step 5 — Ready to explore (hand off)
Suggest 2–3 NL questions based on the discovered tables (e.g. for an orders schema: "How many orders last month?", "Top 5 customers by total"). Then end this skill: for day-to-day querying the agent should switch to the wren-usage skill.
Cross-skill routing
| Trigger | Skill |
|---|---|
| User mentions a SaaS source (HubSpot, Stripe, Salesforce, GitHub, Slack, …) | wren-dlt-connector |
| User has a connected DB but no MDL yet | wren-generate-mdl |
| User has MDL ready, wants to query | wren-usage |
| Anything else from-scratch | wren-onboarding (this skill) |
On error
Don't carry an error playbook here — surface connect.md#troubleshooting sections to the user. The doc covers:
wren: command not foundpip install … externally-managed-environment- Missing secret (
MissingSecretError) - Driver authentication failures
- Pydantic
ValidationError/ unknown datasource - Connection refused / firewall / cloud DB IP allow-list
wren context validatewarning categories
If you hit something not in the playbook, tell the user:
"I hit an error I don't know how to fix:
<error>. See https://docs.getwren.ai/oss/engine or open an issue at https://github.com/Canner/wren-engine/issues."
More from canner/wrenai
wren-generate-mdl
Generate a Wren MDL project by exploring a database with available tools (SQLAlchemy, database drivers, MCP connectors, or raw SQL). Guides agents through schema discovery, type normalization, and MDL YAML generation using the wren CLI. Use when: user wants to create or set up a new MDL, onboard a new data source, or scaffold a project from an existing database.
16wren-dlt-connector
Connect SaaS data (HubSpot, Stripe, Salesforce, GitHub, Slack, etc.) to Wren Engine for SQL analysis. Guides the user through the full flow: install dlt, pick a SaaS source, set up credentials, run the data pipeline into DuckDB, then auto-generate a Wren semantic project from the loaded data. Use this skill whenever the user mentions: connecting SaaS data, importing data from an API, dlt pipelines, loading HubSpot/Stripe/Salesforce/GitHub/Slack data, querying SaaS data with SQL, or setting up a new data source from a REST API. Also trigger when the user already has a dlt-produced DuckDB file and wants to create a Wren project from it.
16wren-usage
Wren Engine CLI workflow guide for AI agents. Answer data questions end-to-end using the wren CLI: gather schema context, recall past queries, write SQL through the MDL semantic layer, execute, and learn from confirmed results. Use when: user asks a data question, requests a report or analysis, asks about metrics, revenue, customers, orders, trends, or any business data; user says 'how many', 'show me', 'what is the', 'top N', 'compare', 'trend', 'growth', 'breakdown'; user wants to explore, analyze, filter, aggregate, or summarize data from a database; agent needs to query data, connect a data source, handle errors, or manage MDL changes via the wren CLI.
15