Safety
When Fisk AI runs a command in a CLI tool it passes a slice of arguments to the exec system call. No shell is involved
that can be escaped or influenced.
App Builder is often involved and calls shell scripts, so App Builder commands need to be written defensively.
- Use type hints on arguments for ints, floats and so on
- Use
is_shellsafe(value)on string input arguments - Use escaping when passing arguments to commands, for example
{{ .Arguments.message | escape }} - Tag commands with the various helper tags so the harness understands the intent
- Mark every mandatory argument as
required
Fisk AI has no tools that can interact with arbitrary files on the system. The only way it interacts with the system is through the supplied tools or the Memory feature.
Every command the agent runs gets the same protections:
- Its output combines stdout and stderr, preserving order, and is capped at 64 KiB so a chatty command cannot flood the model’s context
- The
ANTHROPIC_API_KEYis stripped from its environment, so a tool can never read the agent’s own credentials LLMFORMAT=1is set, signalling fisk applications to render output suited to an LLM rather than a terminal