---
name: q-kdb-code-review
description: AI-powered code review for Q/kdb+ — catch bugs in the most terse language in finance
version: 1.0.0
homepage: https://github.com/beee003/astrai-openclaw
metadata:
  clawdbot:
    emoji: "⚡"
    requires:
      env: ["ASTRAI_API_KEY"]
    primaryEnv: "ASTRAI_API_KEY"
    files: ["plugin.py", "config.example.toml"]
tags: [q, kdb, kdb-plus, quant, finance, code-review, hft, trading, timeseries]
---

# q-kdb-code-review

AI-powered code review for Q/kdb+ — catch bugs, performance issues, and security vulnerabilities in the most terse language in quantitative finance.

## What it does

Reviews Q/kdb+ code with deep understanding of Q idioms, performance patterns, and common pitfalls. Built for quant developers, kdb+ DBAs, and trading infrastructure teams.

**Catches:**

- Type errors in implicit casts (e.g., mixing longs and floats in comparisons)
- Rank errors from wrong argument counts in function calls
- Unescaped signals in protected evaluation
- Memory-inefficient queries (selecting all columns when only some are needed)
- Missing `peach` parallelism opportunities for embarrassingly parallel operations
- Unsafe `eval`/`value` usage on user-supplied strings (Q injection)
- Unlocked tables during concurrent inserts
- Missing `` `g# `` grouped attributes on high-cardinality join columns
- N-squared joins that should be `aj` (asof joins) or `wj` (window joins)
- Race conditions in timer callbacks (.z.ts)
- Unprotected IPC handlers (.z.pg, .z.ps) and exposed .z.pw

**Strictness modes:**

| Mode | What it checks |
|------|---------------|
| `standard` | Bugs, correctness, type errors, join semantics, null handling |
| `strict` | Everything in standard + performance (attributes, peach, vector ops) + style |
| `security` | Everything in standard + injection via string eval, unprotected IPC handlers, exposed .z.pw, port exposure |

**Intelligent routing via Astrai:** Complex algorithmic Q (custom signal generation, real-time CEP) routes to powerful models. Simple table operations (selects, inserts, schema definitions) route to cheaper, faster models. You get the best result at the lowest cost.

**BYOK (Bring Your Own Keys):** Your provider API keys, your billing. Astrai routes to the best model among your configured providers.

## Setup

1. **Get a free API key** at [as-trai.com](https://as-trai.com)
2. **Set your API key:**
   ```bash
   export ASTRAI_API_KEY="your_key_here"
   ```
3. **Optionally add provider keys** for BYOK routing:
   ```bash
   export ANTHROPIC_API_KEY="sk-ant-..."
   export OPENAI_API_KEY="sk-..."
   ```
4. **Run `/review-q`** on any `.q` file

## Usage

```
/review-q                          Review current Q file
/review-q --strict                 Strict mode: bugs + performance + style
/review-q --focus security         Security mode: eval injection, IPC, .z.pw
/review-q --file tick.q            Review a specific file
```

### Example output

```
Reviewing tick.q (strict mode)...
Model: claude-opus-4-6 via Astrai

Found 3 issues:

[CRITICAL] Line 12: Missing `s# attribute on time column
  `trade` table uses `aj` but `time` column lacks sorted attribute.
  Without `s#`, asof join scans linearly — O(n) instead of O(log n).
  Fix: trade: `trade upsert update `s#time from trade

[WARNING] Line 34: Using `each` where vector operation suffices
  {x*y} each' (price;qty) can be replaced with price*qty
  Vector multiply is ~100x faster than each-both.

[INFO] Line 45: Consider `peach` for independent symbol processing
  Processing each symbol sequentially. Since operations are independent,
  `peach` would utilize all cores.
  Fix: results: func peach syms

Summary: 1 critical, 1 warning, 1 info. Focus on the missing sorted
attribute — it will cause aj performance to degrade from microseconds
to milliseconds at scale.
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `ASTRAI_API_KEY` | Yes | API key from [as-trai.com](https://as-trai.com) |
| `ANTHROPIC_API_KEY` | No | BYOK: Anthropic provider key |
| `OPENAI_API_KEY` | No | BYOK: OpenAI provider key |
| `GOOGLE_API_KEY` | No | BYOK: Google AI provider key |
| `DEEPSEEK_API_KEY` | No | BYOK: DeepSeek provider key |
| `MISTRAL_API_KEY` | No | BYOK: Mistral provider key |
| `GROQ_API_KEY` | No | BYOK: Groq provider key |
| `TOGETHER_API_KEY` | No | BYOK: Together AI provider key |
| `FIREWORKS_API_KEY` | No | BYOK: Fireworks AI provider key |
| `COHERE_API_KEY` | No | BYOK: Cohere provider key |
| `PERPLEXITY_API_KEY` | No | BYOK: Perplexity provider key |
| `REVIEW_STRICTNESS` | No | Default strictness: `standard`, `strict`, or `security` |

## External Endpoints

| Endpoint | Purpose |
|----------|---------|
| `as-trai.com/v1/chat/completions` | Astrai inference router — routes Q review requests to the optimal model |

## Security & Privacy

- **No code storage:** Your Q code is sent to the selected AI provider for inference and is not stored by Astrai.
- **BYOK:** When you provide your own provider keys, requests go directly through Astrai's router to your provider account. Astrai does not store or log your provider keys beyond the request lifecycle.
- **Transport:** All communication uses HTTPS/TLS.
- **No telemetry:** The skill does not send analytics or telemetry data. Only the review request goes to Astrai.
- **Local processing:** File reading and result formatting happen entirely on your machine.

## Why Q needs specialized review

Q is unlike any mainstream programming language:

- **Extreme terseness:** A single line of Q can express what takes 20 lines in Python. This density makes bugs nearly invisible during manual review.
- **Implicit type coercion:** Q silently coerces types in many operations. Comparing a long to a float, or joining on mismatched key types, can produce silently wrong results.
- **1000x performance gaps:** The difference between idiomatic and naive Q is not 2x or 10x — it is often 1000x. Missing a sorted attribute on a time column turns an O(log n) asof join into O(n). Using `each` instead of vector operations adds interpreter overhead per element.
- **Adverb complexity:** Q's adverbs (`/`, `\`, `'`, `/:`, `\:`, `':`) modify function behavior in powerful but subtle ways. `+/` is reduce-add, `+\` is scan-add, `+'` is each-both-add. Confusing these causes wrong results, not errors.
- **Most AI models struggle:** Without Q-specific prompting, general-purpose AI models treat Q code as line noise. This skill provides detailed system prompts that teach the model Q semantics, kdb+ internals, and finance-domain patterns.

## Pricing

Uses Astrai's inference routing. Your costs depend on the models selected:

| Plan | Rate | Includes |
|------|------|----------|
| Free | $0 | 1,000 requests/day |
| Pro | $49/mo | 50,000 requests/day, priority routing |
| Business | $199/mo | Unlimited requests, dedicated support |

With BYOK, you pay your provider directly at their rates. Astrai's routing is included in the plan price.
