mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 22:14:30 +00:00
149 lines
4.1 KiB
Markdown
149 lines
4.1 KiB
Markdown
# Code Companion
|
|
|
|
A set of developer-focused scripts that use OpenJarvis tool-using agents
|
|
to automate common coding tasks: code review, debugging, and test generation.
|
|
|
|
## What This Demonstrates
|
|
|
|
Each script wires up a `Jarvis` instance with the `native_react` (ReAct) agent
|
|
and a curated set of tools. The ReAct loop lets the agent reason step by step
|
|
-- reading files, running commands, and thinking -- before producing a final
|
|
structured answer. This is the same pattern you can adapt for any code
|
|
intelligence workflow.
|
|
|
|
| Script | Purpose | Tools Used |
|
|
|---|---|---|
|
|
| `reviewer.py` | Review a git diff between two branches | `git_diff`, `git_log`, `file_read`, `think` |
|
|
| `debugger.py` | Investigate an error and propose a fix | `file_read`, `shell_exec`, `think` |
|
|
| `test_gen.py` | Generate comprehensive tests for a Python module | `file_read`, `think`, `file_write` |
|
|
|
|
## Prerequisites
|
|
|
|
1. **Install OpenJarvis** (from the repo root):
|
|
|
|
```bash
|
|
uv sync --extra dev
|
|
```
|
|
|
|
2. **Start an inference engine.** The default is Ollama:
|
|
|
|
```bash
|
|
ollama serve
|
|
ollama pull qwen3:8b
|
|
```
|
|
|
|
Alternatively, set up a cloud engine by sourcing your API keys:
|
|
|
|
```bash
|
|
source .env
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### Code Review
|
|
|
|
Review the diff between a feature branch and `main`:
|
|
|
|
```bash
|
|
python examples/code_companion/reviewer.py --branch feature-x
|
|
```
|
|
|
|
Review the current HEAD against a specific base:
|
|
|
|
```bash
|
|
python examples/code_companion/reviewer.py --branch HEAD --base develop
|
|
```
|
|
|
|
### Debug Assistant
|
|
|
|
Investigate an error message:
|
|
|
|
```bash
|
|
python examples/code_companion/debugger.py --error "TypeError: NoneType has no attribute 'split'"
|
|
```
|
|
|
|
Point it at the file where the error occurred for faster root-cause analysis:
|
|
|
|
```bash
|
|
python examples/code_companion/debugger.py \
|
|
--error "KeyError: 'user_id'" \
|
|
--file src/app/views.py
|
|
```
|
|
|
|
### Test Generation
|
|
|
|
Generate pytest tests for a module:
|
|
|
|
```bash
|
|
python examples/code_companion/test_gen.py --module src/openjarvis/tools/calculator.py
|
|
```
|
|
|
|
Use unittest instead, and write to a specific file:
|
|
|
|
```bash
|
|
python examples/code_companion/test_gen.py \
|
|
--module src/openjarvis/tools/calculator.py \
|
|
--framework unittest \
|
|
--output tests/test_calculator_generated.py
|
|
```
|
|
|
|
## How the ReAct Agent Loop Works
|
|
|
|
Each script uses the `native_react` agent, which follows the
|
|
**Thought-Action-Observation** cycle:
|
|
|
|
1. **Thought** -- The agent reasons about what to do next (often using the
|
|
`think` tool to structure its reasoning).
|
|
2. **Action** -- The agent calls a tool (e.g., `git_diff`, `file_read`,
|
|
`shell_exec`).
|
|
3. **Observation** -- The tool result is fed back to the agent.
|
|
4. **Repeat** until the agent has enough information to produce a final answer.
|
|
|
|
This loop allows the agent to adaptively explore the codebase rather than
|
|
relying on a single prompt/response exchange. For example, the reviewer might
|
|
read a diff, notice a suspicious function call, then read the source of that
|
|
function before making its assessment.
|
|
|
|
## Customization
|
|
|
|
### Model and Engine
|
|
|
|
All three scripts accept `--model` and `--engine` flags:
|
|
|
|
```bash
|
|
python examples/code_companion/reviewer.py --model gpt-4o --engine cloud
|
|
python examples/code_companion/debugger.py --model claude-sonnet-4-20250514 --engine cloud
|
|
```
|
|
|
|
### Tools
|
|
|
|
To change which tools an agent can use, edit the `tools` list in the script.
|
|
Available tools include `calculator`, `web_search`, `shell_exec`, `code_interpreter`,
|
|
`memory_store`, `memory_search`, and more. Run `uv run jarvis eval list` or
|
|
inspect `src/openjarvis/tools/` for the full registry.
|
|
|
|
### Prompts
|
|
|
|
Each script contains a `prompt` string that instructs the agent. Modify this
|
|
to change the review criteria, debugging strategy, or test generation style
|
|
to match your team's conventions.
|
|
|
|
## SDK Pattern
|
|
|
|
All three scripts follow the same core pattern:
|
|
|
|
```python
|
|
from openjarvis import Jarvis
|
|
|
|
j = Jarvis(model="qwen3:8b", engine_key="ollama")
|
|
try:
|
|
response = j.ask(
|
|
"Your task description here...",
|
|
agent="native_react",
|
|
tools=["git_diff", "file_read", "think"],
|
|
)
|
|
print(response)
|
|
finally:
|
|
j.close()
|
|
```
|