Agent skill

Ax Agent Observability

by dosco in dosco/aithy

This skill helps an LLM generate correct AxAgent observability code using @ax-llm/ax.

Apache-2.0Auto-check passedDevOps & Cloud

Install Ax Agent Observability

skills CLI
$ npx skills add dosco/aithy --skill ax-agent-observability -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install dosco/aithy ax-agent-observability --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/dosco/aithy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ax-agent-observability .claude/skills/ax-agent-observability && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ax-agent-observability
GitHub stars
107
Token cost
~4.4k tokens
SKILL.md length
1,569 words
Files
1
Skills in repo
17
Repo updated
First seen
Licence
Apache-2.0

At a glance

This skill helps an LLM generate correct AxAgent observability code using @ax-llm/ax.

  • The user asks about axGlobals.onUsage
  • SKILL.md covers Choose The Smallest Hook, Global Runtime Defaults, Centralized Usage Observer and Actor Turn Callback, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Multi-tenant usage accounting

What it does

Ax Agent Observability is an agent skill from dosco/aithy. This skill helps an LLM generate correct AxAgent observability code using @ax-llm/ax. Use when the user asks about axGlobals.onUsage, usageContext, centralized or multi-tenant usage accounting, actorTurnCallback, onContextEvent, agentStatusCallback, onFunctionCall, reportSuccess, reportFailure, getChatLog(), getUsage(), resetUsage(), debug traces, progress updates, or telemetry for AxAgent runs.

Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in DevOps & Cloud, covering Observability, Accounting and bookkeeping and Multi-tenancy. The repository describes itself as: A personal AI agent that can work safely on your machine, remember useful context, and keep its data under your control. The licence is Apache-2.0.

When your agent uses it

  • The user asks about axGlobals.onUsage
  • Multi-tenant usage accounting
  • ActorTurnCallback
  • AgentStatusCallback

Example prompts

  • “/ax-agent-observability”

What it can do on your machine

Read from SKILL.md and the folder at commit 0c9855f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ax Agent Observability loads about 4.4k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 1,569 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~105
When it runs · the whole SKILL.md, loaded when a task matches
~4.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from dosco/aithy at commit 0c9855f, republished under its Apache-2.0 licence (© dosco). 1,569 words, ~4,370 tokens.

Download SKILL.mdSave it as .claude/skills/ax-agent-observability/SKILL.md (or your agent's skills folder).
name
ax-agent-observability
description
This skill helps an LLM generate correct AxAgent observability code using @ax-llm/ax. Use when the user asks about axGlobals.onUsage, usageContext, centralized or multi-tenant usage accounting, actorTurnCallback, onContextEvent, agentStatusCallback, onFunctionCall, reportSuccess, reportFailure, getChatLog(), getUsage(), resetUsage(), debug traces, progress updates, or telemetry for AxAgent runs.
version
24.0.16

AxAgent Observability Rules (@ax-llm/ax)

Use this skill when an agent needs runtime visibility, progress reporting, tracing, usage accounting, or chat-log access. For ordinary agent setup use ax-agent. For RLM runtime policy use ax-agent-rlm. For memories and dynamic skill loading use ax-agent-memory-skills.

Choose The Smallest Hook

  • Need a quick prompt/runtime trace during development -> start with debug: true.
  • Need structured per-turn code, raw runtime result, formatted output, provider thoughts, or actor stage -> use actorTurnCallback.
  • Need context-pressure and compaction telemetry -> use onContextEvent.
  • Need real-time task progress emitted by actor code -> use agentStatusCallback.
  • Need every runtime function call before execution -> use onFunctionCall.
  • Need model prompts/responses after a run -> use getChatLog().
  • Need centralized chat/embed usage across APIs, users, agents, and services -> use axGlobals.onUsage plus usageContext.
  • Need token usage by actor/responder -> use getUsage() and resetUsage().
  • Need usage split by context and task stages -> use getStagedUsage().
  • Need Ax program traces -> use getTraces().
  • Do not add multiple hooks unless the user clearly needs each output stream.

Global Runtime Defaults

OpenTelemetry and debug defaults come from the shared Ax runtime surface:

typescript
import { axGlobals, axCreateDefaultColorLogger } from '@ax-llm/ax';
import { metrics, trace } from '@opentelemetry/api';

axGlobals.rateLimiter = async (next, info) => next();
axGlobals.tracer = trace.getTracer('agent-app');
axGlobals.meter = metrics.getMeter('agent-app');
axGlobals.debug = true;
axGlobals.logger = axCreateDefaultColorLogger();
axGlobals.onUsage = (event) => usageQueue.enqueue(event);

Each agent run snapshots these globals. A forward-scoped rateLimiter, tracer, or meter overrides agent defaults, child-generator defaults, service hooks, and globals for that invocation. Ax carries it through the distiller, executor, responder, repeated actor turns, citation repair, built-in llmQuery, context-map work, checkpoint/tombstone summaries, and other direct internal model calls without mutating child programs or leaking across concurrent runs.

The limiter wraps model execution and its failures propagate. Tracer, meter, and usage-observer failures are fail-open. Runtime-hook spans contain metadata only—never prompts, outputs, tool arguments, or tool results—and preserve agent → internal AxGen → provider/tool parentage. External meter instruments do not replace or derive from balancer-local getMetrics() snapshots. Use AxAgent callbacks below when the caller needs structured agent-turn events rather than spans or metrics.

Centralized Usage Observer

Use the process-wide usage observer for application accounting across many agents, API routes, tenants, and users. Keep getUsage() for inspecting one agent instance after a run.

typescript
import { axGlobals } from '@ax-llm/ax';

axGlobals.onUsage = (event) => {
  usageQueue.enqueue(event); // Must return immediately.
};

await supportAgent.forward(
  llm,
  { query: request.body.query },
  {
    usageContext: {
      tenantId: auth.tenantId,
      userId: auth.userId,
      requestId: request.id,
      runId: crypto.randomUUID(),
      feature: 'support-chat',
      attributes: { environment: 'production' },
    },
  }
);

Rules:

  • The observer receives one immutable normalized event for each completed chat or embedding call that reports provider usage. A fully consumed stream emits once; an unconsumed or cancelled stream may not emit.
  • Events include operation, ai, model, normalized tokens, streaming, optional context, and available session or remote request IDs.
  • Put stable attribution such as application or environment in AI service-level usageContext. Put tenant, user, request, run, and feature attribution in per-call or per-forward usageContext.
  • Per-call context overrides service defaults. attributes are shallow-merged.
  • The observer is best-effort and fail-open. Ax does not await it and ignores observer failures, so synchronously enqueue and persist or aggregate out of band.
  • The registration is process-wide. A new assignment replaces the previous observer; set axGlobals.onUsage = undefined during test teardown or shutdown when appropriate.
  • In multi-process or serverless deployments, send events to a shared durable pipeline. Do not treat an in-memory total as application-wide accounting.
  • Keep identifiers opaque and attributes low-cardinality. Avoid prompts, responses, secrets, and other sensitive payloads.
  • Token events do not estimate currency cost. Apply a versioned provider/model pricing table downstream.

For direct AI calls and the complete event shape, also read ax-ai.

Actor Turn Callback

Use actorTurnCallback when the caller needs structured telemetry for each actor turn.

What it gives you:

  • code: the normalized JavaScript code the actor produced
  • stage: which actor produced the turn (distiller or executor)
  • result: the raw untruncated runtime return value from executing that code
  • output: the formatted action-log output string after Ax normalizes and truncates it for prompt replay
  • thought: the actor model's thought field when showThoughts is enabled and the provider returns one
  • executorResult: the full actor payload returned by the current actor stage, kept under this historical field name for compatibility
  • isError: whether the execution path for that turn was treated as an error
  • usage: token usage for this actor turn only
  • model: model used for this turn when explicitly set through executorModelPolicy
  • chatLogMessages: raw ChatML conversation for this turn, populated only when an actor turn callback is set

Use it for:

  • debug UIs that want to show code plus raw runtime results
  • tracing and analytics
  • capturing thought for internal diagnostics when supported by the provider
  • storing per-turn execution artifacts without scraping the prompt/action log

Important:

  • output is not raw stdout; it is the formatted replay string used in the action log.
  • result is the raw runtime result before Ax applies type-aware serialization and budget-proportional truncation.
  • thought is optional and only appears when the underlying AxGen call had showThoughts enabled and the provider actually returned a thought field.
  • actionLogEntryCount and guidanceLogEntryCount reflect the live log sizes after the turn is processed, including resumed runs.
  • actorTurnCallback fires for the configured agent instance. Child agents passed through functions: [...] should define their own callback if you need their internal actor turns; use onFunctionCall on the parent to observe the parent-side child-agent invocation.

Good pattern:

typescript
const supportAgent = agent('query:string -> answer:string', {
  contextFields: ['query'],
  runtime,
  actorTurnCallback: ({
    stage,
    turn,
    actionLogEntryCount,
    guidanceLogEntryCount,
    code,
    result,
    output,
    thought,
    isError,
    usage,
    model,
  }) => {
    console.log({
      turn,
      stage,
      model,
      actionLogEntryCount,
      guidanceLogEntryCount,
      isError,
      code,
      rawResult: result,
      replayOutput: output,
      thought,
      usage,
    });
  },
  executorOptions: {
    model: 'gpt-5.4-mini',
    showThoughts: true,
  },
});

Callback type:

typescript
actorTurnCallback?: (turn: {
  stage: 'distiller' | 'executor';
  turn: number;
  actionLogEntryCount: number;
  guidanceLogEntryCount: number;
  executorResult: Record<string, unknown>;
  code: string;
  result: unknown;
  output: string;
  isError: boolean;
  thought?: string;
  usage?: AxProgramUsage[];
  model?: string;
  chatLogMessages?: ReadonlyArray<{ role: string; content: string }>;
}) => void | Promise<void>;

actorTurnCallback?: (turn: {
  stage: 'distiller' | 'executor';
  turn: number;
  actionLogEntryCount: number;
  guidanceLogEntryCount: number;
  executorResult: Record<string, unknown>;
  code: string;
  result: unknown;
  output: string;
  isError: boolean;
  thought?: string;
  usage?: AxProgramUsage[];
  model?: string;
  chatLogMessages?: ReadonlyArray<{ role: string; content: string }>;
}) => void | Promise<void>; // deprecated alias

Context Event Observability

Use onContextEvent when the caller needs structured telemetry about prompt pressure and compaction. It does not change model behavior directly; it is for logs, evals, and dashboards.

Events:

  • budget_check: character-based prompt pressure before an actor turn, with detailed metrics kept out of the actor prompt
  • checkpoint_created / checkpoint_cleared: checkpoint lifecycle events with covered turns and reason
  • tombstone_created: compact resolved-error summary creation
  • relevance_ranking: emitted once per ranked domain per forward when relevanceRanking is enabled; carries domain ('modules' | 'skills' | 'memories'), the shortlist ({ id, score }[], most relevant first), and suppressed (true when the low-confidence guard emitted no hint)
  • field_auto_promoted: emitted once per field per run when autoUpgrade keeps an oversized undeclared input value runtime-only; carries fieldName, originalChars, and promptPreviewChars (undefined when no inline preview was kept)

To measure whether the advisory hint helps, join per forward: relevance_ranking.shortlist ids against what the actor then loaded — for modules the internal discover calls (onFunctionCall with kind: 'internal', name: 'discover', args.request) plus the module part of external qualifiedNames; for skills onLoadedSkills / used(id); for memories onLoadedMemories / used(id).

Rules:

  • contextPressure in the actor prompt is intentionally compact (ok, watch, critical plus one short instruction).
  • Budget metrics are character-based for provider neutrality and are exposed through onContextEvent, not the actor prompt.
  • Callback errors are swallowed so telemetry cannot break the agent run.
  • Do not scrape actor prompts for pressure metrics.
typescript
const supportAgent = agent('query:string -> answer:string', {
  contextFields: ['query'],
  runtime,
  contextPolicy: { preset: 'checkpointed', budget: 'balanced' },
  onContextEvent: (event) => {
    if (event.kind === 'budget_check') {
      console.log(event.pressure, event.mutablePromptChars);
    }
  },
});

Type:

typescript
onContextEvent?: (event: AxAgentContextEvent) => void | Promise<void>;
Show full SKILL.md (547 more words)Show less

Agent Status Callback

Use agentStatusCallback when the caller wants real-time progress updates from the actor. When set, the actor can call await reportSuccess(message) and await reportFailure(message) in its JavaScript turns.

typescript
const supportAgent = agent('query:string -> answer:string', {
  contextFields: ['query'],
  runtime,
  agentStatusCallback: (message, status) => {
    console.log(`[${status}] ${message}`);
  },
});

Rules:

  • agentStatusCallback receives (message: string, status: 'success' | 'failed').
  • When set, the actor prompt automatically includes reportSuccess(message) and reportFailure(message) as available runtime functions.
  • The actor is instructed to keep the user updated on task progress.
  • reportSuccess and reportFailure are reserved runtime names when the callback is configured.
  • Child agents inherit the callback via the RLM config.

Type:

typescript
agentStatusCallback?: (
  message: string,
  status: 'success' | 'failed'
) => void | Promise<void>;

On Function Call

Use onFunctionCall when the caller wants to observe every function call the actor makes from the JS runtime. It fires before the underlying function runs.

typescript
const supportAgent = agent('query:string -> answer:string', {
  contextFields: ['query'],
  runtime,
  functions: [helperAgent, lookupOrderTool],
  onFunctionCall: ({ name, qualifiedName, args, kind }) => {
    console.log(`[${kind}] ${qualifiedName}`, args);
  },
});

Rules:

  • Receives { name, qualifiedName, args, kind }.
  • name is the bare function name, e.g. 'lookupOrder'.
  • qualifiedName is the namespaced name as the actor sees it, e.g. 'tools.lookupOrder'; for un-namespaced runtime globals it equals name.
  • args is the resolved positional/named arguments object (Record<string, unknown>).
  • kind is 'external' for caller-registered functions.
  • kind is 'internal' for agent-injected globals: child agents, discover, recall, and used.
  • Fires once per call, before the function executes.
  • Errors thrown inside the callback are swallowed so they cannot break the actor loop.
  • This is independent from the DSP-layer onFunctionCall on AxProgramForwardOptions; that hook is for LLM tool-calls and never fires under AxAgent because AxAgent injects functions as runtime globals.

Type:

typescript
onFunctionCall?: (call: {
  name: string;
  qualifiedName: string;
  args: Record<string, unknown>;
  kind: 'internal' | 'external';
}) => void | Promise<void>;

Chat Log, Usage, And Traces

AxAgent exposes actor and responder sub-programs. getChatLog() returns the same flat AxChatLogEntry[] shape as AxGen and AxFlow; use each entry's optional name field to distinguish distiller, executor, and responder. getUsage() returns token usage split by actor/responder.

getChatLog(), getUsage(), and trace export refresh the agent-level snapshot from the distiller, executor, and responder before returning. This remains true after forward() throws, so successful model calls made before an actor limit, provider error, cancellation, or responder error are still observable and are not silently dropped from usage accounting.

getChatLog()

Returns the full normalized chat history after any .forward() call. Each entry is one ai.chat() round-trip. Actor stages accumulate one entry per turn; the responder typically has one entry.

typescript
const log = myAgent.getChatLog();

for (const entry of log) {
  console.log(entry.name, entry.model);
  for (const msg of entry.messages) {
    console.log(`[${msg.role}]`, msg.content);
  }
}

Each AxChatLogEntry captures the full prompt sent to the model and its response:

typescript
type AxChatLogMessage =
  | { role: 'system'; content: string }
  | { role: 'user'; content: string }
  | { role: 'assistant'; content: string }
  | { role: 'tool'; name: string; content: string };

type AxChatLogEntry = {
  name?: string; // e.g. "distiller", "executor", "responder"
  model: string;
  messages: AxChatLogMessage[];
  modelUsage?: AxProgramUsage;
  stage?: 'ctx' | 'task';
};
getUsage()

Returns token usage split by actor/responder. Each sub-array contains one AxProgramUsage entry per model/run, merged by (ai, model) key.

typescript
const usage = myAgent.getUsage();
// { actor: AxProgramUsage[], responder: AxProgramUsage[] }

console.log('Actor tokens:', usage.actor[0]?.tokens);
console.log('Responder tokens:', usage.responder[0]?.tokens);
getStagedUsage()

Returns usage split by pipeline stage. The ctx stage has the distiller actor only; the task stage has the executor actor plus responder.

typescript
const staged = myAgent.getStagedUsage();
console.log(staged.ctx?.actor);
console.log(staged.task.actor);
console.log(staged.task.responder);
getTraces()

Returns Ax program traces for the agent pipeline. Use it when the caller needs trace data rather than chat messages or token summaries.

typescript
const traces = myAgent.getTraces();
resetUsage()

Resets both actor and responder usage at once:

typescript
myAgent.resetUsage();

Type signatures:

typescript
// AxAgent
agent.getChatLog(): readonly AxChatLogEntry[]
agent.getUsage(): { actor: AxProgramUsage[]; responder: AxProgramUsage[] }
agent.getStagedUsage(): { ctx?: AxAgentUsage; task: AxAgentUsage }
agent.getTraces(): AxProgramTrace[]
agent.resetUsage(): void

// AxGen / AxFlow
gen.getChatLog(): readonly AxChatLogEntry[]
gen.getUsage(): AxProgramUsage[]

Do Not Generate

  • Do not add both debug: true and actorTurnCallback unless the user wants both unstructured prompt/runtime visibility and structured telemetry.
  • Do not scrape actor prompts or action logs when a callback exposes the data directly.
  • Do not let observability callback failures break the agent run; Ax swallows callback errors for telemetry hooks.
  • Do not use DSP-layer onFunctionCall when the user wants AxAgent runtime function calls.
  • Do not enable showThoughts unless the user needs provider thought diagnostics and the provider supports it.
  • Do not use getUsage() as the centralized source of truth across shared agents or processes.
  • Do not perform database or network work inline in axGlobals.onUsage; enqueue and return.

© dosco, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/ax-agent-observability of dosco/aithy.

Open the folder on GitHubat commit 0c9855f

Compare with similar skills

Ax Agent Observability next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Ax Agent Observability compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ax Agent Observability this skilldosco/aithy107—~4.4kAutomated safety check: PassApache-2.0
Canva Observabilityjeremylongshore/tons-of-skills-marketplace2.8k—~1kAutomated safety check: PassMIT
Clickup Observabilityjeremylongshore/tons-of-skills-marketplace2.8k—~1kAutomated safety check: PassMIT
Navan Observabilityjeremylongshore/tons-of-skills-marketplace2.8k—~934Automated safety check: PassMIT
Sap Btp Developer Guidesecondsky/sap-skills462—~4.4kAutomated safety check: PassGPL-3.0
Tempografana/skills279—~1.4kAutomated safety check: PassApache-2.0

Similar skills

  • Canva Observability

    jeremylongshore/tons-of-skills-marketplace

    Implement low-cardinality metrics, traces, logs, and alerts for Canva Connect workflows.

    2.8k GitHub stars~1k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Clickup Observability

    jeremylongshore/tons-of-skills-marketplace

    Instrument ClickUp requests, queues, webhooks, and reconciliation with content-free metrics, traces, alerts, and health evidence.

    2.8k GitHub stars~1k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Navan Observability

    jeremylongshore/tons-of-skills-marketplace

    Observe Navan integrations with content-free signals that support reconciliation and incidents.

    2.8k GitHub stars~934 tokensUpdated today
    DevOps & CloudAuto-check passed
  • Sap Btp Developer Guide

    secondsky/sap-skills

    Develops business applications on SAP Business Technology Platform (BTP) using CAP (Node.js/Java) or ABAP Cloud.

    462 GitHub stars~4.4k tokensUpdated 3 days ago
    DevOps & CloudAuto-check passed
  • Tempo

    grafana/skills

    Official

    Stand up Grafana Tempo as a cost-efficient distributed-tracing backend that only needs object storage, and write TraceQL queries against it.

    279 GitHub stars~1.4k tokensUpdated 2 days ago
    DevOps & CloudAuto-check passed
  • Bamboohr Prod Checklist

    jeremylongshore/tons-of-skills-marketplace

    Make a go/no-go decision for a BambooHR connector using exact evidence for auth, tenant isolation, HR-data handling, reliability, reconciliation, monitoring, and rollback.

    2.8k GitHub stars~1.1k tokensUpdated today
    Business, Finance & HRAuto-check passed

More from dosco/aithy

All 17 skills in this repo
  • This skill helps an LLM generate correct AxAgent tuning and evaluation code using @ax-llm/ax.

    107 GitHub stars~4.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Ax Audio

    dosco/aithy

    This skill helps an LLM generate correct audio code with @ax-llm/ax.

    107 GitHub stars~2.5k tokensUpdated 1 mo ago
    Auto-check passed
  • Ax Gepa

    dosco/aithy

    This skill helps an LLM generate correct AxGEPA optimization code using @ax-llm/ax.

    107 GitHub stars~2.6k tokensUpdated 1 mo ago
    Auto-check passed
  • Ax LLM

    dosco/aithy

    This skill helps with using the @ax-llm/ax TypeScript library for building LLM applications.

    107 GitHub stars~3.3k tokensUpdated 1 mo ago
    Auto-check passed
  • Ax MCP

    dosco/aithy

    This skill helps an LLM build correct native Model Context Protocol integrations with @ax-llm/ax.

    107 GitHub stars~4.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Ax Playbook

    dosco/aithy

    This skill helps an LLM generate correct playbook code using @ax-llm/ax.

    107 GitHub stars~1.9k tokensUpdated 1 mo ago
    Auto-check passed

Questions about Ax Agent Observability

What does Ax Agent Observability do?

This skill helps an LLM generate correct AxAgent observability code using @ax-llm/ax. Ax Agent Observability is an agent skill from dosco/aithy. This skill helps an LLM generate correct AxAgent observability code using @ax-llm/ax.

When should I use Ax Agent Observability?

Ax Agent Observability fits situations like: the user asks about axGlobals.onUsage; multi-tenant usage accounting; actorTurnCallback; agentStatusCallback.

How do I install Ax Agent Observability in Claude Code?

Run `npx skills add dosco/aithy --skill ax-agent-observability -a claude-code`. Or copy the skill folder (.claude/skills/ax-agent-observability in dosco/aithy) into .claude/skills/ax-agent-observability in your project. Claude Code loads it when a task matches its description.

How do I install Ax Agent Observability in Codex?

Run `npx skills add dosco/aithy --skill ax-agent-observability -a codex`. Or copy the skill folder (.claude/skills/ax-agent-observability in dosco/aithy) into .agents/skills/ax-agent-observability in your project. Codex loads it when a task matches its description.

Can I use Ax Agent Observability in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dosco/aithy --skill ax-agent-observability -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ax-agent-observability, .gemini/skills/ax-agent-observability, .github/skills/ax-agent-observability and .opencode/skills/ax-agent-observability in your project.

What does Ax Agent Observability need to run?

SKILL.md names no scripts, command-line tools or credentials: Ax Agent Observability is instructions for the agent only.

Does Ax Agent Observability access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Ax Agent Observability safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ax Agent Observability use?

Ax Agent Observability is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ax Agent Observability use?

About 4.4k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Ax Agent Observability?

Skills that share tags, products or a category with Ax Agent Observability: Canva Observability (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Clickup Observability (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Navan Observability (jeremylongshore/tons-of-skills-marketplace, 2.8k stars) and Sap Btp Developer Guide (secondsky/sap-skills, 462 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ax Agent Observability?

dosco (a GitHub user) maintains it in dosco/aithy, which has 107 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on August 31, 2026.

Source: dosco/aithy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.