Document the new Skills system introduced in recent commits: - docs/architecture.md: Add Skills System section with discovery priority, embedded skills, script extraction, and key types - docs/skills.md: New comprehensive guide covering SKILL.md format, discovery priority, embedded skills, research skill usage, and troubleshooting - README.md: Update Agent Skills section with correct priority order, add embedded skills info, research skill usage, and link to Skills Guide in Documentation Map - AGENTS.md: Add skill creation to Adding Features, skill extraction to Dangerous Code Paths, and new Skills System Entry Points section All documentation links validated - no broken links or orphan files. Agent: lamport
5.1 KiB
5.1 KiB
AGENTS.md - Machine Instructions for g3
Purpose: Machine-specific instructions for AI agents working with this codebase.
For code locations: See Workspace Memory (loaded automatically)
For project overview: See README.md
Critical Invariants
MUST Hold
- Tool calls must be valid JSON - The streaming parser expects well-formed tool calls
- Context window limits must be respected - Exceeding limits causes API errors
- Provider trait implementations must be Send + Sync - Required for async runtime
- Session IDs must be unique - Used for log file paths and TODO scoping
- File paths in tools support tilde expansion -
~expands to home directory - Streaming is preferred - Non-streaming requests block UI
- Tool results are size-limited - Large outputs are truncated or thinned automatically
- String slicing must be UTF-8 safe - Use
chars().take(n)orchar_indices(), never byte slicing like&s[..n]on user-facing strings
MUST NOT Do
- Never block the async runtime - Use
tokio::spawnfor CPU-intensive work - Never store secrets in logs - API keys are redacted in error logs
- Never modify files outside working directory without explicit permission
- Never assume tool results fit in context - Large results are thinned automatically
- Never use byte-index string slicing on text with potential multi-byte characters - Causes panics on emoji, CJK, box-drawing chars
Adding Features
- New tool: Add definition in
tool_definitions.rs, implement intools/, add dispatch case - New provider: Implement
LLMProvidertrait ing3-providers - New CLI mode: Add to CLI args, implement handler in
g3-cli - New skill: Create
skills/<name>/SKILL.md, optionally add toembedded.rsfor binary inclusion - New config option: Add to
g3-configstructs
Dangerous Code Paths
These areas have subtle bugs if modified incorrectly:
| Area | Risk |
|---|---|
| Context window management | Incorrect token estimates cause context overflow |
| Streaming parser | Partial JSON across chunks causes parsing failures |
| Tool dispatch | Missing dispatch cases cause silent failures |
| Retry logic | Aggressive retries hit rate limits harder |
| Parser sanitization | Inline JSON can trigger false tool call detection |
| Skill extraction | Version hash mismatch causes stale scripts; path issues on Windows |
Do's and Don'ts
Do
- ✅ Run
cargo checkafter modifications - ✅ Run
cargo testbefore committing - ✅ Update tool definitions when adding tools
- ✅ Add tests for new functionality
- ✅ Keep functions under 80 lines
Don't
- ❌ Add blocking code in async contexts
- ❌ Store sensitive data in plain text
- ❌ Ignore error handling
- ❌ Create deeply nested conditionals (>6 levels)
- ❌ Add external dependencies for simple tasks
Common Incorrect Assumptions
- "All providers support tool calling" - Embedded models use JSON fallback
- "Context window is unlimited" - Each provider has limits (4k-200k tokens)
- "Tool results are always small" - File reads can return megabytes
- "Sessions persist across runs" - Sessions are ephemeral by default
- "All platforms are equal" - macOS has more features (Vision, Accessibility)
Dependency Analysis Artifacts
The analysis/deps/ directory contains static analysis artifacts generated by the euler agent:
| File | Purpose |
|---|---|
graph.json |
Canonical dependency graph with nodes (crates, files) and edges (imports) |
graph.summary.md |
One-page overview with metrics, entrypoints, and top fan-in/fan-out nodes |
sccs.md |
Strongly connected components (dependency cycles) analysis |
layers.observed.md |
Observed layering structure derived from dependency direction |
hotspots.md |
Files with disproportionate coupling (high fan-in or fan-out) |
limitations.md |
What could not be observed and what may invalidate conclusions |
These artifacts are useful for understanding coupling, planning refactors, and identifying architectural boundaries.
Skills System Entry Points
The skills system (crates/g3-core/src/skills/) provides extensible agent capabilities:
| File | Purpose |
|---|---|
mod.rs |
Public API: Skill, discover_skills, generate_skills_prompt |
parser.rs |
SKILL.md parsing with YAML frontmatter validation |
discovery.rs |
Multi-location discovery with priority ordering |
embedded.rs |
Compile-time skill embedding via include_str! |
extraction.rs |
Script extraction to .g3/bin/ with version tracking |
prompt.rs |
Generates <available_skills> XML for system prompt |
Key invariants for skills:
- Skill names must be 1-64 chars, lowercase + hyphens only
- SKILL.md must have valid YAML frontmatter with
nameanddescription - Embedded scripts are extracted lazily (on first use)
- Version tracking uses content hash, not timestamps
- Higher priority locations override lower (repo > workspace > global > embedded)
- Script extraction is Unix-only (chmod 755); Windows support is incomplete