$ oneil --version
oneil 2026.10 · go, python, zig, apache-2.0, mit
$ oneil whoami
Kevin O'Neil
I build infrastructure for scripts and agents: tools whose correctness is a contract, enforced by their shape rather than your discipline.
They would rather fail than hand you something that merely looks right.
Mostly Go and Python, the open source work all Apache‑2.0 or MIT, most of it written for the case where nobody is watching the terminal. Strict exit codes, versioned schemas, signed receipts, and errors that carry state instead of prose.
- 12PROJECTS
- 11OPEN SOURCE
- 3SHIP AN MCP SERVER
select a tool on the left, or press j to start.
open to part-time work: see hire.
$ oneil availability
part-time · alongside a full-time role · Chandler, Arizona
For hire, part-time
Help getting an idea to something that runs, sooner than most people plan for.
I work full time as a principal engineer, and since 2022 that work has been data on Google Cloud: Dataflow pipelines in Java and Beam that move over 800 TB a month, a Cloud Run service that keeps BigQuery's policy tags in force through every reload, and the Cloud Function that watches those pipelines and publishes what they did. Lately it is agents: one that reads a Jira ticket, finds the Terraform that has to change and opens the pull request; one that sends the logs to Gemini and tags whoever has to act; and a platform where specialised agents hand each other what they found.
Before that I founded SatSignature and ran it for seven years: satellite spectrum monitoring, sold as a service on Google Cloud to thousands of users. I wrote the real‑time spectrum analyzer in the browser, the Python services on Cloud Run taking in hundreds of millions of data points a day, and the software that drove the RF equipment in the racks, and I led the crew that trenched, laid conduit, and pulled cable for its two dish farms.
- gcp
- Dataflow and Beam, BigQuery, Pub/Sub, Cloud Run, Cloud SQL, Firestore.
- agents
- Agents that do real work, MCP servers, and the tooling that keeps them honest.
- mvps
- An idea to a working first version, at a pace most people underestimate.
- tools
- Libraries and command-line tools in Go, Python, and Zig, like the ones on this page.
Write to kevin@oneil.xyz with what you are building.
$ jr contract
Exit status
The contract is not in the README. It is in what the process returns.
These are jr's. Each tool defines its own set, because a code that means "not authorized" in one and "rate limited" in another would be worse than no code at all. What they share is the shape: 0 succeeded, 1 failed with nothing specific to say, 2 was a usage error and nothing ran.
- 0
- Success, and the result is complete.
- 1
- Generic runtime failure.
- 2
- Bad flags, missing input, or an unsupported combination.
- 3
- Succeeded, but the result set was truncated.
- 4
- Credentials missing, invalid, or expired.
- 5
- The referenced issue, project, or board does not exist.
- 6
- Authenticated, but not authorized.
- 7
- A precondition failed: invalid transition, stale write, version mismatch.
- 8
- Throttled after the retry budget was exhausted.
- 9
- Jira returned 5xx or malformed data.
- 10
- Refused by local policy: read-only mode, or a destructive command without --yes.
Codes are stable forever. A new condition gets a new code; an existing code never changes meaning. Changing one is a major version bump.
There is no exit status that means "probably fine".
01GO
jr
A client for Jira whose output is a versioned contract.
Sixty-seven commands with strict exit codes, keyset pagination, and precondition-based writes so concurrent edits cannot quietly clobber each other. Truncation is a distinct exit status, not a surprise. Ships an MCP server and a reader-only build for when an agent has no business writing.
go install github.com/kmoneil/jr@latest
ATTRIBUTES
github.com/kmoneil/jr02RUNTIME
boxjs
Deterministic JavaScript execution: replayable, forkable, provable.
Run untrusted JavaScript that replays byte-for-byte months later, fork a warm heap N ways, and take a signed receipt proving exactly what a run did. No install step, no lifecycle scripts, no ambient socket. The surfaces that supply-chain attacks arrive through are simply absent.
private beta: request access at boxjs.devATTRIBUTES
boxjs.dev03PYTHON
ssrfguard
SSRF protection that connects to the address it validated.
The usual guard resolves a hostname, approves it, then hands the URL to a client that resolves it a second time, and the attacker moves the record in between. This one resolves once, checks every answer against an address table generated from IANA, and connects to that address, never to a name. The pin sits at the client's connection seam, so redirects, retries, and pool refills go through it whether or not anyone remembered they existed.
git clone https://github.com/kmoneil/ssrfguard
ATTRIBUTES
github.com/kmoneil/ssrfguard04PYTHON
gantry-sftp
A modern Python SFTP library that does not implement SSH at all.
It delegates the cryptography to your system's OpenSSH client and takes on what is actually hard: the protocol codec, request scheduling, atomic publishes, and resumable transfers in both directions. Blocking, async, and fsspec interfaces over a single multiplexed connection.
pip install gantry-sftp
ATTRIBUTES
github.com/kmoneil/gantry-sftp05GO
spacebar
Google Chat from your terminal, your scripts, and your agents.
Send with an incoming webhook and no OAuth at all, then add narrow scopes only when you need to read, search, react, or follow a space. Local message index, NDJSON output, semantic exit codes, and an MCP server whose write permissions you configure.
go install github.com/kmoneil/spacebar@main
ATTRIBUTES
github.com/kmoneil/spacebar06GO
dateparsa
Detect the format once, parse millions of rows at native speed.
Format detection is the expensive part of date parsing, so it happens exactly once and every row after that takes the fast path with zero allocations. Structured formats, epoch timestamps, and natural language such as "3 days ago" all arrive through one call, and a date whose day had to be guessed says so rather than answering quietly.
go get github.com/kmoneil/dateparsa
ATTRIBUTES
github.com/kmoneil/dateparsa07PYTHON
safeexpr
Rules your config authors write, evaluated in your process, with nothing else in the wheel.
The language is a strict subset of Python's own expression grammar, parsed by the standard library, so there is no syntax to teach and no parser generator to ship. It has no loops, no comprehensions and no lambdas, which is the termination guarantee rather than a missing feature; behind that sits a step counter, not a timer, so a rule that runs too long fails the same way on every platform and in any thread. Dot access, pipes, and forty-one functions are opt‑in, one argument at construction. The threat model names nine classes of published sandbox escape and points each one at the test proving it unreachable here.
pip install git+https://github.com/kmoneil/safeexpr
ATTRIBUTES
github.com/kmoneil/safeexpr08GO
hunk
A transactional editor for agents that refuses rather than guesses.
One invocation carries many literal edits across many files, and nothing is written until every one of them has matched exactly as many times as it claimed to. A count that is wrong fails the whole batch rather than editing whichever occurrence came first, which is what a one‑shot string replace does in two of every five agent edits measured across thirty project histories. The refusal is the product, so it prints the bytes that are actually there with the tabs made visible and names the cause where it can, and the fix is a paste rather than another read. Hand it a build or test command and a batch that fails it goes back in full.
go install github.com/kmoneil/hunk@latest
ATTRIBUTES
github.com/kmoneil/hunk09HCL
hcl-test-suite
A conformance suite for HCL that any implementation, in any language, can run.
Every expected result is worked out from the spec text before it is checked against hashicorp/hcl, the reference implementation, so a disagreement between them is found rather than inherited. When there is one, or the spec does not decide, the test follows the reference, because that is what real configuration files depend on, and says so: "null || true" is true and "null || false" is an error, each marked disputed, with notes on what the spec says, what the code does, and where. A test that expects an error also records the one the reference reports, so it cannot pass on a typo in its own input. An implementation connects through a small adapter that reads a file and prints JSON, and anything it does not support yet is skipped rather than failed, so a new parser can start with parsing alone.
Every rule the spec states is listed beside the tests that check it, and mutation testing plants small bugs in hashicorp/hcl and go‑cty one at a time: each one no test catches gets a test, or a written reason no test can. A parser that cannot run the tests can still be measured on which inputs it accepts, which is how python‑hcl2, the fork of it Checkov uses, and tree‑sitter‑hcl have results.
git clone https://github.com/kmoneil/hcl-test-suite
ATTRIBUTES
github.com/kmoneil/hcl-test-suite10GO
tenon
A value system for Go that carries what is unknown, secret, or wrong inside the value itself.
The value layer for a configuration language, a plan and diff engine, or a plugin protocol: anywhere a program holds data whose types it learns at runtime. An unknown value keeps what is known about it, so a port of at least 1024 already compares unequal to 80. A redacting mark follows a secret into everything derived from it and keeps it out of display forms, diagnostics, and JSON, so it cannot reach a log by a route nobody thought about. Data that is wrong becomes an error value with a stable code and a path, and travels to where it is handled. Numbers are exact decimals, never rounded, and two values that say the same thing serialize to the same bytes. It answers what go‑cty answers for HCL and Terraform, with go‑cty's function library function for function and a bridge to move across one piece at a time, and a conformance test covers each of its specification's 390 rules.
go get github.com/kmoneil/tenon
ATTRIBUTES
github.com/kmoneil/tenon11ZIG
zig-gcp
Google Cloud clients for Zig that retry only what is safe to repeat.
Pub/Sub, Cloud Storage, Secret Manager, and Firestore over their REST APIs, one module per service and nothing beyond the standard library. Credentials are found the way Google's own libraries find them, so one binary runs on a laptop and on Cloud Run without a flag. Objects of any size stream in constant memory, split into parallel parts, and resume after a dropped connection or even a process that ended, every transfer held to the CRC‑32C that Cloud Storage keeps. A write is retried only when its preconditions or an idempotency token make a repeat harmless. Limits come from measuring Google's services rather than reading their documentation, and where an emulator accepts what production refuses, the client refuses first, so code tested locally does not fail later. Secrets are verified, never logged, and wiped from memory when released.
zig fetch --save git+https://github.com/kmoneil/zig-gcp
ATTRIBUTES
github.com/kmoneil/zig-gcp12PYTHON
wrenchroom
Checks that a real hand tool can reach, turn, and remove every fastener in an assembly.
A collision check says the parts fit. It cannot say anyone can get a tool on the bolt, because the tool is not in the model: an M6 socket screw 15 mm under a shelf needs a 5 mm hex key whose short leg alone is 33 mm long. wrenchroom puts the tools in. From a STEP file out of any CAD program it finds every screw, bolt, and nut by its name and its solid, then does what a mechanic would: picks up a standard key, spanner, socket, or screwdriver, tries every way it goes on, swings it through its arc, and checks that the screw can then come out. Every fastener gets one verdict and every failure names what is in the way, with exit codes and a pytest plugin so a buried bolt fails CI like a broken test, and a 3D view of every position it tried that loads nothing from anywhere.
uv tool install git+https://github.com/kmoneil/wrenchroom
ATTRIBUTES
github.com/kmoneil/wrenchroom