Tools
The agent has access to the following tools:
| Tool | Description |
|---|---|
read_file |
Read file contents with optional offset/limit |
read_image |
Send a local PNG, JPEG, GIF, or WebP image to a multimodal model (not registered for text-only models) |
write_file |
Create or overwrite files, creating parent directories |
edit_file |
Surgical text replacement in files (whitespace-tolerant match) |
multi_edit |
Apply an ordered batch of edits to one file atomically (all-or-nothing) |
ls |
List a directory's immediate contents (gitignore-aware) |
exec_command |
Run foreground shell commands with real-time streaming output |
wait |
Pause before subsequent sequential tool calls, with an interruptible countdown |
glob_files |
Find files matching a glob pattern (gitignore-aware) |
grep_files |
Search file contents using ripgrep regex (gitignore-aware) |
web_search |
Search the web via DuckDuckGo |
web_fetch |
Fetch and parse content from a URL with an interruptible 30-second overall timeout; honors HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, SOCKS_PROXY, and NO_PROXY from the environment |
remove_file |
Remove a file or directory |
load_skill |
Load the full prompt instructions for a skill by name |
start_process |
Start a managed background process with file-backed output and live status |
inspect_processes |
Inspect one or all managed background processes, with an optional bounded log tail for one process |
wait_processes |
Block until a selected managed process exits, optionally writes output, or an optional timeout expires; omit the timeout for ordinary finite jobs |
stop_process |
Stop a managed background process and its child process tree |
Images loaded with read_image remain in conversation history for subsequent
tool rounds and follow-up questions. Saved sessions retain the image bytes, so
resuming does not require the original file. Images remain available until their
messages are removed by context compaction, rewind, or clearing the conversation.
Repeated requests to image-capable models include retained images and their
image-token costs, subject to a separate byte budget. Inline image data is capped
at 24 MiB per request to leave headroom below common 32 MB HTTP body limits.
Older images are replaced with text placeholders in outgoing requests when
necessary; their saved bytes are not deleted. The newest image is kept (an image
larger than 24 MiB must be resized or compressed). A gateway body-size
rejection (content_length_limit or HTTP 413) triggers one recovery attempt:
reduce older image payloads, or try context compaction if images cannot shrink.
The reduced image budget applies to subsequent requests in the live context,
while still preserving the newest image.
If recovery fails, reduce attachment sizes or use /clear to start a new session;
raising context_length does not raise the gateway's byte limit.
Switching to a text-only model sends a text placeholder instead;
the saved image bytes remain available when switching back. Image tool payloads
are not treated as user prompts in session previews, replay, or rewind.
Context sizing uses reported prompt usage when available and a 2,048-token
planning allowance per added or unmeasured image; actual costs vary by model,
resolution, and detail. Image costs are kept separate from text calibration and
included when deciding which older messages to compact.
Managed background process tools are built into ene so permitted model calls,
the /ps command, and the live terminal/web status use the same process
registry. Like other built-in model tools, their advertisement is subject to
the active persona's tool policy; /ps and live status remain available to the
UI.
While jobs are active, the terminal shows running and finished counts followed by
one line per running process. The Web UI presents the same activity as individual
rows in the composer dock. Both include the managed ID, label, automatically
formatted runtime, and latest log line. Managed IDs are short session-local
numbers (1, 2, ...). Use /ps to list all jobs with their latest output,
/ps <label|process-id> [tail-chars] for details and recent output, or
/ps stop <label|process-id> to stop one manually. Combined
output is stored in .ene/processes/<process-id>-<unique-suffix>.log.
Processes are live-session-scoped. They survive terminal detach and session switching, but are terminated on explicit exit or ene kill. The bundled monitor skill adds an active-monitoring workflow. For periodic monitoring, call the core wait tool first and put the inspection or status calls after it in the same sequential tool-call batch; do not group the wait and checks in parallel.
Skill-provided tools
A trusted skill may ship executable Python in a root tools.py (a module-level TOOLS list of {schema, run, describe, describe_output} entries; both descriptors are optional). describe(arguments) returns a ToolCallDescription for the call
label. describe_output(result) returns a concise string for the successful
result; failures use the standard error formatter. This keeps each skill's
call and result semantics beside its tools while the shared UI owns rendering.
The full result still goes to the model, while the concise output is persisted
for consistent live and replay display. A skill's tools are registered on its first load and remain available for that session. /skills reload removes tools only when their skill is no longer discovered; use /clear or restart Ene to reload an edited tools.py. A schema collision or broken tools.py fails the skill load instead of partially registering its tools.
The bundled batch skill uses the agent's already configured provider to run direct, tool-free model requests without exposing credentials to the skill. It adds bounded parallelism, structured output, durable JSONL results, and resume support. See its batch instructions for the workflow.
| Tool | Description |
|---|---|
run_batch |
Map one direct LLM transformation over independent text or image items, appending results to a resumable JSONL file |