[FEATURE]: Add missing dbt commands or pass-through to native dbt CLI
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 50/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- typescript
- Domain
- cli, data-engineering
Research direction
Start in src/index.ts by reviewing the USAGE map and command dispatch, then read src/dbt-cli.ts and dbt-resolve.ts to understand the existing dbt binary resolution and run/configure flow. Compare the proposed allowlist or configuration approach with existing command behavior, including selector arguments. Done means supported missing commands can reach the configured native dbt CLI without changing the structured handling of curated commands.
Written by the indexing model from the issue text.
Description
Feature hasn't been suggested before.
- I have verified this feature I'm about to request hasn't been suggested before.
Describe the enhancement you want to request
Problem:
altimate-dbt provides a curated subset of dbt commands (16 total), but several standard and frequently-used dbt commands are missing. When a user tries to invoke one of these, the CLI returns a hard error instead of falling back to the already-configured dbt binary.
Current behavior:
bash
$ altimate-dbt seed
{ "error": "Unknown command: seed", "usage": { ... } }
$ altimate-dbt snapshot
{ "error": "Unknown command: snapshot", "usage": { ... } }
Missing commands (not in src/index.ts USAGE map):
| Command | dbt reference | Typical use case |
|---------------|------------------------------------|-----------------------------|
| seed | dbt seed | Load CSV seed files |
| snapshot | dbt snapshot | SCD Type-2 snapshots |
| source | dbt source freshness | Source freshness checks |
| docs | dbt docs generate / dbt docs serve | Documentation |
| clean | dbt clean | Clean target/ and packages |
| debug | dbt debug | Full connection diagnostics |
| list / ls | dbt list | Resource listing |
| parse | dbt parse | Parse project only |
| run-operation | dbt run-operation | Execute macros |
| clone | dbt clone | Clone models (1.6+) |
| retry | dbt retry | Retry failed models (1.6+) |
Additionally: even for implemented commands (build, run, test, compile), only single-model --model is supported. Native dbt selectors (--select, --exclude, --selector, tags) are not exposed.
Proposed solutions:
Option A: Add native wrappers for all commands. High maintenance as dbt evolves.
Option B (Recommended): Pass-through to configured dbt CLI. For any command not in the USAGE map, instead of returning Unknown command, delegate the full argument vector to the dbt binary that altimate-dbt init already resolved.
Implementation sketch:
ts
// src/index.ts — after the switch(cmd) block
default:
const dbt = getDbt() // from dbt-resolve.ts
const result = await run([cmd, ...rest])
return { stdout: result.stdout, stderr: result.stderr, passthrough: true }
Why this works well:
- altimate-dbt init already resolves the correct Python env and dbt binary (venv, conda, pyenv, pipx, uv, pdm, poetry, etc.)
- src/dbt-cli.ts already has run() and configure() for this purpose
- Users get full native dbt power for advanced commands, while still benefiting from structured output for the 16 curated commands
- No need to maintain JSON log parsers for every sub-command
Safety considerations:
- Could be gated behind a config flag (allowPassthrough: true)
- Or allowlisted to known-safe commands (seed, snapshot, docs, clean, source, debug, list, parse, run-operation, clone, retry)
Context:
- Source inspected: packages/dbt-tools/src/index.ts @ main (commit a490bd4)
- altimate-code version: 0.8.3
- dbt versions tested: 1.5, 1.7, 1.9, 1.11 (JSON log format changes across these already make the CLI fallback in dbt-cli.ts necessary for compile/execute/ls)
Would you accept a PR for Option B (pass-through with an allowlist)? If so, I can draft the implementation.
- Dominant language
- TypeScript
- Stars
- 813
- Forks
- 134
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 62
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from AltimateAI/altimate-code
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
AltimateAI/altimate-code#1323 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
AltimateAI/altimate-code#1288 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 92/100
AltimateAI/altimate-code#1285 ·
-
privacy: Altimate Base consent dialog no longer discloses persistent per-installation identifier Open
Difficulty 1/5 Under an hour Newbie friendliness 88/100
AltimateAI/altimate-code#1284 ·
-
Difficulty 2/5 Under an hour Newbie friendliness 72/100
AltimateAI/altimate-code#1283 ·
All issues in AltimateAI/altimate-code
Similar issues
-
Browser Waiting for: Product Owner
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
getsentry/sentry-javascript#24577 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
agilepathway/label-checker#640 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
copse-dev/agent-pane#2953 ·
-
agentic-workflows
Difficulty 1/5 Under an hour Newbie friendliness 85/100
githubnext/rig#534 ·
-
automation missing-model model-sync provider:pioneer
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
anomalyco/models.dev#7701 ·