CUST/OS

CUST/OS

/kuh-stohs/

The Agentic Custom Operator's System

Guardian of the Tactical Edge

NimbusXR’s AI plugin for ATAK, named for the Latin custos, meaning guardian. Use voice commands to work with the map and automate field tasks, with models on your device and Lua skills your team can edit. You set the rules for what the agent may do.

Design principles

AI tools inside ATAK

CUST/OS brings local AI, editable skills, and operator controls into ATAK. You choose the models and tools for your deployment, then adjust them as the mission changes.

Principle I

Edge-First

Use local models for chat and voice when the network is unavailable. Download them before deployment and choose skills that work with the data on your device.

Principle II

Customizable to the Mission

Write a Lua skill for a task, test it in ATAK, and share it with your team. Skills and YAML configuration can change without rebuilding the plugin.

Principle III

Operator Control

Set the tools the agent can use and the actions that require approval. Review requests before they run, stop work in progress, and inspect the audit record afterward.

Alder Valley / WebXR experience

Help

Alder Valley / Wildfire response / Exercise

Check your model and security mode. A wildfire is threatening Alder. Check the handset model, then select No Cloud: use the rescue vehicle’s model when reachable, with the handset ready when the link drops.

Map. Drag to pan, scroll or pinch to zoom, and tap to inspect. Arrow keys pan when the map is focused; + / − zoom and Home resets it. Use the on-map buttons with touch or a mouse.

Phone. Follow the pulse. Microphone PTT is the default. Hold PTT to open a speaking prompt in the mission guide. Turn PTT off to send suggested commands using + in the mission cue. Hold PTT, then release; with a keyboard, hold Space or Enter. Microphone mode highlights the suggested words as it recognizes them, then checks the readback before sending.

Latest radio · COMMAND. All units, Command. Fire has crossed the ridge and is moving toward Alder. Begin village evacuation. Alpha, locate the two missing hikers.

About this exercise. A fictional operation with an interactive adaptation of CUST/OS. CUST/OS tools are adapted from the product. Terrain, timing, crews, hazards and aircraft are authored for this exercise; this is not operational training. The scenario references NWCG drop guidance and NIFC aviation roles. Radio performances are prerecorded with Grok voices. Agent responses and network conditions in this mission are simulated. Microphone input is transcribed on your device with Whisper; recordings are not uploaded. There is no live ATAK connection.

Voice input details

Whisper loads when you begin the operation. No microphone audio received yet.

START HERE

A wildfire is advancing on Alder. Coordinate the search, move the village, and bring ground crews and water scoopers onto the fire.

07:30▴ ◉ ▰ 100
Charred groundFLOW ↓ SOUTHValley trackSettlement accessTrailhead trackLookout trailRidge trailTimber hut · 4 × 5 mTin-roof hut · 5 × 5 mConcrete shelter · 8 × 10 mUtility block · 11 × 9 mTwo-storey block · 12 × 10 mBase campNorth ridgeRiver crossingRendezvousAlder villageEast lookoutTrailheadOPALPHABRAVOCHARLIEDELTA
Callsign: OP
ALDER VALLEY
Provider Status
ProviderTask / tier

CUST/OS · PORTRAIT WORKSPACE FICTIONAL EXERCISE

INCIDENT COMMANDBriefing
Charred groundFLOW ↓ SOUTHValley trackSettlement accessTrailhead trackLookout trailRidge trailTimber hut · 4 × 5 mTin-roof hut · 5 × 5 mConcrete shelter · 8 × 10 mUtility block · 11 × 9 mTwo-storey block · 12 × 10 mBase campNorth ridgeRiver crossingRendezvousAlder villageEast lookoutTrailheadOPALPHABRAVOCHARLIEDELTA
WILDFIRE / SEARCH / EVACUATION

ALDER
VALLEY

A wind-driven wildfire.
A village in its path.
Two hikers beyond the line.

5–8 minutes · Explore on screen, in AR, or in VR
You / OP Team Grid not created
FICTIONAL EXERCISE / TIME COMPRESSED

Protect the village, find the missing hikers, and coordinate the fire response.

On-device operation

Keep working when the network drops

Configure local providers before deployment so the agent can use the compute you carry.

Work through a lost connection

Distance, terrain, jamming, or a radio restriction can cut off remote providers. Local models and Lua automations can keep running on the handset. Tools that need a network still need a connection.

Control which providers receive context

The router checks provider classification settings against the operator’s configured level before sending a request. Security modes can also exclude remote tiers from provider selection.

Keep network delay out of local requests

On-device inference avoids a network round trip. Response time still depends on the model, hardware, and prompt. Test chat, tool calls, and voice on the device you plan to use.

Store conversations on the device

Conversation history, the audit database, and the vector store are kept locally. Standalone mode restricts model requests to handheld providers. Remote providers are optional and subject to your routing configuration.

Run models and edit skills in ATAK

The plugin includes local inference backends for chat, speech, and vision. Model files and skills live on the device. The built-in editor lets you inspect, change, and test skills in the field.

Six Compute Tiers

Choose where your models run

Assign each provider a tier to describe where it runs. Security modes filter those tiers, and taskPriority sets the order in which the router tries eligible providers. You can change either setting in the configuration.

Full operator trust

Models running on the operator's phone or tablet. Local inference works without a network connection; model size and speed depend on the device.

Full operator trust, wired

Compute carried by the operator and connected by wire, such as a Jetson in a ruck over USB tethering. This tier lets you use additional hardware while keeping the inference link off radio.

Squad-level trust

A shared compute device carried by the squad. Operators can use its models while the device is reachable over the local network.

Vehicle-crew trust

Compute installed in a vehicle, with access to vehicle power and cooling. If the connection is lost after dismounting, the router can try the next eligible provider.

Cross-trust-boundaryIn development

A workstation reached through CoT delegation over the TAK mesh. The design keeps tool execution on the field device while the workstation runs the model. The transport is included in the APK; operation between two live devices has not yet been validated.

Lowest trust

An optional internet-hosted provider. Requests leave the local network. Security mode and classification settings determine whether the router can select it.

Try the routing rules

Selected: handheld / priority 1

This simulation selects the eligible provider with the lowest priority number. It does not connect to these providers.

yaml
providers:
  - name: on-device
    tier: handheld       # trust category
    protocol: litert
    model: gemma-4-E2B-it
    taskPriority: 1      # fallback order

  - name: ruck-jetson
    tier: pack           # wired inference link
    protocol: openai
    url: http://127.0.0.1:8082
    taskPriority: 3

  - name: cloud-fallback
    tier: cloud
    protocol: anthropic
    model: claude-sonnet-4
    taskPriority: 100

security:
  mode: emcon  # allow handheld + pack providers

In this example, EMCON mode limits inference to the phone and wired pack. It filters provider selection; it does not turn off the device's radios.

Skills & Runtime

Write skills for the work ahead

Install the skills you need from the open-source starter kit or write your own. The MIT-licensed kit includes 44 skills and 101 tools you can inspect and adapt. Skills are installed separately from the APK, so your team controls which tools are available.

markdown
---
group: custos
name: markers
description: Place, find, and delete map markers
script_paths:
  - custos.markers/place_marker.lua
  - custos.markers/find_items.lua
  - custos.markers/delete_markers.lua
tags:
  - markers
  - map
  - navigation
examples:
  - "place a marker at 38.9, -77.0"
  - "drop a hostile marker"
  - "find all friendly markers"
---

# Markers

Tools for placing, finding, and querying markers on the ATAK map.

## Rules
- Confirm with the operator before deleting more than 5 markers.
- Use CoT type a-h-G (hostile), a-f-G (friendly), a-n-G (neutral).

A skill is a directory. SKILL.md describes it to the agent, and .lua files define its tools. The runtime limits script execution and access to ATAK APIs. Share the directory to distribute the skill.

Load skills from disk

Save a skill in /sdcard/atak/custos/skills/ and the runtime reloads it for the next agent turn. You can update skills without rebuilding the APK.

Edit inside ATAK

The built-in editor supports Lua, YAML, and Markdown. Open files in tabs, search within a file, review changes before saving, and inspect script errors alongside the code.

Ask for a skill, then test it

With custos.skill_creator installed, describe the task and the agent can draft a skill using the ATAK class index. Review the Lua and run its tests in the editor before sharing it with your team.

Automate routine checks with Lua

Run a script on a schedule, at an interval, or in response to an ATAK broadcast. For example, a monitor can check team positions without asking a model on each tick. A script can explicitly delegate to an agent when it needs model reasoning.

Configure specialist agents

Define a specialist with its own provider and instructions, then call it through delegate. The main conversation uses your configured provider order; specialist delegation is a separate tool call.

Operator controls

Set the rules and review the actions

Configure tool access and provider restrictions for your deployment. The runtime checks those rules during execution and records the result for review.

01

Tool rules

Rules in custos.yaml can allow or block tools, or require approval. Rules can also depend on the provider tier, such as requiring approval for communications tools when a remote model is in use.

02

Action approval

Tools have declared impact levels that determine approval requirements alongside your rules. Approval requests show the tool, arguments, impact, and reason for the action. Choose Approve, Deny, or Modify.

03

Script sandbox

The runtime restricts which Java APIs and filesystem paths scripts can use. Instruction and concurrency limits bound script execution.

04

Local audit record

Tool calls, approvals, model requests, delegations, and security events are recorded in SQLite. Database triggers block updates and deletes through ordinary application access. Inspect the record in ATAK or export it for review.

05

Provider restrictions

Choose from six security modes to control which compute tiers are eligible. Provider classification settings add a separate check before the router sends a model request.

06

Encrypted API key storage

API keys are stored in Android EncryptedSharedPreferences, backed by Android Keystore. YAML configuration refers to the stored keys, and Lua scripts have no binding for reading them.

07

Skill signature verification

In development

Signature verification is in development. The verifier and configuration exist, but the skill loader does not yet enforce signatures. The requirePki setting does not currently block unsigned skills.

For your team

From mission planning to field use

Operators use the tools in ATAK. Engineers and deployment teams can adapt the skills, models, and rules to the equipment and procedures in use.

Operators

Use voice commands and map tools from the device you carry. Set up local models before deployment so those functions remain available without a remote inference connection.

Squad leaders

Ask for a team position check, review a proposed action, or set up a monitor for a chosen radius. Use the audit record to review which tools ran and which actions were approved.

Mission planners

Prepare grid placement, route checks, and mission preflight as Lua skills. Test the scripts before use and run recurring checks as scheduled or event-triggered automations.

Mission engineers

Write and test tools against ATAK APIs, then share the skill files with operators. Update those files independently of the plugin release.

Deployment teams

Choose models for your phones and nearby compute, set fallback order, and test behavior when links fail. Command-post delegation over CoT is also in development; it has not yet been validated between live devices.

Security reviewers

Inspect tool rules, sandbox limits, provider classification settings, and the local audit database. The security documentation identifies current limits, including skill signature verification that is not yet enforced.

Before you install

Plan your setup

The plugin, skills, and models are installed separately. Here is what you will need to configure before field use.

Install in ATAK

CUST/OS runs as an ATAK plugin. Check the setup guide for the required ATAK and Android versions.

Install CUST/OS and make your first tool call

Add your skills

The APK does not bundle skills. Install the starter kit, select the parts you need, or write your own Lua tools.

Browse the starter skills

Configure a model

Choose a supported local model or connect a compatible provider. Set its tier and priority in custos.yaml.

Set up an on-device model

Prepare for offline use

Download model files and test local providers before losing connectivity. Remote providers are optional.

How on-device inference works

Set permissions

Review the tool rules and approval requirements for your deployment. Match provider classification settings to your data handling requirements.

Configure tool approvals and rules

Test on your equipment

Try voice, tool calls, and provider fallback on the hardware you will carry. Model speed and memory requirements vary by device.

Check tested models and known limits

Get started

Put CUST/OS to work in ATAK

Install the plugin from Google Play, add the starter kit, and configure a model. The setup guide walks you through your first conversation and tool call.