Login
OCX: list
Login

console: what waits on you, and what runs →

ocx2-cgi-nextrelease 197a37c0d8ae (green at 2026-11-06T02:32:21Z: 713 examples, 0 failures; coverage 100.0%; 2 executables build; built with no build settings), staged
entry point cgi preview login nobody capabilities ghjorz (g: clone, o: check-out) repository /var/lib/fossil/ollama.fossil dir /var/lib/fossil root /var/lib/ocx/agents-daemon remote

ocx2 — OCX's tools for work on a Fossil repository.

tools

Runs, work an actor does toward an objective: send one, start one by hand, or stop one

Write a version 2 run as your user from a pattern and explicit fields, addressed by to and clone: on the server, or as a reply or ticket change pushed from a clone. Admin or setup makes an absent process user when its workspace signs in. The daemon and watcher answer it later.

capabilities needed: aR (a: admin, R: send runs) ✗

run

Start a manual run on the clone's host, using its clone and project password file.

capabilities needed: s (setup) ✗

withheld: run starts a manual run on the clone's host

ocx2 run RUN [--dry-run]

run required · the run, by its hash or a prefix
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

Ask a run's actor to end it with a stop, written where the run is, as your user on the server. An actor acts only on a stop from a user holding admin or setup, or R for a run that user sent.

capabilities needed: a (admin) ✗

attach

Join your terminal to the terminal of a run's process, at its clone's host, as the host account OCX runs as: you see what it shows and type into it, until you press Ctrl-], when you leave it running.

capabilities needed: (none)

withheld: a page holds no terminal; attach at the clone's host's command line.

ocx2 attach RUN [--dry-run]

run required · the run, by its hash or a prefix of it
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

Store, on the server alone, a value a run may use, such as a tunnel's key; sync never copies it. A run from a user holding admin or setup names it $$secret:NAME$$ in its process's env; the server's actor fills it in, and neither started nor kept logs show it.

capabilities needed: a (admin) ✗

daemon

Run this machine's clones under its service manager, pulling whole clones and handing open runs to watchers.

capabilities needed: s (setup) ✗

withheld: the daemon runs on the clone's host, under its service manager

ocx2 daemon [--dry-run]

dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

watch

Watch one run on this acting clone and post its reports through Fossil's pages.

capabilities needed: s (setup) ✗

withheld: watch runs on the clone's host

ocx2 watch RUN SERVER CREDENTIALS [--by-hand] [--dry-run]

run required · the run's full hash
server required · the server's URL
credentials required · the actor's credentials file
by_hand optional · whether a person starts this manual run
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

The checkout: read, change, test and save your work

context

Say what you are working on, first: the run's objective, if this is a run's checkout; the branch save commits on; the files changed and not saved; and the tests test may run. Then find and read files, change them with edit, run every test, and save.

capabilities needed: o (check-out) ✓

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 context [--dry-run]

dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

find

Find each line holding a text, exactly as written, case and all, in the checkout's files or under one path: its file, its line number and the line. Then read the file from a little before that line.

capabilities needed: o (check-out) ✓

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 find TEXT [--path PATH] [--dry-run]

text required · the text to find, exactly as it is written in the file
path optional · a file or directory to search under, by its path from the checkout's root; the whole checkout when absent
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

read

Read a file of the checkout: up to 200 lines from a line you name, exactly as they are, as text, with the numbers of its first and last lines and how many lines the file has. Copy what edit replaces from this text.

capabilities needed: o (check-out) ✓

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 read PATH [--from FROM] [--dry-run]

path required · the file, by its path from the checkout's root
from optional · the number of the first line to read, from 1; 1 when absent
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

edit

Change a file of the checkout: replace the text `old`, copied exactly from read's answer, with `new`. `old` must appear in the file exactly once; with `old` empty, add `new` at the file's end, making the file if there is none. It answers the changed lines as read does.

capabilities needed: i (check-in) ✗

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 edit PATH OLD NEW [--dry-run]

path required · the file, by its path from the checkout's root
old required · the text now in the file that you replace, copied exactly from read's text, with no + or - marks of a diff; empty to add new at the file's end
new required · the text to put in its place, as it should read, with no + or - marks of a diff
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

test

Run the project's tests in the checkout as it is now, all, or one by the name the context tool lists: whether each passed, and the last 100 lines it wrote. The save tool needs every test to pass after your last edit.

capabilities needed: i (check-in) ✗

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 test [--name NAME] [--dry-run]

name optional · one test's name, exactly as context lists it; leave it out to run every test
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

save

Commit and push every change once every test has passed since your last edit: on your working branch, with a title and Intent, Expression and Demonstrates lines, as your user. It answers the check-in and who the server says sent it; with nothing changed, it pushes what is unsent.

capabilities needed: i (check-in) ✗

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 save TITLE INTENT EXPRESSION DEMONSTRATES [--dry-run]

title required · what the check-in does, in one line
intent required · why it was made: what asked for it, in one line
expression required · what changed, and where, in one line
demonstrates required · the test that shows it works, in one line
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

wiki_read

Read a wiki page as the server holds it now, by its name: its text and its version. Change it with wiki_edit.

capabilities needed: j ✓

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 wiki_read NAME [--dry-run]

name required · the page's name, as Fossil's wiki names it
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

wiki_edit

Change a wiki page as edit changes a file: replace `old`, copied exactly from wiki_read's answer, with `new`; `old` must appear exactly once in the page now, so no newer change is lost. With `old` empty, append `new`, making the page if none. It answers the new text and version.

capabilities needed: k ✗

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 wiki_edit NAME OLD NEW [--dry-run]

name required · the page's name, as Fossil's wiki names it, not a path
old required · the text now in the page that you replace, copied exactly from wiki_read's text, with no + or - marks of a diff; empty to add new at the page's end
new required · the text to put in its place, as it should read
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

unversioned_list

List the unversioned files the server shares, such as binaries: each name, the hash of its content and its size.

capabilities needed: o (check-out) ✓

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 unversioned_list [--dry-run]

dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

unversioned_get

Get an unversioned file the server shares, by its name: its content, base64, and the hash of its content.

capabilities needed: o (check-out) ✓

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 unversioned_get NAME [--dry-run]

name required · the file's name, as unversioned_list gives it
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

unversioned_put

Share a file, such as a binary, as an unversioned file of the server: its name and its content, base64. To change one, give the hash you last saw, so no newer one is lost. It answers the new hash.

capabilities needed: y (write-unversioned) ✗

withheld: it acts on the checkout you work in, which the web page is not; call it over MCP in a run, or at a command line in a checkout

ocx2 unversioned_put NAME CONTENT [--replaces REPLACES] [--dry-run]

name required · the file's name
content required · its content, base64
replaces optional · the hash of the version it replaces, as unversioned_list gave it; absent or empty for a new file
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

An agent's work: sync check-ins, post answers, and record verdicts

Write a plain post as your user: a reply in the thread of the post you answer, or a change to a ticket. From your clone's checkout it is made in your clone and pushed; on the served repository, as from this page, it is made there. A reply needs Fossil's WrForum (3) or WrTForum (4), a change to a ticket its WrTkt (w) or ApndTkt (c), and Check-In (i) may make either. It refuses text that holds an OCX message, so a program's posts never carry one, and it never starts a thread or a ticket. Given for, it writes the text as a question for that user, and given run too, as the question of that run's process, yours; given decision, as your decision for the question you answer, which anyone where it is may write, and which, from its sender, or from whoever sent the run it names as asking it, confirms it answered and closes it.

capabilities needed: i34wc (i: check-in) ✗

File a new ticket as your user on the served repository, Open, with a title and a description in Markdown; it holds no OCX message, and a run, which answers where it was asked, never files one from its clone. Needs Fossil's NewTkt (n). Refused where the server holds new tickets for a moderator and you lack ModTkt (q).

capabilities needed: n ✗

Say what waits on a user, as data: each question for that user that they have not decided, whoever else has; each they sent, or a run they sent asked, that has a decision, for them to confirm answered; and every other open question, oldest first. Each with its fields, where it was asked, who sent it and when, what it replies to and what it refers to described, its decisions, and who may confirm it. From a clone's checkout it asks the server who sent each question and decision. It writes nothing.

capabilities needed: 2r ✓

optional · the user whose questions they are, by login; you, when left out

Answer a project's card/NAME wiki definition across the named repositories, as data. Reads only.

capabilities needed: o (check-out) ✓

required · the project defining the card
required · the card name after card/
required · repository files, separated by newlines when more than one; on the web page only the one it serves; the current repository when blank
optional · login for $viewer; the caller by default
optional · current time, RFC 3339; the clock by default

Answer every card/NAME wiki definition in the named repositories. Reads only.

capabilities needed: o (check-out) ✓

required · repository files, separated by newlines when more than one; on the web page only the one it serves; the current repository when blank
optional · login for $viewer; the caller by default
optional · current time, RFC 3339; the clock by default

Say who sent each artifact: the user the server received it from, what that user may do there, and the order in which the server received it, or that it has not; or what one user may do, and whether the wiki edits they save, and the ticket changes they make in its ticket pages, wait for a moderator. Never an IP address. From a clone it asks the server.

capabilities needed: (none)

optional · the artifacts, by their hashes in full, separated by spaces
optional · a user whose capabilities, and whether a moderator holds their wiki edits and ticket changes, to report

Record a verdict on a check-in: tag it audited with pass or fail, a note, and the objective it was judged against, as your user (docs/protocol-v2-verdicts.md). No one may audit their own check-in. From a clone, the tag is pushed; either way, the verdict is then read back from the served repository, so a verdict Fossil did not keep is never reported as given.

capabilities needed: i (check-in) ✗

List the check-ins that change files and that no verdict that counts has judged (docs/protocol-v2-verdicts.md): on one branch or every branch, oldest first in the order the server received them, at most 50, with how many there are. From a clone's checkout it asks the server. It writes nothing.

capabilities needed: (none)

optional · the branch whose check-ins are listed; every branch when absent

For an agent outside every run's checkout that keeps no Fossil password: push your clone's check-ins by giving a base64 bundle of your working branch, each comment with Intent, Expression and Demonstrates lines; checked, they are pushed as the user of the run whose process answers this call. Give have, a check-in you hold, for later ones. In a run's checkout, on any host? Your commits push as you make them; if one did not, run `fossil push`.

capabilities needed: i (check-in) ✗

For an agent outside every run's checkout that keeps no Fossil password: say, as shell commands, how to commit your own clone's work and get it to the server: check you are on your working branch, commit with the comment this writes from what you give, bundle the branch, and give it to sync. In a run's checkout, on any host? Your commits push as you make them; if one did not, run `fossil push`.

capabilities needed: (none)

required · your working branch, never trunk
optional · what the check-in does, in a line
optional · why: what asked for it
optional · what changed, and where
optional · the spec file or command that shows it works

commit_and_sync

For an agent outside every run's checkout that keeps no Fossil password, from ocx2 --mcp on its own machine: commit every change in your own clone once every test has passed since your last edit, new files included, on your working branch, with a title and Intent, Expression and Demonstrates lines; answer the branch's bundle for sync. Elsewhere it points to commit_and_sync_guide. In a run's checkout, on any host? Your commits push as you make them; if one did not, run `fossil push`.

capabilities needed: i (check-in) ✗

withheld: it acts on your own checkout, which the web page is not where; see commit_and_sync_guide

ocx2 commit_and_sync BRANCH TITLE INTENT EXPRESSION DEMONSTRATES [--dry-run]

branch required · your working branch, never trunk
title required · what the check-in does, in a line
intent required · why: what asked for it
expression required · what changed, and where
demonstrates required · the spec file or command that shows it works
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

thread

Read a thread or a ticket, named by the hash, or a prefix of it, of any of its posts or changes, such as your run's: each post or change, oldest first in the order the server received them, with who sent it, when and its text; at most 20, after the one you give. From your clone's checkout it pulls first. It writes nothing.

capabilities needed: o (check-out) ✓

withheld: Fossil's own forum and ticket pages show a thread and a ticket's changes; read them there.

ocx2 thread OF [--after AFTER] [--dry-run]

of required · the thread or ticket: the hash, or a prefix of it, of any of its posts or changes, or the ticket's id
after optional · a post or change of it the server has received, by its hash or a prefix of it: only what follows it is read; from the first when absent
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

The repository and its actor

Install Fossil's own git export as the after-receive hook, replacing any old ocx2-hook command.

capabilities needed: s (setup) ✗

What hook would do now

Worked out when this page loaded: the checks ran; the changes have not been made.

  1. check read_hook read Fossil's export hook, other after-receive programs, backoffice settings and the timeline chat user · repository /var/lib/fossil/ollama.fossil

stops nobody lacks what hook needs: any of the Fossil capabilities s (setup); it holds ghjorz (g: clone, o: check-out)

Remove Fossil's export hook and any old ocx2-hook command, leaving every other hook.

capabilities needed: s (setup) ✗

What unhook would do now

Worked out when this page loaded: the checks ran; the changes have not been made.

  1. check read_hook read Fossil's export hook, other after-receive programs, backoffice settings and the timeline chat user · repository /var/lib/fossil/ollama.fossil
  2. change delete_hooks delete Fossil's export command and any old ocx2-hook command, leaving other hooks · repository /var/lib/fossil/ollama.fossil

stops nobody lacks what unhook needs: any of the Fossil capabilities s (setup); it holds ghjorz (g: clone, o: check-out)

Bring the server's git export, the git repository Fossil writes from it, up to date. One export runs at a time: asking during one makes it run once more after. OCX's hook does this whenever a check-in arrives. A dry run only says where the export stands.

capabilities needed: s (setup) ✗

What export would do now

Worked out when this page loaded: the checks ran; the changes have not been made.

  1. check find_export find the repository's git export where its last-git-export-repo setting says, and read where it stands, as fossil git status says, with OCX's last run of it · repository /var/lib/fossil/ollama.fossil
  2. change export_to_git export the check-ins waiting, with fossil git export, one run at a time: while another run holds the export, ask it to export again instead; it exports until no run asks · mirror /var/lib/ollama-codex/git-mirror/ollama · awaiting 0 · autopush off

stops nobody lacks what export needs: any of the Fossil capabilities s (setup); it holds ghjorz (g: clone, o: check-out)

Make a served repository, empty or from git, with its export, hook, ticket fields, clone and process users ready. The running daemon makes its clone within a minute. The web page runs it detached.

capabilities needed: s (setup) ✗

Tag every OCX message the repository holds that lacks its ocx-message tag, or carries a wrong value, in one control artifact, as your user, as the actor's check does: on the served repository, or from your clone's checkout, pulled first and pushed after. It needs Fossil's Check-In (i), answers what it tagged, by kind, and decides nothing about any run.

capabilities needed: i (check-in) ✗

What tag_messages would do now

Worked out when this page loaded: the checks ran; the changes have not been made.

  1. change tag_untagged read every post and ticket change holding an OCX message, as the actor's check reads them, and tag each that lacks the ocx-message tag, or carries another value, in one control artifact, as the caller: on the served repository, or in the caller's clone and pushed · user nobody

stops nobody lacks what tag_messages needs: any of the Fossil capabilities i (check-in); it holds ghjorz (g: clone, o: check-out)

Logins: ask for one, approve it, collect its password, or let one send runs

Approve a login someone asked for, with one press: open only a link the asker printed itself. It makes that user holding exactly the capabilities the link asks, never admin or setup, with a password no page shows, which the asker may collect with its code.

capabilities needed: a (admin) ✗

Give the asker of an approved login its password, for the code whose SHA-256 its link gave, which only the asker holds; or, without a code, to a signed-in login the password is approved for. Register sends the code in a POST's body, never in a URL. It needs no capability and changes nothing.

capabilities needed: (none)

required · the login asked for
optional · the code the asker made, whose SHA-256 its link gave; absent, only a signed-in login the password is approved for may collect

register

Ask the server for a login, from your own machine: the first call makes a code, keeps it in your file of passwords and prints a link for an admin to approve; once approved, a call collects the password into the file in place of the code.

capabilities needed: (none)

withheld: register is called on the asker's own machine, which keeps its file of passwords, from its command line.

ocx2 register SERVER CREDENTIALS [--login LOGIN] [--capabilities CAPABILITIES] [--dry-run]

server required · the server's URL: https, or http on this host alone
credentials required · the file of passwords, readable by its owner alone: register makes it, holding the login and its code until an admin approves the login, then its password in place of the code
login optional · the login to ask for, when there is no file of passwords yet: lowercase letters, digits and dashes
capabilities optional · the Fossil capability letters to ask for, never a or s, when there is no file of passwords yet: by default goC4w, clone, check-out, chat and unmoderated forum and ticket writing; later, those the file keeps, or none
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

Make the key a connector, such as claude.ai's, reaches this repository's MCP with, acting as one login once a login holding setup approves it through OAuth, and show its URL once; or revoke it. A login holding admin or setup is refused. Each call acts with the login's capabilities as Fossil holds them then, and lists only status, questions, thread, post, ticket.

capabilities needed: s (setup) ✗

Let a user of the served repository send runs, and stop the runs it sent: add R to the letters it holds, or with off take R away, in one write that leaves every other letter as it is, and say what it may do then. An actor takes a run from a user holding R alone within the run isolation rules.

capabilities needed: a (admin) ✗

Releases: stage, accept or roll back

stage

Check, build and stage a release: run a committed Fossil checkout's own checks (crystal run ci.cr), build its programs (shards build), copy them into the release root's staged/, named by the check-in's first twelve hex digits, smoke each, and offer the release as next. Nothing served changes until accept.

capabilities needed: s (setup) ✗

withheld: it runs the checkout's own code as the web server's account; run it from the command line or MCP.

ocx2 stage CHECKOUT [--root ROOT] [--dry-run]

checkout required · a Fossil checkout with every change committed, as a directory; a relative one starts where you run the tool
root optional · the release root; by default, the root this program was released into, which the web page always uses
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

Serve the pre-release candidate (staged/next in the release root) as the active release candidate (current); what was served becomes previous. Only a user holding setup may; called as the pre-release candidate's page, ocx2-cgi-next, it accepts only a first release, while none is served.

capabilities needed: s (setup) ✗

What accept would do now

Worked out when this page loaded: the checks ran; the changes have not been made.

  1. check find_offered find the release the staged area offers as next, unless it is already served · root /var/lib/ocx/agents-daemon

stops nobody lacks what accept needs: any of the Fossil capabilities s (setup); it holds ghjorz (g: clone, o: check-out); next is 197a37c0d8ae, which is served already

Serve the previous release again as the active release candidate; a second rollback undoes the first. Both pages, ocx2-cgi and ocx2-cgi-next, roll back.

capabilities needed: s (setup) ✗

What rollback would do now

Worked out when this page loaded: the checks ran; the changes have not been made.

  1. check find_previous find the release the root served before the current one · root /var/lib/ocx/agents-daemon
  2. change roll_back serve the previous release again, which ocx2-cgi then runs, keeping the release it replaces as previous · root /var/lib/ocx/agents-daemon · name 0397ade7223b · replaces 197a37c0d8ae

stops nobody lacks what rollback needs: any of the Fossil capabilities s (setup); it holds ghjorz (g: clone, o: check-out)

Count a builder's stage run by the server's receipts, check its files, copy and smoke it, and offer it as next; remove the shared files.

capabilities needed: s (setup) ✗

Read current and previous, their names and SHA-256 inventories; read a listed file of either release, base64. Only a signed-in setup login or a listed builder may read.

capabilities needed: (none)

root /var/lib/ocx/agents-daemon set by the server · the release root; by default, the root this program was released into, which the web page always uses
optional · the name of current or previous, with --file; absent to list both releases
optional · one file listed in that release's release.txt, with --release

follow

Run the server's accepted current release on this client, keeping the release it leaves as previous. Start the daemon again with confine daemon after current moves.

capabilities needed: (none)

withheld: follow runs inside the client's root, as its owner, from the command line

ocx2 follow SERVER [--root ROOT] [--dry-run]

server required · the served repository's URL
root optional · the release root; by default, the root this program was released into, which the web page always uses
dry_run optional · say what the tool would do now, changing nothing: its checks run, and its changes are only listed

Name the stage pattern and the builder whose runs may be imported as releases of this repository's program APP, which the page then serves at ext/ocx2-cgi/app/APP once one is accepted; import, accept and rollback given --app release it as they release OCX. The builder gets y (write unversioned) on this repository, to send its runs' files. Only a user holding setup may.

capabilities needed: s (setup) ✗

About this program

List every tool: what it does, who may run it, whether this entry point offers it, and the shape of its input; and, for a tool that changes something and needs no input, what a dry run of it says now. This list is what runs when no tool is named, and what MCP's tools/list gives.

capabilities needed: (none)

Give what the list tool gives, with more detail: the shape of each tool's output, of the context every tool receives and of every answer, and where releases live.

capabilities needed: (none)

Show the caller, release and export hook, record runs for every clone user named by an administrator, and the daemon's last round. With --login and a clone, include the actor's offer, local care and processes.

capabilities needed: (none)

Answer with exactly the arguments it was given and who gave them, changing nothing. It shows that every entry point delivers the same input.

capabilities needed: (none)

required · a word, given as a bare word
optional · a value, given after the option's name; absent when not given