Code Assistant
Build a coding assistant agent with a search-read-edit-test workflow and tool creation capabilities.
Code Assistant
This example builds a coding assistant that follows a disciplined workflow: search first, edit minimally, test after every change, and iterate on failures. This is based on the coder agent included with supyagent.
The Agent YAML
name: coder
description: Expert programmer that builds, edits, debugs, and tests code
version: "1.0"
type: interactive
model:
provider: anthropic/claude-sonnet-4-5-20250929
temperature: 0.3 # Low temperature for precise code generation
max_tokens: 8192 # Generous output for code blocks
system_prompt: |
You are an expert programmer. You write clean, efficient code and follow a
disciplined workflow to ensure quality.
## Workflow
### 1. Search First, Code Second
Before making any changes:
- Use search or find_files to locate relevant code
- Use read_file to understand the existing implementation
- Understand the patterns, naming conventions, and architecture before editing
- Check for existing utilities or functions you can reuse
### 2. Edit Minimal
Make the smallest change that solves the problem:
- Use apply_patch for multi-file changes -- it is atomic and context-anchored
- Use edit_replace for single surgical edits in one file
- Never rewrite entire files unless creating something new
- Match the existing code style -- indentation, naming, patterns
### 3. Test After Every Change
After modifying code:
- Run the relevant test suite with run_command
- If tests fail, read the error output carefully
- Fix the specific issue and rerun -- do not guess
- If no tests exist, consider writing them
### 4. Iterate on Failure
When something goes wrong:
- Read the full error message -- stack traces, line numbers, error types
- Fix the root cause, not the symptom
- Do not retry the same failing approach -- try a different strategy
- If stuck after 3 attempts, explain the issue clearly
### 5. Git Awareness
Keep track of changes:
- Use git_status to see what you have changed
- Use git_diff to review changes before committing
- Commit logical units of work with clear messages
## Tool Preferences
- Prefer apply_patch over write_file for editing existing files
- Prefer search over run_command with grep
- Prefer read_file_lines over read_file for large files
- Prefer edit_replace for simple single-point edits
## Scope Discipline
- Only change what is needed for the task
- Do not refactor surrounding code or fix unrelated issues
- Do not add features that were not requested
- Keep changes reviewable -- small and focused
tools:
allow:
- "*"
will_create_tools: true # Can create new supypowers scripts at runtime
delegates: [] # Leaf agent -- does not delegate
limits:
max_tool_calls_per_turn: 50 # Allow many tool calls for complex tasksKey Design Decisions
Low Temperature
The temperature: 0.3 setting reduces randomness in code generation. This produces more consistent, predictable output -- important when editing existing code where precision matters.
will_create_tools: true
This flag instructs the agent on how to create new supypowers scripts when it encounters a task that existing tools cannot handle. The system prompt is automatically augmented with tool creation instructions.
No Delegates
The coder is a "leaf" agent in the delegation hierarchy. It does the actual implementation work rather than delegating further. In a multi-agent setup, the planner delegates to the coder.
High Tool Call Limit
max_tool_calls_per_turn: 50 allows the coder to perform complex multi-step operations (search, read, edit, test, fix) within a single turn.
Using the Coder
Interactive Mode
supyagent chat coderYou: Add input validation to the User model in src/models/user.py
coder> Let me search for the User model first.
[tool: search__search_files] pattern="class User" ...
[tool: files__read_file] path="src/models/user.py" ...
I can see the User model. Let me add email validation and
length constraints.
[tool: edit__edit_replace] ...
[tool: shell__run_command] command="pytest tests/test_user.py" ...
Done. I added email format validation using a regex pattern and
length constraints for the name field. All tests pass.As a Delegate
The coder works best when called by a planning agent:
name: planner
description: Plans and orchestrates complex tasks
delegates:
- codersupyagent plan "Add a REST API endpoint for user registration"The planner breaks down the task, then delegates implementation steps to the coder.
Customization
Language-Specific Coder
name: python-coder
model:
provider: anthropic/claude-sonnet-4-5-20250929
temperature: 0.3
system_prompt: |
You are a Python expert. You follow PEP 8, use type hints,
and write pytest-compatible tests.
Always use ruff for linting and formatting.
Prefer pathlib over os.path.
Use pydantic for data validation.
tools:
allow: ["*"]Read-Only Code Reviewer
name: reviewer
model:
provider: anthropic/claude-sonnet-4-5-20250929
temperature: 0.5
system_prompt: |
You are a code reviewer. Read the code, identify issues,
and suggest improvements. Do NOT make changes yourself.
tools:
allow:
- "files__read_*"
- "search__*"
- "find__*"
- "git__*"
deny:
- "files__write_*"
- "edit__*"
- "shell__*"Related
- Building Agents -- Agent configuration reference
- Multi-Agent Systems -- Delegation patterns
- Custom Tool -- Creating new tools