diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-08 17:13:31 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-08 17:13:31 +0300 |
| commit | f85681e7d31b9f283bf40d058ba2b9792aec8448 (patch) | |
| tree | f0add1cc5192158aae6a6a2914cd2cfde140efbd | |
| parent | fc223c6404cf952cfd7495ee67f1bc6b906028ab (diff) | |
Update content for md
| -rw-r--r-- | gemfeed/2026-07-09-unleashing-hexai.md | 381 | ||||
| -rw-r--r-- | gemfeed/index.md | 1 | ||||
| -rw-r--r-- | gemfeed/unleashing-hexai/01-logo.png | bin | 0 -> 101101 bytes | |||
| -rw-r--r-- | gemfeed/unleashing-hexai/06-tmux-popup.jpg | bin | 0 -> 234451 bytes | |||
| -rw-r--r-- | gemfeed/unleashing-hexai/10-tmux-status.png | bin | 0 -> 7053 bytes | |||
| -rw-r--r-- | index.md | 3 | ||||
| -rw-r--r-- | uptime-stats.md | 180 |
7 files changed, 475 insertions, 90 deletions
diff --git a/gemfeed/2026-07-09-unleashing-hexai.md b/gemfeed/2026-07-09-unleashing-hexai.md new file mode 100644 index 00000000..8b94007d --- /dev/null +++ b/gemfeed/2026-07-09-unleashing-hexai.md @@ -0,0 +1,381 @@ +# Unleashing Hexai: AI companion for Helix and the terminal in general + +> Published at 2026-07-08T17:10:52+03:00 + +I have been using Helix as my main editor for a while now. It is fast, modal, and stays out of the way. The one thing I missed was a bit of LLM help without leaving the editor or opening a browser tab. So I built Hexai. + +Hexai is an AI add-on for Helix. It speaks LSP, so it also works with other editors in theory, but I only test it with Helix. It gives me inline completions, in-editor chat, code actions, a terminal CLI, a tmux popup action runner, and a small task manager for agent work. It is written in Go, lives on Codeberg, and is configured through plain TOML files. + +Hexai has been an undercover pet project of mine since around mid-last year. As I write this it is at version `0.42.1`, so it has been quietly growing for a good while before this first proper write-up. + +[Hexai source code](https://codeberg.org/snonux/hexai) +[Helix editor](https://helix-editor.com) + +[](./unleashing-hexai/01-logo.png) + +## Table of Contents + +* [⇢ Unleashing Hexai: AI companion for Helix and the terminal in general](#unleashing-hexai-ai-companion-for-helix-and-the-terminal-in-general) +* [⇢ ⇢ What it is](#what-it-is) +* [⇢ ⇢ Installing it](#installing-it) +* [⇢ ⇢ Configuring providers](#configuring-providers) +* [⇢ ⇢ Wiring it into Helix](#wiring-it-into-helix) +* [⇢ ⇢ Inline chat and prompts](#inline-chat-and-prompts) +* [⇢ ⇢ Code actions via the tmux popup](#code-actions-via-the-tmux-popup) +* [⇢ ⇢ The CLI](#the-cli) +* [⇢ ⇢ Managing agent tasks with ask](#managing-agent-tasks-with-ask) +* [⇢ ⇢ Running multiple providers side by side](#running-multiple-providers-side-by-side) +* [⇢ ⇢ What to watch out for](#what-to-watch-out-for) +* [⇢ ⇢ It will keep changing](#it-will-keep-changing) +* [⇢ ⇢ Other related posts:](#other-related-posts) + +## What it is + +Hexai is really a bundle of small tools that share the same configuration: + +* `hexai-lsp-server` — the LSP server that Helix talks to. +* `hexai` — a standalone CLI for quick LLM questions from the terminal or scripts. +* `hexai-tmux-action` — a Bubble Tea TUI that pops up inside tmux and runs code actions on the current selection. +* `ask` — a tiny task management CLI for agent-managed project work. + +Everything uses the same `config.toml`, the same provider pool, and the same prompt overrides. I can switch models in one place and the LSP, CLI, and popup all follow along. + +These are opinionated tools. They reflect how I work — Helix inside tmux, a terminal CLI, a thin Taskwarrior wrapper — not a generic plugin system. If your workflow matches mine, they get out of the way; if it doesn't, you will probably want to tweak the config or fork it. + +## Installing it + +The easiest way is to install the binaries with `go install`. Each binary is a separate `cmd/` package: + +```sh +go install codeberg.org/snonux/hexai/cmd/hexai@latest +go install codeberg.org/snonux/hexai/cmd/hexai-lsp-server@latest +go install codeberg.org/snonux/hexai/cmd/hexai-tmux-action@latest +go install codeberg.org/snonux/hexai/cmd/ask@latest +``` + +If you prefer to build from a checkout, Hexai uses Mage: + +```sh +go install github.com/magefile/mage@latest +mage build +mage install +``` + +That drops `hexai`, `hexai-lsp-server`, `hexai-tmux-action`, and `ask` into your `GOPATH/bin`. + +## Configuring providers + +Hexai looks for a global config at `~/.config/hexai/config.toml` and a per-project override at `.hexaiconfig.toml` in the git root. Environment variables prefixed with `HEXAI_` win over both files. + +The default provider is Ollama Cloud with `kimi-k2.6` (it might be different by the time you read this!). To use a local Ollama server instead, override the base URL: + +```toml +[provider] +name = "ollama" + +[ollama] +model = "qwen3-coder:30b-a3b-q4_K_M" +base_url = "http://localhost:11434" +``` + +Because that points at `localhost`, nothing leaves your machine — prompt, code, and reply all stay local. That is the main reason I keep a local Ollama around. + +For OpenAI, the config is similar: + +```toml +[provider] +name = "openai" + +[openai] +model = "gpt-4o-mini" +``` + +Hexai reads the API key from `HEXAI_OPENAI_API_KEY` first, then falls back to `OPENAI_API_KEY`. The same pattern works for OpenRouter, Anthropic, and You.com. + +## Wiring it into Helix + +Tell Helix about the Hexai LSP server in `~/.config/helix/languages.toml`. Here is my Go setup: + +```toml +[[language]] +name = "go" +auto-format = true +formatter = { command = "goimports" } +language-servers = [ "gopls", "hexai" ] + +[language-server.hexai] +command = "hexai-lsp-server" +``` + +You can add `hexai` after `gopls` or any other LSP. It does not replace them; it just adds completions, code actions, and chat on top. + +Once the LSP is wired in, Hexai also offers inline auto-completions as you type. By default it fires after a short idle debounce (`completion_debounce_ms`, 800 ms) when you hit one of the trigger characters (`.` `:` `/` `_` space), and it waits for every configured backend before showing results (`completion_wait_all`). All of it is tunable in `config.toml`, and you can turn completions off for a session without restarting — see the slash commands below. + +For the popup action runner, bind a key in `~/.config/helix/config.toml`: + +```toml +[keys.select] +"A-a" = ":pipe hexai-tmux-action" + +[keys.normal] +"A-a" = ["select_line", ":pipe hexai-tmux-action"] +``` + +I use Alt-a. Select some code, hit Alt-a, and the popup appears. + +## Inline chat and prompts + +The LSP adds two lightweight ways to talk to the model without leaving the editor: + +* End a line with `?>`, `!>`, `:>`, or `;>` to ask a question. Hexai removes only the trailing `>`, keeps the question, and inserts a `> ` quoted reply below the line. +* Type `>!do something>` inline to ask for a quick edit, or `>>!do something>` to replace the whole line with the completion. + +Chat example — a question ending in `?>`: + +```text +What is a Go slice?> +``` + +After the LSP responds you get something like: + +```text +What is a Go slice? + +> A slice is a dynamically-sized view into an array. It stores a pointer to +> the backing array plus length and capacity. +``` + +Inline example — `>>!` replaces the whole line with the completion: + +```go +>>!document this function> +``` + +```go +// Foo returns the square of n. +func Foo(n int) int { return n * n } +``` + +Context is included automatically. For follow-ups, Hexai keeps the last few Q/A pairs above the cursor in mind, so you can ask related questions without repeating yourself. + +There are a few slash commands you can type at the end of a chat line: `/reload>` re-reads `config.toml` without restarting the LSP, `/disable>` pauses auto-completions for the session, and `/enable>` turns them back on. + +In the editor buffer it ends up looking like this — the question stays, the reply is quoted below, and a follow-up picks up the same context: + +```text +What is a Go slice? + +> A slice is a dynamically-sized view into an array. It stores a pointer to +> the backing array plus length and capacity. + +And how do I append to one? + +> Use the built-in append: s = append(s, x). It grows the backing array +> when capacity is exhausted, returning a new slice. +``` + +## Code actions via the tmux popup + +`hexai-tmux-action` is my favorite part. Inside a tmux session, select code in Helix and press the bound key. A tmux popup opens with this menu: + +``` +r Rewrite selection +i Simplify and improve +c Document code +t Generate Go unit test(s) +f Fix typos and improve grammar and clarity +p Custom prompt (opens your editor) +s Skip +``` + +Pick one, the popup closes, and the rewritten code is piped back into Helix. For rewrite actions, I usually add a small instruction in a strict marker like `;extract this into a helper;` inside the selection. The runner finds the first instruction and uses it. + +A mandatory detail: the popup is a real tmux popup, so Helix must be running inside a tmux session for this to work — there is no fallback to a separate window. Start it with: + +```sh +tmux new -s hx +hx some-file.go +``` + +Then select code and hit Alt-a. No special `tmux.conf` is required for the popup itself; the only hard requirement is that Helix lives inside tmux (and tmux 3.2 or newer, since the popup uses tmux's popup feature). + +The menu is fully configurable. This is how I replace it with a smaller custom menu: + +```toml +[[tmux_action.menu]] +kind = "rewrite" +hotkey = "r" + +[[tmux_action.menu]] +kind = "document" +hotkey = "c" + +[[tmux_action.menu]] +kind = "custom" +custom_id = "extract-function" +hotkey = "e" + +[[tmux_action.menu]] +kind = "skip" +hotkey = "s" +``` + +Custom actions reference entries under `[[prompts.code_action.custom]]` in the same config file. + +[](./unleashing-hexai/06-tmux-popup.jpg) + +Optional but useful: have tmux show live Hexai stats (provider, model, rpm, bytes) in the status line. Add this to `~/.config/tmux/tmux.conf` (or `~/.tmux.conf`): + +``` +set -g status-right '#{@hexai_status} #[fg=colour8]| %H:%M' +set -g status-right-length 120 +``` + +The `@hexai_status` option is updated by the CLI, the LSP, and the action runner. Disable it with `HEXAI_TMUX_STATUS=0` if you don't want it. + +[](./unleashing-hexai/10-tmux-status.png) + +## The CLI + +The `hexai` CLI is useful for quick questions from the terminal or from scripts: + +```sh +# Ask from stdin +cat some-file.go | hexai + +# Ask from an argument +hexai 'explain this function' + +# Both stdin and argument are concatenated +cat some-file.go | hexai 'write unit tests for this' + +# Open the global config in $HEXAI_EDITOR or $EDITOR +hexai config + +# Simulate how fast a model feels without calling a provider +hexai --tps-simulation 12-18 +``` + +A real one-shot looks like this (only stdout is shown): + +``` +$ hexai 'install ripgrep on fedora' +sudo dnf install ripgrep +``` + +The provider label and the run summary (timing, token counts, rpm) go to stderr, so `stdout` stays clean for pipes — `hexai 'install ripgrep on fedora' | sh` just works. + +## Managing agent tasks with ask + +`ask` is a thin wrapper around Taskwarrior that auto-scopes tasks to the current git project and tags them with `+agent`. I use it to keep track of what the coding agent is supposed to do next. + +Under the hood every `ask` command is just a Taskwarrior command filtered to `project:REPO +agent`, where `REPO` is the name of the git repository root `ask` was run in. The tasks are plain Taskwarrior tasks, so you can drop down to `task` itself any time and work with the same data. From the hexai repo, for example: + +```sh +# Same tasks, raw Taskwarrior +task project:hexai list +task project:hexai +agent next +``` + +`ask` just hides the project filter, the `+agent` tag, and the raw UUIDs so the day-to-day output stays small and project-local. + +That scoping is also a security boundary, and the main reason I let an LLM agent touch my Taskwarrior database at all. Because `ask` always applies the `project:REPO +agent` filter, the agent can only see and modify tasks in its own current project — it cannot delete, reprioritize, or even see anything outside that filter. So `ask` is really a safety wrapper around `task`: you can hand it to a coding agent without giving it free rein over the rest of your tasks. + +```sh +# Add a task for the current project +ask add priority:H "implement config reload" + +# List pending agent tasks +ask list + +# Start and finish work (ask add prints the alias, e.g. os0) +ask start os0 +ask done os0 + +# See details without exposing raw UUIDs +ask info os0 +``` + +The IDs shown are stable local aliases, not Taskwarrior's numeric IDs. Taskwarrior gives you two built-in identifiers: a numeric ID that isn't stable across syncs and exports, and a UUID that is stable but far too long to type by hand. `ask` instead keeps its own mapping from each task's UUID to a short, permanent alias (cached under Hexai's cache dir) — so you get the best of both: a stable, short ID that never changes even if tasks above it get completed or deleted. `ask info` hides the raw UUID unless `HEXAI_DEBUG` is set, so the short alias is the one you actually use day to day. + +`ask` works from anywhere inside the project git tree and derives the project name from the repo root. To manage tasks for another project, use `ask proj:hexai list`. + +One detail worth knowing: the alias strings are reversed on purpose. The underlying counter is monotonic (1, 2, 3, …), and a naive encoding would make consecutive tasks share a leading character once the list grows past 36 (`00`, `01`, `02`, … all start with `0`), which kills shell tab-completion. Reversing the string makes the first character vary as fast as possible (`00`, `10`, `20`, … instead of `00`, `01`, `02`, …), so typing the first letter in Fish actually narrows the list. That is the whole reason the IDs look slightly odd. + +To actually get those completions in Fish, run `ask fish | source` (or drop it into Fish's `conf.d`) — it gives you tab-completion for both subcommands and the reversed alias IDs. + +`ask list` prints a compact table: + +``` +Urg | Pri | ID | Status | Started | Tags | Description +---------------------------------------------------------------------------- +7.8 | H | os0 | pending | no | agent | implement config reload +5.7 | M | ps0 | pending | no | agent | add fish completion docs +3.6 | L | qs0 | pending | no | agent | deprecate hexai-mcp-server README note +``` + +And `ask info os0` shows one task without exposing the raw UUID: + +``` +ID: os0 +Description: implement config reload +Status: pending +Started: no +Priority: H +Urgency: 7.8 +Tags: agent +``` + +## Running multiple providers side by side + +One feature I use more than I expected: per-surface model lists. In `config.toml` you can configure several providers or models for the same entry point, and Hexai fans the request out to all of them in parallel. + +```toml +[[models.cli]] +provider = "openai" +model = "gpt-4o-mini" +temperature = 0.4 + +[[models.cli]] +provider = "ollama" +model = "qwen3-coder:30b-a3b-q4_K_M" +temperature = 0.2 +``` + +With that, `hexai 'summarize this file'` prints two labeled answers side by side: + +``` +ollama:qwen3-coder:30b-a3b-q4_K_M: +A short Go program that reads a file line by line and prints each line. + +openai:gpt-4o-mini: +Reads a file and echoes each line. Returns early on open errors. +``` + +It is handy for comparing local and cloud models, or for just seeing which one gives the cleaner response. Code actions still use only the first entry; extra entries there are ignored with a warning. + +## What to watch out for + +A few honest caveats: + +* I mainly test Hexai with Helix inside tmux. Other editors might work through LSP, but your mileage will vary. +* The `hexai-mcp-server` binary is experimental and effectively deprecated. I manage prompts through slash commands and the agent system now, so the MCP server is not getting much attention. +* Wiring the tmux popup and status line takes a little manual config. It is not plug-and-play like a VS Code extension. +* Auto-completions can be chatty. You can disable them on the fly with `/disable>` in chat, or tune the debounce in `config.toml`. + +## It will keep changing + +Hexai is a personal tool, and it will keep changing. Things go in and come back out: the tmux popup editor for Cursor Agent prompts I wrote about earlier got folded into Hexai, then removed again once every agent added Ctrl+g or Ctrl+e to edit a prompt in `$EDITOR`. + +[2026-02-02 - A tmux popup editor for Cursor Agent CLI prompts](./2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.md) + +The MCP server that ships with Hexai is experimental and may get cut too. As time goes on I will keep trying ideas — maybe a whole coding agent one day, maybe not. If you want to poke at it or open an issue, it lives on Codeberg. + +## Other related posts: + +[2026-02-02 - A tmux popup editor for Cursor Agent CLI prompts](./2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.md) +[2026-02-14 - Meta slash commands for prompts and context](./2026-02-14-meta-slash-commands-for-prompts-and-context.md) + +E-Mail your comments to `paul@nospam.buetow.org` :-) + +[Back to the main site](../) diff --git a/gemfeed/index.md b/gemfeed/index.md index 24cf4f8b..7461fae2 100644 --- a/gemfeed/index.md +++ b/gemfeed/index.md @@ -2,6 +2,7 @@ ## To be in the .zone! +[2026-07-09 - Unleashing Hexai: AI companion for Helix and the terminal in general](./2026-07-09-unleashing-hexai.md) [2026-07-01 - Posts from January to June 2026](./2026-07-01-posts-from-january-to-june-2026.md) [2026-06-06 - Random Weird Things - Part Ⅳ](./2026-06-06-random-weird-things-iv.md) [2026-06-01 - `gt` calculator - a calculator built with local LLMs](./2026-06-01-gt-calculator.md) diff --git a/gemfeed/unleashing-hexai/01-logo.png b/gemfeed/unleashing-hexai/01-logo.png Binary files differnew file mode 100644 index 00000000..04640d27 --- /dev/null +++ b/gemfeed/unleashing-hexai/01-logo.png diff --git a/gemfeed/unleashing-hexai/06-tmux-popup.jpg b/gemfeed/unleashing-hexai/06-tmux-popup.jpg Binary files differnew file mode 100644 index 00000000..24add3f0 --- /dev/null +++ b/gemfeed/unleashing-hexai/06-tmux-popup.jpg diff --git a/gemfeed/unleashing-hexai/10-tmux-status.png b/gemfeed/unleashing-hexai/10-tmux-status.png Binary files differnew file mode 100644 index 00000000..019a1453 --- /dev/null +++ b/gemfeed/unleashing-hexai/10-tmux-status.png @@ -1,6 +1,6 @@ # Hello! -> This site was generated at 2026-07-02T09:29:06+03:00 by `Gemtexter` +> This site was generated at 2026-07-08T17:13:23+03:00 by `Gemtexter` Welcome to the foo.zone! @@ -20,6 +20,7 @@ Everything you read on this site is my personal opinion and experience. You can ### Posts +[2026-07-09 - Unleashing Hexai: AI companion for Helix and the terminal in general](./gemfeed/2026-07-09-unleashing-hexai.md) [2026-07-01 - Posts from January to June 2026](./gemfeed/2026-07-01-posts-from-january-to-june-2026.md) [2026-06-06 - Random Weird Things - Part Ⅳ](./gemfeed/2026-06-06-random-weird-things-iv.md) [2026-06-01 - `gt` calculator - a calculator built with local LLMs](./gemfeed/2026-06-01-gt-calculator.md) diff --git a/uptime-stats.md b/uptime-stats.md index 97876073..40f45d93 100644 --- a/uptime-stats.md +++ b/uptime-stats.md @@ -1,6 +1,6 @@ # My machine uptime stats -> This site was last updated at 2026-07-02T09:29:06+03:00 +> This site was last updated at 2026-07-08T17:13:22+03:00 The following stats were collected via `uptimed` on all of my personal computers over many years and the output was generated by `goprecords`, the global uptime records stats analyser of mine. @@ -13,6 +13,8 @@ Also check out my blog post: [Unveiling `guprecords.raku`: Uptime records with Raku (and also there is a version in Go now)](./gemfeed/2023-05-01-unveiling-guprecords:-uptime-records-with-raku.md) +> Uptime stats were last updated Wed 8 Jul 17:13:23 EEST 2026 + ## Top 20 Uptime's by Host Uptime is the total uptime of a host over the entire lifespan. @@ -21,10 +23,10 @@ Uptime is the total uptime of a host over the entire lifespan. +-----+----------------+-----------------------------+-----------------------------------+------------------+ | Pos | Host | Uptime | Last Kernel | Updated | +-----+----------------+-----------------------------+-----------------------------------+------------------+ -| 1. | *blowfish | 4 years, 6 months, 24 days | OpenBSD 7.8 | 2026-06-19 23:31 | -| 2. | *earth | 4 years, 6 months, 7 days | Linux 7.0.11-200.fc44.x86_64 | 2026-07-01 06:04 | +| 1. | *blowfish | 4 years, 7 months, 12 days | OpenBSD 7.8 | 2026-07-07 23:31 | +| 2. | *earth | 4 years, 6 months, 14 days | Linux 7.0.14-201.fc44.x86_64 | 2026-07-08 14:04 | | 3. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | 2023-04-24 18:23 | -| 4. | *fishfinger | 3 years, 10 months, 19 days | OpenBSD 7.8 | 2026-06-19 23:37 | +| 4. | *fishfinger | 3 years, 11 months, 6 days | OpenBSD 7.8 | 2026-07-07 23:34 | | 5. | sun | 3 years, 9 months, 26 days | FreeBSD 10.3-RELEASE-p24 | 2021-07-26 16:48 | | 6. | uranus | 3 years, 9 months, 5 days | NetBSD 10.1 | 2025-05-06 15:38 | | 7. | uugrn | 3 years, 5 months, 5 days | FreeBSD 11.2-RELEASE-p4 | 2021-07-26 16:48 | @@ -32,7 +34,7 @@ Uptime is the total uptime of a host over the entire lifespan. | 9. | pluto | 2 years, 10 months, 29 days | Linux 3.2.0-4-amd64 | 2023-02-18 10:13 | | 10. | tauceti | 2 years, 3 months, 19 days | Linux 3.2.0-4-amd64 | 2023-02-18 10:14 | | 11. | mega15289 | 1 years, 12 months, 17 days | Darwin 23.4.0 | 2024-05-28 18:14 | -| 12. | *mega-m3-pro | 1 years, 10 months, 30 days | Darwin 25.5.0 | 2026-07-01 06:09 | +| 12. | *mega-m3-pro | 1 years, 11 months, 7 days | Darwin 25.5.0 | 2026-07-08 14:04 | | 13. | tauceti-f | 1 years, 9 months, 18 days | Linux 3.2.0-3-amd64 | 2021-07-26 16:48 | | 14. | t450 | 1 years, 7 months, 26 days | FreeBSD 14.2-RELEASE | 2026-01-02 08:37 | | 15. | mega8477 | 1 years, 3 months, 25 days | Darwin 13.4.0 | 2023-02-18 10:12 | @@ -55,11 +57,11 @@ Lifespan is the total uptime + the total downtime of a host. | 1. | uranus | 10 years, 4 months, 5 days | NetBSD 10.1 | 2025-05-06 15:38 | | 2. | dionysus | 8 years, 6 months, 17 days | FreeBSD 13.0-RELEASE-p11 | 2022-09-03 05:35 | | 3. | alphacentauri | 6 years, 9 months, 13 days | FreeBSD 11.4-RELEASE-p7 | 2021-07-26 16:48 | -| 4. | *earth | 4 years, 12 months, 6 days | Linux 7.0.11-200.fc44.x86_64 | 2026-07-01 06:04 | +| 4. | *earth | 4 years, 12 months, 13 days | Linux 7.0.14-201.fc44.x86_64 | 2026-07-08 14:04 | | 5. | makemake | 4 years, 10 months, 16 days | Linux 6.9.9-200.fc40.x86_64 | 2025-11-16 13:55 | -| 6. | *blowfish | 4 years, 6 months, 24 days | OpenBSD 7.8 | 2026-06-19 23:31 | +| 6. | *blowfish | 4 years, 7 months, 12 days | OpenBSD 7.8 | 2026-07-07 23:31 | | 7. | vulcan | 4 years, 5 months, 6 days | Linux 3.10.0-1160.81.1.el7.x86_64 | 2023-04-24 18:23 | -| 8. | *fishfinger | 3 years, 10 months, 21 days | OpenBSD 7.8 | 2026-06-19 23:37 | +| 8. | *fishfinger | 3 years, 11 months, 8 days | OpenBSD 7.8 | 2026-07-07 23:34 | | 9. | sun | 3 years, 10 months, 2 days | FreeBSD 10.3-RELEASE-p24 | 2021-07-26 16:48 | | 10. | uugrn | 3 years, 5 months, 5 days | FreeBSD 11.2-RELEASE-p4 | 2021-07-26 16:48 | | 11. | mega15289 | 3 years, 4 months, 9 days | Darwin 23.4.0 | 2024-05-28 18:14 | @@ -70,7 +72,7 @@ Lifespan is the total uptime + the total downtime of a host. | 16. | tauceti | 2 years, 3 months, 22 days | Linux 3.2.0-4-amd64 | 2023-02-18 10:14 | | 17. | callisto | 2 years, 3 months, 13 days | Linux 4.0.4-303.fc22.x86_64 | 2021-07-26 16:48 | | 18. | tauceti-e | 2 years, 1 months, 29 days | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | -| 19. | *mega-m3-pro | 2 years, 1 months, 5 days | Darwin 25.5.0 | 2026-07-01 06:09 | +| 19. | *mega-m3-pro | 2 years, 1 months, 26 days | Darwin 25.5.0 | 2026-07-08 14:04 | | 20. | tauceti-f | 1 years, 9 months, 20 days | Linux 3.2.0-3-amd64 | 2021-07-26 16:48 | +-----+----------------+-----------------------------+-----------------------------------+------------------+ ``` @@ -93,16 +95,16 @@ Downtime is the total downtime of a host over the entire lifespan. | 8. | mega15289 | 1 years, 4 months, 24 days | Darwin 23.4.0 | 2024-05-28 18:14 | | 9. | mars | 1 years, 2 months, 10 days | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | | 10. | tauceti-e | 0 years, 12 months, 9 days | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | -| 11. | *f0 | 0 years, 11 months, 21 days | FreeBSD 15.1-RELEASE | 2026-07-01 06:00 | -| 12. | *f1 | 0 years, 11 months, 20 days | FreeBSD 15.1-RELEASE | 2026-07-01 06:00 | -| 13. | *f2 | 0 years, 11 months, 20 days | FreeBSD 15.1-RELEASE | 2026-07-01 06:00 | +| 11. | *f0 | 0 years, 11 months, 24 days | FreeBSD 15.1-RELEASE | 2026-07-08 14:00 | +| 12. | *f2 | 0 years, 11 months, 22 days | FreeBSD 15.1-RELEASE | 2026-07-08 14:00 | +| 13. | *f1 | 0 years, 11 months, 22 days | FreeBSD 15.1-RELEASE | 2026-07-08 14:00 | | 14. | sirius | 0 years, 8 months, 20 days | Linux 2.6.32-042stab111.12 | 2021-07-26 16:48 | -| 15. | *earth | 0 years, 7 months, 2 days | Linux 7.0.11-200.fc44.x86_64 | 2026-07-01 06:04 | -| 16. | deimos | 0 years, 5 months, 15 days | Linux 4.4.5-300.fc23.x86_64 | 2021-07-26 16:48 | -| 17. | *mega-m3-pro | 0 years, 3 months, 9 days | Darwin 25.5.0 | 2026-07-01 06:09 | -| 18. | *f3 | 0 years, 2 months, 25 days | FreeBSD 15.1-RELEASE | 2026-06-30 20:00 | -| 19. | joghurt | 0 years, 2 months, 9 days | FreeBSD 7.0-PRERELEASE | 2021-07-26 16:48 | -| 20. | host0 | 0 years, 2 months, 1 days | FreeBSD 6.2-RELEASE-p5 | 2023-02-18 10:08 | +| 15. | *pi1 | 0 years, 7 months, 24 days | NetBSD 10.1 | 2026-07-08 13:17 | +| 16. | *earth | 0 years, 7 months, 2 days | Linux 7.0.14-201.fc44.x86_64 | 2026-07-08 14:04 | +| 17. | deimos | 0 years, 5 months, 15 days | Linux 4.4.5-300.fc23.x86_64 | 2021-07-26 16:48 | +| 18. | *mega-m3-pro | 0 years, 3 months, 21 days | Darwin 25.5.0 | 2026-07-08 14:04 | +| 19. | *f3 | 0 years, 2 months, 25 days | FreeBSD 15.1-RELEASE | 2026-06-30 20:00 | +| 20. | joghurt | 0 years, 2 months, 9 days | FreeBSD 7.0-PRERELEASE | 2021-07-26 16:48 | +-----+----------------+-----------------------------+------------------------------+------------------+ ``` @@ -111,30 +113,30 @@ Downtime is the total downtime of a host over the entire lifespan. Boots is the total number of host boots over the entire lifespan. ``` -+-----+----------------+-------+-------------------------------+------------------+ -| Pos | Host | Boots | Last Kernel | Updated | -+-----+----------------+-------+-------------------------------+------------------+ -| 1. | alphacentauri | 671 | FreeBSD 11.4-RELEASE-p7 | 2021-07-26 16:48 | -| 2. | *f2 | 283 | FreeBSD 15.1-RELEASE | 2026-07-01 06:00 | -| 3. | *f1 | 280 | FreeBSD 15.1-RELEASE | 2026-07-01 06:00 | -| 4. | *f0 | 279 | FreeBSD 15.1-RELEASE | 2026-07-01 06:00 | -| 5. | *earth | 252 | Linux 7.0.11-200.fc44.x86_64 | 2026-07-01 06:04 | -| 6. | mars | 207 | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | -| 7. | callisto | 153 | Linux 4.0.4-303.fc22.x86_64 | 2021-07-26 16:48 | -| 8. | dionysus | 136 | FreeBSD 13.0-RELEASE-p11 | 2022-09-03 05:35 | -| 9. | tauceti-e | 120 | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | -| 10. | makemake | 81 | Linux 6.9.9-200.fc40.x86_64 | 2025-11-16 13:55 | -| 11. | uranus | 59 | NetBSD 10.1 | 2025-05-06 15:38 | -| 12. | pluto | 51 | Linux 3.2.0-4-amd64 | 2023-02-18 10:13 | -| 13. | *blowfish | 50 | OpenBSD 7.8 | 2026-06-19 23:31 | -| 14. | *fishfinger | 50 | OpenBSD 7.8 | 2026-06-19 23:37 | -| 15. | mega15289 | 50 | Darwin 23.4.0 | 2024-05-28 18:14 | -| 16. | *mega-m3-pro | 50 | Darwin 25.5.0 | 2026-07-01 06:09 | -| 17. | t450 | 46 | FreeBSD 14.2-RELEASE | 2026-01-02 08:37 | -| 18. | mega8477 | 40 | Darwin 13.4.0 | 2023-02-18 10:12 | -| 19. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf | 2023-02-18 10:13 | -| 20. | *pi0 | 36 | Linux 6.1.31-v8.1.el9.altarch | 2026-07-01 06:00 | -+-----+----------------+-------+-------------------------------+------------------+ ++-----+----------------+-------+------------------------------+------------------+ +| Pos | Host | Boots | Last Kernel | Updated | ++-----+----------------+-------+------------------------------+------------------+ +| 1. | alphacentauri | 671 | FreeBSD 11.4-RELEASE-p7 | 2021-07-26 16:48 | +| 2. | *f2 | 288 | FreeBSD 15.1-RELEASE | 2026-07-08 14:00 | +| 3. | *f1 | 286 | FreeBSD 15.1-RELEASE | 2026-07-08 14:00 | +| 4. | *f0 | 284 | FreeBSD 15.1-RELEASE | 2026-07-08 14:00 | +| 5. | *earth | 253 | Linux 7.0.14-201.fc44.x86_64 | 2026-07-08 14:04 | +| 6. | mars | 207 | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | +| 7. | callisto | 153 | Linux 4.0.4-303.fc22.x86_64 | 2021-07-26 16:48 | +| 8. | dionysus | 136 | FreeBSD 13.0-RELEASE-p11 | 2022-09-03 05:35 | +| 9. | tauceti-e | 120 | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | +| 10. | makemake | 81 | Linux 6.9.9-200.fc40.x86_64 | 2025-11-16 13:55 | +| 11. | uranus | 59 | NetBSD 10.1 | 2025-05-06 15:38 | +| 12. | pluto | 51 | Linux 3.2.0-4-amd64 | 2023-02-18 10:13 | +| 13. | *fishfinger | 50 | OpenBSD 7.8 | 2026-07-07 23:34 | +| 14. | mega15289 | 50 | Darwin 23.4.0 | 2024-05-28 18:14 | +| 15. | *blowfish | 50 | OpenBSD 7.8 | 2026-07-07 23:31 | +| 16. | *mega-m3-pro | 50 | Darwin 25.5.0 | 2026-07-08 14:04 | +| 17. | t450 | 46 | FreeBSD 14.2-RELEASE | 2026-01-02 08:37 | +| 18. | phobos | 40 | Linux 3.4.0-CM-g1dd7cdf | 2023-02-18 10:13 | +| 19. | mega8477 | 40 | Darwin 13.4.0 | 2023-02-18 10:12 | +| 20. | *pi0 | 38 | NetBSD 10.1 | 2026-07-08 13:17 | ++-----+----------------+-------+------------------------------+------------------+ ``` ## Top 20 Score's by Host @@ -146,10 +148,10 @@ Score is calculated by combining all other metrics. | Pos | Host | Score | Last Kernel | Updated | +-----+----------------+-------+-----------------------------------+------------------+ | 1. | uranus | 340 | NetBSD 10.1 | 2025-05-06 15:38 | -| 2. | *earth | 311 | Linux 7.0.11-200.fc44.x86_64 | 2026-07-01 06:04 | -| 3. | *blowfish | 289 | OpenBSD 7.8 | 2026-06-19 23:31 | +| 2. | *earth | 312 | Linux 7.0.14-201.fc44.x86_64 | 2026-07-08 14:04 | +| 3. | *blowfish | 292 | OpenBSD 7.8 | 2026-07-07 23:31 | | 4. | vulcan | 275 | Linux 3.10.0-1160.81.1.el7.x86_64 | 2023-04-24 18:23 | -| 5. | *fishfinger | 246 | OpenBSD 7.8 | 2026-06-19 23:37 | +| 5. | *fishfinger | 249 | OpenBSD 7.8 | 2026-07-07 23:34 | | 6. | sun | 238 | FreeBSD 10.3-RELEASE-p24 | 2021-07-26 16:48 | | 7. | uugrn | 211 | FreeBSD 11.2-RELEASE-p4 | 2021-07-26 16:48 | | 8. | alphacentauri | 201 | FreeBSD 11.4-RELEASE-p7 | 2021-07-26 16:48 | @@ -159,12 +161,12 @@ Score is calculated by combining all other metrics. | 12. | mega15289 | 147 | Darwin 23.4.0 | 2024-05-28 18:14 | | 13. | tauceti | 141 | Linux 3.2.0-4-amd64 | 2023-02-18 10:14 | | 14. | makemake | 137 | Linux 6.9.9-200.fc40.x86_64 | 2025-11-16 13:55 | -| 15. | t450 | 125 | FreeBSD 14.2-RELEASE | 2026-01-02 08:37 | -| 16. | *mega-m3-pro | 124 | Darwin 25.5.0 | 2026-07-01 06:09 | +| 15. | *mega-m3-pro | 126 | Darwin 25.5.0 | 2026-07-08 14:04 | +| 16. | t450 | 125 | FreeBSD 14.2-RELEASE | 2026-01-02 08:37 | | 17. | tauceti-f | 108 | Linux 3.2.0-3-amd64 | 2021-07-26 16:48 | | 18. | tauceti-e | 96 | Linux 3.2.0-4-amd64 | 2021-07-26 16:48 | | 19. | callisto | 86 | Linux 4.0.4-303.fc22.x86_64 | 2021-07-26 16:48 | -| 20. | *f2 | 83 | FreeBSD 15.1-RELEASE | 2026-07-01 06:00 | +| 20. | *f1 | 85 | FreeBSD 15.1-RELEASE | 2026-07-08 14:00 | +-----+----------------+-------+-----------------------------------+------------------+ ``` @@ -179,7 +181,7 @@ Boots is the total number of host boots over the entire lifespan. | 1. | FreeBSD 14... | 565 | | 2. | FreeBSD 10... | 551 | | 3. | Linux 3... | 550 | -| 4. | *FreeBSD 15... | 326 | +| 4. | *FreeBSD 15... | 342 | | 5. | *Linux 6... | 302 | | 6. | Linux 5... | 162 | | 7. | Linux 4... | 161 | @@ -188,14 +190,14 @@ Boots is the total number of host boots over the entire lifespan. | 10. | *OpenBSD 7... | 110 | | 11. | Darwin 13... | 40 | | 12. | FreeBSD 5... | 25 | -| 13. | Darwin 23... | 23 | -| 14. | Darwin 24... | 23 | -| 15. | Linux 2... | 22 | +| 13. | Linux 2... | 22 | +| 14. | Darwin 24... | 22 | +| 15. | Darwin 23... | 22 | | 16. | Darwin 21... | 17 | | 17. | Darwin 15... | 15 | | 18. | Darwin 22... | 12 | -| 19. | Darwin 18... | 11 | -| 20. | FreeBSD 6... | 10 | +| 19. | *Darwin 25... | 11 | +| 20. | Darwin 18... | 11 | +-----+----------------+-------+ ``` @@ -208,21 +210,21 @@ Uptime is the total uptime of a host over the entire lifespan. | Pos | KernelMajor | Uptime | +-----+----------------+------------------------------+ | 1. | Linux 3... | 15 years, 10 months, 25 days | -| 2. | *OpenBSD 7... | 8 years, 12 months, 9 days | +| 2. | *OpenBSD 7... | 9 years, 1 months, 14 days | | 3. | FreeBSD 10... | 5 years, 9 months, 9 days | | 4. | Linux 5... | 4 years, 10 months, 21 days | -| 5. | *Linux 6... | 3 years, 12 months, 21 days | +| 5. | *Linux 6... | 4 years, 1 months, 9 days | | 6. | FreeBSD 14... | 3 years, 2 months, 12 days | | 7. | Linux 4... | 2 years, 7 months, 22 days | | 8. | FreeBSD 11... | 2 years, 4 months, 28 days | | 9. | Linux 2... | 1 years, 11 months, 21 days | | 10. | Darwin 13... | 1 years, 3 months, 25 days | | 11. | FreeBSD 6... | 1 years, 3 months, 9 days | -| 12. | Darwin 24... | 0 years, 12 months, 15 days | -| 13. | Darwin 23... | 0 years, 10 months, 18 days | +| 12. | Darwin 24... | 0 years, 12 months, 10 days | +| 13. | Darwin 23... | 0 years, 10 months, 12 days | | 14. | OpenBSD 4... | 0 years, 8 months, 12 days | | 15. | Darwin 21... | 0 years, 8 months, 2 days | -| 16. | *FreeBSD 15... | 0 years, 7 months, 11 days | +| 16. | *FreeBSD 15... | 0 years, 7 months, 27 days | | 17. | Darwin 18... | 0 years, 7 months, 5 days | | 18. | Darwin 22... | 0 years, 6 months, 22 days | | 19. | Darwin 15... | 0 years, 6 months, 15 days | @@ -239,19 +241,19 @@ Score is calculated by combining all other metrics. | Pos | KernelMajor | Score | +-----+----------------+-------+ | 1. | Linux 3... | 1045 | -| 2. | *OpenBSD 7... | 576 | +| 2. | *OpenBSD 7... | 582 | | 3. | FreeBSD 10... | 406 | | 4. | Linux 5... | 317 | -| 5. | *Linux 6... | 279 | +| 5. | *Linux 6... | 282 | | 6. | FreeBSD 14... | 245 | | 7. | Linux 4... | 175 | | 8. | FreeBSD 11... | 159 | | 9. | Linux 2... | 121 | | 10. | Darwin 13... | 80 | | 11. | FreeBSD 6... | 75 | -| 12. | *FreeBSD 15... | 63 | -| 13. | Darwin 24... | 62 | -| 14. | Darwin 23... | 52 | +| 12. | *FreeBSD 15... | 67 | +| 13. | Darwin 24... | 61 | +| 14. | Darwin 23... | 51 | | 15. | OpenBSD 4... | 39 | | 16. | Darwin 21... | 38 | | 17. | Darwin 18... | 32 | @@ -269,11 +271,11 @@ Boots is the total number of host boots over the entire lifespan. +-----+------------+-------+ | Pos | KernelName | Boots | +-----+------------+-------+ -| 1. | *FreeBSD | 1756 | -| 2. | *Linux | 1205 | +| 1. | *FreeBSD | 1772 | +| 2. | *Linux | 1206 | | 3. | *Darwin | 155 | | 4. | *OpenBSD | 120 | -| 5. | NetBSD | 1 | +| 5. | *NetBSD | 5 | +-----+------------+-------+ ``` @@ -285,11 +287,11 @@ Uptime is the total uptime of a host over the entire lifespan. +-----+------------+-----------------------------+ | Pos | KernelName | Uptime | +-----+------------+-----------------------------+ -| 1. | *Linux | 29 years, 3 months, 5 days | -| 2. | *FreeBSD | 13 years, 7 months, 26 days | -| 3. | *OpenBSD | 9 years, 7 months, 20 days | -| 4. | *Darwin | 5 years, 6 months, 20 days | -| 5. | NetBSD | 0 years, 1 months, 1 days | +| 1. | *Linux | 29 years, 4 months, 1 days | +| 2. | *FreeBSD | 13 years, 8 months, 10 days | +| 3. | *OpenBSD | 9 years, 8 months, 25 days | +| 4. | *Darwin | 5 years, 6 months, 29 days | +| 5. | *NetBSD | 0 years, 1 months, 11 days | +-----+------------+-----------------------------+ ``` @@ -301,11 +303,11 @@ Score is calculated by combining all other metrics. +-----+------------+-------+ | Pos | KernelName | Score | +-----+------------+-------+ -| 1. | *Linux | 1948 | -| 2. | *FreeBSD | 1010 | -| 3. | *OpenBSD | 615 | -| 4. | *Darwin | 360 | -| 5. | NetBSD | 0 | +| 1. | *Linux | 1952 | +| 2. | *FreeBSD | 1014 | +| 3. | *OpenBSD | 621 | +| 4. | *Darwin | 362 | +| 5. | *NetBSD | 4 | +-----+------------+-------+ ``` @@ -317,18 +319,18 @@ LastUpdated is the date a host's records file was last updated. +-----+--------------+------------------+-----------------------------------+ | Pos | Host | LastUpdated | Last Kernel | +-----+--------------+------------------+-----------------------------------+ -| 1. | *mega-m3-pro | 2026-07-01 06:09 | Darwin 25.5.0 | -| 2. | *earth | 2026-07-01 06:04 | Linux 7.0.11-200.fc44.x86_64 | -| 3. | pi1 | 2026-07-01 06:02 | Linux 6.1.31-v8.1.el9.altarch | -| 4. | *pi2 | 2026-07-01 06:00 | Linux 6.1.31-v8.1.el9.altarch | -| 5. | *pi0 | 2026-07-01 06:00 | |
