# The dcupl skill

The dcupl plugin installs one skill, `dcupl`: a SKILL.md plus reference files for querying, model authoring, workflows, scripts and cloud sync. Claude loads it when you work with `*.dcupl.json`, `dcupl.lc.json`, API or workflow templates, or ask a dcupl-shaped question. It encodes how dcupl actually works: the right entry point for each task, the command patterns that compose well, and the non-obvious traps that cause silent failures.

## What it teaches

The skill covers six domains, each mapped to a CLI entry point.

### Data querying & analysis

Create a daemon, ingest CSV/JSON/NDJSON, run fn facets / aggregate / groupBy and query execute; reuse one daemon across follow-up questions; sanity-check numeric results.

`dcupl app`

### Model authoring & data binding

Define models, references, and composite keys; infer models from data with dcupl generate model --from; validate with dcupl validate.

`*.dcupl.json · dcupl.lc.json`

### Workflow build/test/deploy

Author node-graph workflows that respect the runtime budgets (defaults: 10s total / 5s request / 500ms script), then validate → test → deploy.

`*.workflow-v3.json`

### Scripts & scripted endpoints

Write custom operators, sort and endpoint scripts with the right per-mode parameters, register them as type: script resources, and declare scripted endpoints on a REST API template (api/\*.api.json).

`dcupl generate script · generate api`

### Cloud sync

3-way diff between local, server, and baseline; push/pull with conflict detection.

`dcupl files`

### Project setup & scaffolding

Scaffold projects, generate artifacts, and serve locally with the right structure from the start.

`dcupl init · generate · serve`

## Traps the skill avoids

Most dcupl mistakes are silent — the command succeeds, but the result is wrong or empty. The skill teaches the agent to recognize and route around these traps.

- > **Watch out:** Mis-typed CSV columns
  >
  > dcupl infers numbers and dates from CSV text. dcupl generate model --from scans every row; --auto-generate-properties alone types columns from the first row and checks only number columns against the rest, so a column that starts with a date or a word keeps that type. Zero-padded codes like 00123 stay string, but a numeric code such as a month 01 to 12 you want as int is a judgement call no inference makes. The skill samples rows when inferring and declares explicit types where inference can't be trusted, before numeric aggregation in particular.

- > **Watch out:** Typos that still return empty
  >
  > The CLI rejects a misspelled flag (UNKNOWN\_OPTION, usually with a "Did you mean" hint, or PARSE\_ERROR when the typo hides a required flag), model (MODEL\_NOT\_FOUND) or attribute in query execute, fn facets, fn aggregate and fn groupBy (ATTRIBUTE\_NOT\_FOUND, usually with a "Did you mean" hint). A wrong value, such as a different casing, still returns an empty result, and fn metadata --query and fn pivot do not check attribute names. The skill checks names and values against fn metadata and facets instead of trusting a guess.

- > **Watch out:** Workspace / CLI version mismatches
  >
  > Subtle, hard-to-diagnose failures. The skill checks dcupl version and reconciles before debugging downstream.

- > **Watch out:** Guessing field names
  >
  > Instead of inventing field names, the skill uses dcupl schemas get <Name> --example to see the real shape before authoring against it.

## Next steps

- [Recipes](/agentic/recipes) — See the skill in action, prompt by prompt
- [Setup](/agentic/setup) — Install the skill in Claude Code
- [Why it works](/agentic/why-it-works) — The design behind agent-readiness
- [Commands](/cli/commands) — The complete CLI command reference
