claude-flow-novice 2.18.23 → 2.18.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +17 -0
- package/.claude/commands/cfn-loop/cfn-loop-cli.md +9 -0
- package/.claude/commands/cfn-loop-task.md +11 -0
- package/.claude/commands/cfn-ruvector/cfn-codebase-reindex.md +23 -4
- package/.claude/commands/cfn-ruvector/cfn-codebase-search.md +10 -2
- package/.claude/commands/cfn-ruvector/cfn-detect-stale-docs.md +22 -4
- package/.claude/hooks/deprecated/cfn-SessionStart-cfn-load-openai-key.sh +48 -0
- package/.claude/settings.json +6 -8
- package/.claude/skills/CLAUDE.md +70 -0
- package/.claude/skills/cfn-local-ruvector-accelerator/SKILL.md +37 -21
- package/CLAUDE.md +63 -401
- package/config/agent-whitelist.json +281 -0
- package/config/default.yml +180 -0
- package/config/feature-flags.json +315 -0
- package/config/fix-reports/config-manager-custom-keys.json +15 -0
- package/config/hooks/post-edit-pipeline.js +858 -0
- package/config/hooks/post-edit-pipeline.js.original +612 -0
- package/config/kong/grafana/datasources/prometheus.yml +24 -0
- package/config/kong/kong.yml +496 -0
- package/config/kong/prometheus.yml +49 -0
- package/config/logrotate.d/cfn-logs +221 -0
- package/config/loki/loki-config.yml +172 -0
- package/config/loki/retention.yml +107 -0
- package/config/mcp-servers.json +152 -0
- package/config/production.yml.example +72 -0
- package/config/prometheus.yml +85 -0
- package/config/promtail/promtail-config.yml +162 -0
- package/config/redis.conf +33 -0
- package/config/redis.config.js +115 -0
- package/config/skill-requirements.json +341 -0
- package/config/sla-definitions.test.yml +66 -0
- package/config/sla-definitions.yml +150 -0
- package/docs/CFN_LOOP_CLI_MODE.md +134 -0
- package/package.json +1 -1
- package/scripts/cfn-init.js +8 -2
- package/.claude/hooks/SessionStart-cfn-load-openai-key.sh +0 -35
- package/.claude/hooks/SessionStart:cfn-build-ruvector.sh +0 -28
- /package/.claude/hooks/{SessionStart-cfn-build-ruvector.sh → cfn-SessionStart-cfn-build-ruvector.sh} +0 -0
- /package/.claude/hooks/{cfn-load-cerebras-env.sh → deprecated/cfn-load-cerebras-env.sh} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# CFN Coordination and Namespace Guide
|
|
2
|
+
|
|
3
|
+
## Coordination Patterns and Namespace Isolation
|
|
4
|
+
|
|
5
|
+
- Coordination patterns: see `.claude/skills/cfn-coordination/SKILL.md` (chain, broadcast, mesh, consensus collection).
|
|
6
|
+
- Namespace structure: agents `.claude/agents/cfn-dev-team/`; skills `.claude/skills/cfn-*/`; hooks `.claude/hooks/cfn-*`; commands `.claude/commands/cfn/`.
|
|
7
|
+
- Enhanced orchestrator v3.0: `./.claude/skills/cfn-loop-orchestration/orchestrate.sh`
|
|
8
|
+
- Orchestration flow: Loop 3 executes and tests -> gate check -> Loop 2 validators -> Product Owner decision (PROCEED/ITERATE/ABORT) -> iterate or finish.
|
|
9
|
+
- Task mode agents: return output directly; no Redis signaling.
|
|
10
|
+
|
|
11
|
+
### Coordination Anti-Patterns (avoid)
|
|
12
|
+
|
|
13
|
+
- Skipping gate check before spawning Loop 2.
|
|
14
|
+
- Validators reviewing without tests/logs.
|
|
15
|
+
- Product Owner decision without deliverable paths.
|
|
16
|
+
- Mixing service and container names inside Docker networks.
|
|
17
|
+
- Manual cleanup instead of orchestrator controls.
|
|
@@ -265,6 +265,15 @@ The orchestrator returns structured results:
|
|
|
265
265
|
}
|
|
266
266
|
```
|
|
267
267
|
|
|
268
|
+
## Validation Flow Summary
|
|
269
|
+
|
|
270
|
+
1. **Loop 3 Gate:** Test pass rate must meet mode threshold before validators start
|
|
271
|
+
2. **Loop 2 Validators:** Need access to Loop 3 outputs, tests, and logs
|
|
272
|
+
3. **Product Owner Decision:** Parsed via `.claude/skills/product-owner-decision/execute-decision.sh`
|
|
273
|
+
4. **Gate Failure:** Iterate Loop 3 only
|
|
274
|
+
5. **Gate Pass:** Proceed to validators
|
|
275
|
+
6. **Decision Outcomes:** PROCEED (done), ITERATE (repeat), ABORT (stop with error)
|
|
276
|
+
|
|
268
277
|
This simplified architecture provides:
|
|
269
278
|
- ✅ **Zero external dependencies** - runs anywhere Node.js is available
|
|
270
279
|
- ✅ **Fast execution** - parallel decomposition and implementation
|
|
@@ -249,6 +249,17 @@ fi
|
|
|
249
249
|
|
|
250
250
|
---
|
|
251
251
|
|
|
252
|
+
## Validation Flow Summary
|
|
253
|
+
|
|
254
|
+
1. **Loop 3 Gate:** Test pass rate must meet mode threshold before validators start
|
|
255
|
+
2. **Loop 2 Validators:** Need access to Loop 3 outputs, tests, and logs
|
|
256
|
+
3. **Product Owner Decision:** Parsed via `.claude/skills/product-owner-decision/execute-decision.sh`
|
|
257
|
+
4. **Gate Failure:** Iterate Loop 3 only
|
|
258
|
+
5. **Gate Pass:** Proceed to validators
|
|
259
|
+
6. **Decision Outcomes:** PROCEED (done), ITERATE (repeat), ABORT (stop with error)
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
252
263
|
## Related Documentation
|
|
253
264
|
|
|
254
265
|
- **Full Task Mode Guide**: `.claude/commands/cfn-loop/cfn-loop-task.md`
|
|
@@ -17,20 +17,39 @@ Add `--force` flag for complete reindex:
|
|
|
17
17
|
- Major restructuring
|
|
18
18
|
- Index issues
|
|
19
19
|
|
|
20
|
-
**
|
|
21
|
-
- OPENAI_API_KEY must be set: `export OPENAI_API_KEY="sk-..."`
|
|
20
|
+
**Log file:** `/tmp/ruvector-index.log` - tail this for progress monitoring.
|
|
22
21
|
|
|
23
22
|
---
|
|
24
23
|
|
|
25
24
|
Execute reindex:
|
|
26
25
|
|
|
27
26
|
```bash
|
|
27
|
+
# --- FAIL-FAST: Validate OpenAI API Key ---
|
|
28
|
+
# Always load from .env if current key is invalid (placeholder or missing)
|
|
29
|
+
if [[ ! "$OPENAI_API_KEY" =~ ^sk- ]] && [[ -f ".env" ]]; then
|
|
30
|
+
export OPENAI_API_KEY=$(grep "^OPENAI_API_KEY=" .env | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Final validation
|
|
34
|
+
if [[ ! "$OPENAI_API_KEY" =~ ^sk- ]]; then
|
|
35
|
+
echo "❌ FATAL: Valid OPENAI_API_KEY not found." >&2
|
|
36
|
+
echo " Add to .env: OPENAI_API_KEY=sk-..." >&2
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
echo "✅ OpenAI key: ${OPENAI_API_KEY:0:12}..."
|
|
41
|
+
|
|
42
|
+
# --- Setup ---
|
|
28
43
|
RUVECTOR_BIN="${HOME}/.local/bin/local-ruvector"
|
|
29
44
|
[ ! -f "$RUVECTOR_BIN" ] && RUVECTOR_BIN="./.claude/skills/cfn-local-ruvector-accelerator/target/release/local-ruvector"
|
|
45
|
+
LOG_FILE="/tmp/ruvector-index.log"
|
|
46
|
+
|
|
47
|
+
echo "📝 Logging to: $LOG_FILE"
|
|
48
|
+
echo " Monitor with: tail -f $LOG_FILE"
|
|
30
49
|
|
|
31
50
|
# Incremental (default - only changed files)
|
|
32
|
-
"$RUVECTOR_BIN" index --path . --types rs,ts,js,py,sh,md
|
|
51
|
+
"$RUVECTOR_BIN" index --path . --types rs,ts,js,py,sh,md 2>&1 | tee "$LOG_FILE"
|
|
33
52
|
|
|
34
53
|
# Full rebuild (when needed)
|
|
35
|
-
# "$RUVECTOR_BIN" index --path . --types rs,ts,js,py,sh,md --force
|
|
54
|
+
# "$RUVECTOR_BIN" index --path . --types rs,ts,js,py,sh,md --force 2>&1 | tee "$LOG_FILE"
|
|
36
55
|
```
|
|
@@ -19,7 +19,7 @@ Search your indexed codebase using RuVector. Uses SQLite index for fast lookups.
|
|
|
19
19
|
- `/cfn-ruvector:cfn-codebase-search database migration`
|
|
20
20
|
|
|
21
21
|
**Prerequisites:**
|
|
22
|
-
- Codebase must be indexed:
|
|
22
|
+
- Codebase must be indexed: `/cfn-codebase-reindex`
|
|
23
23
|
- OPENAI_API_KEY must be set for indexing
|
|
24
24
|
|
|
25
25
|
---
|
|
@@ -27,7 +27,15 @@ Search your indexed codebase using RuVector. Uses SQLite index for fast lookups.
|
|
|
27
27
|
Execute the search:
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
+
# Load from .env if current key is invalid
|
|
31
|
+
if [[ ! "$OPENAI_API_KEY" =~ ^sk- ]] && [[ -f ".env" ]]; then
|
|
32
|
+
export OPENAI_API_KEY=$(grep "^OPENAI_API_KEY=" .env | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
|
33
|
+
fi
|
|
34
|
+
[[ ! "$OPENAI_API_KEY" =~ ^sk- ]] && { echo "❌ OPENAI_API_KEY invalid. Add to .env" >&2; exit 1; }
|
|
35
|
+
|
|
30
36
|
RUVECTOR_BIN="${HOME}/.local/bin/local-ruvector"
|
|
31
37
|
[ ! -f "$RUVECTOR_BIN" ] && RUVECTOR_BIN="./.claude/skills/cfn-local-ruvector-accelerator/target/release/local-ruvector"
|
|
32
|
-
|
|
38
|
+
|
|
39
|
+
# Use threshold 0.1 for better results (default 0.3 is too strict)
|
|
40
|
+
"$RUVECTOR_BIN" query "{{query}}" --max-results {{#if top}}{{top}}{{else}}10{{/if}} --threshold 0.1
|
|
33
41
|
```
|
|
@@ -29,13 +29,31 @@ Analyzes all `.md` files in the codebase to detect legacy/outdated documentation
|
|
|
29
29
|
- Score 2-4: **POSSIBLY STALE** (minor issues)
|
|
30
30
|
|
|
31
31
|
**Prerequisites:**
|
|
32
|
-
- Codebase must be indexed first (`/codebase-reindex`)
|
|
33
|
-
-
|
|
32
|
+
- Codebase must be indexed first (`/cfn-codebase-reindex`)
|
|
33
|
+
- OPENAI_API_KEY must be set (for semantic search)
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
**Note:** This is a planned feature. Currently use these manual queries:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
|
|
40
|
+
# Find docs older than 90 days with no recent code references
|
|
41
|
+
sqlite3 ~/.local/share/ruvector/index_v2.db "
|
|
42
|
+
SELECT e.file_path, e.name,
|
|
43
|
+
datetime(e.created_at, 'unixepoch') as indexed_at
|
|
44
|
+
FROM entities e
|
|
45
|
+
WHERE e.file_path LIKE '%.md'
|
|
46
|
+
AND e.project_root LIKE '%$(pwd)%'
|
|
47
|
+
AND (e.name LIKE '%legacy%' OR e.name LIKE '%deprecated%' OR e.name LIKE '%old%')
|
|
48
|
+
LIMIT 20;"
|
|
49
|
+
|
|
50
|
+
# Find orphan docs (no references)
|
|
51
|
+
sqlite3 ~/.local/share/ruvector/index_v2.db "
|
|
52
|
+
SELECT DISTINCT e.file_path
|
|
53
|
+
FROM entities e
|
|
54
|
+
LEFT JOIN refs r ON e.id = r.source_entity_id OR e.id = r.target_entity_id
|
|
55
|
+
WHERE e.file_path LIKE '%.md'
|
|
56
|
+
AND e.project_root LIKE '%$(pwd)%'
|
|
57
|
+
AND r.id IS NULL
|
|
58
|
+
LIMIT 20;"
|
|
41
59
|
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# SessionStart hook: Load OpenAI API key from root .env file
|
|
4
|
+
# This ensures OPENAI_API_KEY is available for embedding generation
|
|
5
|
+
#
|
|
6
|
+
# IMPORTANT: SessionStart hooks must write to CLAUDE_ENV_FILE to set env vars.
|
|
7
|
+
# JSON output and 'export' do NOT work - only CLAUDE_ENV_FILE persists.
|
|
8
|
+
|
|
9
|
+
set -e
|
|
10
|
+
|
|
11
|
+
# Path to root .env file
|
|
12
|
+
ROOT_ENV="${PROJECT_ROOT:-.}/.env"
|
|
13
|
+
|
|
14
|
+
# Check if CLAUDE_ENV_FILE is available (only in SessionStart hooks)
|
|
15
|
+
if [[ -z "$CLAUDE_ENV_FILE" ]]; then
|
|
16
|
+
echo "⚠️ CLAUDE_ENV_FILE not set - not running as SessionStart hook" >&2
|
|
17
|
+
exit 0
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Check if .env exists
|
|
21
|
+
if [[ ! -f "$ROOT_ENV" ]]; then
|
|
22
|
+
echo "⚠️ Warning: $ROOT_ENV not found. OpenAI embeddings will not work." >&2
|
|
23
|
+
exit 0
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Extract OPENAI_API_KEY from .env
|
|
27
|
+
if grep -q "^OPENAI_API_KEY=" "$ROOT_ENV"; then
|
|
28
|
+
OPENAI_KEY=$(grep "^OPENAI_API_KEY=" "$ROOT_ENV" | cut -d'=' -f2- | tr -d '"' | tr -d "'")
|
|
29
|
+
|
|
30
|
+
# Validate key format
|
|
31
|
+
if [[ -z "$OPENAI_KEY" ]]; then
|
|
32
|
+
echo "⚠️ Warning: OPENAI_API_KEY found but empty in $ROOT_ENV" >&2
|
|
33
|
+
exit 0
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
if [[ ! "$OPENAI_KEY" =~ ^sk- ]]; then
|
|
37
|
+
echo "⚠️ Warning: OPENAI_API_KEY invalid format (must start with 'sk-')" >&2
|
|
38
|
+
exit 0
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
# Write to CLAUDE_ENV_FILE - this is how SessionStart hooks set env vars
|
|
42
|
+
echo "export OPENAI_API_KEY=\"$OPENAI_KEY\"" >> "$CLAUDE_ENV_FILE"
|
|
43
|
+
echo "✅ Loaded OPENAI_API_KEY from .env (${OPENAI_KEY:0:10}...)" >&2
|
|
44
|
+
else
|
|
45
|
+
echo "⚠️ Warning: OPENAI_API_KEY not found in $ROOT_ENV. OpenAI embeddings will not work." >&2
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
exit 0
|
package/.claude/settings.json
CHANGED
|
@@ -153,23 +153,21 @@
|
|
|
153
153
|
}
|
|
154
154
|
],
|
|
155
155
|
"SessionStart": [
|
|
156
|
-
{
|
|
156
|
+
{
|
|
157
|
+
"matcher": "startup",
|
|
157
158
|
"hooks": [
|
|
158
159
|
{
|
|
159
160
|
"type": "command",
|
|
160
|
-
"command": "
|
|
161
|
-
"timeout": 15
|
|
161
|
+
"command": "nohup ~/.local/bin/wsl-memory-monitor.sh > /dev/null 2>&1 & sleep 0.5 && echo \"[WSL Memory Monitor] Running (PID: $(cat /tmp/wsl-memory-monitor.pid 2>/dev/null || echo starting))\""
|
|
162
162
|
}
|
|
163
163
|
]
|
|
164
|
-
}
|
|
165
|
-
],
|
|
166
|
-
"Stop": [
|
|
164
|
+
},
|
|
167
165
|
{
|
|
168
166
|
"hooks": [
|
|
169
167
|
{
|
|
170
168
|
"type": "command",
|
|
171
|
-
"command": "bash
|
|
172
|
-
"timeout":
|
|
169
|
+
"command": "bash .claude/hooks/cfn-SessionStart-cfn-build-ruvector.sh",
|
|
170
|
+
"timeout": 60
|
|
173
171
|
}
|
|
174
172
|
]
|
|
175
173
|
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Claude Code Skills Development Guide
|
|
2
|
+
|
|
3
|
+
**Purpose:** Guidelines for developing, testing, and maintaining CFN skills.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Skill Development Principles
|
|
8
|
+
|
|
9
|
+
- **Modularity:** Each skill handles one responsibility; compose skills for complex operations
|
|
10
|
+
- **Explicit Interfaces:** Document inputs, outputs, and side effects in SKILL.md
|
|
11
|
+
- **Minimal Dependencies:** Skills should be self-contained; avoid cross-skill imports
|
|
12
|
+
- **Thorough Testing:** Every skill needs functional tests and edge case coverage
|
|
13
|
+
|
|
14
|
+
## Testing Requirements (STRAT-005)
|
|
15
|
+
|
|
16
|
+
Skills must include tests covering:
|
|
17
|
+
- Functional requirements (happy path)
|
|
18
|
+
- Edge cases: timeouts, blocking operations, invalid inputs
|
|
19
|
+
- Resource cleanup on failure
|
|
20
|
+
|
|
21
|
+
**Example test location:** `.claude/skills/cfn-coordination/test-orchestrator.sh`
|
|
22
|
+
|
|
23
|
+
## Core Skill References
|
|
24
|
+
|
|
25
|
+
- **Coordination:** `.claude/skills/cfn-coordination/SKILL.md` - chain, broadcast, mesh, consensus patterns
|
|
26
|
+
- **Agent Spawning:** `.claude/skills/cfn-agent-spawning/SKILL.md` - agent lifecycle management
|
|
27
|
+
- **Loop Validation:** `.claude/skills/cfn-loop-validation/SKILL.md` - gate checks and consensus
|
|
28
|
+
|
|
29
|
+
## Skill File Structure
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
.claude/skills/<skill-name>/
|
|
33
|
+
├── SKILL.md # Skill documentation (required)
|
|
34
|
+
├── <main-script>.sh # Primary entry point
|
|
35
|
+
├── lib/ # Helper scripts/modules
|
|
36
|
+
└── tests/ # Skill-specific tests
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Skill Documentation Template
|
|
40
|
+
|
|
41
|
+
```markdown
|
|
42
|
+
# Skill: <name>
|
|
43
|
+
|
|
44
|
+
## Purpose
|
|
45
|
+
One-line description of what this skill does.
|
|
46
|
+
|
|
47
|
+
## Inputs
|
|
48
|
+
- `$1`: Description
|
|
49
|
+
- `ENV_VAR`: Description
|
|
50
|
+
|
|
51
|
+
## Outputs
|
|
52
|
+
- stdout: Description
|
|
53
|
+
- exit code: 0 = success, non-zero = failure
|
|
54
|
+
|
|
55
|
+
## Usage
|
|
56
|
+
\`\`\`bash
|
|
57
|
+
./.claude/skills/<skill-name>/<script>.sh [args]
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
## Dependencies
|
|
61
|
+
- List required tools/skills
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Quality Checklist
|
|
65
|
+
|
|
66
|
+
- [ ] SKILL.md documents all inputs/outputs
|
|
67
|
+
- [ ] Scripts use `set -euo pipefail`
|
|
68
|
+
- [ ] Cleanup traps handle interrupts
|
|
69
|
+
- [ ] Tests cover happy path and failure modes
|
|
70
|
+
- [ ] No hardcoded paths (use `PROJECT_ROOT`)
|
|
@@ -1,25 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ruvector-code-search
|
|
3
|
+
description: "MANDATORY: Query RuVector BEFORE using grep, glob, find, or search. Performs 400x faster semantic and structural code search via SQL on indexed codebase. Use for finding functions, classes, patterns, callers, and implementations. Agents MUST query RuVector first; grep is only allowed after RuVector returns zero results."
|
|
4
|
+
allowed-tools: Bash, Read, SlashCommand
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# RuVector Local Semantic Code Search
|
|
2
8
|
|
|
3
|
-
##
|
|
9
|
+
## MANDATORY: QUERY RUVECTOR BEFORE GREP/GLOB
|
|
10
|
+
|
|
11
|
+
**This is a PROTOCOL REQUIREMENT, not a suggestion. Failure to query RuVector first is a violation.**
|
|
12
|
+
|
|
13
|
+
### WHY THIS IS MANDATORY
|
|
14
|
+
- RuVector SQL: 0.002s | grep: 0.8s (400x slower)
|
|
15
|
+
- Agents using grep first waste tokens and time
|
|
16
|
+
- Index already exists at `~/.local/share/ruvector/index_v2.db`
|
|
4
17
|
|
|
5
|
-
|
|
18
|
+
### ALWAYS USE RUVECTOR FIRST
|
|
6
19
|
```bash
|
|
7
|
-
# Exact name lookup - 0.002s
|
|
20
|
+
# Exact name lookup - 0.002s
|
|
8
21
|
sqlite3 ~/.local/share/ruvector/index_v2.db "SELECT file_path, line_number FROM entities WHERE name = 'MyFunction';"
|
|
9
22
|
|
|
10
23
|
# Fuzzy search - 0.004s
|
|
11
24
|
sqlite3 ~/.local/share/ruvector/index_v2.db "SELECT file_path, line_number FROM entities WHERE name LIKE '%Store%' LIMIT 10;"
|
|
25
|
+
|
|
26
|
+
# Semantic search
|
|
27
|
+
/codebase-search "authentication middleware pattern"
|
|
12
28
|
```
|
|
13
29
|
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
- Searching
|
|
17
|
-
-
|
|
30
|
+
### GREP IS ONLY ALLOWED WHEN:
|
|
31
|
+
- RuVector query returned zero results AND project confirmed not indexed
|
|
32
|
+
- Searching literal strings (error messages, comments, config values)
|
|
33
|
+
- Explicit user request for grep
|
|
18
34
|
|
|
19
|
-
|
|
20
|
-
- "Where is
|
|
21
|
-
-
|
|
22
|
-
-
|
|
35
|
+
### FOR CONCEPTUAL QUESTIONS:
|
|
36
|
+
- "Where is X implemented?" → RuVector semantic search
|
|
37
|
+
- "Find similar patterns" → RuVector embeddings
|
|
38
|
+
- "How is feature Y built?" → RuVector first, then read files
|
|
23
39
|
|
|
24
40
|
## Quick Commands
|
|
25
41
|
|
|
@@ -108,20 +124,20 @@ sqlite3 ~/.local/share/ruvector/index_v2.db "SELECT project_root, COUNT(*) FROM
|
|
|
108
124
|
~/.local/share/ruvector/index_v2.db
|
|
109
125
|
```
|
|
110
126
|
|
|
111
|
-
## For Agents
|
|
127
|
+
## For Agents (MANDATORY PROTOCOL)
|
|
128
|
+
|
|
129
|
+
**DO NOT use grep/glob until you have queried RuVector. This is enforced.**
|
|
112
130
|
|
|
113
|
-
Before implementing changes, ALWAYS query RuVector first:
|
|
114
131
|
```bash
|
|
115
|
-
#
|
|
132
|
+
# STEP 1: Query RuVector FIRST (required)
|
|
116
133
|
/codebase-search "relevant search terms" --top 5
|
|
117
|
-
# Or
|
|
118
|
-
local
|
|
134
|
+
# Or SQL:
|
|
135
|
+
sqlite3 ~/.local/share/ruvector/index_v2.db "SELECT file_path, line_number FROM entities WHERE name LIKE '%keyword%';"
|
|
119
136
|
|
|
120
|
-
# Query past errors
|
|
121
|
-
./.claude/skills/cfn-ruvector-
|
|
137
|
+
# STEP 2: Query past errors/patterns
|
|
138
|
+
./.claude/skills/cfn-local-ruvector-accelerator/query-agent-patterns.sh "description"
|
|
122
139
|
|
|
123
|
-
#
|
|
124
|
-
./.claude/skills/cfn-ruvector-codebase-index/query-learnings.sh --task-description "description" --category PATTERN
|
|
140
|
+
# STEP 3: Only if RuVector returns nothing, then use grep
|
|
125
141
|
```
|
|
126
142
|
|
|
127
|
-
|
|
143
|
+
**Violation of this protocol wastes tokens and time. RuVector exists to prevent duplicated work.**
|