Announcing new builds for 31 August 2026
- Beta (26H1): Build 28020.2818
- Experimental (26H1): Build 28120.2824
Iβve been a Debian user since 1999, and a Debian developer since 2000. Given recent events itβs worth thinking about why that that is, and why I havenβt switched to something else in the past quarter century.
My first Linux distro was Slackware, off a CD in a book, some time in the mid 90s. After starting university I ran SUSE for a while, then moved to RedHat (both back before they had commercial variants significantly different to what was available freely). The main motivation for switching was package management; I was running a machine at home, and a machine at university. Keeping track of what was installed on each, and what versions, was getting annoying with Slackware. Most of the folk I knew were running RedHat, and I mostly played with SUSE because Iβm contrary before realising it was different enough that I couldnβt easily make use of 3rd party RPMs.
I came to Debian via friends in Cambridge, who spoke highly of it. The first Debian machine I installed was fourier, the initial host for Black Cat Networks, and I never looked back.
(For additional context I should also point out I have contributed, in the distant past, to, and run, OpenWRT, OpenEmbedded, and FreeBSD.)
Iβd like to try and work out what is it I get from Debian that Iβd need in anything else. Originally I tried to order the requirements in some sort of priority, but itβs sometimes hard to work out what Iβd drop if I had to compromise somewhere, so itβs a somewhat loose ordering.
Ultimately I donβt want to have to actively think about the Linux distribution I use. Debian has mostly given me that; I know it will generally be suitable for most environments I want to use it in (embedded situations where OpenWRT or OpenEmbedded are better choices being the exception, but thatβs less frequent these days), and I can rely on getting timely security updates (thanks to all those who work on that within Debian!). Iβm not sure thereβs currently an alternative that would suit my needs? Iβd love to hear if thereβs something I should look at, even if Iβm not necessary making a move just yet!
Team,Cook also shared a message to customers today.
Today is my last day as CEO of Apple. This is a moment I always knew would come one day, and yet it is still hard to believe it has arrived and I am writing these words. I love this company and the team behind it, and I couldn't let this day pass without sending a note to you, to tell you how grateful I am for the outpouring of affection you've sent my way, for the way you've shown up each and every day, and most of all, for the privilege of a lifetime serving as your leader.
The truth is, whatever there is to say about my success, I know it is all because of you. You have brought out the best in me. In all my life, I have never seen or been with such an extraordinary team of people before, and every day I get to see more examples of that.
There is something truly special about Apple. I am most proud of what an annual report could never capture. This place is proof that culture triumphs over everything. We share a belief that what we build matters, and that we have both the opportunity and the responsibility to leave the world better than we found it. That purpose is part of what makes this place extraordinary. Apple helps nurture it, but I believe it lived within each of you long before you arrived here. It is what brought you to this company and what continues to drive the work you do every day. Together, we have created something far greater than any one of us could have imagined or accomplished alone. And that's the secret to our success. We bring out the best in each other. We lift each other up. We have made it possible to leave our "dent in the universe," as Steve once described it, because of who we are and what we believe, because of what we value and how we see the world. How fortunate we are. How fortunate I am.
As you know, I am not leaving Apple. But I am stepping away from a role that I have loved deeply. I will miss this work in ways I can only begin to imagine, even as I remain completely at peace with my decision. I will miss leading you and being with you for every step, even as I take enormous comfort in handing the helm to someone as brilliant and wonderful and capable as John. Few people understand what it takes to build products that change the world the way John does and I could not be more excited for his leadership.
I hope you know how much I appreciate you and what an honor it has been to be your CEO. Most of all, I hope you will continue to be proud to be part of this remarkable place we call Apple and always give it your very best. When we bring our whole selves to this work, with care for one another and for the people we serve, there is no limit to the profound difference we can make.
I look forward to seeing you in my new role at Apple Park and around the world.
With all I have and all I am, I am always
Yours,
Tim
Sending lots of love to the Apple community on my last day as CEO. My title changes tomorrow, but the love I have for the Apple community never will. Thank you for being a constant source of inspiration. My gratitude is endless, and I'm excited for the next chapter!
β Tim Cook (@tim_cook) August 31, 2026

Note
this article had been almost completely written before the weekend, and I decided I might as well focus on stuff Iβm creating, finish and publish this.
For many years, Iβve been sporadically dabbling in creating 3D models; for reasons that are probably obvious to anybody who knows me I used OpenSCAD and saved my projects in git, which made them at least somewhat public.
However, SCAD sources in a git repository arenβt the most convenient way to get a 3D model, and for a long time I never had a consistent way to publish βbinariesβ for my models: some have been added to my old website, some to my craft patterns site, but it was always an ad-hoc thing.
Then two things happened more or less at the same time.
One was me finding out that slic3r had been definitely removed from Debian. I know it was going to happen, and I postponed thinking about it as long as I could, but eventually I had to move over to PrusaSlicer, whose packaging is in better shape.
The other was that lately Iβve been doing a bit of lucet, and talking about it online, and Iβm really happy with the shape of the lucet Iβve designed and printed, the one in the picture at the beginning of this post, and while there are other models available, I wanted to make it more convenient for people to also get mine.
Since PrusaSlicer did look still maintained upstream in a way that doesnβt feel like at danger of immediate enshittification, I considered making an account on Printables, and asked on the Fediverse if somebody knew something bad about the company behind it, as itβs getting more an more common these days.
Apparently nobody did, but in the thread somebody mentioned that there is a federated platform for publishing 3D models, called manyfold !
I didnβt want to add βself host a(nother) web thingβ, especially not one that is not in Debian, to my list of projects, but I did create an account on a public instance: @valhalla@3dprint.social <https://3dprint.social/creators/valhalla> and started publishing models, both a selection of old ones and a few new ones I designed in the last few days, since I was in a 3D printing mindset.
Then I decided that since nobody had serious objections to it, I could also create an account on printables, as thatβs probably more easily accessible to the general public.
I have been somewhat slower at publishing models on the latter, but I expect that eventually most of what I design will end up on both platforms; I still have a few older models I want to add, and a few ideas for new models to make, then I guess stuff will slow down, and only get new ones now and then, as thatβs how I usually approach hobbies.
Of course, the self-hosted git repository is not going away: thatβs still the canonical location for my models, with all of the non-self-hosted options as a convenience option.
In Part 1: Taming the AI Agents, I shared the architectural blueprint of CAMP (Cross-Agent Memory Protocol)βhow we used Linux Bubblewrap (bwrap), camp-acpd, OPA policy enforcement, and a central pgvector MemPalace to bring deterministic discipline, sandboxing, and long-term memory to a heterogeneous fleet of AI coding assistants (Claude Code, Google Antigravity, Grok Build, and GitHub Copilot).
At the end of that article, however, I highlighted a significant hurdle: The Headless Limitation.
βWhile passive A2A works beautifully for structured handoffs, the current frontier of agentic design faces a key limitation: agents are not yet fully headless-capable. They depend on the active terminal session, browser loop, or prompt loop of the user to keep executing. Because agents cannot run completely detached in the background as daemon processes, we cannot yet achieve active A2A communicationβ¦β
For weeks, this seemed like an insurmountable impasse. Proprietary AI vendors have zero commercial incentive to ratify a universal, open, cross-vendor Agent-to-Agent (A2A) communication protocol. Each vendor builds its own walled garden (Claudeβs cross-session features, OpenAIβs custom ecosystems, etc.). If you wait for the industry to hand you an open interoperability standard, you will wait forever.
Then, on August 26, 2026, inspired by Colin Waltersβ article on Agentic AI and software forges and GitHub Agentic Workflows (gh-aw), we had a sudden realization:
We donβt need a new protocol, a new distributed message broker, or permission from proprietary AI vendors. We already have the universal, decentralized communication bus that software engineers have relied on for decades: the software forge itself.
Over the span of 48 intensive hours (from RFC #788 through milestones M1 to M3 and live dogfooding on #813), we designed, implemented, fortified, and verified fully autonomous, headless, cross-vendor Agent-to-Agent swarms running over a local Gitea forge.
Here is how we did it, the architectural hurdles we solved, and why this changes the game for autonomous software engineering.
When people think about multi-agent swarms, they often imagine complex distributed RPC frameworks, microservices exchanging ephemeral JSON-RPC blobs, or bespoke socket daemons.
In practice, this approach suffers from major flaws:
By flipping the paradigm and making the software forge (Gitea) the primary communication channel, everything falls naturally into place:
@mentions are the dispatch triggers: When an agent (or human) writes @grok Please review this PR in a comment, Gitea fires a standard webhook (issue_comment).-p, Grok uses -p, Antigravity uses --print, Copilot uses --prompt. But they all agree on the essential contract: βTake a prompt string, execute tools, print output, and exit.βββββββββββββββββ Gitea Webhook ββββββββββββββββββββββββ
β Gitea Forge β βββββββββββββββββββββββββββββ> β camp-a2a-bridge.py β
β (localhost) β (issue_comment / assignment) β (Validates & Files) β
ββββββββββββββββ ββββββββββββ¬ββββββββββββ
β² β
β βΌ
β Writes comment / review ββββββββββββββββββββββββ
β via camp_acp_gateway β A2A Inbox Ledger β
β ββββββββββββ¬ββββββββββββ
ββββββββ΄βββββββββββββββββββββββ β
β Fortified Headless Agent β βΌ
β (bwrap + OPA + MCP sandbox) β <βββββββββββββββββ ββββββββββββββββββββββββ
β β’ Claude Code (-p) β Spawn PID β camp-a2a-dispatcher β
β β’ Grok Build (-p) β (Cold or Resume) β (Enforces Hop Cap, β
β β’ Antigravity (--print) β β Rule 1/2, Sandbox) β
βββββββββββββββββββββββββββββββ ββββββββββββββββββββββββ
Before opening the floodgates to background agent dispatch, we had to answer a critical security question: Does a non-interactive, headless agent run with the same strict security sandboxing, audit logging, and tool rails as an interactive session?
On August 26, we probed all fleet launchers on the host with a baseline check:
'Call camp_startup_check and print its result verbatim, then exit.'
The results settled the question immediately:
agy --print / KIR): PASS β Gateway answered, full JSON returned.grok -p / GRK): PASS β Gateway answered.claude -p / CLD): PASS β Gateway answered.copilot --prompt / CPL): Initially held on TTY tool consent; later unlocked in Milestone 6 via --allow-all-tools --session-id=<uuid>.This proved that a headless run through our fortified pilot launcher (camp_pilot_*.sh) is a first-class, fully audited, sandboxed CAMP agent running inside its Bubblewrap container under OPA policy gates. It is not an unconstrained background script or a degraded bypass.
A naive multi-agent dispatch has an immediate flaw: Every time an agent is invoked, it starts from a blank slate (cold start).
If @claude tags @grok to review code, and @grok replies asking for clarification, @claudeβs second invocation would normally forget everything it did 5 minutes ago, forcing it to burn thousands of tokens re-reading the entire git history from scratch.
To solve this, we established a clean 3-Tier Memory Model:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 3-TIER MEMORY MODEL β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Tier 1: CLI Conversation Session (Working Memory) β
β β’ Per-(Agent, Repo, Issue) mapping in a2a-sessions.json β
β β’ Fast, native, compacted context across multi-turn pokes β
β β’ Resumed via --resume (CLD), -r (GRK), --conversation (agy) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Tier 2: The Gitea Thread (Public Bus & Record) β
β β’ Cross-vendor shared truth across Claude, Grok, Antigravity & Human β
β β’ Survives process restarts, machine reboots, and dead sessions β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Tier 3: Central MemPalace (Durable Long-Term Knowledge) β
β β’ pgvector database (17,000+ drawers across agent wings) β
β β’ Structured Knowledge Graph (mempalace_kg_*) for mutable facts β
β β’ Attributed AAAK dialect queryable by any agent across any project β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
BANANA Two-Shot TestTo verify Tier 1 working memory persistence across independent processes, we designed a simple two-shot host test:
Every agent CLI passed with flying colors:
-r 01a03ecc-3ed0-71e1-9a5c-e098bb29ba10 answered BANANA-GRK.--resume 0a587733-9aec-43c5-9cb7-d424e95b2c5b answered BANANA-CLD.--conversation 2e3c43d9-d6fe-4c5c-801b-b9ceb2e7e196 answered BANANA-KIR-JSON.--session-id <uuid> verified in Milestone 6 (DoD #820).The dispatcher simply maintains a lightweight JSON mapping ((agent, repo, issue_number) -> vendor_session_uuid). On the first poke of an issue, it creates and saves the session ID; on any subsequent poke on that same issue, it resumes the exact same conversational thread!
Building this system required solving several subtle, real-world friction points across multiple agent CLI implementations. Under the guidance of our plan of record (RFC #788), we delivered this through four focused milestones:
agy --print <prompt> --output-format json).a2a-sessions.json to store and resume vendor session UUIDs. If a resume fails (e.g. session purged upstream), the dispatcher gracefully falls back to a clean cold start without failing the task.rrs (the human) would trigger execution. With M3, an authenticated comment from @claude mentioning @grok triggers Grokβs headless launcher.--permission-mode bypassPermissions for headless Claude Code so non-interactive runs execute tool calls without stalling on TTY prompts.@login tokens with a non-empty task description (#810), preventing accidental dispatches from passive conversational references.needs-human label on held threads.--allow-all-tools and pinning minted session UUIDs (--session-id=<uuid>), Copilot achieved full parity with Claude, Grok, and Antigravity, completing 100% headless fleet coverage across all four major AI coding assistants.Letting AI agents autonomously invoke each other in background loops without a human watching is a recipe for an infinite, credit-draining token fire. We put four non-negotiable safety guardrails in place:
The dispatcher tracks hops per (repo, issue). Each agent-to-agent dispatch increments the counter.
[camp-a2a-bridge] hop cap reached (3 agent-to-agent dispatches on CAMP/camp-infrastructure#813) β not launching GRK for claude's mention,
and holds execution until the human (rrs) provides input or resets the count.[ Human: rrs ] ββββββ (Cold Start) βββββ> [ @Claude ]
β
(Hop 1) β @grok please review
βΌ
[ @Grok ]
β
(Hop 2: Resume) β @claude I reviewed
βΌ
[ @Claude ]
β
(Hop 3) β @grok ack hop 4
βΌ
βββββββββββββββββββββββββββ
β DISPATCHER HOP CAP: 3 β
β *** BLOCKED & HELD ***β
β Awaiting Human Reset β
βββββββββββββββββββββββββββ
In human conversation, we often reference colleagues in passing: βI will talk to @claude about this laterβ or βSee @grokβs table aboveβ.
Early prototypes treated any appearance of @agent as a dispatch trigger, causing accidental, unwanted agent launches!
We instituted a strict Summon Predicate: For fleet agents, a mention is only considered an actionable summon if:
@login appears as the starting word of a line (optionally preceded by markdown list markers *, -, or >).Mid-sentence mentions in discussion paragraphs are parsed as passive conversational text and never trigger background dispatches.
In interactive mode, Claude Code presents interactive TTY prompts asking the user to approve MCP tool calls (such as camp_pr_get or camp_pr_get_diff). In unattended headless mode, there is no TTY, causing the run to fail with permission errors.
To fix this, we configured --permission-mode bypassPermissions for Claudeβs headless CLI invocation. Crucially, this only bypasses Claudeβs internal TTY UI promptβit does not bypass CAMPβs security rails.
All command executions still route through camp-acpd and Bubblewrap namespaces; OPA policy checks remain active; and privileged operations (such as merging pull requests or restarting system services) still trigger desktop Zenity HITL dialogs on the humanβs workstation.
At any point, the human operator can instantly freeze all background agent dispatches across the entire infrastructure with a single standard Linux command:
systemctl --user stop camp-a2a-active.service
On August 27, 2026, on issue CAMP/camp-infrastructure#813, we ran the full live dogfood test of the A2A system.
Here is the exact transcript of what took place entirely autonomously in the Gitea issue thread:
Human initiates: rrs comments on issue #813:
@claude Please start the M3 dogfood. On this issue, post a conversation comment whose first line is exactly: @grok Please review this issue in one short paragraph, then stop.
Claude launches (Cold start): The dispatcher spins up @claude headlessly inside bwrap. Claude reads the issue and posts:
@grok Please review this issue in one short paragraph, then stop.
(M3 dogfood step 2 β posted by @claude on rrsβs instruction; this is the CLD $\rightarrow$ GRK fleet hop.)
Grok launches (Cold start, Hop 1): The bridge intercepts Claudeβs comment, identifies the start-of-line @grok summon, and launches @grok. Grok reviews the issue and replies:
@claude I have reviewed this issue. Please confirm and stop.
#813 is a throwaway live dogfood of A2A M3 on 6.git+b78c65cfβ¦
Claude resumes (Session Resume, Hop 2): The bridge intercepts Grokβs comment, sees the @claude summon, and launches Claude with --resume b398d048-ccc3-4cce-8437-4cf8748881a8. Claude immediately remembers its earlier context without token waste:
Confirmed β Grok's review (comment 88562) received via the GRKβCLD fleet hop. That completes the round trip: rrsβCLD, CLDβGRK, GRKβCLD, and this reply. I am deliberately not tagging anyone here, so the chain stops at two agent hops. Stopping.
Testing the Hop Cap (Hop 3 $\rightarrow$ 4):
grok prompts @claude Please ack hop four then stop. Claude posts @grok Please ack hop four then stop. (Hop 3).
When Grok would have been launched for Hop 4, the dispatcher intervenes:
[camp-a2a-bridge] hop cap reached (3 agent-to-agent dispatches on CAMP/camp-infrastructure#813) β not launching GRK for claude's mention.
Human Reset & Multi-Agent Wrap-up:
rrs steps in, resets the state, and asks the fleet for final status. In parallel:
@grok delivers a closure scorecard.@claude confirms session continuity and M3.2 summon filtering.@priyasi (Antigravity CLI) runs automated ACP checks: 44/44 test suite passing, 17,219 MemPalace vector drawers active, zero spec drift.@agrickxy (Antigravity CLI) provides comprehensive infrastructure impression analysis.@kiran (Antigravity CLI) is summoned headlessly to draft this very blog post!Beyond backend plumbing and sandboxing, routing agent interaction through Gitea fundamentally revolutionizes the developer experience of managing an AI fleet.
In traditional CLI tools, conversations are constrained to a single, linear terminal scrollback. When an agent discovers multiple sub-problems, exploring them sequentially in one prompt loop rapidly pollutes the context window and confuses the model.
Using the forge as the communication gateway naturally unlocks a mindmap mental model:
Anyone using multiple AI coding assistants on a daily basis quickly grows exhausted by their jarring terminal UI differences: differing ANSI escape rendering, inconsistent markdown wrapping, erratic diff pagers, and incompatible keybindings across Claude, Grok, and Antigravity.
Gitea homogenizes the entire fleet under a single, polished rich-text web view:
@claude, @grok, @priyasi, @kiran).<details> blocks for voluminous diagnostic outputs.Auditing past agent decisions in terminal logs or ephemeral chat histories is notoriously difficult. With the forge, every exchange is:
Reading back through past agent interactions becomes a breezeβto the point where interacting via the intermediary Gitea interface becomes far more pleasant and productive than wrestling with multiple desktop CLI terminals.
Because Gitea provides a standard web and API interface, you are no longer chained to the workstation running the agent processes:
For years, the AI industry has treated cross-vendor multi-agent interoperability as an elusive dream waiting for industry-wide API standardization. By recognizing the software forge as the universal message bus, we quietly achieved live, production-grade, cross-vendor communication across completely distinct vendor models.
This milestone marks a fundamental shift in how we interact with autonomous AI systems:
bwrap), and open MCP tools, any new AI CLI tool released tomorrow can be plugged into our fleet in under 15 minutes by simply adding its command-line prompt flag to the launch table.We have moved beyond static autocomplete and interactive chat widgets. The software forge is now an active, living, collaborative workspace where humans and autonomous AI agents engineer software together.
Below is a video demonstration showcasing autonomous multi-agent communication, cross-vendor relay, and headless swarm coordination in action via the CAMP Forge interface:
The Cross-Agent Memory Protocol (CAMP) and MemPalace are developed as part of our ongoing research into secure, sovereign, and disciplined Agentic AI computing.
The top free iPhone apps in Canada as of August 31We're not changing it. pic.twitter.com/NdeE9v2BNO
β MapQuest (@MapQuest) August 27, 2026
The One Club for Creativity, a U.S. non-profit organization that promotes excellence in advertising and design, today announced that Apple has been selected as the first brand to be inducted into its newly established "Brand Hall of Fame."
Cook has been Apple's CEO since 2011
Ternus (left) and Cook (right)Review: The Hands of the Emperor, by Victoria Goddard
| Series: | Lays of the Hearth-Fire #1 |
| Publisher: | Underhill Books |
| Copyright: | January 2019 |
| ISBN: | 1-988908-15-9 |
| Format: | Kindle |
| Pages: | 739 |
The Hands of the Emperor is a self-published political fantasy novel. It's the recommended first book (although not the first published book) in a complicated set of interrelated series. I was not able to definitively confirm that Underhill Books is Goddard's self-publishing press name, but the press does not appear to have an Internet presence apart from Goddard's books and her books appear to be using the standard self-publishing channels.
Cliopher Mdang is the personal secretary of the last emperor of Astandalas, the magical heart of Zunidh, a man worshiped as a god. The emperor's word is absolute, his magic supports the health of the entire world, and he cannot be physically touched without risking physical damage and severe political and religious punishment. Cliopher is one of the emperor's closest associates, but the distance between them is still vast. It therefore represents a terrifying and dangerous breach of etiquette for him to suggest the emperor may enjoy a vacation on a tropical island near Cliopher's remote home. The emperor's acceptance of the invitation is even more startling.
The emperor has opinions about his life as the emperor that no one had guessed. Cliopher has not assimilated as completely into the bureaucratic machinery of the empire as it first may appear. And Cliopher's family have vastly misunderstood the nature of his role in the emperor's government.
I find the marketing blurb for this book unfortunate since, at least to me, the emphasis on physical touch and intimacy implies that The Hands of the Emperor is a romance novel or at least has significant romantic elements. I've been aware of this book for years but put off reading it because I wasn't quite in the mood for that story. This is not a romance novel; there is no romance in this book whatsoever. It is a political fantasy, both in the sense that it is set in a secondary fantasy world with magic and (apparently) some form of interplanetary travel, and in the sense that it is a fantasy of governance.
When I say that this book blew up in certain corners of the Internet during the pandemic, I think you will still underestimate the passion of its advocates. I heard about this book constantly, in a way that reminded me of Kushiel's Dart and the time when fans of Jacqueline Carey would bring her up in every fantasy conversation, or when we created a Usenet newsgroup for The Wheel of Time mostly to get the voluminous conversations off of the regular SFF newsgroup. I'm one of those mildly contrarian people for whom that degree of enthusiasm is a little off-putting, which is another reason why I resisted buying a copy for years and only read it in 2026.
It's delightful, although also a bit embarrassing, when the book everyone was in love with turns out to be just as good as everyone said it was.
I adore stories about friendship, and this is one of the best stories about friendship that I've ever read. It is a very, very slow burn, but I also thought the first three quarters of the book was exquisitely paced. There were long sections where not very much was happening, and yet I couldn't put the book down because there was so much subtle character work just beneath the surface.
Almost all of the novel is told in tight third person from Cliopher's perspective, and I thought that was an excellent choice. Neither Cliopher nor the narrator comment on things that Cliopher finds obvious, which is both immersive and critical to the pacing. There are discoveries for the reader throughout the book, the sort of discoveries that make pieces fit together satisfyingly in retrospect, and the reader stays sufficiently ahead of the misunderstandings of Cliopher's friends and family that one also gets the joy of watching other people discover things that one figured out a hundred pages earlier.
It helps that I truly liked nearly everyone in this book. There are no real villains, only a few supporting characters whose role is to be irritating or corrupt. If you're looking for a lot of conflict and drama, you may want to save this book for a different mood, but if you're in the mood for a varied collection of fundamentally good characters working methodically through the complexities and obstacles of politics and social systems to improve the world, there are few books I would recommend more. Goddard achieves one of the hardest tricks of slow burns: steady forward progress that does not rely on reversals, misunderstandings, or the friendship equivalent of the third-act breakup. This book spends 700 pages building towards a climax that managed to be worthy of all 700 pages without ever annoying me with artificial obstacles, and that's quite a feat.
I've not said much about the details of the plot. There is one β it's not just character work β but I think this book benefits immensely from going in as blind as possible. I found the twists and turns and growing revelations so deeply satisfying that I don't want to rob any other reader of the experience.
The fantasy world-building is intriguing but a bit unsatisfying because it is so unexplained. We get a few details of the magic system, but since Cliopher has no magic, he isn't that interested in the details. There is a catastrophic magical event in the world background, and we learn some of the details of its practical effects, but the nature of the world before the cataclysm is so obvious to the characters that it's never explained. I'm not even certain that this civilization is interplanetary; that feels like the implication of how characters talk about multiple worlds, but the method of travel is left entirely undefined. This might be frustrating to some genre readers, but I personally enjoy books where the world-building is a bit mysterious. It's a good reason to read more of Goddard's books set in the same universe.
This was my favorite of the books I've read so far this year, but I do have one caution and a couple of caveats.
The caution is that Cliopher comes from an island culture based heavily on (I think) Polynesian cultures. That culture is very central to the story and is treated with considerable respect, but I still get a bit nervous when a Canadian author from Nova Scotia with an academic background in European medieval studies writes a story focused this deeply on a non-European culture. Nothing about her portrayal seemed off to me (although there is a very clunky and ham-handed scene about a different native culture that worries me), and for all I know she has family background or other connections to the culture she is borrowing from, but it's possible I missed serious problems.
The flip side of that caution is that I'm delighted to see a fantasy author drawing on a non-European culture, and I thought the clash of cultures was very well-handled.
The first caveat is that the story is very focused on good governance, but both the process and the details of that governance are not going to satisfy someone reading primarily for the politics. The policies and reforms are very standard 21st century progressive material that felt a bit out of place in a quasi-medieval world with magic and airships. Their implementation is not the point of the story, and is therefore heavily backgrounded, but that means Goddard barely mentions the inevitable practical implementation difficulties and does not discuss how they're overcome.
The world structure also means that Goddard can make use of the favorite cheat of political reformers in fiction: Absolute monarchy lets you enact a political agenda without having to do the hard and frustrating work of persuasion or political (or actual) warfare. This objection is not entirely fair because we do get some memorable scenes of persuasion, but the political portion of the plot is unrealistically devoid of setbacks or resistance that goes beyond token arguments.
Whether this will bother you will depend heavily on what parts of the book you'd rather focus on. I can see why this was such a popular pandemic read: The Hands of the Emperor is focused tightly on the joy of competent people fixing things and does not focus on the arguments, division, or polarization. The heart of the book is the friendship and characterization of some deeply admirable people, and the political reform is incidental background material. I suspect this is the right choice for readers who aren't political junkies, but I kept having the niggling objection that the politics felt a bit too pat and simplistic. Goddard stressed that the characters were investing considerable effort, but even still, it is not this easy to change the direction of a political system and idealistic plans usually do not work out this neatly.
The second caveat is that, as previously mentioned, I thought the pacing was excellent for about three quarters of the book. Goddard is building towards a grand climax, and I think she built a little too much and tried to make the climax a bit too grand and risked over-egging the pudding. That made the payoff feel a bit belabored to me. I still enjoyed it, and parts of it are wonderfully emotional, but I think the ending might have been stronger if Goddard had dialed Cliopher back just a little and tightened up the climax a touch. That said, this book fully commits to being a sprawling slow burn and that's part of its appeal, so it's probably better for Goddard to err in that direction than it would have been to cut short the denouement.
This is one of those books that I'm not sure would exist without self-publishing. It's a little too long, a little too political in the wrong ways, a little too devoid of the typical sorts of conflicts expected in a fantasy book, and too determined to be its own peculiar thing. I think it would scare off publishers. Unlike some self-published books, though, I didn't notice any obvious editing flaws or lack of polish. It's one of those glorious novels that is so very much its own type of story that it provides an experience that would be hard to replicate with another book.
I was so deeply satisfied by this book. It's a wish-fulfillment political fantasy full of diligent restraint and competence porn, so you have to be in the mood for that. This is not the book to read when you're feeling cynical, or are in the mood for action and high drama. But if you're in the mood for a long, slow, open-hearted story of friendship that offers the fantasy of giving truly good people enough power to be effective, I highly recommend this one.
Followed in the direct sequel sense by At the Feet of the Sun, but there is a very complex story progression in this world that I think I'd have to read all the other books to understand. This was such a satisfying and complete experience that I'm not in a hurry to figure out which Goddard book to read next, but I'm sure I'll be returning to this world at some point.
Rating: 9 out of 10