You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- All operations check sandboxing before execution
@@ -321,7 +327,7 @@ cargo test -- --nocapture # Show println output
321
327
322
328
1. Add variant to `src/tools/tool_name.rs` (ToolName enum, as_str, from_str)
323
329
2. Define tool schema in `src/tools/types.rs` and add to tool lists
324
-
3. Implement execution in `src/tools/mod.rs` (ToolExecutor::execute match arm)
330
+
3. Implement execution in `src/tools/executor.rs` (ToolExecutor::execute match arm)
325
331
4. Add tests in `src/tools/tests.rs`
326
332
5. Update README.md with tool description
327
333
@@ -431,6 +437,7 @@ Gitignored scratchpad for helper files the user asks to be created there — typ
431
437
- After each important change, but only when you have finalized the current task, update if relevant:
432
438
-`README.md`
433
439
-`CHANGELOG.md` under `[Unreleased]`. Stick to the standard Keep-a-Changelog categories (`Added`, `Changed`, `Deprecated`, `Removed`, `Fixed`, `Security`) — do NOT add an `Internal` section. Pure refactors, dead-code removals, and test-only additions are not user-notable; leave them out. The changelog is for users, not contributors. Within each entry, describe the user-visible behaviour in plain English: no file paths, no bare `Type::method` shorthand, no Rust attribute syntax, no crate names. CLI flags, env vars, slash commands, and API wire formats are fine because the user encounters them directly.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,10 @@ All notable changes to Sofos are documented in this file.
4
4
5
5
## [Unreleased]
6
6
7
+
### Added
8
+
9
+
-**Visible task plans for multi-step work.** The assistant can now call `update_plan` to show the current plan with `pending`, `in_progress`, and `completed` statuses. Plan updates are available in safe mode too because they do not read or modify files, and the terminal renders them as a compact styled checklist while the model receives only a short acknowledgement.
10
+
7
11
### Changed
8
12
9
13
-**File-edit tool results are now fixed-size summaries.**`edit_file`, `write_file` (when it overwrites an existing file), and `morph_edit_file` previously returned the full syntax-highlighted diff to the model as the tool result. The colored diff carried truecolor ANSI escape sequences that roughly multiplied the byte count per line, and the tool result stayed in conversation history for every subsequent turn — so a session with many edits paid that bloated cost again on each later turn, and a single large rewrite could push the response into the hundreds of thousands of tokens. The model now sees a fixed two-line summary (`Success. Updated the following files:` followed by `M <path>`) regardless of edit size, while the terminal still renders the full colored diff exactly as before. If the model needs to verify the post-edit state it can re-read a range of the file.
"7. View images (user includes image path or URL in their message)",
56
+
"8. Update a visible task plan for multi-step work",
56
57
];
57
58
58
59
if has_code_search {
59
-
features.push("8. Search code using ripgrep");
60
+
features.push("9. Search code using ripgrep");
60
61
}
61
62
62
63
let edit_instruction = if has_morph {
@@ -90,6 +91,7 @@ When helping users:
90
91
- Never run destructive or irreversible shell commands (e.g., rm -rf, rm, rmdir, dd, mkfs*, fdisk/parted, wipefs, chmod/chown -R on broad paths, truncate, :>, >/dev/sd*, kill -9 on system services).
91
92
Prefer read-only commands and dry-runs; if a potentially destructive action seems necessary, stop and request explicit confirmation before proceeding.
92
93
- Explain your reasoning when using tools
94
+
- Use update_plan for complex or multi-step tasks, and keep exactly one step in_progress when work is underway
93
95
94
96
Outside Workspace Access (three separate scopes, each prompted independently):
95
97
- Read scope: read_file and list_directory can access absolute or ~/ paths. If not pre-configured, the user is prompted to allow access and can optionally remember the decision.
0 commit comments