Summary
3-level permission system (deny > allow) + git checkpoints before writes.
Permissions
~/.tri-api/settings.json # user (global)
.tri-api/settings.json # project (per-repo, overrides user)
Settings format:
{
"permissions": {
"allow": ["bash(git diff *)", "bash(zig build *)", "read_file(*)"],
"deny": ["bash(rm -rf *)", "write_file(.env)", "bash(git push *)"]
}
}
deny wins over allow (same as Claude Code).
Checkpoints
Git stash snapshot before every write_file tool execution.
/undo command to restore from checkpoint.
Files
| File |
Action |
LOC |
src/tri-api/permissions.zig |
NEW |
~150 |
src/tri-api/checkpoint.zig |
NEW |
~100 |
src/tri-api/tool_executor.zig |
MOD |
+20 |
src/tri-api/main.zig |
MOD |
+10 |
bot/handlers.zig |
MOD |
+15 |
Acceptance Criteria
Summary
3-level permission system (deny > allow) + git checkpoints before writes.
Permissions
Settings format:
{ "permissions": { "allow": ["bash(git diff *)", "bash(zig build *)", "read_file(*)"], "deny": ["bash(rm -rf *)", "write_file(.env)", "bash(git push *)"] } }deny wins over allow (same as Claude Code).
Checkpoints
Git stash snapshot before every
write_filetool execution./undocommand to restore from checkpoint.Files
src/tri-api/permissions.zigsrc/tri-api/checkpoint.zigsrc/tri-api/tool_executor.zigsrc/tri-api/main.zigbot/handlers.zigAcceptance Criteria
/undorestores last checkpointzig buildclean