Concepts
Apitomy Axiom is an event-driven orchestration platform that uses AI to automate software development workflows. It has two primary use-cases:
- Reports — AI-generated reports about your repositories and projects, produced on a schedule or on demand
- Event-driven automation — monitor GitHub and Jira for activity, triage incoming events with an AI Manager, and delegate work to AI or human actors
Both use-cases share a common set of configuration items — tools, secrets, MCP servers, and more — that give the AI agents the capabilities they need. This guide explains each concept and how they relate.
Reports
Reports are AI-generated documents that summarize activity, status, or analysis across your repositories. A weekly status report, a dependency audit, a PR review summary — any recurring or ad-hoc analysis that an AI agent can produce by running shell commands and reading data from your systems.
How Reports Work
Report Definition ──► Axiom triggers AI agent ──► Agent runs tools ──► Report (Markdown)
(template) (on schedule or ad hoc) (shell, MCP) (stored + viewable)
- You create a Report Definition that describes what the report should contain
- Axiom triggers the AI agent — either on a schedule (hourly, daily, weekly, monthly) or when you click Run Now
- The agent executes the allowed tools (shell commands, MCP tools) to gather data
- The agent produces a Markdown report based on your prompt template
- The report is stored and viewable in the Axiom UI
Report Definitions
A report definition is the template and configuration for a recurring report. Each definition includes:
| Field | Purpose |
|---|---|
| Name | Display name for the definition and its generated reports |
| Prompt template | Instructions for the AI agent — what to analyze, how to structure the output |
| Schedule | When to run: hourly, daily, weekly, monthly, or not scheduled (ad hoc only) |
| Time window | Data range: since last run, last 24 hours, last 7 days, or last 30 days |
| Allowed tools | Shell commands and MCP tools the agent may use |
| Environment | Custom environment variables injected into the subprocess |
| Initial labels | Labels automatically applied to generated reports |
| Enabled | Whether the schedule is active |
Prompt Template Placeholders
The prompt template supports runtime placeholders that Axiom substitutes before sending to the AI agent:
| Placeholder | Value |
|---|---|
{{repositories}} |
Comma-separated list of repositories from your event sources |
{{timeRangeStart}} |
Start of the report time window (ISO date) |
{{timeRangeEnd}} |
End of the report time window (ISO date) |
{{timeWindow}} |
Human-readable time window description (e.g. "last 7 days") |
Example
A weekly status report definition might look like:
- Schedule: Weekly (Monday at 08:00)
- Time window: Last 7 days
- Prompt template: Instructions to summarize merged PRs, open PRs, releases, and suggest next-week priorities
- Allowed tools:
Bash(gh *)to query GitHub, plus toolset references like@Report Tools
Generated Reports
Each time a report definition runs, it produces a Report — a stored Markdown document with metadata:
- Title — derived from the definition name and time range
- Status — Pending, Generating, Completed, or Failed
- Time range — the start and end dates covered
- Cost — AI token cost in USD
- Duration — how long generation took
- Labels — inherited from the definition, editable per report
Reports are browsable, filterable, and searchable in the UI.
Event-Driven Automation
The second use-case is monitoring external systems for activity and responding automatically. An AI Manager triages each event and decides what action to take — creating a project, assigning a task to an actor, or ignoring the event entirely.
The Event Pipeline
Event Source ──► Event Queue ──► AI Manager ──► Decision ──► Action
(GitHub/Jira) (normalized) (triage) (structured) (create project,
assign task, ignore)
- Event Sources poll GitHub or Jira repositories for new activity at a configurable interval
- New activity is normalized into Events and placed in an internal queue
- The Pipeline Orchestrator dequeues events and passes them to the AI Manager
- The Manager analyzes the event and produces a structured Decision
- The orchestrator executes the decision
Event Sources
An event source connects Axiom to an external system. Each source is configured with:
| Field | Purpose |
|---|---|
| Name | Display name |
| Source type | github or jira |
| Repository/Project URL | Full URL to the GitHub repo or Jira project |
| Poll interval | How often to check for new activity (in seconds) |
| Authentication secret | Which secret to use for API access (or auto-detect) |
| Enabled | Whether polling is active |
When enabled, a GitHub event source polls for new issues, pull requests, comments, and reviews. A Jira event source polls for new issues and comments.
AI Manager
The Manager receives events and produces structured decisions. It uses the configured AI engine (Claude Code or OpenCode) to analyze each event in context.
The Manager's behavior is controlled by two editable templates:
- System prompt — defines the Manager's role, personality, and output format. This is sent as system context for every evaluation.
- Prompt template — the per-event message sent to the AI. Placeholders are substituted at runtime:
| Placeholder | Value |
|---|---|
{{actionTypes}} |
Formatted list of all configured action types |
{{actors}} |
Formatted list of all configured actors |
{{source}} |
Event source type (e.g. "github") |
{{eventType}} |
Event type (e.g. "issue-created", "comment-added") |
{{issueRef}} |
Issue reference (e.g. "owner/repo#42") |
{{repository}} |
Repository (e.g. "owner/repo") |
{{payload}} |
Raw event payload JSON |
{{projectContext}} |
Existing project details and recent task history |
Manager Decisions
The Manager produces one of these decision types:
| Decision | What Happens |
|---|---|
| create_project | A new Project is created to track work for this issue |
| assign_task | A Task is created and assigned to an Actor using a specific Action Type |
| update_project | An existing Project's status or details are updated |
| ignore | No action — the event is logged but nothing else happens |
| request_info | The Manager needs more context before deciding |
Each decision includes a confidence score (0.0–1.0). Only decisions above the configured threshold (default 0.7) are auto-executed. Lower-confidence decisions are flagged for human review in the UI.
Projects
A Project is a long-lived entity that tracks all work related to an issue. When the Manager decides to create a project for a GitHub issue, Axiom:
- Creates a Project record linked to the issue reference (e.g.
owner/repo#42) - Sets up a workspace directory for the Project
- Tracks all tasks, events, and activity related to that issue
Projects follow a lifecycle state machine:
The project detail page shows:
- Summary — status, issue reference, repository, labels, creation date
- Tasks — all tasks assigned within this project
- Thread — a chronological log of all activity (events, decisions, task results)
- Events — raw events associated with this project
- Metrics — AI cost, token usage, and disk usage for this project
Action Types
An Action Type defines a kind of work that can be performed. It is the bridge between a Manager decision ("assign a task") and the actual execution. Each action type specifies:
| Field | Purpose |
|---|---|
| Name | Identifies the action type (e.g. "Implement Feature", "Code Review") |
| Execution mode | actor (AI agent or human) or script (bash script) |
| Prompt template | Instructions for the AI agent (actor mode) |
| Script template | Bash script to execute (script mode) |
| Allowed tools | Which tools the AI agent may use |
| Environment | Custom environment variables for the subprocess |
| Model / Engine | Override the global AI model or engine for this action type |
| User triggerable | Can be manually triggered from the project detail page |
| Manager triggerable | Can be selected by the AI Manager during triage |
| Emits event | Whether completing this action creates an internal event (enabling chained actions) |
Execution Modes
Actor mode — the action is executed by an AI agent (or a human actor). The agent receives the prompt template with placeholders substituted:
| Placeholder | Value |
|---|---|
{{managerInput}} |
Instructions/context from the Manager's decision |
{{actionType}} |
The action type name |
{{issueRef}} |
Issue reference |
{{repository}} |
Repository |
{{projectName}} |
Project name |
Script mode — a bash script runs directly. The script template supports the same placeholders plus additional ones:
| Placeholder | Value |
|---|---|
{{projectId}} |
Internal project ID |
{{eventId}} |
The triggering event ID |
{{taskId}} |
The task ID |
{{apiBaseUrl}} |
Axiom's own API base URL (for callbacks) |
Tasks
A Task is a single unit of work within a Project. Tasks are created when:
- The Manager assigns work via an action type
- A user manually triggers an action type from the project detail page
Each task records its assigned actor, action type, execution output, status, cost, and duration. Task statuses:
| Status | Meaning |
|---|---|
| Pending | Queued, waiting for an available actor |
| In Progress | Currently being executed |
| Awaiting Input | The AI agent asked the user a question (actor mode) |
| Completed | Finished successfully |
| Failed | Execution failed |
| Cancelled | Cancelled before completion |
Actors
An Actor is an entity that performs tasks. Axiom supports two types:
AI Agent — uses the configured AI engine (Claude Code or OpenCode) as a subprocess. The agent receives the action type's prompt template, runs with the allowed tools, and reports back with results.
Human — sends notifications (via Slack or Telegram, when configured) to a team member. The task remains in a pending state until the human updates it through the UI.
Each actor has:
- Name and description
- Type —
ai-agentorhuman - Capabilities — tags that help the Manager choose the right actor for a task (e.g. "analyze", "implement", "review")
Why Create Multiple AI Agent Actors?
Each AI agent actor can only execute one task at a time. Creating multiple AI agent actors serves two purposes:
-
Control concurrency — the number of AI agent actors determines how many AI tasks can run simultaneously. Three AI agent actors means at most three tasks executing in parallel. If all actors are busy, new tasks queue until one becomes available.
-
Restrict which actors handle which work — an actor's capabilities are matched against the action type when the Manager assigns a task. By giving different actors different capabilities, you control which actors are eligible for which types of work. For example, you might create a single actor with the capability "security-review" so that security review tasks always run one at a time, while having three actors with "implement" capability to allow three feature tasks in parallel.
Supporting Configuration
Both reports and event-driven automation share the following configuration items.
Tools
Tools serve two purposes:
-
Encapsulate deterministic behavior — a tool wraps a scripted operation (a shell command, an API call, a data query) into a single named unit of work. Instead of relying on the AI agent to improvise a sequence of raw commands, you define a tool that performs the operation consistently every time. This makes AI-driven tasks more reliable and repeatable.
-
Control what AI agents can do — an action type's Allowed Tools list is a strict allowlist. The AI agent can only use tools that are explicitly permitted — everything else is denied. This gives you fine-grained control over what each type of work is allowed to touch. A "code review" action type might allow read-only tools, while an "implement feature" action type might also allow write operations.
Each tool has:
- Name — a unique identifier, often matching a CLI pattern (e.g.
Bash(gh pr list *)) or an MCP tool name (e.g.mcp__axiom-tools__github_open_prs) - Description — what the tool does (helps the AI agent decide when to use it)
- Labels — for organization and filtering
Tools are referenced in the Allowed Tools list of action types and report definitions. Only tools explicitly listed are available to the agent — unlisted tools are denied.
Tool Patterns
You can use glob-style patterns for shell commands. For example, Bash(git log *)
allows any git log command. Bash(gh *) allows any GitHub CLI command.
Toolsets
A Toolset is a named collection of tools. Instead of listing every tool individually in
an action type or report definition, you can reference a toolset using the @ prefix:
When an action type includes @Report Tools in its allowed tools, all tools in that
toolset are made available to the agent. This keeps tool lists manageable and consistent
across multiple action types and report definitions.
MCP Servers
An MCP (Model Context Protocol) Server provides tools to AI agents via the MCP standard. Axiom can connect to MCP servers using two transport modes:
- stdio — Axiom launches the server as a subprocess using a configured command and arguments
- HTTP — Axiom connects to a running server at a configured URL
MCP servers extend the tool ecosystem beyond built-in shell commands. For example, you might run a custom MCP server that provides database query tools, API clients, or domain-specific analysis capabilities.
Secrets
Secrets are encrypted key-value pairs injected as environment variables into AI agent and script subprocesses. Common uses:
GH_TOKEN— GitHub API authenticationJIRA_API_TOKEN— Jira API authentication- Provider-specific tokens for other integrations
Secret values are encrypted at rest and never returned by the API. They are automatically
injected into all subprocesses by default. For fine-grained control, action types and
report definitions can specify a custom Environment that selectively references
secrets using ${secret:SECRET_NAME} syntax.
Secrets are also used by Event Sources for API authentication when polling.
AI Engine
Axiom's AI engine is pluggable. The global engine setting determines which CLI is used for Manager evaluations and actor task execution:
| Engine | CLI | Description |
|---|---|---|
| Claude Code | claude |
Anthropic's Claude Code CLI (default) |
| OpenCode | opencode |
OpenCode CLI with multi-provider support |
Individual action types can override the global engine and model selection, allowing you to use different models for different types of work.
The AI Engine page in the UI shows the active engine, health checks, and available models.
Configuration Packs
Configuration Packs let you export and import bundles of configuration items as JSON files. A pack can include any combination of:
- Action types
- Tools
- Toolsets
- MCP servers
- Report definitions
This is useful for sharing configurations between Axiom instances, backing up configuration, or distributing pre-built setups.
How It All Fits Together
The diagram below shows how the concepts relate:
┌─────────────────────────────────────────────────────────────────────┐
│ REPORTS │
│ │
│ Report Definition ──► AI Agent ──► Report │
│ ├─ prompt template │ │
│ ├─ schedule │ uses │
│ ├─ allowed tools ────────┼──► Tools / @Toolsets / MCP Servers │
│ └─ environment ──────────┼──► Secrets │
│ │ │
│ AI Engine (Claude Code / OpenCode) │
│ │
├─────────────────────────────────────────────────────────────────────┤
│ EVENT-DRIVEN AUTOMATION │
│ │
│ Event Source ──► Event ──► Manager ──► Decision ──► Task ──► Actor │
│ └─ secret ├─ system prompt │ │ │ │
│ └─ prompt template │ │ │ │
│ │ │ uses │
│ Action Type │ │ │
│ ├─ prompt ─────┘ │ │
│ ├─ tools ───────────────┼──► │
│ └─ environment ─────────┼──► │
│ │ │
│ Tools / @Toolsets / MCP Servers ◄──┘ │
│ Secrets ◄──────────────────────────┘ │
│ │
│ AI Engine (Claude Code / OpenCode) │
└─────────────────────────────────────────────────────────────────────┘
Shared building blocks: Tools, Toolsets, MCP Servers, Secrets, and the AI Engine are shared across both use-cases. Configure them once and reference them from any number of report definitions and action types.
Reports are self-contained — they only need a report definition with a prompt template and tools. No event sources, projects, or actors are required.
Event-driven automation uses the full pipeline — event sources feed events to the Manager, which creates projects and assigns tasks to actors using action types. The action types determine what tools and prompts the actors use.
Traces
A Trace is a hierarchical record of every step that occurred during a single pipeline run or report generation. While the Activity Log shows a flat timeline of events across all runs, a trace shows the tree structure of one run — which steps led to which, how long each took, and whether each succeeded or failed.
When Traces Are Created
Axiom creates a trace automatically whenever it processes an event or generates a report:
| Trace Type | Trigger | Root Node |
|---|---|---|
event-pipeline |
An event is dequeued for processing | event-ingested |
report-generation |
A report definition runs (scheduled or ad hoc) | report-triggered |
Each trace has a status (in-progress, completed, or failed), timestamps, and a
human-readable summary. Traces with asynchronous tasks (e.g. AI agent execution) remain
in-progress until all tasks complete.
Trace Nodes
Each step in the pipeline creates a trace node — a lightweight breadcrumb that records what happened at that point. Nodes form a parent-child tree: the root node is the trigger (event received or report triggered), and child nodes represent subsequent steps like manager evaluation, decision processing, task creation, and tool execution.
Every node has:
- Node type — identifies the kind of step
- Status —
in-progress,completed, orfailed - Summary — a brief description of what happened
- Duration — how long the step took (calculated at completion)
- Entity reference — a pointer to a more detailed record elsewhere in the system (an activity log entry, a task, an event, a tool execution record, etc.)
The entity reference pattern keeps trace nodes small and fast to query. When you click a node in the UI, the detail is fetched from the referenced entity on demand.
Node Types
| Node Type | Meaning | Appears In |
|---|---|---|
event-ingested |
An event was received and processing began | Event pipeline (root) |
manager-evaluation |
The AI Manager was invoked to triage the event | Event pipeline |
decision-processed |
A single decision from the Manager was executed | Event pipeline |
task |
A task was created and assigned to an actor | Event pipeline |
tool-execution |
An MCP tool was invoked during task or report execution | Both |
escalation |
The Manager escalated a decision for human review | Event pipeline |
event-ignored |
The Manager decided to ignore the event | Event pipeline |
report-triggered |
A report generation was triggered | Report (root) |
report-ai-invoked |
The AI agent was launched to generate the report | Report |
Tool Call Tracing
When Axiom launches an AI agent to execute a task or generate a report, it passes trace
correlation data to the subprocess via environment variables (AXIOM_TRACE_ID and
AXIOM_PARENT_NODE_ID). MCP tool servers that Axiom generates for the agent read these
variables and call back to Axiom's API to register each tool invocation as a trace node.
This creates a detailed record of every tool the agent called, including the full JSON
input and output.
Tool call tracing is non-intrusive — if the callback fails, the tool execution continues normally. Tracing never interrupts the agent's work.
Viewing Traces
Traces are accessible from several places in the UI:
- Logs > Traces — browse and filter all traces
- Events page — click View Trace on an event row to jump to its pipeline trace
- Report detail page — click View Execution Trace to see the report's trace
The trace detail page renders the node tree as an interactive tree. Click any node to view its full detail, including referenced entity data. See Logging and Debugging for a full guide to reading traces.