Ocalt for

Ocalt for AI

Any model with network access becomes an agent that writes code, runs it on your own machines, reads what broke and fixes it. No desktop tool to install, no plugin, no per-editor integration: one API key and one language. Let it spawn servers on demand, track and control your devices, read your emails and trigger actions halfway across the world when it finds a specific phrase, or automatically adjust hardware the moment the weather turns hot. Have it pull live maps and geolocation data, plot routes, watch for movement in a specific area, or react the second someone enters a geofence. One language, full system access - so your AI doesn’t just talk about doing things, it actually does them.

One language is the whole point

A model that can call twenty APIs has to be taught twenty schemas, twenty auth models and twenty failure modes - and it will get one of them wrong. A model that can write OcaltQL has to be taught one grammar. Reading an inbox, moving a file across a continent, restarting a machine and drawing a chart of the result are the same language, in one script, executed in one request.

Agency, not suggestions

The gap between an assistant and an agent is whether the output does anything. OcaltQL output does. A model emits a script; the script runs; the machine reboots, the invoice files itself, the gate opens. There is no orchestration layer in between for the model to get wrong.

Bounded by design

Every script runs inside one namespace. A model can only read and write /root and /mounted, and can only address machines that account has registered. The blast radius of a hallucinated script is the account that wrote it - which is what makes handing a model real execution reasonable in the first place.

An agent that codes, on your machines

The agentic coding tools people install run on one laptop and stop at its edge. A model holding an OcaltQL key reads and writes files, opens a shell on any machine you have registered, runs the build, reads the failure and corrects it - on your workstation, your server, or a box in another country, through the same four verbs. FILE READ and FILE WRITE for the code, DIRECTIVE EXEC for the build, SUBDOMAIN ADD to put the result online.

It starts projects, not just patches

Give it a description and it can lay a project out from nothing: create the folders, write the files, install what it needs, start the process, claim an address and serve it. A working URL at the end of one conversation, on infrastructure you own.

Work that continues without you

A prompt ends when the reply does; a schedule does not. STARTING and EVERY hand the model a slot in time: run the tests at 02:00, watch the queue every minute, rebuild whenever a file changes, and report what it found. The agent keeps its own hours.

The whole capability set, not a toolbox

Whatever the model reaches for is already a verb. Databases, email, HTTP, media, 3D and CAD, PCB, simulation, payments, maps, machines and the devices attached to them - one grammar, one auth, one failure model. Nothing to wrap, nothing to keep in sync, no tool definitions to maintain as the surface grows.

A worked shape

Ship a fix to a real machine and put the result online - written by a model, in one script, with no glue.

In practice

(* the model reads the code, changes it, builds it, and ships it *)
FILE READ "/root/app/server.js" SET ?src
AFTER STRING REPLACE ?src ALL "listen(3000" WITH "listen(8080" SET ?fixed
AFTER FILE WRITE ?fixed TO "/root/app/server.js"
AFTER DIRECTIVE "build-01" EXEC "cd /srv/app && npm test" SET ?test
AFTER IF ?test("exit_code") IS EQUAL TO 0
OPEN
  DIRECTIVE "build-01" EXEC "cd /srv/app && npm run deploy" SET ?out
  AFTER SUBDOMAIN ADD "app" AT "/root/app" SET ?site
  AFTER NOTIFICATION "shipped: " & ?site("url")
CLOSE
OR
OPEN
  NOTIFICATION "tests failed, not shipping: " & ?test("stderr")
CLOSE

Turn any model into an engineer with hands

  1. Get an API key. accounts.ocalt.com → API. The key is a password substitute for API traffic and is rotatable without changing your password.
  2. Give the model the grammar. Every verb, slot and worked example is at ql.ocalt.com. It is one document, and it is the whole language - there is no second SDK to learn.
  3. Let it run one script. POST to https://ql.ocalt.com/api with identity, password and q. The response is the output, byte for byte.
  4. Point it at real work. The same key that runs one line runs a project: read a repository, write files, run the build, read the errors, fix them, deploy the result - on your machine or your server, not in a sandbox that forgets.
  5. Let it keep working while you sleep. STARTING and EVERY put a script on a schedule, so the model’s work carries on without a prompt to start it.
  6. Bound it before you widen it. The model can only touch the namespace whose key it holds, and only the machines that account has registered. Give it its own account first.
curl https://ql.ocalt.com/api \
  -d identity=you@example.com \
  -d password=YOUR_API_KEY \
  --data-urlencode 'q=EMIT "the model is connected"'

Wiring it to the coding agent you already use

There is no Ocalt plugin to install, because there is nothing to install. Any assistant that can make an HTTP request can drive OcaltQL, and any assistant that can run a shell command already can. The whole contract is one endpoint and three fields.

POST https://ql.ocalt.com/api
  identity   your account email
  password   your API key from accounts.ocalt.com
  q          the OcaltQL script

the response body is the script's output, byte for byte

Claude Code

Give it the key as an environment variable and pre-approve the one command, so it never stops to ask mid-task. Settings live in .claude/settings.json for the whole project, or .claude/settings.local.json for just you — put the key in the local one, which is the file that is not committed. These are strict JSON: a // comment or a trailing comma makes the file invalid.

// .claude/settings.local.json
{
  "env": {
    "OCALT_IDENTITY": "you@example.com",
    "OCALT_KEY": "your-api-key"
  },
  "permissions": {
    "allow": ["Bash(curl https://ql.ocalt.com/api *)"]
  }
}

Then a line in CLAUDE.md at the root of the project tells it what it now has. It reads that file at the start of every session, so this is the whole integration:

# OcaltQL

This project can run OcaltQL. One script, one request, one result:

    curl -s https://ql.ocalt.com/api \
      -d identity="$OCALT_IDENTITY" \
      -d password="$OCALT_KEY" \
      --data-urlencode 'q=EMIT "connected"'

The grammar is at https://ql.ocalt.com - one document, the whole language.
Use it to read and write files in the namespace, run commands on registered
machines, query databases, send mail and put results online. Statements are
chained with AFTER, AND and OR; blocks are OPEN and CLOSE.

ChatGPT, or any model with function calling

Declare one tool. Not one per capability — one, for the entire platform, because the capability lives in the script rather than in the tool surface.

{
  "name": "ocaltql",
  "description": "Run an OcaltQL script. Returns the script's output. OcaltQL reaches files, machines, databases, mail, media and the web through one grammar; see ql.ocalt.com.",
  "parameters": {
    "type": "object",
    "properties": {
      "q": { "type": "string", "description": "The OcaltQL script to run." }
    },
    "required": ["q"]
  }
}

Your handler adds identity and password and posts the script. The model never sees the key, and the set of things it can do grows without the tool definition ever changing.

Anything else

An editor assistant, a CI job, a cron script, a model running on your own hardware: the same three fields. Export the key once and every one of them is wired.

export OCALT_IDENTITY="you@example.com"
export OCALT_KEY="your-api-key"

ocaltql() {
  curl -s https://ql.ocalt.com/api \
    -d identity="$OCALT_IDENTITY" \
    -d password="$OCALT_KEY" \
    --data-urlencode "q=$1"
}

ocaltql 'FILE LIST "/root" SET ?f AFTER EMIT ?f'

Give it its own account first

A key is bounded by the account that owns it: its namespace, its machines, its quota, and nothing else. Make the agent a member of your business with its own key rather than handing over yours, and you can read exactly what it did, and revoke it on its own, without rotating anything of yours.

Every plan, including Free, carries the whole language. Open the console, read the documentation, or see what a plan costs.