@nbardy/oompa 0.7.0 → 0.7.1
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 +21 -4
- package/agentnet/src/agentnet/agent.clj +125 -6
- package/agentnet/src/agentnet/cli.clj +189 -63
- package/agentnet/src/agentnet/harness.clj +217 -0
- package/agentnet/src/agentnet/orchestrator.clj +2 -0
- package/agentnet/src/agentnet/runs.clj +73 -48
- package/agentnet/src/agentnet/schema.clj +1 -1
- package/agentnet/src/agentnet/tasks.clj +47 -0
- package/agentnet/src/agentnet/worker.clj +580 -305
- package/bin/test-models +1 -1
- package/config/prompts/_agent_scope_rules.md +7 -0
- package/config/prompts/_task_header.md +16 -48
- package/config/prompts/cto.md +2 -0
- package/config/prompts/engineer.md +2 -0
- package/config/prompts/executor.md +2 -0
- package/config/prompts/planner.md +3 -1
- package/config/prompts/reviewer.md +2 -0
- package/config/prompts/worker.md +7 -4
- package/oompa.example.json +10 -2
- package/package.json +1 -1
package/bin/test-models
CHANGED
|
@@ -60,7 +60,7 @@ while IFS= read -r model; do
|
|
|
60
60
|
SAFE_NAME=$(echo "$model" | tr '/:.' '_')
|
|
61
61
|
|
|
62
62
|
MODEL_NAMES+=("$SAFE_NAME")
|
|
63
|
-
PROMPT="Write a file called ${RESULTS_DIR}/${SAFE_NAME}_DONE with exactly the text DONE. Nothing else. Just create that one file."
|
|
63
|
+
PROMPT="[_HIDE_TEST_] Write a file called ${RESULTS_DIR}/${SAFE_NAME}_DONE with exactly the text DONE. Nothing else. Just create that one file."
|
|
64
64
|
|
|
65
65
|
echo " launching $model ..."
|
|
66
66
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## Agent Role Rules
|
|
2
|
+
|
|
3
|
+
- Read only task-relevant files first; do not dump the whole repo.
|
|
4
|
+
- If a task is underspecified, state missing assumptions and identify which files are needed next.
|
|
5
|
+
- Stay within your assigned role and task scope unless a clear blocker requires broader changes.
|
|
6
|
+
- Keep changes focused and explain only what is needed to finish the current task.
|
|
7
|
+
|
|
@@ -1,63 +1,31 @@
|
|
|
1
1
|
## Task Management (auto-injected by oompa)
|
|
2
2
|
|
|
3
|
-
You are working in a git worktree.
|
|
4
|
-
Tasks live in the project root at `../tasks/`. You can reach them from your worktree.
|
|
3
|
+
You are working in a git worktree. Tasks live at `{{TASKS_ROOT}}/`.
|
|
5
4
|
|
|
6
|
-
###
|
|
5
|
+
### Orient first
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
### Claim a task (mark as in-progress)
|
|
7
|
+
Before claiming, understand the landscape:
|
|
8
|
+
- Read the project spec
|
|
9
|
+
- Run `git log --oneline -20` to see what's been merged
|
|
10
|
+
- `ls {{TASKS_ROOT}}/pending/` and `cat` tasks that interest you
|
|
11
|
+
- Check `{{TASKS_ROOT}}/current/` and `{{TASKS_ROOT}}/complete/` to see what's in flight and done
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
mv ../tasks/pending/<task-file>.edn ../tasks/current/<task-file>.edn
|
|
17
|
-
```
|
|
13
|
+
### Claim tasks
|
|
18
14
|
|
|
19
|
-
|
|
15
|
+
Output this signal (the framework handles the rest):
|
|
20
16
|
|
|
21
|
-
```bash
|
|
22
|
-
mv ../tasks/current/<task-file>.edn ../tasks/complete/<task-file>.edn
|
|
23
17
|
```
|
|
24
|
-
|
|
25
|
-
### Create a new task
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
cat > ../tasks/pending/task-NNN.edn << 'EOF'
|
|
29
|
-
{:id "task-NNN"
|
|
30
|
-
:summary "Short imperative description"
|
|
31
|
-
:description "What needs to happen and why"
|
|
32
|
-
:difficulty :easy ;; :easy :medium :hard
|
|
33
|
-
:files ["src/relevant-file.py"]
|
|
34
|
-
:acceptance ["Specific condition that means done"]}
|
|
35
|
-
EOF
|
|
18
|
+
CLAIM(task-001, task-003)
|
|
36
19
|
```
|
|
37
20
|
|
|
38
|
-
|
|
21
|
+
The framework will claim them atomically and resume you with results: what succeeded, what was already taken, and what's still pending. You can CLAIM again if needed.
|
|
39
22
|
|
|
40
|
-
|
|
41
|
-
- Your FIRST priority is creating tasks for other workers. They are waiting.
|
|
42
|
-
- Read the project spec, identify gaps, and create 5-10 focused, well-detailed tasks.
|
|
43
|
-
- Do NOT execute tasks in the same iteration you create them.
|
|
44
|
-
- Commit the task files and finish your iteration so others can claim them immediately.
|
|
45
|
-
|
|
46
|
-
**WHEN EXECUTING** (tasks exist in pending):
|
|
47
|
-
- Claim one task, execute it end-to-end, complete it.
|
|
48
|
-
- If work emerges during execution, create new tasks in `../tasks/pending/`.
|
|
23
|
+
Do NOT `mv` task files yourself. The framework owns all task state transitions.
|
|
49
24
|
|
|
50
25
|
### Signals
|
|
51
26
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- **`
|
|
55
|
-
- **`__DONE__`**: Output this only when ALL project work is truly complete and no more tasks can be derived from the spec. This stops your worker entirely.
|
|
56
|
-
|
|
57
|
-
### Rules
|
|
27
|
+
- **`CLAIM(id, ...)`** — Claim one or more pending tasks. Batch related tasks together.
|
|
28
|
+
- **`COMPLETE_AND_READY_FOR_MERGE`** — Your work is done and ready for review. Framework reviews, merges, and marks your claimed tasks complete.
|
|
29
|
+
- **`__DONE__`** — No more useful work exists. Stops your worker.
|
|
58
30
|
|
|
59
|
-
|
|
60
|
-
- Claim your task by moving it to `../tasks/current/`.
|
|
61
|
-
- If the `mv` fails (another worker claimed it first), pick a different task.
|
|
62
|
-
- One task per commit (or a small, tightly-related set with overlapping files).
|
|
63
|
-
- Do NOT output `__DONE__` on your first action. Only use it when you've verified nothing remains.
|
|
31
|
+
One signal per output. Claim before working.
|
package/config/prompts/cto.md
CHANGED
|
@@ -5,3 +5,5 @@ You are an executor. You claim tasks and complete them. Nothing else.
|
|
|
5
5
|
- Do not create new tasks. Do not redesign. Do not refactor beyond the task scope.
|
|
6
6
|
- If a task is unclear, skip it (leave in pending/) and pick another.
|
|
7
7
|
- Keep changes minimal.
|
|
8
|
+
|
|
9
|
+
#oompa_directive:include_file "config/prompts/_agent_scope_rules.md"
|
|
@@ -5,7 +5,9 @@ You are a planner. You read the spec, explore the codebase, and create well-scop
|
|
|
5
5
|
- Create small, focused tasks with clear acceptance criteria.
|
|
6
6
|
- Set :difficulty on each task (:easy, :medium, :hard) so the right worker picks it up.
|
|
7
7
|
- Refine or split tasks that are too large or vague.
|
|
8
|
-
- Check
|
|
8
|
+
- Check tasks/complete/ before creating duplicates.
|
|
9
9
|
- Do NOT claim or complete tasks. Your job is to create them for other workers.
|
|
10
10
|
- Do NOT write application code. Only write task .edn files.
|
|
11
11
|
- Spend time thinking. Good task decomposition is the highest-leverage thing you can do.
|
|
12
|
+
|
|
13
|
+
#oompa_directive:include_file "config/prompts/_agent_scope_rules.md"
|
package/config/prompts/worker.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
You are a worker. You
|
|
1
|
+
You are a worker. You read pending tasks, CLAIM what fits, execute, and signal completion.
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
-
|
|
5
|
-
-
|
|
3
|
+
- Read pending tasks and pick work that matches your strengths.
|
|
4
|
+
- Batch related tasks in a single CLAIM if they share files or context.
|
|
5
|
+
- If no tasks exist, read the spec and create task .edn files in your branch.
|
|
6
|
+
- Keep changes focused. Signal COMPLETE_AND_READY_FOR_MERGE when done.
|
|
6
7
|
- If a task is too big, split it into smaller tasks and work on one.
|
|
8
|
+
|
|
9
|
+
#oompa_directive:include_file "config/prompts/_agent_scope_rules.md"
|
package/oompa.example.json
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
"model": "claude:opus",
|
|
5
5
|
"prompt": ["config/prompts/planner.md"],
|
|
6
6
|
"iterations": 5,
|
|
7
|
-
"count": 1
|
|
7
|
+
"count": 1,
|
|
8
|
+
"wait_between": 60
|
|
8
9
|
},
|
|
9
10
|
{
|
|
10
11
|
"model": "codex:gpt-5.3-codex:medium",
|
|
@@ -14,7 +15,14 @@
|
|
|
14
15
|
"can_plan": false
|
|
15
16
|
},
|
|
16
17
|
{
|
|
17
|
-
"model": "opencode:
|
|
18
|
+
"model": "opencode:opencode/kimi-k2.5-free",
|
|
19
|
+
"prompt": ["config/prompts/executor.md"],
|
|
20
|
+
"iterations": 10,
|
|
21
|
+
"count": 1,
|
|
22
|
+
"can_plan": false
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"model": "gemini:gemini-3-pro-preview",
|
|
18
26
|
"prompt": ["config/prompts/executor.md"],
|
|
19
27
|
"iterations": 10,
|
|
20
28
|
"count": 1,
|