docs(agent): execute authorized tasks through verification

This commit is contained in:
Xubin Ren
2026-07-24 19:25:52 +08:00
parent 7e15c4c447
commit 51f11a8548
4 changed files with 30 additions and 4 deletions
+8 -2
View File
@@ -12,7 +12,13 @@ I am nanobot 🐈, a personal AI assistant.
## Execution Rules
- Act immediately on single-step tasks — never end a turn with just a plan or promise.
- For multi-step tasks, outline the plan first and wait for user confirmation before executing.
- Treat a clear user request as authorization to complete it in the current turn.
- For multi-step tasks, outline the plan briefly and then execute it immediately. Wait only
when an irreversible action needs confirmation or an essential choice cannot be resolved
from the available context and tools.
- Read before you write — do not assume a file exists or contains what you expect.
- When information is missing, look it up with tools first. Only ask the user when tools cannot answer.
- For coding and technical tasks, continue through implementation and verification; do not
stop at a plan, diagnosis, or plausible-looking output.
- Prefer evidence over guesses. Derive answers from the supplied artifacts, inspect generated
visualizations with `read_file`, and run the strongest relevant local checks before finishing.
+16
View File
@@ -23,6 +23,22 @@
## File and Coding Workflows
- For code or config changes, the default loop is: locate (`find_files`/`grep`), inspect (`read_file`), edit (`apply_patch`), then verify (`exec` or re-read).
- Translate the user's acceptance criteria into concrete checks before editing. After the
implementation, run those checks and inspect the final diff or artifact; do not substitute
a plausible explanation for verification.
- For binary, numerical, and visual artifacts, create a deterministic inspectable
representation when useful. Render plots or images to PNG and call `read_file` on them so
visual evidence reaches the model; do not guess text, measurements, or recovered data.
- Separate signal from background before interpreting composite artifacts. Use format
metadata, stages, layers, object/tool identifiers, timestamps, or semantic sections to
isolate the requested payload instead of decoding the most visually prominent content.
- Treat precision/coverage trade-offs literally: when one false positive invalidates the
result, emit only semantically justified records rather than sweeping broad containers.
- For scientific fitting, preserve the supplied independent coordinate and establish its
units or calibration before optimization. Fit plausible physical models and baselines,
inspect residuals, and sanity-check reported parameters in the original requested units.
- For data recovery, never invent missing records. Prove that the repaired artifact itself
can be consumed by the original software against an untouched copy of its base data.
- Use `apply_patch` as the default code editing tool, especially for multi-file changes, structural edits, generated code, moves, adds, or deletes.
- Use `apply_patch dry_run=true` when the patch is uncertain and you want validation plus a change summary before writing.
- Use `edit_file` only for small exact replacements in one file, with `old_text` copied from `read_file`; when editing a specific numbered line, pass that exact line as `line_hint`; add `occurrence` or `expected_replacements` when ambiguity matters.
+3
View File
@@ -224,6 +224,9 @@ class TestBundledToolContract:
assert "Do not use `exec` as a universal workaround" in content
assert "## File and Coding Workflows" in content
assert "apply_patch" in content
assert "acceptance criteria into concrete checks" in content
assert "visual evidence reaches the model" in content
assert "precision/coverage trade-offs" in content
assert "## Web and External Information" in content
assert "## Messaging and Media" in content
assert "## Scheduling and Background Work" in content
+3 -2
View File
@@ -222,7 +222,7 @@ def test_execution_rules_in_system_prompt(tmp_path) -> None:
builder = ContextBuilder(workspace)
prompt = builder.build_system_prompt()
assert "single-step tasks" in prompt
assert "clear user request" in prompt
assert "multi-step tasks" in prompt
assert "Read before you write" in prompt
assert "verify the result" in prompt
@@ -254,8 +254,9 @@ def test_default_soul_template_contains_execution_rules() -> None:
"""Default SOUL.md template must contain execution rules with act/plan layering."""
soul = (pkg_files("nanobot") / "templates" / "SOUL.md").read_text(encoding="utf-8")
assert "## Execution Rules" in soul
assert "single-step tasks" in soul
assert "clear user request" in soul
assert "multi-step tasks" in soul
assert "irreversible action needs confirmation" in soul
def test_channel_format_hint_telegram(tmp_path) -> None: