From dataspoke
Connects Claude to a deployed DataSpoke service by configuring API base URL and token, or verifies existing access. Run before other dataspoke-* skills.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dataspoke:dataspoke-access [set | status][set | status]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Establish and inspect this plugin's access to a **deployed** DataSpoke service. All other
Establish and inspect this plugin's access to a deployed DataSpoke service. All other
dataspoke-* skills read the access config this skill writes. It touches only the public API
(/ready, /api/v1/auth/*) — never cluster internals.
Access lives in ~/.dataspoke/config.json (chmod 600):
{
"api_base_url": "https://dataspoke.example.com/api/v1",
"token": "dsk_…",
"redoc_url": "https://dataspoke.example.com/redoc",
"ui_url": "https://dataspoke.example.com"
}
Environment variables override the file when present: DATASPOKE_API_URL, DATASPOKE_API_TOKEN.
Resolve the mode from the argument (set / status); if absent, run status when a config
already exists, otherwise set.
status — verify current accessdataspoke-api GET /ready — deployment reachable and healthy.dataspoke-api GET /auth/me — confirm identity and effective role./auth/me returns 401, tell the user to run
set.set — configure accessCollect the base URL. Ask the user for the deployment origin (e.g.
https://dataspoke.example.com, or the dev http://api.<INGRESS_IP>.nip.io). Derive
redoc_url = <origin>/redoc, ui_url = <origin>, api_base_url = <origin>/api/v1.
Obtain a token. Ask whether the user will paste an existing dsk_… token or mint a
new one from credentials.
dsk_… value directly.# 1) login -> short-lived access token
curl -sS -X POST "<origin>/api/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{"email":"<email>","password":"<password>"}'
# → {"access_token":"…","expires_in":…}
# 2) mint a long-lived dsk_ token (Authorization: Bearer <access_token>)
curl -sS -X POST "<origin>/api/v1/auth/api-tokens" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{"name":"claude-code-plugin"}'
# → {"token":"dsk_…","id":…,"name":…,"role_snapshot":…} (token shown ONCE)
Capture token from the second response immediately — it is never retrievable again.
Never echo the password back; do not store it.Write the config. Restrict the directory before writing the file, so the token is never briefly readable by other local users during the write:
mkdir -p ~/.dataspoke && chmod 700 ~/.dataspoke
# write config.json with api_base_url, token, redoc_url, ui_url
chmod 600 ~/.dataspoke/config.json
Verify with dataspoke-api GET /auth/me and report the resolved role. Remind the user
that write operations (ingestion source CRUD, validation conf/result writes) require an
Editor or Admin role; a Reader token returns 403 READ_ONLY_ROLE.
dsk_ prefix marks the token for leak detection — treat it like a password; it belongs
only in ~/.dataspoke/config.json (mode 600) or the env override, never in committed files.set) and revoke old ones via
dataspoke-api DELETE /auth/api-tokens/{id} (list them with GET /auth/api-tokens).npx claudepluginhub selhorys/dataspoke-baseline --plugin dataspokeAnswers questions about DataSpoke Governance public API metrics and makes read calls against the deployed instance's OpenAPI contract.
Guides DataHub environment setup: CLI installation, authentication, connectivity verification, and agent configuration profiles.
Guides Hex API authentication setup with OAuth Bearer tokens: generate tokens, configure .env vars, verify via TypeScript/curl for data projects.