Databricks Dbsql
databricks/databricks-agent-skills
Databricks SQL (DBSQL) advanced features and SQL warehouse capabilities.
“Tokio,”
$ npx skills add rocky-data/rocky --skill rust-async-tokio -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install rocky-data/rocky rust-async-tokio --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .claude/skills && cp -r skills-src/engine/.claude/skills/rust-async-tokio .claude/skills/rust-async-tokio && rm -rf skills-srcUse ~/.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/
Install the "rust-async-tokio" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-async-tokio into .claude/skills/rust-async-tokio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-async-tokio", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-async-tokioType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add rocky-data/rocky --skill rust-async-tokio -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install rocky-data/rocky rust-async-tokio --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .agents/skills && cp -r skills-src/engine/.claude/skills/rust-async-tokio .agents/skills/rust-async-tokio && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "rust-async-tokio" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-async-tokio into .agents/skills/rust-async-tokio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-async-tokio", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rocky-data/rocky --skill rust-async-tokio -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install rocky-data/rocky rust-async-tokio --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/engine/.claude/skills/rust-async-tokio .cursor/skills/rust-async-tokio && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "rust-async-tokio" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-async-tokio into .cursor/skills/rust-async-tokio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-async-tokio", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/rocky-data/rocky.git --path engine/.claude/skills/rust-async-tokio--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add rocky-data/rocky --skill rust-async-tokio -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install rocky-data/rocky rust-async-tokio --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/engine/.claude/skills/rust-async-tokio .gemini/skills/rust-async-tokio && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "rust-async-tokio" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-async-tokio into .gemini/skills/rust-async-tokio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-async-tokio", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install rocky-data/rocky rust-async-tokioInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add rocky-data/rocky --skill rust-async-tokio -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .github/skills && cp -r skills-src/engine/.claude/skills/rust-async-tokio .github/skills/rust-async-tokio && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "rust-async-tokio" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-async-tokio into .github/skills/rust-async-tokio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-async-tokio", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add rocky-data/rocky --skill rust-async-tokio -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install rocky-data/rocky rust-async-tokio --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/rocky-data/rocky.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/engine/.claude/skills/rust-async-tokio .opencode/skills/rust-async-tokio && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "rust-async-tokio" agent skill from https://github.com/rocky-data/rocky/tree/main/engine/.claude/skills/rust-async-tokio into .opencode/skills/rust-async-tokio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "rust-async-tokio", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
rust-async-tokioRust Async Tokio is a skill in rocky-data/rocky (304 stars). Its SKILL.md is about 2k tokens. Licence: Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 46be77e. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
cargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Rust Async Tokio loads about 2k tokens when it runs. Until then it costs about 6 tokens; SKILL.md has 806 words of instructions outside code blocks.
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.
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.
The full file from rocky-data/rocky at commit 46be77e, republished under its Apache-2.0 licence (© rocky-data). 806 words, ~2,011 tokens.
.claude/skills/rust-async-tokio/SKILL.md (or your agent's skills folder).Rocky is async end-to-end. Tokio is the only runtime; there's a single #[tokio::main] entrypoint at engine/rocky/src/main.rs:471. Adapter I/O (Databricks REST, Snowflake REST, Fivetran REST, Valkey, webhooks) all runs on the same runtime.
tokio = { version = "1", features = ["full"] } (from engine/Cargo.toml). The "full" feature is deliberate: we use macros, rt-multi-thread, time, fs, net, sync, and process across the workspace, and pinning a narrower feature set per crate creates friction when async code moves between crates.engine/rocky/src/main.rs:471 has #[tokio::main] on async fn main() -> anyhow::Result<()>. Library crates never spawn their own runtime — they take &self on async methods and trust the binary to drive the reactor.tokio re-export. Don't cargo add tokio in a sub-crate; inherit from [workspace.dependencies] in engine/Cargo.toml.Every async trait uses #[async_trait] from the async-trait crate (async-trait = "0.1" in [workspace.dependencies]). This is a hard rule from engine/CLAUDE.md.
// DO — matches the pattern used throughout rocky-adapter-sdk
#[async_trait::async_trait]
pub trait WarehouseAdapter: Send + Sync {
async fn execute(&self, sql: &str) -> Result<StatementResult, AdapterError>;
async fn describe_table(&self, qname: &QualifiedName) -> Result<TableSchema, AdapterError>;
}
// DON'T — native async-in-traits still has object-safety gaps in 2024 edition
pub trait WarehouseAdapter: Send + Sync {
async fn execute(&self, sql: &str) -> Result<StatementResult, AdapterError>;
}Concrete examples: crates/rocky-adapter-sdk/src/traits.rs has four #[async_trait] trait definitions at lines 219, 333, 346, 372 — those are the shapes adapters must match.
When in doubt, read how rocky-databricks or rocky-fivetran implement the trait — both are full end-to-end examples.
Rocky uses adaptive concurrency on remote calls that can be rate-limited. The canonical implementation is crates/rocky-databricks/src/throttle.rs::AdaptiveThrottle:
increase_interval successes.on_rate_limit() (triggered by 429 / 503 / "TEMPORARILY_UNAVAILABLE"), halve the current concurrency down to min_concurrency.min_concurrency (≥ 1) or above max_concurrency.AtomicUsize + AtomicU64 inside an Arc<ThrottleInner>, so .clone() shares state across tasks. No locks on the hot path.When to reach for this pattern: any new adapter that talks to a rate-limited remote API. Don't re-invent it; either reuse AdaptiveThrottle directly (if it's a Databricks-family API) or copy its shape. The tests at crates/rocky-databricks/src/throttle.rs:122 cover the invariants you'd want to preserve (starts at max, halves on rate limit, never below min, never above max, clone shares state).
How to wire it:
AdaptiveThrottle per warehouse/endpoint at adapter construction.tokio::sync::Semaphore whose available_permits() is refreshed from throttle.current() before each batch.throttle.on_success()throttle.on_rate_limit() and retry after a small delaytracing, not println!Hard rule from engine/CLAUDE.md: use tracing, not println! or eprintln!. The subscriber is initialized in crates/rocky-observe/src/tracing_setup.rs and emits structured JSON lines when RUST_LOG / tracing_subscriber::EnvFilter is set.
use tracing::{info, warn, error, debug};
// DO — structured fields, no interpolation in the message
info!(
connector_id = %connector.id,
table_count = tables.len(),
"discover completed"
);
warn!(
from = old,
to = new,
"adaptive throttle: rate limit detected, reducing concurrency"
);
// DON'T — stringify values into the message
info!("discover completed: connector={}, tables={}", connector.id, tables.len());%value → uses Display?value → uses Debugfield = literal → treats as JSON literalwarn! is the level rocky-databricks/src/throttle.rs uses for rate-limit detection — follow that pattern for any adaptive-concurrency event you add.
Any network call needs a timeout. Use tokio::time::timeout:
use std::time::Duration;
use tokio::time::timeout;
let result = timeout(Duration::from_secs(30), client.execute(sql))
.await
.context("databricks execute timed out after 30s")??;
// ^^ one ? for Elapsed → anyhow, one ? for the inner ResultRule of thumb: if a function makes an HTTP/SQL/network call and does not have an outer timeout, it's a bug waiting to happen. The anyhow .context layer is what surfaces the timeout reason into the Dagster event log — don't skip it.
select!tokio::select! is the right tool when you want to race two futures (e.g. "wait for this statement to finish or for the user to ctrl-C"). Guidelines:
tokio::select! docs on which tokio primitives are cancel-safe and which aren't. (Hint: AsyncRead::read_buf is not cancel-safe.)tokio::sync::oneshot for "signal this future to stop" over manual flags.MutexGuard across an .await in any select! branch.| Situation | Use |
|---|---|
| Fan out N tasks and wait for all | futures::future::try_join_all |
| Fan out N tasks, take first result | futures::future::select_ok |
| Fire-and-forget background worker | tokio::spawn(...) — but the spawned future must own its data ('static), and you must handle its JoinHandle if it can fail |
| Parallel CPU-bound chunks | tokio::task::spawn_blocking — not spawn. Blocking the reactor starves other adapters. |
duckdb and sqlparser operations are CPU-bound and should be wrapped in spawn_blocking if they're called from an async context on a hot path.
| Anti-pattern | Why |
|---|---|
std::thread::spawn in async code | Bypasses the runtime; task never wakes correctly. Use tokio::spawn or spawn_blocking. |
std::sync::Mutex held across .await | Can deadlock the reactor. Use tokio::sync::Mutex or (better) restructure to avoid holding the lock. |
Per-crate #[tokio::main] or nested runtimes | There's exactly one runtime, driven by engine/rocky/src/main.rs. Libraries don't own the runtime. |
futures::executor::block_on inside async code | Nested block_on will panic under tokio::main. |
async fn foo(...) -> Box<dyn Future<...>> | Use #[async_trait] for trait methods or impl Future for free functions. |
Spinning on throttle.current() in a busy loop | Drive concurrency off a Semaphore; the throttle is a signal, not a gate. |
rust-error-handling — async errors follow the same two-tier model (library → thiserror, CLI → anyhow with .context).rust-clippy-triage — the async-family clippy lints (e.g. clippy::unused_async, clippy::await_holding_lock) fire in this surface area.rust-unsafe — duckdb calls are sync/FFI and need spawn_blocking, not direct await.© 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
Just SKILL.md in engine/.claude/skills/rust-async-tokio of rocky-data/rocky.
Open the folder on GitHubat commit 46be77e
Rust Async Tokio 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Rust Async Tokio this skillrocky-data/rocky | 304 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Databricks Dbsqldatabricks/databricks-agent-skills | 345 | 1 repos | ~2.8k | Automated safety check: Pass | Custom licence | |
| Altimate Data Warehouse DelegateAltimateAI/data-engineering-skills | 128 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Optimizing Databricks SQLAltimateAI/data-engineering-skills | 128 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Sea Orm 2FlyinPancake/yoink | 112 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Qdrant Vector SearchOrchestra-Research/AI-Research-SKILLs | 13k | 5 repos | ~3.4k | Automated safety check: Pass | MIT |
databricks/databricks-agent-skills
Databricks SQL (DBSQL) advanced features and SQL warehouse capabilities.
AltimateAI/data-engineering-skills
Delegates dbt and warehouse tasks such as lineage, migrations and cost attribution to the altimate-code CLI agent and relays its answer back.
AltimateAI/data-engineering-skills
Analyze DBSQL queries, including SQL embedded in notebooks (spark.sql(...), %sql cells), for anti-patterns, lint issues, and performance problems, using Databricks-specific dialect and platform…
FlyinPancake/yoink
Expert guidance for SeaORM 2.0, Rust's async ORM with strongly-typed columns, nested ActiveModels, Entity Loader API, and entity-first workflow.
Orchestra-Research/AI-Research-SKILLs
Explains how to run Qdrant, a Rust vector database, for RAG and semantic search, covering collections, points, distance metrics and filtered or batched queries.
streamband/hydra-srt
A skill your agent uses when designing or evolving Hydra platform architecture across Elixir/Phoenix, SQLite, VictoriaMetrics/VictoriaLogs analytics, native/Rust, and runtime boundaries.
rocky-data/rocky
Fivetran REST API reference for Rocky's source adapter. An agent skill from rocky-data/rocky.
rocky-data/rocky
Databricks REST API and SQL reference for Rocky's warehouse adapter.
rocky-data/rocky
Rocky CLI JSON-output schema cascade. An agent skill from rocky-data/rocky.
rocky-data/rocky
Top-level router for Rocky development tasks. An agent skill from rocky-data/rocky.
rocky-data/rocky
Rocky DSL (.rocky file) cross-subproject cascade. An agent skill from rocky-data/rocky.
rocky-data/rocky
Adding a new warehouse or source adapter crate to the Rocky engine.
Works with
Categories
Run `npx skills add rocky-data/rocky --skill rust-async-tokio -a claude-code`. Or copy the skill folder (engine/.claude/skills/rust-async-tokio in rocky-data/rocky) into .claude/skills/rust-async-tokio in your project. Claude Code loads it when a task matches its description.
Run `npx skills add rocky-data/rocky --skill rust-async-tokio -a codex`. Or copy the skill folder (engine/.claude/skills/rust-async-tokio in rocky-data/rocky) into .agents/skills/rust-async-tokio in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rocky-data/rocky --skill rust-async-tokio -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rust-async-tokio, .gemini/skills/rust-async-tokio, .github/skills/rust-async-tokio and .opencode/skills/rust-async-tokio in your project.
Going by SKILL.md and its folder, Rust Async Tokio needs the command-line tools its instructions call (cargo).
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.
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.
Rust Async Tokio 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.
About 2k tokens (SKILL.md is roughly 8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Rust Async Tokio: Databricks Dbsql (databricks/databricks-agent-skills, 345 stars), Altimate Data Warehouse Delegate (AltimateAI/data-engineering-skills, 128 stars), Optimizing Databricks SQL (AltimateAI/data-engineering-skills, 128 stars) and Sea Orm 2 (FlyinPancake/yoink, 112 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.