Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: tianji-data-query description: > Use when the user asks about website traffic, pageviews, monitor status, survey feedback, telemetry events, feed channels, billing usage, application stats, or other Tianji platform data through read-only queries.
Tianji Analytics
Query any read-only data from the Tianji monitoring and analytics platform.
Configuration
Three values are required (provided via skill config):
| Variable | Description | |
|---|---|---|
TIANJI_BASE_URL | Tianji instance URL (e.g. https://tianji.example.com) | |
TIANJI_API_KEY | API key for authentication | |
TIANJI_WORKSPACE_ID | Default workspace ID |
Making API Requests
Before querying data, fetch and read the target instance's OpenAPI document. TIANJI_BASE_URL is the instance URL without the /open suffix:
curl --fail-with-body --silent --show-error \"${TIANJI_BASE_URL%/}/open/_document"
Confirm a successful response containing an OpenAPI JSON object with openapi and paths, not HTML or an error payload. If discovery fails, report the failure and stop API queries; do not substitute bundled paths or guess endpoints. The instance must enable OpenAPI to serve this document.
Use the live document to confirm the operation's method, path, path/query parameters, response schema, and authentication. Resolve referenced schemas ($ref), including required fields, types, formats, defaults, enums, and pagination. Resolve servers against the target instance before appending an operation path (normally /open; do not add it twice). Keep authenticated requests on the intended instance and send the API key via Authorization: Bearer ..., never in the URL or output.
Only GET requests are allowed, even though the live document also describes writes. If the requested operation has no exported GET route, report that limitation. Do not derive /open routes from dashboard tRPC procedures; those need separate maintained references and are outside this skill.
The target document takes precedence over bundled references and examples. Reuse it within the same task and target; fetch again after switching instances, an upgrade, or a schema-related failure. Parse successful API responses as JSON and report HTTP/API errors rather than treating them as query results.
Service Domains
api-endpoints.md and openapi-readonly.json are bundled snapshots for discovering likely operations. Their endpoint counts and schemas may differ from the target; confirm every selected operation against its live document.
| Domain | Endpoints | Typical Questions | |
|---|---|---|---|
| Website | 13 | Traffic stats, pageviews, geo distribution, Lighthouse scores | |
| Monitor | 9 | Uptime status, recent check data, monitor events | |
| Survey | 8 | Survey responses, result stats, AI categories | |
| Telemetry | 7 | Custom event counts, telemetry pageviews, metrics | |
| Billing | 7 | Usage quotas, subscription tier, credit balance | |
| Feed | 6 | Feed channels, event streams, feed states | |
| Application | 5 | App store reviews, app info, event stats | |
| AI/AIGateway | 5 | Gateway logs, model pricing, quota alerts | |
| Worker | 3 | Worker list, worker details, revisions | |
| Page | 2 | Status pages | |
| Workspace | 2 | Members, service counts | |
| Global | 1 | Platform configuration | |
| AuditLog | 1 | Audit trail |
Workflow
- Identify the service domain from the user's question
- Read the target's
/open/_documentand find the relevant exported GET operation; bundled references are lookup hints only - Construct the GET request using the live path and parameter schemas, actual resource IDs, and required authentication
- Parse the JSON response, redact sensitive fields, and summarize for the user
Common Scenarios
The routes below illustrate the bundled version. Confirm paths, parameters, timestamp formats, and pagination against the target document before using them.
Website traffic overview
GET /open/workspace/{workspaceId}/website/all
Pick the target website ID, then:
GET /open/workspace/{workspaceId}/website/{websiteId}/stats?startAt={timestamp}&endAt={timestamp}
Monitor health check
GET /open/workspace/{workspaceId}/monitor/all
Pick the target monitor ID, then:
GET /open/workspace/{workspaceId}/monitor/{monitorId}/getGET /open/workspace/{workspaceId}/monitor/{monitorId}/status
Survey results analysis
GET /open/workspace/{workspaceId}/survey/all
Pick the target survey ID, then:
GET /open/workspace/{workspaceId}/survey/{surveyId}/result/list?startAt={timestamp}&endAt={timestamp}&limit=50GET /open/workspace/{workspaceId}/survey/{surveyId}/stats?startAt={timestamp}&endAt={timestamp}
Feed event inspection
GET /open/workspace/{workspaceId}/feed/channels
Pick the channel ID, then:
GET /open/workspace/{workspaceId}/feed/{channelId}/fetchEventsByCursor?limit=20
Sensitive Data Handling
Some GET endpoints may return fields containing platform-stored secrets (e.g. modelApiKey, customModelBaseUrl in AI Gateway responses). Additionally, endpoints like workspace members, audit logs, and billing may contain PII or internal details.
Rules:
- Live schemas and API responses are not redacted by the bundled schema's filtering; always apply these rules yourself
- NEVER display
modelApiKey,apiKey,secret,token,password, orcredentialfields to the user - Redact or omit these fields when summarizing API responses
- When querying workspace members or audit logs, only surface non-sensitive metadata (names, roles, timestamps) unless the user explicitly requests full detail
Notes
- Use timestamp formats and metric
typeenums from the target operation; bundled examples use milliseconds since epoch - Follow the target operation's pagination contract; some endpoints use
cursorand returnnextCursor