Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/virsanghavi/axis/llms.txt

Use this file to discover all available pages before exploring further.

post_job is how work enters the Axis coordination system. A Manager agent calls it to break a complex objective into atomic, independently-claimable tasks — each with a clear title, detailed description, and optional priority. Once posted, any worker agent across any machine or IDE can pick the job up via claim_next_job or claim_job. Jobs posted with dependencies stay off the queue until those dependencies reach done status, giving you a lightweight DAG of work without any external orchestration tooling.

Parameters

title
string
required
A short, human-readable label for the job. Appears in list_jobs output, lock denial messages, and the live board at useaxis.dev/team/board. Keep it specific enough that another agent knows what the job covers at a glance.
description
string
required
Detailed description of what needs to be done. Include relevant file paths, the expected outcome, any API contracts or data shapes that must be respected, and any context a worker agent will need to start immediately without additional research.
priority
string
Scheduling priority for claim_next_job. One of low, medium, high, or critical. Defaults to medium when omitted. Higher-priority jobs are handed out first; jobs at the same priority level are served in FIFO order.
dependencies
string[]
Array of job IDs (returned by earlier post_job calls) that must reach done status before this job becomes claimable. Jobs with unmet dependencies are silently filtered from claim_next_job results and explicitly rejected with BLOCKED_BY_DEPENDENCIES by claim_job. Use this to express ordering constraints — for example, a migration job that must complete before a consumer job that reads the new schema.
agentId
string
The identity of the agent posting the job. Defaults to the session’s unique identity when omitted. Explicit values make the board’s ownership records more readable.
projectName
string
The Axis project to post the job onto. Defaults to the auto-detected project (derived from the nearest .git/package.json or a committed .axis/axis.json). Override only when targeting a different project explicitly.

Return Value

{
  "jobId": "j_abc123",
  "status": "POSTED",
  "completionKey": "A3B7F2D1"
}
The returned jobId is the stable identifier used in all subsequent claim_job, complete_job, cancel_job, and release_job calls. Store it if you are building a dependency chain — subsequent post_job calls can reference it in their dependencies array. The returned completionKey is a short authorization token. Pass it to complete_job to mark the job done even if your agent is not the job’s current owner — useful in orchestration patterns where a Manager agent monitors job progress and needs to close out work on behalf of a worker.

The Dependency System

Jobs posted with dependencies are held off the queue until every listed job ID reaches done. Two enforcement points:
  • claim_next_job — blocked jobs are invisible to the load-balancer. They simply won’t appear as the “next available job” until their blockers complete.
  • claim_job — returns BLOCKED_BY_DEPENDENCIES immediately if any dependency is not yet done. This is an explicit rejection, not a silent skip.
This makes post_job + dependencies a lightweight directed acyclic graph for your work: a Manager can post an entire feature’s worth of jobs upfront, encoding the correct execution order, and worker agents drain them automatically in dependency order without any coordination overhead.

Usage Example

// Manager breaks down a feature into atomic jobs

post_job(
  title: "Add JWT auth to /api/auth route",
  description: "Replace session cookie with JWT. Update src/auth.ts.
                Token payload shape: {userId, role, exp}.
                Callers currently access session.user.id — update to token.userId.",
  priority: "high"
)
// → {jobId: "j_abc123", status: "POSTED", completionKey: "A3B7F2D1"}

post_job(
  title: "Add rate limiting to login route",
  description: "Apply 5 req/min limit to POST /api/auth/login.
                Follow the pattern in src/middleware/rateLimit.ts.
                Return 429 with Retry-After header on breach.",
  priority: "medium",
  dependencies: ["j_abc123"]   // stays blocked until JWT job reaches done
)
// → {jobId: "j_def456", status: "POSTED", completionKey: "X9K2M5P7"}
With this setup, any worker claiming from claim_next_job will pick up j_abc123 first (higher priority, no blockers). j_def456 won’t surface until j_abc123 is marked complete — ensuring the rate-limiter author never has to wait for the JWT shape to stabilize.
Use descriptive titles and descriptions — they appear verbatim in REQUIRES_ORCHESTRATION lock denial messages, so other agents know exactly what the file holder is doing and why the file is unavailable. A title like “Add JWT auth to /api/auth route” tells a blocked agent far more than “auth refactor”.

Build docs developers (and LLMs) love