| name | agent-steering |
| description | Universal agent configuration patterns for any AI coding environment. Use when configuring steering, specs, or context assembly for Kiro, Claude Code, Codex, Charm, or other agents. |
Agent Steering
Universal patterns for AI coding agent configuration. Platform-agnostic principles, platform-specific deployment.
Overview
Agent Steering documents the patterns that transform any AI coding agent from a simple assistant into a cognitive partner. These patterns work across different environments—Kiro, Claude Code, Codex, Charm—because they address fundamental problems in agent configuration.
This skill provides:
- Steering hierarchy — Global → Workspace → Project context layering
- 3-phase spec process — Design → Requirements → Tasks structured development
- Context assembly — Progressive disclosure and explicit boundaries
- Slice architecture — Modular identity composition
- Covenant enforcement — Assumption-hostile configuration
The core insight: Agents fail through presumption. Explicit context management prevents presumptive behavior regardless of platform.
The Steering Hierarchy
Layer Model
Steering provides layered context that adapts to different scopes:
Global Steering (universal agent behavior)
↓ inherits
Workspace Steering (multi-project coordination)
↓ inherits
Project Steering (specific project context)
↓ overrides
Final Agent Context
| Layer | Scope | Purpose | Override Behavior |
|---|
| Global | All sessions | Universal patterns, identity, covenant | Foundation |
| Workspace | Multi-project | Shared context across related projects | Extends global |
| Project | Single project | Specific constraints, APIs, architecture | Overrides earlier |
Implementation Patterns
Global Steering (~/.kiro/steering/ or ~/.claude/):
# Global Agent Configuration
## Identity
You are [agent identity template]
## Covenant Principles
[Inherited from covenant-patterns skill]
## Universal Patterns
- Assumption-hostile design
- Explicit context management
- Work preservation by default
Workspace Steering (workspace-level config):
# Workspace: [Name]
## Shared Context
- Common APIs across projects
- Shared terminology
- Cross-project dependencies
## Workspace Conventions
- File organization patterns
- Testing requirements
- Documentation standards
Project Steering (project-specific):
# Project: [Name]
## Architecture
[Project-specific architecture]
## Constraints
[Project-specific constraints]
## APIs
[Project-specific interfaces]
Hierarchy Resolution
Later layers override earlier, but inheritance is preserved:
def resolve_steering(project_path):
"""Resolve steering hierarchy for project."""
context = {}
global_steering = load_steering("~/.kiro/steering/")
context.update(global_steering)
workspace = find_workspace(project_path)
if workspace:
workspace_steering = load_steering(workspace / ".kiro/steering/")
context.update(workspace_steering)
project_steering = load_steering(project_path / ".kiro/steering/")
context.update(project_steering)
return context
The 3-Phase Spec Process
Phase Structure
Specs prevent scope creep through structured development:
Phase 1: Design
├── Architecture decisions
├── Approach selection
└── High-level structure
↓ locks design decisions
Phase 2: Requirements
├── Concrete specifications
├── Constraints definition
└── Interface contracts
↓ locks requirements
Phase 3: Tasks
├── Implementation breakdown
├── Execution order
└── Completion criteria
Phase Boundaries
Critical: Once a phase completes, its decisions are locked. Do not reopen Design decisions in Tasks phase (Decision Integrity principle).
Phase 1: Design
## Design: [Feature Name]
### Problem Statement
[What problem are we solving?]
### Approach
[How will we solve it?]
### Architecture
[High-level structure]
### Decisions
- [ ] Decision 1: [Choice made]
- [ ] Decision 2: [Choice made]
### Non-Goals
[What we're explicitly NOT doing]
Phase 2: Requirements
## Requirements: [Feature Name]
### Functional Requirements
- REQ-001: [Requirement]
- REQ-002: [Requirement]
### Constraints
- CON-001: [Constraint]
### Interfaces
- API: [Interface definition]
### Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2
Phase 3: Tasks
## Tasks: [Feature Name]
### Implementation Order
1. [ ] Task 1: [Description]
2. [ ] Task 2: [Description]
3. [ ] Task 3: [Description]
### Completion Criteria
- [ ] All tests passing
- [ ] Documentation updated
- [ ] Review completed
Spec Workflow
def execute_spec(spec_path):
"""Execute 3-phase spec workflow."""
spec = load_spec(spec_path)
if spec.phase == "design":
design = gather_design_decisions(spec)
spec.lock_design(design)
spec.advance_to("requirements")
elif spec.phase == "requirements":
requirements = define_requirements(spec)
spec.lock_requirements(requirements)
spec.advance_to("tasks")
elif spec.phase == "tasks":
for task in spec.tasks:
execute_task(task)
task.mark_complete()
spec.mark_complete()
return spec
Context Assembly
Progressive Disclosure
Context is assembled progressively, not dumped wholesale:
Turn 0: Minimal context (identity + task)
↓ agent requests more
Turn 1: Relevant context (task-specific files)
↓ agent requests more
Turn 2: Extended context (related systems)
↓ agent requests more
Turn N: Full context (only if needed)
Assembly Patterns
Explicit Boundaries:
<!-- Context boundary: Do not assume knowledge beyond this point -->
## Known Context
- File X exists at path Y
- API Z is available
- Dependency W is installed
## Unknown Context (must query)
- User preferences
- Runtime state
- External service status
Attention-Favored Positions:
def assemble_context(task, agent):
"""Assemble context with attention optimization."""
sections = []
sections.append(format_critical(task.constraints))
sections.append(format_background(task.context))
sections.append(format_reminders(task.covenant_principles))
return join_sections(sections)
Context Engineering Findings
From archived context skills—empirical patterns that apply to agent steering:
Token Allocation (from context-optimization):
- First 20% of context gets highest attention
- Last 10% gets recency boost
- Middle 70% is "attention valley"
- Place critical constraints at start AND end
Degradation Thresholds (from context-degradation):
| Context Length | Performance | Recommendation |
|---|
| <50K tokens | Optimal | Full steering |
| 50-100K tokens | Good | Selective steering |
| 100-200K tokens | Degraded | Minimal steering |
| >200K tokens | Unreliable | Retrieval-based |
Compression Strategies (from context-compression):
- Summarize completed work before context grows
- Use retrieval over replay for history
- Checkpoint state at decision boundaries
Slice Architecture
Modular Identity
Slice markers enable modular composition of agent identity:
<!-- slice:agent=kiro -->
Identity template for Kiro persona
Specific behaviors and constraints
<!-- /slice -->
<!-- slice:agent=claude -->
Identity template for Claude Code persona
Different emphasis, same underlying patterns
<!-- /slice -->
<!-- slice:agent=codex -->
Identity template for Codex persona
Documentation-focused adaptation
<!-- /slice -->
Slice Extraction
Workshop recipes extract slices for deployment:
name: kiro-steering
sources:
- slice: agent=kiro
file: agents/agent-roles.md
- file: agents/steering-global-operator.md
- file: agents/steering-global-principles.md
target_locations:
- path: ~/.kiro/steering/agent.md
template: |
{content}
Platform Adaptation
Same patterns, different deployment:
| Pattern | Kiro | Claude Code | Codex |
|---|
| Steering | .kiro/steering/ | CLAUDE.md | Project docs |
| Specs | Native spec system | Markdown files | Inline docs |
| Identity | agent.md | Global config | System prompt |
| Hooks | Native hooks | N/A | N/A |
| MCP | Full support | Limited | N/A |
Covenant Integration
Principle Application
Agent steering embodies covenant principles:
Bespokedness:
- Configure for THIS operator's workflow
- No generic "best practices" that don't serve actual needs
Decision Integrity:
- Spec phases lock decisions
- No reopening Design in Tasks
Context Hygiene:
- Steering is layered, not monolithic
- Progressive disclosure, not context stuffing
Data Fidelity:
- Agent can't invent user preferences
- Must query or ask for unknown context
Fast-Fail:
- Check MCP servers at startup
- Validate steering files before session
Validation Pattern
def validate_steering(steering_config):
"""Validate steering against covenant."""
violations = []
if steering_config.size > MAX_STEERING_SIZE:
violations.append("Steering too large—split into layers")
if steering_config.has_presumed_preferences():
violations.append("Preferences must be explicit, not presumed")
if steering_config.uses_generic_templates():
violations.append("Steering should be operator-specific")
if violations:
raise SteeringValidationError(violations)
return True
Platform-Specific Patterns
Kiro
Full feature support including hooks and MCP:
# Kiro Steering
## Hooks
- Persona switching on context
- Documentation consistency checking
- Covenant principle reminders
## MCP Integration
- Task management server
- Web fetch capabilities
- Custom tool servers
Claude Code
Markdown-based steering via CLAUDE.md:
# CLAUDE.md
## Identity
[Agent identity template]
## Project Context
[Project-specific constraints]
## Covenant
[Principle reminders]
Codex
Documentation-integrated steering:
# AGENTS.md (Codex)
## Agent Configuration
[Codex-specific patterns]
## Project Documentation
[Integrated with docs]
Quality Gates
Pre-Configuration
Post-Configuration
Related Skills
"Agents fail through presumption. Explicit context prevents presumptive behavior." 🧭