Files
yvgude--lean-ctx/docs/guides/windsurf.md
T
wehub-resource-sync 26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:30 +08:00

324 lines
9.5 KiB
Markdown

# Windsurf + lean-ctx Integration Guide
Complete guide to setting up and optimally using lean-ctx with Windsurf (Codeium's AI-native IDE).
## Overview
| Property | Value |
|----------|-------|
| Integration mode | **Hybrid** (MCP reads + shell hooks) |
| Config file | MCP JSON config |
| Rules file | `~/.codeium/windsurf/rules/lean-ctx.md` (dedicated) |
| Setup command | `lean-ctx init --agent windsurf` |
### What `lean-ctx init --agent windsurf` installs
| Component | Path | Notes |
|-----------|------|-------|
| **MCP server** | `~/.codeium/windsurf/mcp_config.json` | The `ctx_*` tools Cascade calls |
| **Dedicated rules** | `~/.codeium/windsurf/rules/lean-ctx.md` | Tool-mapping + output-style guidance |
| **Project rules** | `.windsurfrules` (project root) | Strong "always call `ctx_*`" directive |
| **Cascade hooks** | `~/.codeium/windsurf/hooks.json` | `observe` + `pre_mcp_tool_use` telemetry/redirect |
| **Skill** | — | **N/A by design.** Windsurf consumes the dedicated rules above; there is no on-demand `SKILL.md` (that pattern is Claude Code / CodeBuddy only). A missing skill is **not** a fault. |
`lean-ctx doctor` prints this exact breakdown under **Windsurf** (MCP / Rules / Cascade hooks / Skill = N/A) plus the time of the last real `ctx_*` MCP call.
## Quick Setup
```bash
# One command — configures MCP, rules, and shell hook
lean-ctx init --agent windsurf
# Verify
lean-ctx doctor
# Restart Windsurf to load the MCP server
```
lean-ctx auto-detects Windsurf by checking for `~/.codeium/windsurf/`.
## Manual Setup
### Step 1: MCP Server Registration
Add lean-ctx to Windsurf's MCP configuration:
```json
{
"mcpServers": {
"lean-ctx": {
"command": "lean-ctx"
}
}
}
```
> **Note**: lean-ctx auto-detects its data directory at runtime — don't hardcode `LEAN_CTX_DATA_DIR` unless you intentionally relocate it (a wrong path splits config and data across two locations). Running `lean-ctx init --agent windsurf` writes this config for you.
### Step 2: Agent Rules
lean-ctx creates `~/.codeium/windsurf/rules/lean-ctx.md` with dedicated rules:
```markdown
# lean-ctx — Context Engineering Layer
<!-- lean-ctx-rules -->
## Mode Selection
1. Editing the file? → `anchored` first (full text + anchors), then `diff` for re-reads
2. Need API surface only? → `map` or `signatures`
3. Large file, context only? → `entropy` or `aggressive`
4. Specific lines? → `lines:N-M`
5. Active task set? → `task`
6. Unsure? → `auto` (system selects optimal mode)
Anti-pattern: NEVER use `full` for files you won't edit — use `map` or `signatures`.
## File Editing
Use native Edit/StrReplace if available. Write, Delete, Glob → use normally.
If native Edit is unavailable, use the anchored editor: `ctx_read(mode="anchored")`
`ctx_patch` (reachable via `ctx_call` in the default profile).
## Proactive (use without being asked)
- `ctx_overview(task)` at session start
- `ctx_compress` when context grows large
## Session Documentation
After significant work, document progress:
- ctx_knowledge(action=remember, category=decision, content=what and why)
- ctx_session(action=task, value=task description with progress)
When you see [CHECKPOINT] → document current status immediately.
Fallback only if a lean-ctx tool is unavailable: use native equivalents.
<!-- /lean-ctx -->
```
### Step 3: Shell Hook
Windsurf has shell access through Cascade. lean-ctx installs compression hooks:
```bash
lean-ctx init --global
```
## Cascade Workflow Optimization
Windsurf's Cascade is an agentic AI that flows through your codebase. lean-ctx enhances Cascade in several ways:
### Faster Context Gathering
Cascade reads many files to build context. With lean-ctx:
```
# Instead of reading full file content (~2000 tokens)
ctx_read("src/api/routes.rs", "map") # ~400 tokens — structure + exports
ctx_read("src/api/routes.rs", "signatures") # ~200 tokens — API surface only
# Re-reads cost ~13 tokens (cached)
ctx_read("src/api/routes.rs", "full") # ~13 tokens on second read
```
### Intelligent Search
```
# Find code by meaning, not just text
ctx_semantic_search("how does the payment flow work?")
# Token-efficient grep
ctx_search("async fn handle_payment", "src/")
```
### Impact Analysis
Before Cascade makes changes:
```
ctx_graph("impact", "src/models/user.rs")
# Returns: what files import/depend on this file
ctx_impact("src/models/user.rs")
# Returns: blast radius analysis
```
## Windsurf-Specific Best Practices
### 1. Use Map Mode for Cascade's Context Sweeps
When Cascade reads multiple files to understand context:
```
# Good: compressed context
ctx_read("src/auth/mod.rs", "map")
ctx_read("src/auth/jwt.rs", "map")
ctx_read("src/auth/middleware.rs", "map")
# Bad: full reads waste tokens
ctx_read("src/auth/mod.rs", "full") # Only if you'll edit this file
```
### 2. Session Continuity Across Cascades
Each Cascade conversation can build on previous sessions:
```
# Start of new Cascade
ctx_session(action="load") # Restore previous context
# During work
ctx_knowledge(action="remember", category="decision", content="Chose OAuth2 PKCE flow for mobile")
# End of Cascade
ctx_session(action="task", value="OAuth2 implementation [50%]")
```
### 3. Compress Before Long Conversations
Windsurf conversations can get long. Proactively manage context:
```
ctx_compress # Creates memory checkpoint, frees context space
ctx_metrics # Check current token savings
```
### 4. Use ctx_overview for Flow Starts
At the beginning of each Cascade flow:
```
ctx_overview("implement rate limiting for API endpoints")
```
This gives Cascade immediate project orientation with task-relevant files and context.
## Advanced Configuration
### Project-Level Rules
Create project-specific rules in your project's Windsurf rules directory:
```bash
mkdir -p .windsurf/rules
```
Then create `.windsurf/rules/lean-ctx.md` with project-specific overrides.
### Global vs. Project Config
| Scope | Rules Path | Effect |
|-------|-----------|--------|
| Global | `~/.codeium/windsurf/rules/lean-ctx.md` | Active in all projects |
| Project | `.windsurf/rules/lean-ctx.md` | Active in this project only |
### Custom Shell Compression
lean-ctx compresses 56 shell pattern modules by default. For project-specific commands:
```toml
# .lean-ctx.toml (project root)
shell_activation = "always"
```
## Token Savings Examples
| Operation | Without lean-ctx | With lean-ctx | Savings |
|-----------|-----------------|---------------|---------|
| Read `src/main.rs` (first time) | ~2000 tokens | ~2000 tokens | 0% (first read) |
| Read `src/main.rs` (re-read) | ~2000 tokens | ~13 tokens | 99.4% |
| Read `src/main.rs` (map mode) | ~2000 tokens | ~400 tokens | 80% |
| `git status` | ~800 tokens | ~120 tokens | 85% |
| `git log -20 --oneline` | ~600 tokens | ~150 tokens | 75% |
| `cargo test` output | ~2000 tokens | ~300 tokens | 85% |
## Troubleshooting
### MCP server not connecting
```bash
# Check lean-ctx is accessible
which lean-ctx
# Test MCP server directly
echo '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{}},"id":1}' | lean-ctx mcp
# Re-run setup
lean-ctx init --agent windsurf
# Restart Windsurf
```
### Rules not being applied
```bash
# Check rules file
cat ~/.codeium/windsurf/rules/lean-ctx.md
# Verify version
grep "lean-ctx-rules-v" ~/.codeium/windsurf/rules/lean-ctx.md
# Re-inject rules
lean-ctx setup
```
### Shell hook not active
```bash
# Check hook status
echo $LEAN_CTX_ACTIVE
# Re-install
lean-ctx init --global
# Restart terminal in Windsurf
```
### Cascade not using lean-ctx tools
1. Verify MCP server is connected in Windsurf settings
2. Check that rules file exists at `~/.codeium/windsurf/rules/lean-ctx.md`
3. Start a new Cascade conversation (rules load at conversation start)
4. Try explicitly asking: "Use ctx_read to read this file"
### `lean-ctx watch` stays empty
`watch` shows real **`ctx_*` MCP tool calls** — it measures *usage*, not whether
lean-ctx is installed. An empty feed means Cascade has not called a `ctx_*` tool
yet, not that the integration is broken.
1. Run `lean-ctx doctor` — the **Windsurf** block confirms MCP / rules / Cascade
hooks are wired and shows the **last `ctx_*` call** (`never` if none yet).
2. If `doctor` is green but the last call is `never`, Cascade is answering with
its **built-in** tools instead of `ctx_*`. The empty-state panel in `watch`
distinguishes this ("IDE hooks are firing → agent using native tools") from a
missing install.
3. Nudge it: start a fresh Cascade (rules reload per conversation) and the
`.windsurfrules` "MANDATORY: call `ctx_*`" directive will steer it.
### Model choice (GLM 5.2, etc.) does not toggle lean-ctx
lean-ctx is **model-agnostic** — it activates from the MCP/rules/hooks wiring
above, not from which model Cascade runs. Switching Cascade to GLM 5.2 (or any
other model) neither enables nor disables lean-ctx. Weaker models sometimes
*ignore* tool-use rules and reach for built-in tools; that surfaces as an empty
`watch` (see above) and is addressed by the forceful `.windsurfrules` directive,
not by a config switch. (The earlier GLM raw-mode handling is already resolved in
the 3.8.x line.)
### Performance issues
```bash
# Check daemon status
lean-ctx status
# Pre-start daemon
lean-ctx daemon start
# Monitor savings
lean-ctx gain --live
```
## Further Reading
- [lean-ctx Tools Reference](https://leanctx.com/docs/tools/)
- [CLI Reference](https://leanctx.com/docs/cli-reference/)
- [Windsurf Documentation](https://docs.codeium.com/windsurf/)
- [MCP Protocol](https://modelcontextprotocol.io/)