Skip to content

I am Tony Narlock

This is my professional website. I’ve been a software developer since 2007. If you’re not in the field, what I do might not make much sense to you.

I work at tech startups, building web-based applications. On the frontend, I use React, TypeScript, and Relay (GraphQL), and on the backend, Python and Amazon Web Services.

In my spare time, I plan, develop, and maintain a suite of developer tools. For instance, tmuxp, which constructs tmux sessions from a JSON or YAML file. A few years ago, I also wrote a book about tmux, titled “The Tao of tmux”. Another tool I’ve created is cihai, based on Unicode’s UNIHAN dataset, which supports Chinese, Japanese, and Korean languages.

I actively contribute to open-source software projects. You can find me on GitHub, GitLab, and OpenHub.

My CV documents everything I’ve ever done - professional work, my projects, and open-source contributions (I’m a polyglot; there’s even some C++ in there).

Hello, I’m Tony Narlock

This is my professional website. I’ve been a software developer since 2007, currently working from Texas.

I build web-based applications at tech startups. On the frontend, I work with React, TypeScript, and Relay (GraphQL); on the backend, Python and Amazon Web Services.

Outside of work, I maintain a collection of developer tools. tmuxp builds tmux sessions from JSON or YAML configuration. I’ve also written “The Tao of tmux”, a practical guide to the terminal multiplexer. cihai provides programmatic access to Unicode’s UNIHAN dataset for Chinese, Japanese, and Korean characters.

I contribute to open-source projects and you can find my work on GitHub, GitLab, and OpenHub.

My CV has the details — professional work, personal projects, and contributions across various languages and technologies.

What's going on in my life as a programmer

What am I busy with outside of work?

2026

August 2026

agentgrep

agentgrep shipped four alphas, v0.1.0a47v0.1.0a50, sharpening what the explorer copies and what the catalogue admits it holds:

  • Copying follows the highlight: select text with the mouse and Ctrl-C copies it, while an empty selection keeps its old job of stopping the search. Notifications now report what was sent to the terminal rather than claiming a clipboard write nothing acknowledged
  • depth:, effort:, and kind: join the query language, so search depth and record kind are typed terms across the CLI, MCP, and explorer instead of flags. A misspelled field predicate now warns with a suggestion rather than quietly running an empty search
  • Every store an agent keeps is catalogued — including app state, derived caches, and encrypted stores agentgrep deliberately does not read — so find tells a deliberate omission from an undiscovered one
  • Origin data returns to three backends: Cursor IDE records carry their working directory, branch, model, and worktree again, Grok transcripts are dated instead of dropping out of date filters, and Gemini stops reporting a project name as a workspace hash
libtmux-mcp

libtmux-mcp gives an AI agent a tmux terminal. v0.1.0a21 tries a new shape for scoping what that agent can reach: LIBTMUX_TOOLSETS names the groups of tools the server hands out — inspect, manage, execute, teardown — so inspect on its own is an agent that reads panes and never types into one. What shape fits a tmux MCP is still being worked out; the trust page carries the current thinking.

It also keeps caller-supplied names and paths literal instead of letting tmux expand them as formats, and search-panes no longer stalls on a pathological pattern.

vcspull

libvcs v0.46.0 stops a repository URL or a configured revision from doing more than checking code out. A value starting with - reached git and svn as an option — through git pull, a revision, and svn checkout, three places an end-of-options -- cannot guard — where it could run a command or truncate a file. Those are now rejected. An external report prompted the audit that found them. Progress-callback timestamps are now aware UTC values rather than naive local time.

vcspull v1.67.0 picks this up with no configuration or CLI changes.

django-search-query

django-search-query v0.1.0a1 opens the Django floor move that three git-pull packages made on 2026-08-08: a Django 5.2 LTS minimum with 6.0 and 6.1 added, after 4.2 LTS and 5.1 both left security support. Behavior is untouched in each — only the supported range moved. It also fills out its documentation site: a runnable tutorial, how-to guides, an API reference, and a dedicated query-language page whose worked examples are checked against a live table.

django-docutils

django-docutils v0.31.0 makes the same move — Django 6.1 and 6.0 added, minimum raised to 5.2 — with rendering unchanged, so upgrading needs no code changes beyond the floor. v0.31.1 puts the project links on the PyPI page and trims the source distribution to the package, its tests, and its docs.

django-slugify-processor

django-slugify-processor v1.11.0 completes the set and rebuilds its documentation around a purpose-built landing page. slugify(), its template filter, and SLUGIFY_PROCESSORS are unchanged.

gp-sphinx

gp-sphinx v0.1.0a38 lets a project say what its MCP tools are in its own words. sphinx-autodoc-fastmcp classified every tool against one fixed vocabulary and rendered a single badge, so a project using different tags had everything badged read-only — including the tools that run commands. Tools are now classified on axes the project declares, drawn from tags, MCP's own ToolAnnotations, or meta, with one badge per axis. Projects on fastmcp_toolsets must move to fastmcp_axes.

See more

Publications

Language Projects

Unix-like Utilities

Django Projects

Web Projects

Coding around the web

Older work — ports, experiments, talks and press from 2013–2017 — is in the attic.

Other

  • Leather - PSA on why leather is cool

Donate

Like my open source projects and learning resources? Your support is appreciated!