Cut the round-trips out of a CLI question, and move the status line "list open issues re CLI" cost six model calls and 26,193 prompt tokens. Four things were wrong, three of them here. **The command tree was discovered one round-trip at a time.** A session that did not know `issue list` existed ran `issue --help`, then `issue list --help`, then the command. Two turns of a model's time to learn two words. The tree now sits in the tool description, read from this binary through the completion script that already enumerates every command and subcommand: one process at session start, 1,397 bytes, and it cannot describe a CLI other than the one running. Flags are still left to `--help`, where there are hundreds and they change. **`--json` was the advertised way to read anything.** A list of three issues is 442 bytes plain and 20,009 as JSON, because the JSON carries every issue's whole body: 3,896 bytes each. Both the tool description and the skill now say to read the plain output and reach for `--json` only to take one field out of one record. **A truncated answer advised the thing that caused it.** The message said "narrow the command or use --json" on every truncation. It now fits what was run -- drop `--json` when that was the problem, narrow with a flag otherwise -- and says plainly that what survived is incomplete and must not be summarized as if it were the whole answer. The fourth was a stale sentence in the repository's own work-management skill, fixed in openagents.com: it claimed the CLI had no `issue` or `project` commands, so the session went looking for them. The same question now takes three calls and no JSON. Also, from a screenshot: the status line moves under the composer and a blank row goes above it. It reads as a caption under the thing it describes rather than something to scan back up for, and a line of nothing separates reading from typing better than a rule does. And a new packaged skill, `delegating-work`, on choosing between doing it yourself, fanning out, and handing a whole task to the Devin CLI when it is on PATH. It records two things found by running it: the mode is `dangerous` on this build where the published documentation calls it "bypass", and `bypass` is not rejected but accepted and ignored, so a session that copied the documentation would silently fall back to prompting where no one can answer; and it refuses an untrusted workspace, which only the person at the keyboard can grant. 379 tests pass.
Cut the round-trips out of a CLI question, and move the status line
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
added
packages/openagents-cli/skills/delegating-work/SKILL.md -
modified
packages/openagents-cli/skills/openagents-cli/SKILL.md -
modified
packages/openagents-cli/src/coder-tools.ts -
modified
packages/openagents-cli/src/coder-ui.ts -
modified
packages/openagents-cli/test/coder-tools-openagents.test.ts
Diff
5 files changed, +201 -20
packages/openagents-cli/skills/delegating-work/SKILL.md added +78
@@ -0,0 +1,78 @@
| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 4 |
|
|
| 5 |
|
|
| 6 |
|
|
| 7 |
|
|
| 8 |
|
|
| 9 |
|
|
| 10 |
|
|
| 11 |
|
|
| 12 |
|
|
| 13 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
|
| 22 |
|
|
| 23 |
|
|
| 24 |
|
|
| 25 |
|
|
| 26 |
|
|
| 27 |
|
|
| 28 |
|
|
| 29 |
|
|
| 30 |
|
|
| 31 |
|
|
| 32 |
|
|
| 33 |
|
|
| 34 |
|
|
| 35 |
|
|
| 36 |
|
|
| 37 |
|
|
| 38 |
|
|
| 39 |
|
|
| 40 |
|
|
| 41 |
|
|
| 42 |
|
|
| 43 |
|
|
| 44 |
|
|
| 45 |
|
|
| 46 |
|
|
| 47 |
|
|
| 48 |
|
|
| 49 |
|
|
| 50 |
|
|
| 51 |
|
|
| 52 |
|
|
| 53 |
|
|
| 54 |
|
|
| 55 |
|
|
| 56 |
|
|
| 57 |
|
|
| 58 |
|
|
| 59 |
|
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 75 |
|
|
| 76 |
|
|
| 77 |
|
|
| 78 |
|
packages/openagents-cli/skills/openagents-cli/SKILL.md modified +15 -8
@@ -9,17 +9,24 @@ You are running inside `openagents coder`, which is one subcommand of the
| 9 | 9 |
|
| 10 | 10 |
|
| 11 | 11 |
|
| 12 |
|
|
| 12 |
|
|
| 13 | 13 |
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 17 | 17 |
|
| 18 |
|
|
| 19 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 20 | 21 |
|
| 21 |
|
|
| 22 |
|
|
| 22 |
|
|
| 23 |
|
|
| 24 |
|
|
| 25 |
|
|
| 26 |
|
|
| 27 |
|
|
| 28 |
|
|
| 29 |
|
|
| 23 | 30 |
|
| 24 | 31 |
|
| 25 | 32 |
|
packages/openagents-cli/src/coder-tools.ts modified +58 -7
@@ -14,6 +14,7 @@
| 14 | 14 |
|
| 15 | 15 |
|
| 16 | 16 |
|
| 17 |
|
|
| 17 | 18 |
|
| 18 | 19 |
|
| 19 | 20 |
|
@@ -285,6 +286,42 @@ const refusalFor = (args: ReadonlyArray<string>): string | undefined => {
| 285 | 286 |
|
| 286 | 287 |
|
| 287 | 288 |
|
| 289 |
|
|
| 290 |
|
|
| 291 |
|
|
| 292 |
|
|
| 293 |
|
|
| 294 |
|
|
| 295 |
|
|
| 296 |
|
|
| 297 |
|
|
| 298 |
|
|
| 299 |
|
|
| 300 |
|
|
| 301 |
|
|
| 302 |
|
|
| 303 |
|
|
| 304 |
|
|
| 305 |
|
|
| 306 |
|
|
| 307 |
|
|
| 308 |
|
|
| 309 |
|
|
| 310 |
|
|
| 311 |
|
|
| 312 |
|
|
| 313 |
|
|
| 314 |
|
|
| 315 |
|
|
| 316 |
|
|
| 317 |
|
|
| 318 |
|
|
| 319 |
|
|
| 320 |
|
|
| 321 |
|
|
| 322 |
|
|
| 323 |
|
|
| 324 |
|
|
| 288 | 325 |
|
| 289 | 326 |
|
| 290 | 327 |
|
@@ -295,16 +332,24 @@ const refusalFor = (args: ReadonlyArray<string>): string | undefined => {
| 295 | 332 |
|
| 296 | 333 |
|
| 297 | 334 |
|
| 335 |
|
|
| 336 |
|
|
| 298 | 337 |
|
| 299 | 338 |
|
| 300 | 339 |
|
| 301 | 340 |
|
| 302 | 341 |
|
| 303 |
|
|
| 304 |
|
|
| 305 |
|
|
| 306 |
|
|
| 307 |
|
|
| 342 |
|
|
| 343 |
|
|
| 344 |
|
|
| 345 |
|
|
| 346 |
|
|
| 347 |
|
|
| 348 |
|
|
| 349 |
|
|
| 350 |
|
|
| 351 |
|
|
| 352 |
|
|
| 308 | 353 |
|
| 309 | 354 |
|
| 310 | 355 |
|
@@ -331,7 +376,6 @@ export function openagentsTool(): CoderTool {
| 331 | 376 |
|
| 332 | 377 |
|
| 333 | 378 |
|
| 334 |
|
|
| 335 | 379 |
|
| 336 | 380 |
|
| 337 | 381 |
|
@@ -373,9 +417,16 @@ export function openagentsTool(): CoderTool {
| 373 | 417 |
|
| 374 | 418 |
|
| 375 | 419 |
|
| 420 |
|
|
| 421 |
|
|
| 422 |
|
|
| 423 |
|
|
| 424 |
|
|
| 425 |
|
|
| 426 |
|
|
| 376 | 427 |
|
| 377 | 428 |
|
| 378 |
|
|
| 429 |
|
|
| 379 | 430 |
|
| 380 | 431 |
|
| 381 | 432 |
|
packages/openagents-cli/src/coder-ui.ts modified +21 -5
@@ -61,6 +61,14 @@ const RED = "\x1b[31m";
| 61 | 61 |
|
| 62 | 62 |
|
| 63 | 63 |
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 64 | 72 |
|
| 65 | 73 |
|
| 66 | 74 |
|
@@ -502,7 +510,10 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 502 | 510 |
|
| 503 | 511 |
|
| 504 | 512 |
|
| 505 |
|
|
| 513 |
|
|
| 514 |
|
|
| 515 |
|
|
| 516 |
|
|
| 506 | 517 |
|
| 507 | 518 |
|
| 508 | 519 |
|
@@ -522,9 +533,9 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 522 | 533 |
|
| 523 | 534 |
|
| 524 | 535 |
|
| 525 |
|
|
| 526 |
|
|
| 527 |
|
|
| 536 |
|
|
| 537 |
|
|
| 538 |
|
|
| 528 | 539 |
|
| 529 | 540 |
|
| 530 | 541 |
|
@@ -555,7 +566,11 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 555 | 566 |
|
| 556 | 567 |
|
| 557 | 568 |
|
| 558 |
|
|
| 569 |
|
|
| 570 |
|
|
| 571 |
|
|
| 572 |
|
|
| 573 |
|
|
| 559 | 574 |
|
| 560 | 575 |
|
| 561 | 576 |
|
@@ -568,6 +583,7 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 568 | 583 |
|
| 569 | 584 |
|
| 570 | 585 |
|
| 586 |
|
|
| 571 | 587 |
|
| 572 | 588 |
|
| 573 | 589 |
|
packages/openagents-cli/test/coder-tools-openagents.test.ts modified +29
@@ -20,6 +20,35 @@ describe("the openagents tool", () => {
| 20 | 20 |
|
| 21 | 21 |
|
| 22 | 22 |
|
| 23 |
|
|
| 24 |
|
|
| 25 |
|
|
| 26 |
|
|
| 27 |
|
|
| 28 |
|
|
| 29 |
|
|
| 30 |
|
|
| 31 |
|
|
| 32 |
|
|
| 33 |
|
|
| 34 |
|
|
| 35 |
|
|
| 36 |
|
|
| 37 |
|
|
| 38 |
|
|
| 39 |
|
|
| 40 |
|
|
| 41 |
|
|
| 42 |
|
|
| 43 |
|
|
| 44 |
|
|
| 45 |
|
|
| 46 |
|
|
| 47 |
|
|
| 48 |
|
|
| 49 |
|
|
| 50 |
|
|
| 51 |
|
|
| 23 | 52 |
|
| 24 | 53 |
|
| 25 | 54 |
|