11 KiB
AI Agent Guidelines
Version: 4.7
Critical Rules
| Rule | Description |
|---|---|
| CLI First | Use speckitadv CLI for all workflow operations |
| CLI Flags | Use named flags (--flag value), NOT positional args |
| OS Shell | Bash (Linux/macOS), PowerShell (Windows) |
| ASCII-Only | No Unicode. Use ->, [ok], [x], [!] |
| Mermaid Diagrams | Mermaid syntax only. No ASCII art |
| State Auto-Detection | After stage 2, CLI auto-detects stage from state.json |
| Workflow Prompts | Follow workflow-specific prompts for file operations |
RFC 2119 Compliance
| Keyword | Meaning | Action |
|---|---|---|
| MUST | Mandatory | Always follow |
| NEVER | Prohibited | Never do |
| SHOULD | Recommended | Follow unless justified |
| MAY | Optional | Use judgment |
| Marker | Action |
|---|---|
[!] |
Critical - treat as MUST |
[ok]/[x] |
Verify before proceeding |
[STOP: USER_*] |
WAIT for user |
[STOP: *] (other) |
Execute and continue |
Quick Reference
Priority: Constitution > Spec > Plan > Supporting Docs
Task States: [ ] pending, [x] complete, [F] failed, [B] blocked
| Problem | Action |
|---|---|
| Spec unclear | STOP, mark [B], WAIT |
| Test failed (syntax) | Auto-fix max 2x |
| Test failed (logic) | Mark [F], WAIT |
| Constitution conflict | STOP, FLAG, WAIT |
CLI Commands
| Command | Description |
|---|---|
analyze-project |
Analyze existing project (git branch workflow) |
deepwiki |
Generate AI-powered wiki (requires civyk-repoix) |
deepwiki-update-state |
Update deepwiki workflow state |
constitution |
Create project constitution |
specify |
Create baseline specification |
plan |
Create implementation plan |
tasks |
Generate actionable tasks |
implement |
Execute implementation |
tests |
Iterative test implementation |
review |
Iterative code review |
CLI vs Slash Commands:
- Slash commands (
/speckitadv.xxx) → Human users in IDE - CLI commands (
speckitadv xxx) → AI agents programmatically
Deepwiki State Commands
| Command | Purpose |
|---|---|
init --files=N --symbols=N --components="a,b" --repoix-mode=mcp |
Initialize state |
stage --stage=ID --status=completed --artifacts=files |
Update stage |
verify-stage --stage=ID |
Verify prerequisites |
enumerate-index |
Discover file patterns and component naming |
business-context --context-file=path |
Save business context |
discovery-cache --key=K --value='json' |
Save cross-stage context |
show |
Show current state |
show --key=KEY |
Show specific key |
complete |
Mark workflow complete |
Chunking (>1500 lines)
| Principle | Description |
|---|---|
| Completion-based | Each chunk is complete logical section |
| Full quality | Multiple writes, NOT reduced content |
| Progress display | Show progress after each chunk |
| No placeholders | Never TODO, TBD, "will be analyzed" |
| Resume support | Check existing content before starting |
Agentic Markers
| Marker | Action |
|---|---|
[AUTO-CONTINUE] |
Proceed immediately |
[STAGE TRANSITION] |
Auto-continue to next stage |
[WAIT-FOR-INPUT] |
Stop and wait |
[GATE-CHECK] |
Pass: continue. Fail: wait |
[WORKFLOW COMPLETE] |
Stop, report completion |
Default: No marker = [AUTO-CONTINUE]. Do NOT ask "should I continue?"
civyk-repoix Integration
Mode Detection (Stage 01)
DeepWiki tries MCP first, falls back to CLI. Mode persisted in state.json.
MCP vs CLI Conversion
| MCP Syntax | CLI Syntax |
|---|---|
mcp__civyk-repoix__index_status() |
civyk-repoix query index-status |
search_symbols(query="%User", kind="class") |
--query "%User" --kind class |
kinds=["class", "function"] |
--kinds "class,function" |
include_private=True |
--include-private |
Name conversion: snake_case → kebab-case (search_symbols → search-symbols)
Exit codes: 0 = success (JSON stdout), 1 = error ({"error": "..."})
MCP Tool Categories (32 Tools)
Status: index_status, build_context_pack
Discovery: search_symbols, get_symbol, list_files, search_code, find_similar
search_symbols: SQL LIKE patterns (%wildcard). NOT regex. OR not supported.list_files: fnmatch patterns (*,**,?). Brace expansion NOT supported.
Navigation: get_file_symbols, get_definition, get_callers, get_references, get_file_imports, get_type_hierarchy, get_related_files
Architecture: get_components, get_api_endpoints, get_dependencies
Git-Aware: get_recent_changes, get_hotspots, get_branch_diff
Analysis: get_dead_code, find_circular_dependencies, analyze_impact, get_duplicate_code, get_tests_for, get_code_for_test, get_tool_performance_stats
AI Context Cache: store_understanding, recall_understanding, get_understanding_stats, invalidate_understanding
Maintenance: force_reindex
Pagination
All list tools return: total_count, truncated, has_more, offset, hint
Use limit and offset for pagination. MUST paginate when has_more=true.
Paginated tools: search_symbols, get_references, get_api_endpoints, get_callers, list_files, search_code, get_recent_changes, get_hotspots, get_branch_diff, get_duplicate_code, get_dead_code, get_type_hierarchy
AI Context Cache (Cross-Session Persistence)
The AI Context Cache enables cross-session persistence of code understanding. Your analysis survives session restarts and new conversations, saving 80-90% of tokens.
| Tool | Purpose |
|---|---|
recall_understanding |
Call FIRST before reading any file (saves 80-90% tokens) |
store_understanding |
Persist analysis AFTER thoroughly reading files |
get_understanding_stats |
Session start: See cached targets, filter by path/scope, sort, check freshness |
invalidate_understanding |
Manually clear stale entries |
[!] SESSION START: Check Cache First
At the start of any workflow or session, proactively check what's already cached:
# 1. Check cache statistics to see what's available
get_understanding_stats(limit=50)
# 2. If working on a specific area, recall relevant cached understanding:
recall_understanding(target="project") # Project-level overview
recall_understanding(target="<module_path>") # Module you'll be working in
# 3. Use cached understanding to:
# - Skip redundant file reads
# - Understand existing patterns before making changes
# - Identify related areas that might be affected
Why check cache first?
- Previous sessions may have already analyzed the files you need
- Cached understanding includes gotchas and edge cases you'd otherwise miss
- Dramatically reduces time-to-context in new sessions
store_understanding fields:
| Field | Required | Description |
|---|---|---|
scope |
Yes | file, class, module, or project |
target |
Yes | Path identifier (e.g., src/auth.py, src/auth.py::AuthClient) |
purpose |
Yes | 1-2 sentence summary of WHAT and WHY |
importance |
Yes | critical, high, medium, or low |
key_points |
No | 2-5 main functionality highlights |
gotchas |
No | Non-obvious behaviors that could cause bugs |
analysis |
No | Detailed free-form analysis for complex business logic, state machines, workflows |
get_understanding_stats parameters:
| Param | Type | Default | Description |
|---|---|---|---|
limit |
int | 50 | Max entries total (1-200) |
offset |
int | 0 | Pagination offset |
filter |
string | - | Filter targets by path (contains match) |
scope |
string | - | Filter by scope: file, class, module, project |
sort_by |
string | importance | Sort by: importance, access_count, target |
include_fresh |
bool | true | Check freshness per entry (false = faster) |
case_insensitive |
bool | true | Whether filter is case-insensitive |
Key behaviors:
- Cross-session: Understanding persists across session restarts and new conversations
- Long sessions: Avoid re-reading files analyzed earlier in the conversation
- Auto-invalidation: Cache invalidates when file content changes (hash mismatch)
- Freshness check: Response includes
freshboolean to indicate if cache is current
[!] CRITICAL: AI Cache Usage Pattern
BEFORE reading ANY source file:
1. Call recall_understanding(target="path/to/file.py")
2. Check response:
- found=true AND fresh=true -> USE cached understanding, SKIP file read
- found=true AND fresh=false -> File changed, re-read and UPDATE cache
- found=false -> Read file, analyze, then store_understanding
AFTER thorough analysis of a file/module/component:
1. Call store_understanding with:
- scope: file/class/module/project
- target: the path analyzed
- purpose: what the code does
- importance: critical/high/medium/low
- key_points: main functionality
- gotchas: non-obvious behaviors
- analysis: detailed notes for complex logic
When to Store Understanding:
| Scope | When to Use | Example Target |
|---|---|---|
file |
After reading and analyzing a source file | src/auth/oauth.py |
class |
After deep-diving into a specific class | src/auth/oauth.py::OAuthClient |
module |
After analyzing a directory/package | src/auth |
project |
After initial codebase orientation | project |
Recommended Workflow
index_status-> verify readyrecall_understanding-> check cached analysis FIRST (saves 80-90% tokens)- If
found=trueANDfresh=true-> Use cached understanding, skip file read - If
found=trueANDfresh=false-> File changed, re-read and update cache - If
found=false-> Read file, analyze, thenstore_understanding
- If
build_context_pack-> initial contextget_file_symbols-> understand filesget_definition+get_callers-> navigationsearch_symbols-> drill downstore_understanding-> persist analysis after reading files (enables cross-session recall)
For cross-session efficiency:
Session 1: Read file -> Analyze -> store_understanding
Session 2: recall_understanding -> Use cached analysis (no file read needed!)
For refactoring: analyze_impact -> get_duplicate_code -> get_tests_for -> find_circular_dependencies -> get_dead_code
Code Generation
Discovery-First:
- Use civyk-repoix MCP/CLI to discover existing utils, base classes, methods, patterns before creating new
- Prefer extending existing patterns over introducing new ones
Quality Standards:
- Production-ready, functionally deterministic and idempotent
- Consider all edge cases in design, implementation, and test coverage
- Small commits (1 scenario, <300 lines)
Quality Gates (Pre-Commit):
- Zero compile errors
- Zero warnings (treat warnings as errors)
- Run: Formatters -> Linters -> Type checkers -> Build
- All new implementations covered by tests
- All new tests must pass
Ethics & Safety
MUST NOT: Commit secrets/keys, share PII, make undisclosed network calls
Licensing: Prefer permissive (MIT, Apache, BSD). STOP for license conflicts.
AI agents MUST follow these guidelines for spec-driven development.