agent-bober 0.6.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +220 -30
- package/dist/cli/commands/eval.d.ts +2 -0
- package/dist/cli/commands/eval.d.ts.map +1 -1
- package/dist/cli/commands/eval.js +10 -0
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +357 -62
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +10 -0
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/run.d.ts +2 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +10 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts +2 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +10 -0
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/index.js +22 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/config/schema.d.ts +160 -43
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +11 -7
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/sprint-contract.d.ts +8 -8
- package/dist/discovery/config-generator.d.ts +28 -0
- package/dist/discovery/config-generator.d.ts.map +1 -0
- package/dist/discovery/config-generator.js +225 -0
- package/dist/discovery/config-generator.js.map +1 -0
- package/dist/discovery/index.d.ts +20 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +19 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/scanner.d.ts +17 -0
- package/dist/discovery/scanner.d.ts.map +1 -0
- package/dist/discovery/scanner.js +120 -0
- package/dist/discovery/scanner.js.map +1 -0
- package/dist/discovery/scanners/ci-checks.d.ts +10 -0
- package/dist/discovery/scanners/ci-checks.d.ts.map +1 -0
- package/dist/discovery/scanners/ci-checks.js +169 -0
- package/dist/discovery/scanners/ci-checks.js.map +1 -0
- package/dist/discovery/scanners/code-conventions.d.ts +12 -0
- package/dist/discovery/scanners/code-conventions.d.ts.map +1 -0
- package/dist/discovery/scanners/code-conventions.js +216 -0
- package/dist/discovery/scanners/code-conventions.js.map +1 -0
- package/dist/discovery/scanners/documentation.d.ts +17 -0
- package/dist/discovery/scanners/documentation.d.ts.map +1 -0
- package/dist/discovery/scanners/documentation.js +92 -0
- package/dist/discovery/scanners/documentation.js.map +1 -0
- package/dist/discovery/scanners/git-conventions.d.ts +11 -0
- package/dist/discovery/scanners/git-conventions.d.ts.map +1 -0
- package/dist/discovery/scanners/git-conventions.js +128 -0
- package/dist/discovery/scanners/git-conventions.js.map +1 -0
- package/dist/discovery/scanners/package-scripts.d.ts +9 -0
- package/dist/discovery/scanners/package-scripts.d.ts.map +1 -0
- package/dist/discovery/scanners/package-scripts.js +112 -0
- package/dist/discovery/scanners/package-scripts.js.map +1 -0
- package/dist/discovery/scanners/test-conventions.d.ts +9 -0
- package/dist/discovery/scanners/test-conventions.d.ts.map +1 -0
- package/dist/discovery/scanners/test-conventions.js +231 -0
- package/dist/discovery/scanners/test-conventions.js.map +1 -0
- package/dist/discovery/synthesizer.d.ts +30 -0
- package/dist/discovery/synthesizer.d.ts.map +1 -0
- package/dist/discovery/synthesizer.js +348 -0
- package/dist/discovery/synthesizer.js.map +1 -0
- package/dist/discovery/types.d.ts +160 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +9 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/run-manager.d.ts +47 -0
- package/dist/mcp/run-manager.d.ts.map +1 -0
- package/dist/mcp/run-manager.js +79 -0
- package/dist/mcp/run-manager.js.map +1 -0
- package/dist/mcp/server.d.ts +15 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +107 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/config.d.ts +2 -0
- package/dist/mcp/tools/config.d.ts.map +1 -0
- package/dist/mcp/tools/config.js +153 -0
- package/dist/mcp/tools/config.js.map +1 -0
- package/dist/mcp/tools/contracts.d.ts +2 -0
- package/dist/mcp/tools/contracts.d.ts.map +1 -0
- package/dist/mcp/tools/contracts.js +61 -0
- package/dist/mcp/tools/contracts.js.map +1 -0
- package/dist/mcp/tools/eval.d.ts +2 -0
- package/dist/mcp/tools/eval.d.ts.map +1 -0
- package/dist/mcp/tools/eval.js +157 -0
- package/dist/mcp/tools/eval.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +20 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +47 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/init.d.ts +2 -0
- package/dist/mcp/tools/init.d.ts.map +1 -0
- package/dist/mcp/tools/init.js +222 -0
- package/dist/mcp/tools/init.js.map +1 -0
- package/dist/mcp/tools/plan.d.ts +2 -0
- package/dist/mcp/tools/plan.d.ts.map +1 -0
- package/dist/mcp/tools/plan.js +97 -0
- package/dist/mcp/tools/plan.js.map +1 -0
- package/dist/mcp/tools/principles.d.ts +2 -0
- package/dist/mcp/tools/principles.d.ts.map +1 -0
- package/dist/mcp/tools/principles.js +66 -0
- package/dist/mcp/tools/principles.js.map +1 -0
- package/dist/mcp/tools/registry.d.ts +45 -0
- package/dist/mcp/tools/registry.d.ts.map +1 -0
- package/dist/mcp/tools/registry.js +23 -0
- package/dist/mcp/tools/registry.js.map +1 -0
- package/dist/mcp/tools/run.d.ts +2 -0
- package/dist/mcp/tools/run.d.ts.map +1 -0
- package/dist/mcp/tools/run.js +66 -0
- package/dist/mcp/tools/run.js.map +1 -0
- package/dist/mcp/tools/spec.d.ts +2 -0
- package/dist/mcp/tools/spec.d.ts.map +1 -0
- package/dist/mcp/tools/spec.js +32 -0
- package/dist/mcp/tools/spec.js.map +1 -0
- package/dist/mcp/tools/sprint.d.ts +2 -0
- package/dist/mcp/tools/sprint.d.ts.map +1 -0
- package/dist/mcp/tools/sprint.js +243 -0
- package/dist/mcp/tools/sprint.js.map +1 -0
- package/dist/mcp/tools/status.d.ts +2 -0
- package/dist/mcp/tools/status.d.ts.map +1 -0
- package/dist/mcp/tools/status.js +76 -0
- package/dist/mcp/tools/status.js.map +1 -0
- package/dist/orchestrator/agentic-loop.d.ts +7 -6
- package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
- package/dist/orchestrator/agentic-loop.js +33 -40
- package/dist/orchestrator/agentic-loop.js.map +1 -1
- package/dist/orchestrator/context-handoff.d.ts +20 -20
- package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
- package/dist/orchestrator/evaluator-agent.js +2 -2
- package/dist/orchestrator/evaluator-agent.js.map +1 -1
- package/dist/orchestrator/generator-agent.d.ts.map +1 -1
- package/dist/orchestrator/generator-agent.js +2 -2
- package/dist/orchestrator/generator-agent.js.map +1 -1
- package/dist/orchestrator/model-resolver.d.ts +35 -4
- package/dist/orchestrator/model-resolver.d.ts.map +1 -1
- package/dist/orchestrator/model-resolver.js +68 -15
- package/dist/orchestrator/model-resolver.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +2 -2
- package/dist/orchestrator/planner-agent.js.map +1 -1
- package/dist/orchestrator/tools/index.d.ts +3 -4
- package/dist/orchestrator/tools/index.d.ts.map +1 -1
- package/dist/orchestrator/tools/index.js.map +1 -1
- package/dist/orchestrator/tools/schemas.d.ts +11 -12
- package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
- package/dist/orchestrator/tools/schemas.js +3 -2
- package/dist/orchestrator/tools/schemas.js.map +1 -1
- package/dist/providers/anthropic.d.ts +15 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +133 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/factory.d.ts +37 -0
- package/dist/providers/factory.d.ts.map +1 -0
- package/dist/providers/factory.js +119 -0
- package/dist/providers/factory.js.map +1 -0
- package/dist/providers/google.d.ts +39 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +195 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +6 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-compat.d.ts +39 -0
- package/dist/providers/openai-compat.d.ts.map +1 -0
- package/dist/providers/openai-compat.js +42 -0
- package/dist/providers/openai-compat.js.map +1 -0
- package/dist/providers/openai.d.ts +41 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +205 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +144 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +8 -0
- package/dist/providers/types.js.map +1 -0
- package/package.json +22 -4
- package/skills/bober.principles/SKILL.md +36 -3
package/README.md
CHANGED
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/agent-bober)
|
|
4
4
|
[](https://github.com/BOBER3r/agent-bober/blob/main/LICENSE)
|
|
5
5
|
|
|
6
|
-
**Generator-Evaluator multi-agent harness for building applications autonomously with
|
|
6
|
+
**Generator-Evaluator multi-agent harness for building applications autonomously with any LLM.**
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
[agentbober.com](https://agentbober.com) | [npm](https://www.npmjs.com/package/agent-bober) | [GitHub](https://github.com/BOBER3r/agent-bober)
|
|
9
|
+
|
|
10
|
+
Inspired by Anthropic's engineering publication [**"Harness design for long-running application development"**](https://www.anthropic.com/engineering/harness-design-long-running-apps), agent-bober implements the Generator-Evaluator multi-agent pattern as a reusable, installable workflow. It orchestrates AI agents in a structured loop: a **Planner** decomposes your idea into sprint contracts, a **Generator** writes the code, and an **Evaluator** independently verifies each sprint against its contract before moving on. The result is autonomous, high-quality software development with built-in guardrails, context resets, and brutally honest evaluation.
|
|
11
|
+
|
|
12
|
+
Works with **Claude, GPT, Gemini, Ollama**, and any OpenAI-compatible endpoint. Mix and match providers per agent role.
|
|
9
13
|
|
|
10
14
|
```
|
|
11
15
|
You describe a feature
|
|
@@ -39,7 +43,12 @@ npm install -g agent-bober
|
|
|
39
43
|
npx agent-bober init
|
|
40
44
|
```
|
|
41
45
|
|
|
42
|
-
agent-bober
|
|
46
|
+
agent-bober works in multiple environments:
|
|
47
|
+
|
|
48
|
+
- **Claude Code** -- Plugin with 10 slash commands (`/bober-plan`, `/bober-run`, etc.)
|
|
49
|
+
- **Cursor / Windsurf** -- MCP server with 10 tools in the chat interface
|
|
50
|
+
- **Any MCP-compatible IDE** -- MCP server via stdio transport
|
|
51
|
+
- **Any terminal** -- CLI commands (`npx agent-bober run "feature"`)
|
|
43
52
|
|
|
44
53
|
## Quick Start
|
|
45
54
|
|
|
@@ -48,7 +57,7 @@ agent-bober also works as a **Claude Code plugin**. If you install it as a depen
|
|
|
48
57
|
npx agent-bober init
|
|
49
58
|
```
|
|
50
59
|
|
|
51
|
-
Interactive setup --
|
|
60
|
+
Interactive setup -- pick your AI provider, choose a preset, describe what you want to build.
|
|
52
61
|
|
|
53
62
|
### With a Preset
|
|
54
63
|
```bash
|
|
@@ -66,6 +75,8 @@ cd your-existing-project
|
|
|
66
75
|
npx agent-bober init brownfield
|
|
67
76
|
```
|
|
68
77
|
|
|
78
|
+
Brownfield init **auto-discovers your codebase**: scans package.json scripts, CI configs, git history, file naming patterns, import conventions, test setup, and documentation. It auto-generates project principles and configures evaluator strategies with the correct commands -- no manual setup needed.
|
|
79
|
+
|
|
69
80
|
Then in Claude Code:
|
|
70
81
|
```
|
|
71
82
|
/bober-principles # Define project standards (optional but recommended)
|
|
@@ -86,14 +97,160 @@ Specialized workflows:
|
|
|
86
97
|
|
|
87
98
|
---
|
|
88
99
|
|
|
100
|
+
## Multi-Provider Support
|
|
101
|
+
|
|
102
|
+
agent-bober is **provider-agnostic**. Use any LLM provider for any agent role. Mix and match -- Opus for planning, GPT-4.1 for generation, local Ollama for evaluation.
|
|
103
|
+
|
|
104
|
+
### Supported Providers
|
|
105
|
+
|
|
106
|
+
| Provider | Models | API Key |
|
|
107
|
+
|----------|--------|---------|
|
|
108
|
+
| **Anthropic** (default) | `opus`, `sonnet`, `haiku` | `ANTHROPIC_API_KEY` |
|
|
109
|
+
| **OpenAI** | `gpt-4.1`, `gpt-4.1-mini`, `o3`, `o4-mini` | `OPENAI_API_KEY` |
|
|
110
|
+
| **Google Gemini** | `gemini-pro`, `gemini-flash` | `GOOGLE_API_KEY` or `GEMINI_API_KEY` |
|
|
111
|
+
| **OpenAI-Compatible** | Any model (Ollama, LM Studio, Groq, DeepSeek, etc.) | Optional |
|
|
112
|
+
|
|
113
|
+
### Configuration
|
|
114
|
+
|
|
115
|
+
Set providers per agent role in `bober.config.json`:
|
|
116
|
+
|
|
117
|
+
```jsonc
|
|
118
|
+
{
|
|
119
|
+
"planner": {
|
|
120
|
+
"provider": "anthropic",
|
|
121
|
+
"model": "opus"
|
|
122
|
+
},
|
|
123
|
+
"generator": {
|
|
124
|
+
"provider": "openai",
|
|
125
|
+
"model": "gpt-4.1"
|
|
126
|
+
},
|
|
127
|
+
"evaluator": {
|
|
128
|
+
"provider": "openai-compat",
|
|
129
|
+
"model": "llama3.1:70b",
|
|
130
|
+
"endpoint": "http://localhost:11434/v1"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Model shorthands auto-resolve to the correct provider:
|
|
136
|
+
- `"opus"` / `"sonnet"` / `"haiku"` -- Anthropic
|
|
137
|
+
- `"gpt-4.1"` / `"o3"` / `"o4-mini"` -- OpenAI
|
|
138
|
+
- `"gemini-pro"` / `"gemini-flash"` -- Google
|
|
139
|
+
- `"ollama/llama3"` -- OpenAI-compatible at localhost:11434
|
|
140
|
+
|
|
141
|
+
Override provider for all roles from the CLI:
|
|
142
|
+
```bash
|
|
143
|
+
npx agent-bober run "feature" --provider openai
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Provider SDKs (`openai`, `@google/generative-ai`) are **optional peer dependencies** -- install only what you use. Only `@anthropic-ai/sdk` is required by default.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## MCP Server (Cursor, Windsurf, etc.)
|
|
151
|
+
|
|
152
|
+
agent-bober includes an MCP (Model Context Protocol) server that exposes all functionality as tools in any MCP-compatible IDE.
|
|
153
|
+
|
|
154
|
+
### Setup for Cursor
|
|
155
|
+
|
|
156
|
+
Add to `.cursor/mcp.json`:
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"mcpServers": {
|
|
160
|
+
"bober": {
|
|
161
|
+
"command": "npx",
|
|
162
|
+
"args": ["agent-bober", "mcp"]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Setup for Windsurf
|
|
169
|
+
|
|
170
|
+
Add to your Windsurf MCP configuration:
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"mcpServers": {
|
|
174
|
+
"bober": {
|
|
175
|
+
"command": "npx",
|
|
176
|
+
"args": ["agent-bober", "mcp"]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Available MCP Tools
|
|
183
|
+
|
|
184
|
+
| Tool | Type | Description |
|
|
185
|
+
|------|------|-------------|
|
|
186
|
+
| `bober_init` | sync | Initialize project config and `.bober/` directory |
|
|
187
|
+
| `bober_plan` | sync | Plan a feature, create sprint contracts |
|
|
188
|
+
| `bober_sprint` | sync | Execute the next sprint (generator + evaluator loop) |
|
|
189
|
+
| `bober_eval` | sync | Evaluate a sprint independently |
|
|
190
|
+
| `bober_run` | async | Full autonomous pipeline (returns immediately, poll with status) |
|
|
191
|
+
| `bober_status` | poll | Check pipeline progress or read current status |
|
|
192
|
+
| `bober_contracts` | read | List all sprint contracts or read a specific one |
|
|
193
|
+
| `bober_spec` | read | Read the current PlanSpec |
|
|
194
|
+
| `bober_principles` | read/write | Read or set project principles |
|
|
195
|
+
| `bober_config` | read/write | Read or update `bober.config.json` |
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Brownfield Auto-Discovery
|
|
200
|
+
|
|
201
|
+
When you run `bober init brownfield` (or use the `bober_init` MCP tool with mode=brownfield), agent-bober deeply analyzes your existing codebase and automatically:
|
|
202
|
+
|
|
203
|
+
### What It Scans
|
|
204
|
+
|
|
205
|
+
| Area | What It Reads | What It Detects |
|
|
206
|
+
|------|---------------|-----------------|
|
|
207
|
+
| **Package scripts** | `package.json` scripts, lockfiles | Build/test/lint/typecheck commands, package manager (npm/yarn/pnpm/bun) |
|
|
208
|
+
| **CI/CD** | `.github/workflows/*.yml`, `.gitlab-ci.yml` | CI check commands, deployment steps |
|
|
209
|
+
| **Git history** | Last 50 commits, branch names | Commit message format (conventional commits, prefixes), branch naming strategy |
|
|
210
|
+
| **Code conventions** | Samples up to 20 source files | File naming (camelCase/kebab-case/PascalCase), import style, export patterns, TypeScript strictness |
|
|
211
|
+
| **Test setup** | Test files, framework configs | Test framework, file naming pattern (*.test.ts vs *.spec.ts), mocking library, coverage config |
|
|
212
|
+
| **Documentation** | README.md, CONTRIBUTING.md, CLAUDE.md, .cursorrules, docs/ | Existing standards and guidelines |
|
|
213
|
+
|
|
214
|
+
### What It Produces
|
|
215
|
+
|
|
216
|
+
1. **`.bober/principles.md`** -- Comprehensive project principles synthesized by a single LLM call from the scan data. Each rule includes file path examples from your actual codebase and notes any inconsistencies (e.g., "Most files use camelCase but `src/utils/parse-config.ts` uses kebab-case").
|
|
217
|
+
|
|
218
|
+
2. **`bober.config.json`** -- Evaluator strategies with real, PM-qualified command strings (e.g., `{ type: "lint", command: "pnpm run lint", required: true }`), plus CI-derived custom strategies labeled `(from CI)`.
|
|
219
|
+
|
|
220
|
+
### How It Works
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
$ npx agent-bober init brownfield
|
|
224
|
+
|
|
225
|
+
Analyzing codebase...
|
|
226
|
+
|
|
227
|
+
Detected: TypeScript, React, Vite, ESLint, Vitest, Playwright
|
|
228
|
+
Package manager: pnpm
|
|
229
|
+
Git: conventional commits (feat:/fix:), feature/* branches
|
|
230
|
+
Tests: vitest, *.test.ts, co-located
|
|
231
|
+
|
|
232
|
+
Auto-configured strategies:
|
|
233
|
+
typecheck pnpm run typecheck (required)
|
|
234
|
+
lint pnpm run lint (required)
|
|
235
|
+
build pnpm run build (required)
|
|
236
|
+
unit-test pnpm run test (required)
|
|
237
|
+
playwright npx playwright test (optional)
|
|
238
|
+
|
|
239
|
+
Look good? [Y/n]
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
The `/bober-principles` command also triggers auto-discovery when called with no arguments in a brownfield project -- it analyzes the codebase instead of asking interview questions.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
89
246
|
## Commands
|
|
90
247
|
|
|
91
248
|
### Slash Commands (Claude Code)
|
|
92
249
|
|
|
93
250
|
| Command | Description |
|
|
94
251
|
|---|---|
|
|
95
|
-
| `/bober-principles` | Define project principles
|
|
96
|
-
| `/bober-plan` | Plan any feature
|
|
252
|
+
| `/bober-principles` | Define project principles -- AI expands your rough notes into standards |
|
|
253
|
+
| `/bober-plan` | Plan any feature -- stack-agnostic, sprint-decomposed |
|
|
97
254
|
| `/bober-sprint` | Execute the next sprint contract |
|
|
98
255
|
| `/bober-eval` | Evaluate current sprint output |
|
|
99
256
|
| `/bober-run` | Full autonomous pipeline (plan + sprint + eval loop) |
|
|
@@ -106,11 +263,12 @@ Specialized workflows:
|
|
|
106
263
|
### CLI
|
|
107
264
|
|
|
108
265
|
```bash
|
|
109
|
-
npx agent-bober init [preset] # Initialize project
|
|
266
|
+
npx agent-bober init [preset] # Initialize project (with provider selection)
|
|
110
267
|
npx agent-bober plan "feature" # Run the planner
|
|
111
268
|
npx agent-bober sprint # Execute next sprint
|
|
112
269
|
npx agent-bober eval # Evaluate current sprint
|
|
113
270
|
npx agent-bober run "feature" # Full autonomous loop
|
|
271
|
+
npx agent-bober mcp # Start MCP server (Cursor/Windsurf)
|
|
114
272
|
```
|
|
115
273
|
|
|
116
274
|
### Fully Autonomous Mode (no human in the loop)
|
|
@@ -138,7 +296,16 @@ agent-bober init nextjs
|
|
|
138
296
|
agent-bober run "Build a complete dashboard with auth, CRUD, and charts"
|
|
139
297
|
```
|
|
140
298
|
|
|
141
|
-
The CLI uses the Anthropic SDK directly
|
|
299
|
+
The CLI uses the Anthropic SDK directly -- no approval prompts at all.
|
|
300
|
+
|
|
301
|
+
**Option C: With a different provider**
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
export OPENAI_API_KEY=sk-...
|
|
305
|
+
cd your-project
|
|
306
|
+
agent-bober init nextjs
|
|
307
|
+
agent-bober run "Build a complete dashboard with auth, CRUD, and charts" --provider openai
|
|
308
|
+
```
|
|
142
309
|
|
|
143
310
|
---
|
|
144
311
|
|
|
@@ -150,7 +317,7 @@ All configuration lives in `bober.config.json` at your project root. The `init`
|
|
|
150
317
|
|
|
151
318
|
```jsonc
|
|
152
319
|
{
|
|
153
|
-
//
|
|
320
|
+
// -- Project -----------------------------------------
|
|
154
321
|
"project": {
|
|
155
322
|
"name": "my-app", // Project name
|
|
156
323
|
"mode": "greenfield", // "greenfield" | "brownfield"
|
|
@@ -158,26 +325,35 @@ All configuration lives in `bober.config.json` at your project root. The `init`
|
|
|
158
325
|
"description": "A task management app with real-time collaboration"
|
|
159
326
|
},
|
|
160
327
|
|
|
161
|
-
//
|
|
328
|
+
// -- Planner -----------------------------------------
|
|
162
329
|
"planner": {
|
|
330
|
+
"provider": "anthropic", // "anthropic" | "openai" | "google" | "openai-compat"
|
|
331
|
+
"model": "opus", // Any model string or shorthand
|
|
332
|
+
"endpoint": null, // Custom base URL (for openai-compat)
|
|
333
|
+
"providerConfig": {}, // Provider-specific settings
|
|
163
334
|
"maxClarifications": 5, // Max clarifying questions (0 to skip)
|
|
164
|
-
"model": "opus", // Model for planning: "opus" | "sonnet" | "haiku"
|
|
165
335
|
"contextFiles": [ // Extra files the planner should read
|
|
166
336
|
"docs/architecture.md"
|
|
167
337
|
]
|
|
168
338
|
},
|
|
169
339
|
|
|
170
|
-
//
|
|
340
|
+
// -- Generator ---------------------------------------
|
|
171
341
|
"generator": {
|
|
172
|
-
"
|
|
342
|
+
"provider": "anthropic", // "anthropic" | "openai" | "google" | "openai-compat"
|
|
343
|
+
"model": "sonnet", // Any model string or shorthand
|
|
344
|
+
"endpoint": null, // Custom base URL (for openai-compat)
|
|
345
|
+
"providerConfig": {}, // Provider-specific settings
|
|
173
346
|
"maxTurnsPerSprint": 50, // Max tool-use turns per sprint
|
|
174
347
|
"autoCommit": true, // Auto-commit after each sprint
|
|
175
348
|
"branchPattern": "bober/{feature-name}" // Git branch naming
|
|
176
349
|
},
|
|
177
350
|
|
|
178
|
-
//
|
|
351
|
+
// -- Evaluator ---------------------------------------
|
|
179
352
|
"evaluator": {
|
|
180
|
-
"
|
|
353
|
+
"provider": "anthropic", // "anthropic" | "openai" | "google" | "openai-compat"
|
|
354
|
+
"model": "sonnet", // Any model string or shorthand
|
|
355
|
+
"endpoint": null, // Custom base URL (for openai-compat)
|
|
356
|
+
"providerConfig": {}, // Provider-specific settings
|
|
181
357
|
"strategies": [ // Evaluation strategies to run
|
|
182
358
|
{ "type": "typecheck", "required": true },
|
|
183
359
|
{ "type": "lint", "required": true },
|
|
@@ -189,21 +365,21 @@ All configuration lives in `bober.config.json` at your project root. The `init`
|
|
|
189
365
|
"plugins": [] // Custom evaluator plugin paths
|
|
190
366
|
},
|
|
191
367
|
|
|
192
|
-
//
|
|
368
|
+
// -- Sprint ------------------------------------------
|
|
193
369
|
"sprint": {
|
|
194
370
|
"maxSprints": 10, // Max sprints per plan
|
|
195
371
|
"requireContracts": true, // Require contract agreement before coding
|
|
196
372
|
"sprintSize": "medium" // "small" | "medium" | "large"
|
|
197
373
|
},
|
|
198
374
|
|
|
199
|
-
//
|
|
375
|
+
// -- Pipeline ----------------------------------------
|
|
200
376
|
"pipeline": {
|
|
201
377
|
"maxIterations": 20, // Max total iterations across all sprints
|
|
202
378
|
"requireApproval": false, // Pause for user approval between sprints
|
|
203
379
|
"contextReset": "always" // "always" | "on-threshold" | "never"
|
|
204
380
|
},
|
|
205
381
|
|
|
206
|
-
//
|
|
382
|
+
// -- Commands ----------------------------------------
|
|
207
383
|
"commands": {
|
|
208
384
|
"install": "npm install",
|
|
209
385
|
"build": "npm run build",
|
|
@@ -248,7 +424,7 @@ All configuration lives in `bober.config.json` at your project root. The `init`
|
|
|
248
424
|
|
|
249
425
|
### Inline Command Evaluators
|
|
250
426
|
|
|
251
|
-
The strategy type is **open**
|
|
427
|
+
The strategy type is **open** -- you can use any name and provide a shell command directly. No plugin file needed:
|
|
252
428
|
|
|
253
429
|
```json
|
|
254
430
|
{
|
|
@@ -378,11 +554,13 @@ Python API (FastAPI/Django). Includes:
|
|
|
378
554
|
|
|
379
555
|
### `brownfield`
|
|
380
556
|
|
|
381
|
-
Existing codebase
|
|
557
|
+
Existing codebase with **intelligent auto-discovery**:
|
|
382
558
|
|
|
559
|
+
- Deep codebase scan: package scripts, CI configs, git history, code conventions, test setup
|
|
560
|
+
- Auto-generated project principles from discovered patterns
|
|
561
|
+
- Evaluator strategies auto-configured with real commands from your scripts and CI
|
|
383
562
|
- Conservative sprint sizes (`small`)
|
|
384
563
|
- Higher evaluator iteration limit (5 rework cycles)
|
|
385
|
-
- Requires user approval between sprints
|
|
386
564
|
- Emphasizes reading existing patterns before making changes
|
|
387
565
|
|
|
388
566
|
### `base`
|
|
@@ -452,18 +630,18 @@ To debug failing E2E tests:
|
|
|
452
630
|
|
|
453
631
|
### The Generator-Evaluator Pattern
|
|
454
632
|
|
|
455
|
-
This architecture implements the patterns described in Anthropic's [**"Harness design for long-running application development"**](https://www.anthropic.com/engineering/harness-design-long-running-apps) by Prithvi Rajasekaran. The key insight from that research: separating code generation from code evaluation creates a feedback loop that catches errors early and dramatically improves output quality. In their tests, a solo agent produced broken output in 20 minutes, while the full harness produced a polished, working application
|
|
633
|
+
This architecture implements the patterns described in Anthropic's [**"Harness design for long-running application development"**](https://www.anthropic.com/engineering/harness-design-long-running-apps) by Prithvi Rajasekaran. The key insight from that research: separating code generation from code evaluation creates a feedback loop that catches errors early and dramatically improves output quality. In their tests, a solo agent produced broken output in 20 minutes, while the full harness produced a polished, working application -- demonstrating that multi-agent orchestration with honest evaluation is worth the investment.
|
|
456
634
|
|
|
457
|
-
###
|
|
635
|
+
### Provider-Agnostic Architecture
|
|
458
636
|
|
|
459
|
-
Each agent runs as a **multi-turn agentic loop** with tool access via the Anthropic
|
|
637
|
+
Each agent runs as a **multi-turn agentic loop** with tool access via the unified `LLMClient` interface. The provider layer abstracts away the differences between Anthropic, OpenAI, Google, and OpenAI-compatible APIs. System prompts are loaded from the detailed agent definitions in `agents/bober-*.md` (300-600 lines of role-specific instructions, anti-leniency protocols, and evaluation criteria).
|
|
460
638
|
|
|
461
|
-
- **Planner** (Claude Opus): Explores the codebase via read-only tools (`read_file`, `glob`, `grep`), then produces sprint-decomposed plans. Thinks about scope, dependencies, and risk.
|
|
462
|
-
- **Generator** (Claude Sonnet): Full tool access (`bash`, `read_file`, `write_file`, `edit_file`, `glob`, `grep`). Reads existing code, writes implementation, runs tests, and commits
|
|
463
|
-
- **Evaluator** (Claude Sonnet): Read-only + bash tools (`bash`, `read_file`, `glob`, `grep`
|
|
639
|
+
- **Planner** (default: Claude Opus): Explores the codebase via read-only tools (`read_file`, `glob`, `grep`), then produces sprint-decomposed plans. Thinks about scope, dependencies, and risk.
|
|
640
|
+
- **Generator** (default: Claude Sonnet): Full tool access (`bash`, `read_file`, `write_file`, `edit_file`, `glob`, `grep`). Reads existing code, writes implementation, runs tests, and commits -- all autonomously within the sprint contract boundaries.
|
|
641
|
+
- **Evaluator** (default: Claude Sonnet): Read-only + bash tools (`bash`, `read_file`, `glob`, `grep` -- deliberately NO write/edit). Independently verifies by running the dev server, taking Playwright screenshots, executing tests, and inspecting code. Cannot fix bugs -- only report them with precise feedback.
|
|
464
642
|
|
|
465
643
|
The separation ensures that:
|
|
466
|
-
1. The Generator cannot "mark its own homework"
|
|
644
|
+
1. The Generator cannot "mark its own homework" -- an independent evaluation step with its own tool access catches issues through actual runtime verification, not just reading the generator's self-report.
|
|
467
645
|
2. Sprint contracts provide clear scope boundaries, preventing feature creep.
|
|
468
646
|
3. Automated checks (programmatic evaluators) + agent-based qualitative evaluation run after every sprint.
|
|
469
647
|
4. Context resets between sprints keep the Generator focused and prevent context degradation.
|
|
@@ -477,8 +655,8 @@ All bober state lives in the `.bober/` directory:
|
|
|
477
655
|
.bober/
|
|
478
656
|
specs/ PlanSpec JSON files
|
|
479
657
|
contracts/ SprintContract JSON files
|
|
480
|
-
|
|
481
|
-
|
|
658
|
+
eval-results/ Evaluation result logs
|
|
659
|
+
handoffs/ Context handoff documents
|
|
482
660
|
progress.md Human-readable progress tracker
|
|
483
661
|
history.jsonl Machine-readable event log
|
|
484
662
|
```
|
|
@@ -529,9 +707,14 @@ agent-bober/
|
|
|
529
707
|
cli/ CLI entry point (commander)
|
|
530
708
|
config/ Config schema, loader, defaults
|
|
531
709
|
contracts/ Sprint contract and eval result types
|
|
710
|
+
discovery/ Brownfield auto-discovery (scanner, synthesizer, config generator)
|
|
711
|
+
scanners/ Sub-scanners (package-scripts, ci-checks, git, code, tests, docs)
|
|
532
712
|
evaluators/ Built-in evaluator plugins
|
|
713
|
+
mcp/ MCP server and tool definitions
|
|
714
|
+
tools/ 10 MCP tools (init, plan, sprint, eval, run, status, etc.)
|
|
533
715
|
orchestrator/ Agent runners, agentic loop, tool infrastructure
|
|
534
716
|
tools/ Tool schemas, sandboxed handlers, role-based sets
|
|
717
|
+
providers/ LLM provider adapters (Anthropic, OpenAI, Google, OpenAI-compat)
|
|
535
718
|
state/ State management for .bober/ directory
|
|
536
719
|
utils/ Shared utilities
|
|
537
720
|
agents/ Agent system prompts (.md files, loaded at runtime)
|
|
@@ -557,6 +740,13 @@ This project is inspired by and implements the patterns from Anthropic's [**"Har
|
|
|
557
740
|
|
|
558
741
|
---
|
|
559
742
|
|
|
743
|
+
## Links
|
|
744
|
+
|
|
745
|
+
- [agentbober.com](https://agentbober.com) -- Official website
|
|
746
|
+
- [npm](https://www.npmjs.com/package/agent-bober) -- Package registry
|
|
747
|
+
- [GitHub](https://github.com/BOBER3r/agent-bober) -- Source code
|
|
748
|
+
- [Anthropic Research](https://www.anthropic.com/engineering/harness-design-long-running-apps) -- The paper that inspired this project
|
|
749
|
+
|
|
560
750
|
## License
|
|
561
751
|
|
|
562
752
|
[MIT](LICENSE) -- Copyright (c) 2026 BOBER3r
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export interface EvalCommandOptions {
|
|
2
2
|
verbose?: boolean;
|
|
3
3
|
sprint?: string;
|
|
4
|
+
/** Override AI provider for all roles. Overrides config.planner/generator/evaluator.provider. */
|
|
5
|
+
provider?: string;
|
|
4
6
|
}
|
|
5
7
|
export declare function runEvalCommand(projectRoot: string, options: EvalCommandOptions): Promise<void>;
|
|
6
8
|
//# sourceMappingURL=eval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAsKf"}
|
|
@@ -20,6 +20,16 @@ export async function runEvalCommand(projectRoot, options) {
|
|
|
20
20
|
logger.info('Run "npx agent-bober init" to create a configuration.');
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
+
// Apply --provider override for all roles
|
|
24
|
+
if (options.provider) {
|
|
25
|
+
config = {
|
|
26
|
+
...config,
|
|
27
|
+
planner: { ...config.planner, provider: options.provider },
|
|
28
|
+
generator: { ...config.generator, provider: options.provider },
|
|
29
|
+
evaluator: { ...config.evaluator, provider: options.provider },
|
|
30
|
+
};
|
|
31
|
+
logger.info(`Provider override: ${options.provider}`);
|
|
32
|
+
}
|
|
23
33
|
await ensureBoberDir(projectRoot);
|
|
24
34
|
// Load spec and contracts
|
|
25
35
|
const spec = await loadLatestSpec(projectRoot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgaA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAyEf"}
|