redshift-api
Run SQL against Amazon Redshift — submit statements, poll status, page through results, and browse databases/schemas/tables.
Skill by thimslugga
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/thimslugga-redshift-api
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend, cloud, data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Shell scripts
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/redshift-api
What's inside
- Skill name
redshift-api- Description
- Run SQL against Amazon Redshift — submit statements, poll status, page through results, and browse databases/schemas/tables. Use this whenever the user wants to query Redshift (provisioned cluster or Serverless), ask "what tables are in this schema", check a query's status, or mentions `redshift-data`, a Redshift cluster identifier / workgroup name, or a `redshift-data.{region}.amazonaws.com` endpoint. Always start from this skill when interacting with this service — its bundled scripts and recipes are the fastest path.
- License
- MIT
- Instructions
- 221 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Instructions call the network
Files (3)
- SKILL.md
- api.md · references/
- rs_query.sh · scripts/
SKILL.md (first lines)
In the Amazon Redshift Data API, every call is a `POST` to `https://redshift-data.<region>.amazonaws.com/` with
`Content-Type: application/x-amz-json-1.1` and `X-Amz-Target: RedshiftData.<Action>` — there are no
REST-style paths. The API is fully asynchronous: submit a statement, get back an `Id`, poll
`DescribeStatement` until done, then page results with `GetStatementResult` —
`scripts/rs_query.sh` (operation 1) drives that loop for you. The same calls work against
provisioned clusters and Serverless; only the connection-target field differs.
## Request setup
Authentication is handled by the runtime — requests to this API are signed with credentials
configured for the workspace, so there is nothing to set up. Do not try to obtain AWS keys or sign
requests yourself. A persistent `AccessDeniedException` means the credential isn't configured for
this workspace — report that instead of debugging auth.
Two pieces of configuration are real and required:
**1. Region** — it's part of the endpoint hostname:
```bash
export AWS_DEFAULT_REGION="us-east-1" # the region your cluster / workgroup is in
```
**2. Connection target** — which cluster/workgroup and database the Data API connects to. Pick one
and put the matching JSON fields in `RS_TARGET`; the recipes below merge it into each request body:
- **Serverless** — pass `WorkgroupName`. The configured identity is mapped to a database user.
Simplest.
- **Provisioned, temporary credentials** — pass `ClusterIdentifier` and `DbUser`. The Data API
resolves database credentials under the hood.
- **Provisioned or Serverless, Secrets Manager** — pass `SecretArn` pointing to a secret that holds
the database login.
Set whichever applies once:
```bash
export RS_DATABASE="dev"
# Serverless:
export RS_TARGET='{"WorkgroupName": "my-workgroup"}'
# — or provisioned + temp creds:
# export RS_TARGET='{"ClusterIdentifier": "my-cluster", "DbUser": "my_user"}'
# — or either + Secrets Manager:
# export RS_TARGET='{"ClusterIdentifier": "my-cluster", "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:rs-creds-AbCdEf"}'
```
**The helper used below.** One function wraps the endpoint, the headers, and the action name. The
`Authorization` header is a placeholder — the runtime replaces it with a real signature.
```bash
rsapi() {
local action="$1"
curl -sS "https://redshift-data.${AWS_DEFAULT_REGION}.amazonaws.com/" \
-H "Content-Type: application/x-amz-json-1.1" \
-H "X-Amz-Target: RedshiftData.${action}" \
-H "Authorization: placeholder" \
-d "${2:?rsapi needs a JSON body as the second argument}"
}
```
**Sanity check** — list databases. A `200` with a `Databases` array confirms the workspace is wired
up and the connection target is right. An error names which layer failed.
```bash
rsapi ListDatabases "$(jq -n --argjson t "$RS_TARGET" --arg db "$RS_DATABASE" \
'$t + {Database: $db}')" | jq .
```
## Core operations
Every action that connects to the database takes the same merged target body —
`$t + {Database: $db, ...}`. Errors come back as `{"__type": "<Exception>", "message": "..."}`
instead of the expected shape; on any call, an absent top-level field (`Id`, `Status`, `Records`, …)
means you got the error envelope — print it and stop.
### 1. Run a query (`scripts/rs_query.sh`)
Run SQL through the bundled script (path is relative to this skill's directory): it submits with
`ExecuteStatement`, polls `DescribeStatement` to a terminal state, pages `GetStatementResult` on
`NextToken`, and decodes the typed one-key cell objects.
```bash
scripts/rs_query.sh \
'SELECT event_name, COUNT(*) AS n FROM public.events
WHERE event_date >= :start GROUP BY 1 ORDER BY 2 DESC LIMIT 20' \
--param start=2024-01-01 --name top-events
```
- SQL is one argument (or stdin). Instance specifics come from `AWS_DEFAULT_REGION` / `RS_TARGET` /
`RS_DATABASE` above; `--database` overrides the database.
- `--param NAME=VALUE` (repeatable) binds `:NAME` placeholders — values are always strings; the
database casts them. `--name` sets `StatementName` so the query shows up in `ListStatements`.
- `--max-rows N` caps fetched rows (default 10000, `0` = everything); `--json` emits one JSON object
per row instead of TSV with a header. Statement id, status, duration, and row counts go to stderr.
- Exit codes: `0` success, `1` submit failed or SQL `FAILED`/`ABORTED` (the API's own message on
stderr), `2` gave up waiting after `--max-wait` seconds (default 600) — the statement id is on
stderr; resume it with operation 2.
If the script errors, read it — it's plain `curl` + `jq` — and debug against `references/api.md`.
For `BatchExecuteStatement` and sub-statement results, session reuse (`SessionKeepAliveSeconds` /
`SessionId`), `ResultFormat: CSV`, cancelling, or catalog browsing, use the actions below.
### 2. Resume a statement by id (`DescribeStatement` → `GetStatementResult`)
When the script exits 2 (timeout) or you have a statement id from elsewhere, poll and fetch
directly:
```bash
rsapi DescribeStatement "$(jq -n --arg id "$ID" '{Id: $id}')" \
| jq '{Status, Duration, ResultRows, HasResultSet, Error}'
rsapi GetStatementResult "$(jq -n --arg id "$ID" '{Id: $id}')" \
| jq -r '.Records[]? | [.[] | if .isNull then null else to_entries[0].value end] | @tsv'
```
- `Status` ∈ `SUBMITTED`, `PICKED`, `STARTED`, `FINISHED`, `FAILED`, `ABORTED`. Only `FINISHED`
with `HasResultSet: true` has rows; `FAILED` carries the SQL error in `.Error`. `Duration` is
**nanoseconds**.
- Result cells are typed one-key objects (see the gotcha under Error handling); column names/types
are in `.ColumnMetadata` on the first page. Further pages follow `NextToken` — no page-size knob;
`DescribeStatement.ResultRows` is the total up front.From thimslugga/agent-plugins, MIT.
More from thimslugga/agent-plugins
- 0.570score
adr
thimslugga
Create and maintain Architecture Decision Records (ADRs).
SkillAFreshness: AClaude Code +9 - 0.567score
golang-pro
thimslugga
Write, edit, update, or review Go code to a consistent professional standard: gofumpt-formatted, go vet clean, golangci-lint clean under a curated config.
SkillAFreshness: AClaude Code +9 - 0.565score
gauntlet-loop
thimslugga
Turns any goal into one short, paste-ready "gauntlet loop" prompt - a prompt that makes an agent set a concrete quality bar, split the work into small…
SkillAFreshness: AClaude Code +9 - 0.565score
ast-grep-outline
thimslugga
Use when exploring or modifying a codebase and you need a cheap structural map of files, directories, imports, exports, or direct members before reading full…
SkillAFreshness: AClaude Code +9 - 0.540score
impeccable
thimslugga
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or…
SkillAFreshness: AClaude Code +9 - 0.529score
ai-firstify
thimslugga
Analyze, re-engineer, or bootstrap projects to align with AI-first design principles.
SkillBFreshness: BClaude Code +9 - 0.529score
migrate-agent-plugin
thimslugga
Migrate an existing Claude Code, Codex, Cursor, Kiro, Copilot, VS Code, or other client-specific agent plugin to the portable Agent Plugins v1 structure while…
SkillBFreshness: BClaude Code +9 - 0.524score
economist-style
thimslugga
Apply The Economist style guide to written content.
SkillBFreshness: BClaude Code +9 - 0.524score
autoresearch
thimslugga
'Autonomous iterative experimentation loop for any programming task.
SkillBFreshness: BClaude Code +9 - 0.524score
grill-me
thimslugga
Structured questioning to reach shared understanding before action.
SkillBFreshness: BClaude Code +9 - 0.524score
handoff
thimslugga
Compacts the current conversation into a handoff document so a fresh agent can continue the work in a new session.
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 31, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/thimslugga/agent-plugins
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from thimslugga
- 0.570score
adr
thimslugga
Create and maintain Architecture Decision Records (ADRs).
SkillAFreshness: AClaude Code +9 - 0.567score
golang-pro
thimslugga
Write, edit, update, or review Go code to a consistent professional standard: gofumpt-formatted, go vet clean, golangci-lint clean under a curated config.
SkillAFreshness: AClaude Code +9 - 0.565score
ast-grep-outline
thimslugga
Use when exploring or modifying a codebase and you need a cheap structural map of files, directories, imports, exports, or direct members before reading full…
SkillAFreshness: AClaude Code +9 - 0.565score
gauntlet-loop
thimslugga
Turns any goal into one short, paste-ready "gauntlet loop" prompt - a prompt that makes an agent set a concrete quality bar, split the work into small…
SkillAFreshness: AClaude Code +9 - 0.540score
impeccable
thimslugga
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or…
SkillAFreshness: AClaude Code +9 - 0.529score
aws-iam
thimslugga
Verified corrections for IAM behaviors that AI agents frequently get wrong — policy evaluation edge cases, trust policy gotchas, STS session limits…
SkillBFreshness: BClaude Code +9
Cite this page
redshift-api skill. Agent Mart. https://agentmart.dev/skills/thimslugga-redshift-api (last updated 2026-10-24)