Naxe defines 33 tools with explicit schemas and descriptions. Naming is verb-forward and clear (create_job, add_tasks, claim_task, etc.). Most tools have 50-200 char descriptions aligned with LLM optimization baselines. However, several tools lack parameter descriptions (e.g., edit_job, edit_task, set_worktree_paths have minimal schema detail), and output schemas are not documented. Error handling guidance is absent, tools do not indicate what to do on failure or how to recover. Composition is strong: tools chain well (create_job → add_tasks → claim_task → complete_task), and the dependency-graph pattern is well-articulated. Security is reasonable (no exposed secrets in params), but permission gates and audit trail documentation are implicit rather than explicit.
Add a dependency between two jobs.
Add a comment to a task. Author type must be 'agent' or 'human'.
Add tasks with explicit dependencies to a job. Define the full dependency graph up front using depends_on. Naxe will enforce execution order — you do not need to track this yourself. Rejects cycles and unknown dependency IDs. job_id is optional — if omitted, a new job is auto-created using the first task's name.
Approve an awaiting_approval task, marking it completed. Returns a dict with the updated task and newly_unblocked tasks.
Cancel a job and all its pending tasks.
Cancel a single pending or in_progress task. Has no effect on tasks that are already completed, failed, or cancelled. Returns the updated task.
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure. E.g., get_job_status returns 'all tasks with statuses' but field names, types, and nested structure are not specified.
edit_job and edit_task have minimal descriptions ('Edit job/task properties') and no schema detail on which properties are editable or their types. LLMs cannot determine valid inputs.
No error handling guidance. Tools do not document failure modes, recovery steps, or actionable error messages. E.g., cancel_task says 'Has no effect on completed/failed/cancelled tasks' but does not explain what error is returned or how the agent should respond.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Atomically find and claim the next available task for this agent.
Claim a task before starting work on it. Atomic — prevents two agents from double-claiming the same task. Returns the task details. Call this before executing any task returned by get_next_actions.
REQUIRED: Call this immediately when a task is finished. Marks it complete and returns newly_unblocked — the tasks that just became available. Pass output to record findings or results; downstream tasks can read it via get_job_status. Always call this before moving on; do not skip it or track completion internally. NOTE: Tasks with human_task=true can never be completed by agents — they must be resolved via approve_task or reject_task.
REQUIRED: Call this at the start of any multi-step task to create a job in Naxe. Returns a job_id used in all subsequent calls. Do not use internal task tracking — use this instead.
Create a reusable job template.
Edit job properties.
Edit task properties.
Mark a task as failed with an optional reason. Use this instead of silently abandoning a task so the job status remains accurate.
Retrieve blocking reasons for all tasks in a job.
Retrieve all events for a job.
Full snapshot of a job: all tasks with statuses, ownership, and progress counters (total/completed/in_progress/pending/failed). Task records include both input (structured task data) and output (result written by the agent). Use to check overall progress or audit what has and hasn't been done. job_id accepts a full UUID or a unique prefix (e.g. the first 8 chars of the ID).
REQUIRED: Call this to find out what to work on next. Returns only tasks that are fully unblocked right now — all their dependencies are complete. Always use this instead of deciding task order yourself. Includes unblocked_by context showing what just became available.
Retrieve all comments for a task, optionally filtered by approval round.
Retrieve all events for a task.
Send a heartbeat for an in-progress task to indicate it is still being worked on.
Create a job from a template.
List all jobs, optionally filtered by status.
List all available job templates.
Pause a job, preventing new task claims.
Hard-fail an awaiting_approval task. Marks the task as failed, stores reason in approval_notes, and auto-retries via retry_task() if max_retries allows.
Transition an in_progress task to awaiting_approval. Only the owning agent may request approval.
Requeue a failed task for retry.
Resume a paused job.
Return an awaiting_approval task to pending with feedback for the agent. Stores feedback as a human comment, resets status to pending, increments approval_round, and clears owner_agent_id so the task can be re-claimed.
Set the maximum number of concurrent workers for a job.
Set worktree paths for a job.
Update progress information for an in-progress task.
set_worktree_paths description is vague ('Set worktree paths for a job') and schema shows 'paths' as type object with no property definitions. LLMs cannot construct valid input.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes without parsing descriptions. E.g., cancel_job is destructive but unmarked.