Agent skill

Rocky New CLI Command

by rocky-data in rocky-data/rocky

End-to-end checklist for adding a new Rocky CLI subcommand across the engine, JSON schema export, Dagster Pydantic types, Dagster resource wiring, and VS Code extension command.

Apache-2.0Auto-check passedTesting & QA

Install Rocky New CLI Command

skills CLI
$ npx skills add rocky-data/rocky --skill rocky-new-cli-command -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install rocky-data/rocky rocky-new-cli-command --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/rocky-new-cli-command .claude/skills/rocky-new-cli-command && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
rocky-new-cli-command
GitHub stars
304
Token cost
~1.4k tokens
SKILL.md length
508 words
Files
1
Skills in repo
22
Repo updated
First seen
Licence
Apache-2.0

At a glance

End-to-end checklist for adding a new Rocky CLI subcommand across the engine, JSON schema export, Dagster Pydantic types, Dagster resource wiring, and VS Code extension command.

  • Works in 7 steps: Engine: the command itself → Engine: the typed JSON output struct → Engine: tests → …
  • A new top-level CLI verb needs to be exposed
  • SKILL.md covers Prereq, Step 1 — Engine: the command…, Step 2 — Engine: the typed… and Step 3 — Engine: tests, plus 6 more sections
  • Calls just and cargo

What it does

Rocky New CLI Command is an agent skill from rocky-data/rocky. End-to-end checklist for adding a new Rocky CLI subcommand across the engine, JSON schema export, Dagster Pydantic types, Dagster resource wiring, and VS Code extension command. Use whenever a new top-level CLI verb needs to be exposed.

Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering End-to-end testing and Project scaffolding. It works with Dagster, Visual Studio Code, Pydantic and SQL. The repository describes itself as: A SQL transformation engine that type-checks your whole pipeline and catches breaking changes before they run — branches, replay, column-level lineage, compile-time contracts… The licence is Apache-2.0.

When your agent uses it

  • A new top-level CLI verb needs to be exposed
  • Tasks that involve End-to-end testing
  • Tasks that involve Project scaffolding

Example prompts

  • “/rocky-new-cli-command”

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Engine: the command itself
  2. Engine: the typed JSON output struct
  3. Engine: tests
  4. Codegen: regenerate bindings
  5. Dagster: consume the output
  6. VS Code: expose as a command
  7. Docs + engine README

What it can do on your machine

Read from SKILL.md and the folder at commit 46be77e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • just
    • cargo

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Rocky New CLI Command loads about 1.4k tokens when it runs. Until then it costs about 65 tokens; SKILL.md has 508 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~65
When it runs · the whole SKILL.md, loaded when a task matches
~1.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from rocky-data/rocky at commit 46be77e, republished under its Apache-2.0 licence (© rocky-data). 508 words, ~1,425 tokens.

Download SKILL.mdSave it as .claude/skills/rocky-new-cli-command/SKILL.md (or your agent's skills folder).
name
rocky-new-cli-command
description
End-to-end checklist for adding a new Rocky CLI subcommand across the engine, JSON schema export, Dagster Pydantic types, Dagster resource wiring, and VS Code extension command. Use whenever a new top-level CLI verb needs to be exposed.

Adding a new Rocky CLI command

A new CLI verb (e.g. rocky diff) touches 4 layers. The engine is the source of truth; Dagster and VS Code consume its JSON output. Do all of this in one PR.

Prereq

Read the related skills first:

  • rocky-codegen — for the Rust → Pydantic/TS cascade (you'll run just codegen).
  • engine/AGENTS.md → "JSON Output Schema" — has the full table of existing commands and their output structs.
  • integrations/dagster/AGENTS.md → "Adding support for a new Rocky CLI command" — the 9-step dagster-side checklist.

Step 1 — Engine: the command itself

engine/crates/rocky-cli/src/commands/<name>.rs      ← new file (impl)
engine/crates/rocky-cli/src/commands/mod.rs         ← register in the clap enum
engine/crates/rocky-cli/src/registry.rs             ← (if applicable) wire into dispatch

Conventions:

  • Use clap derive API — #[derive(clap::Args)] struct for the subcommand flags.
  • Support --output json|table (the shared OutputFormat enum).
  • Use tracing for logging, never println!/eprintln!.
  • Library errors via thiserror, binary/CLI errors via anyhow.
  • If the command needs a config, load rocky.toml via the shared helper (see how run.rs or plan.rs do it).
  • SQL identifiers MUST go through rocky-sql/validation.rs — never format! untrusted strings into SQL.

Step 2 — Engine: the typed JSON output struct

In engine/crates/rocky-cli/src/output.rs (or co-located in commands/<name>.rs):

rust
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct DiffOutput {
    pub version: String,
    pub command: String,
    pub diffs: Vec<DiffEntry>,
}

Then register it so export-schemas picks it up:

rust
// engine/crates/rocky-cli/src/commands/export_schemas.rs::schemas()
("diff", schema_for!(DiffOutput)),

Step 3 — Engine: tests

  • Unit tests live in the same file (#[cfg(test)] mod tests).
  • E2E integration tests go in engine/crates/rocky-core/tests/e2e.rs or a command-specific test file — they run DuckDB-backed with no credentials.
  • Run: cargo test -p rocky-cli + cargo test -p rocky-core --test e2e.

Step 4 — Codegen: regenerate bindings

From the monorepo root:

bash
just codegen

This rebuilds the engine in release mode, writes schemas/diff.schema.json, regenerates sdk/python/src/rocky_sdk/types_generated/diff_schema.py, and regenerates editors/vscode/src/types/generated/diff.ts. See the rocky-codegen skill for the details of what each sub-recipe does.

Show full SKILL.md (258 more words)Show less

Step 5 — Dagster: consume the output

9-step checklist (from integrations/dagster/AGENTS.md):

  1. *Output struct exists (step 2 above). ✓
  2. Registered in export_schemas.rs::schemas(). ✓
  3. just codegen-sdk ran. ✓
  4. Re-export the new type from integrations/dagster/src/dagster_rocky/types.py in the re-export section near the bottom — both the generated name (DiffOutput) and a legacy Python-flavored alias (DiffResult) for forward-compat.
  5. Add a route in parse_rocky_output() to dispatch "diff" → DiffOutput.
  6. just regen-fixtures from the monorepo root to capture a fresh fixture — or add a hand-crafted scenario dict to integrations/dagster/tests/scenarios.py if the playground POC doesn't produce that command naturally.
  7. Expose it as a *_json pytest fixture via integrations/dagster/tests/conftest.py.
  8. Add parsing tests in integrations/dagster/tests/test_types.py.
  9. Add a method to RockyResource in integrations/dagster/src/dagster_rocky/resource.py that calls the CLI and returns the parsed DiffOutput. Follow the existing pattern (see run, plan, or discover).

Step 6 — VS Code: expose as a command

editors/vscode/src/commands/<group>.ts     ← add handler (group by concern: ops, run, inspect, ...)
editors/vscode/src/commands/index.ts       ← register in the single registration point
editors/vscode/package.json                ← declare the command in `contributes.commands`

Conventions:

  • Use cp.execFile() for subprocess calls (no shell injection — never cp.exec()).
  • Wrap long commands with vscode.window.withProgress().
  • The subprocess helper src/rockyCli.ts already exists — reuse it.
  • Type the result as the generated interface (import { DiffOutput } from '../types/generated').
  • If the command takes editor context (current file), get it via vscode.window.activeTextEditor.
  • Follow the existing command pattern — see commands/run.ts or commands/ops.ts for templates.

Step 7 — Docs + engine README

  • docs/src/content/docs/reference/commands/<name>.md (Astro/Starlight) — user-facing reference.
  • engine/README.md and monorepo README.md if the command is user-prominent enough to warrant a top-level mention.

Final check — run everything

bash
just test     # cargo test + pytest + vitest
just lint     # cargo clippy/fmt + ruff + eslint
just codegen  # idempotency check — should produce no diff

The codegen-drift CI workflow will fail the PR if step 4 wasn't run (or produced stale output).

Commit style

One PR, but feel free to split into a few focused commits:

feat(engine/rocky-cli): add `rocky diff` subcommand
feat(engine/rocky-cli): add DiffOutput schema
chore(codegen): regenerate bindings for diff command
feat(dagster): add RockyResource.diff() + DiffOutput re-export
feat(vscode): add rocky.diff command
docs(engine): document `rocky diff`

© rocky-data, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/rocky-new-cli-command of rocky-data/rocky.

Open the folder on GitHubat commit 46be77e

Compare with similar skills

Rocky New CLI Command next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Rocky New CLI Command compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Rocky New CLI Command this skillrocky-data/rocky304—~1.4kAutomated safety check: PassApache-2.0
Pure Lsp SQL E2Efinos/legend-engine112—~1.8kAutomated safety check: PassApache-2.0
Phy Test Data FactoryLeoYeAI/openclaw-master-skills2.2k—~5.5kAutomated safety check: PassApache-2.0
Add Full Slicefullstackhero/dotnet-starter-kit6.8k—~783Automated safety check: PassMIT
sfdx-hardis Training End-to-End Testhardisgroupcom/sfdx-hardis401—~2.6kAutomated safety check: NotesAGPL-3.0
Uitestmicrosoft/vscode-java-dependency199—~1.3kAutomated safety check: PassMIT

Similar skills

  • Pure Lsp SQL E2E

    finos/legend-engine

    Runs cases from the legend-engine SQL e2e parity corpus (TestPostgresParity, ~2300 SQL cases compared against a real Postgres) through the warm interpreted Pure LSP with pure-sql-e2e, so edits to…

    112 GitHub stars~1.8k tokensUpdated today
    Testing & QAAuto-check passed
  • Phy Test Data Factory

    LeoYeAI/openclaw-master-skills

    Schema-driven test data factory generator. An agent skill from LeoYeAI/openclaw-master-skills.

    2.2k GitHub stars~5.5k tokensUpdated 2 mo ago
    Testing & QAAuto-check passed
  • Add Full Slice

    fullstackhero/dotnet-starter-kit

    Build a capability end-to-end — backend vertical slice (Contracts→handler→validator→endpoint) AND the React page wired to it.

    6.8k GitHub stars~783 tokensUpdated 8 days ago
    Testing & QAAuto-check passed
  • sfdx-hardis Training End-to-End Test

    hardisgroupcom/sfdx-hardis

    Walks the sfdx-hardis training course end to end as a learner would, against a real Developer Edition org and fork, fixing broken steps and screenshots that no longer match.

    401 GitHub stars~2.6k tokensUpdated today
    Testing & QAAuto-check: notes
  • Uitest

    microsoft/vscode-java-dependency

    Official

    Write, update, run, or debug vscode-java-dependency (Project Manager for Java) UI/E2E tests using AutoTest YAML plans.

    199 GitHub stars~1.3k tokensUpdated 5 days ago
    Testing & QAAuto-check passed
  • Blockless Extension E2E

    FreakStudioCN/mpy-hardware-extension

    Run and debug the Blockless VS Code extension release gate: CI-equivalent API and extension tests, V0 protocol smoke, live DeepSeek full-stack e2e, VSIX packaging, local reinstall, direct…

    132 GitHub stars~1.2k tokensUpdated 10 days ago
    Testing & QAAuto-check: notes

More from rocky-data/rocky

All 22 skills in this repo
  • Fivetran

    rocky-data/rocky

    Fivetran REST API reference for Rocky's source adapter. An agent skill from rocky-data/rocky.

    304 GitHub stars~914 tokensUpdated today
    Auto-check passed
  • Databricks

    rocky-data/rocky

    Databricks REST API and SQL reference for Rocky's warehouse adapter.

    304 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Rocky Codegen

    rocky-data/rocky

    Rocky CLI JSON-output schema cascade. An agent skill from rocky-data/rocky.

    304 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Rocky Dev

    rocky-data/rocky

    Top-level router for Rocky development tasks. An agent skill from rocky-data/rocky.

    304 GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Rocky Dsl Change

    rocky-data/rocky

    Rocky DSL (.rocky file) cross-subproject cascade. An agent skill from rocky-data/rocky.

    304 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Rocky New Adapter

    rocky-data/rocky

    Adding a new warehouse or source adapter crate to the Rocky engine.

    304 GitHub stars~2k tokensUpdated today
    Auto-check passed

Questions about Rocky New CLI Command

What does Rocky New CLI Command do?

End-to-end checklist for adding a new Rocky CLI subcommand across the engine, JSON schema export, Dagster Pydantic types, Dagster resource wiring, and VS Code extension command. Rocky New CLI Command is an agent skill from rocky-data/rocky. End-to-end checklist for adding a new Rocky CLI subcommand across the engine, JSON schema export, Dagster Pydantic types, Dagster resource wiring, and VS Code extension command.

When should I use Rocky New CLI Command?

Rocky New CLI Command fits situations like: A new top-level CLI verb needs to be exposed; tasks that involve End-to-end testing; tasks that involve Project scaffolding.

How do I install Rocky New CLI Command in Claude Code?

Run `npx skills add rocky-data/rocky --skill rocky-new-cli-command -a claude-code`. Or copy the skill folder (.agents/skills/rocky-new-cli-command in rocky-data/rocky) into .claude/skills/rocky-new-cli-command in your project. Claude Code loads it when a task matches its description.

How do I install Rocky New CLI Command in Codex?

Run `npx skills add rocky-data/rocky --skill rocky-new-cli-command -a codex`. Or copy the skill folder (.agents/skills/rocky-new-cli-command in rocky-data/rocky) into .agents/skills/rocky-new-cli-command in your project. Codex loads it when a task matches its description.

Can I use Rocky New CLI Command in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rocky-data/rocky --skill rocky-new-cli-command -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rocky-new-cli-command, .gemini/skills/rocky-new-cli-command, .github/skills/rocky-new-cli-command and .opencode/skills/rocky-new-cli-command in your project.

What does Rocky New CLI Command need to run?

Going by SKILL.md and its folder, Rocky New CLI Command needs the command-line tools its instructions call (just and cargo).

Does Rocky New CLI Command access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Rocky New CLI Command safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Rocky New CLI Command use?

Rocky New CLI Command is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Rocky New CLI Command use?

About 1.4k tokens (SKILL.md is roughly 5.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Rocky New CLI Command?

Skills that share tags, products or a category with Rocky New CLI Command: Pure Lsp SQL E2E (finos/legend-engine, 112 stars), Phy Test Data Factory (LeoYeAI/openclaw-master-skills, 2.2k stars), Add Full Slice (fullstackhero/dotnet-starter-kit, 6.8k stars) and sfdx-hardis Training End-to-End Test (hardisgroupcom/sfdx-hardis, 401 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Rocky New CLI Command?

rocky-data (a GitHub organization) maintains it in rocky-data/rocky, which has 304 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 8, 2026.

Source: rocky-data/rocky on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.