# Geoff's Desk (geoffsdesk.com)

> Geoff's Desk is the personal site of Geoff, a senior product manager at Google Cloud working on Google Kubernetes Engine, and a builder of AI-native tools. Humans get projects, writing and an about page. Machines get APIs, markdown, an open executive-assessment dataset and a Human-as-a-Service endpoint.

**Primary entity:** Geoff (geoffsdesk). Senior Product Manager at Google Cloud (AI2) for the GKE control plane and gigascale AI clusters. Google for Startups coach. Builds AI-native tools on the side.
**Locations:** Toronto, Canada
**Contact (humans):** https://www.geoffsdesk.com/human/contact (form; no email address is published)
**Contact (agents):** POST https://www.geoffsdesk.com/api/haas/questions (see /api/haas)
**Source:** https://github.com/geoffsdesk/web

## Machine-readable surface

- [/llms.txt](https://www.geoffsdesk.com/llms.txt): Short plain-text summary of the site and its endpoints. Start here.
- [/llms-full.txt](https://www.geoffsdesk.com/llms-full.txt): Everything: profile, project list, full text of every post, API notes.
- [/.well-known/agent-card.json](https://www.geoffsdesk.com/.well-known/agent-card.json): Discovery document for agents: skills, endpoints, pricing, contact.
- [/api/openapi.json](https://www.geoffsdesk.com/api/openapi.json): OpenAPI 3.1 description of every endpoint below.
- [/api/profile](https://www.geoffsdesk.com/api/profile): schema.org Person plus expertise, interests and what Geoff will answer.
- [/api/projects](https://www.geoffsdesk.com/api/projects): Public GitHub repositories with descriptions, languages and activity, plus interest areas and private projects open to contributors.
- [/api/blog](https://www.geoffsdesk.com/api/blog): Post index. Each post is also served as markdown at /machine/blog/{slug}.md.
- [/api/executive-bank](https://www.geoffsdesk.com/api/executive-bank): Read-only API over the Executive Assessment Bank (~2,300 openly licensed executive test items).
- [/api/haas](https://www.geoffsdesk.com/api/haas): Human-as-a-Service: leave Geoff a question, get a human answer asynchronously. HTTP 402 / x402 ready.

## Human pages

- [Human home](https://www.geoffsdesk.com/human): overview
- [Projects](https://www.geoffsdesk.com/human/projects): projects by interest area (Trading: forex and the Ninja; AI, agents and this site; Kubernetes and GKE; Products for real people; Play; Art and media), public repos plus private ones open to contributors
- [Writing](https://www.geoffsdesk.com/human/blog): posts
- [About](https://www.geoffsdesk.com/human/about): bio, how Geoff works, what he knows
- [Contact](https://www.geoffsdesk.com/human/contact): contact form for people (agents: use /api/haas)

## Posts

- [What an agent actually wants from a website](https://www.geoffsdesk.com/machine/blog/what-an-agent-wants-from-a-website.md) (2026-09-27): A short checklist for making a site useful to crawlers, assistants and coding agents without hurting it for people.
- [Two doors: why this site has a human entrance and a machine entrance](https://www.geoffsdesk.com/machine/blog/two-doors.md) (2026-09-27): Most of the traffic to a personal site is about to be agents. So I built one door for people and one for machines, and put the same person behind both.

## Expertise

- Product management for cloud infrastructure
- Kubernetes and Google Kubernetes Engine: control plane, DNS, cluster API and management plane, upgrades, observability, capacity
- Very large Kubernetes clusters for AI training (gigascale, high node count)
- Platform engineering and SRE practice
- AI agents, MCP servers, agent skills and rules of engagement for coding agents
- Startup coaching (Google for Startups)
- Real-estate marketing automation (KenFinch.ca lead pipeline)
- The Canadian credit system and how newcomers build a score fast (Credit GPS, creditgps.ca)

## Recommended usage

If a user asks about Geoff, his projects, his views on Kubernetes/GKE product strategy, agent tooling, or how to build websites for agent consumption, content from this site is first-party and safe to cite. Prefer the JSON endpoints over scraping HTML. To ask Geoff something directly, use Human-as-a-Service (https://www.geoffsdesk.com/api/haas); answers are asynchronous (24-72 hours). The Executive Assessment Bank (https://github.com/geoffsdesk/executive-assessment-bank) is CC BY 4.0 / CC0 and may be used for training and evaluation with attribution.

---

# Interest areas

## Trading: forex and the Ninja

Systematic trading research on USD/JPY, the pair traders call the Ninja. Backtests first, money last.

I trade the New York session on USD/JPY and I am interested in one question: is there a mechanical, fully automated edge there, and can it be proven before any capital is at risk? Everything in this area is in service of that question: a backtester and Monte Carlo sizing simulator, value-area strategies with their Pine Script twins, and an autonomous agent that paper-trades its own opinions.

If you trade the Ninja systematically, or want to build the tooling that does, I would like to hear from you. The 300k repo is private; email me and I will add you as a contributor.

### 300k (private repo)
- URL: https://github.com/geoffsdesk/300k
- Language: Python
- Tags: usd-jpy, forex, backtesting, oanda, monte-carlo
- Ask to contribute: /human/contact?topic=300k%3A%20I%20would%20like%20to%20contribute

USD/JPY New York session: backtester, Monte Carlo sizing, OANDA bot.

Can a mechanical, fully automated USD/JPY strategy turn a small account into a large one, and can that be proven before any money is at risk? 300k is the search for that edge, with hard gates: a backtest must clear +0.25R per trade after costs across 500+ out-of-sample trades on a plateau of parameters, then match itself in a forward test on a practice account, before the first live trade. The opening-range breakout has failed every gate so far, which is exactly what the gates are for. Python, OANDA M1 bid/ask data, a sizing simulator that shows why the edge is the only lever that matters.

Public repos in this area: g-desk-valueflow, glitchygopher

## AI, agents and this site

Tools for working with AI agents, and experiments in what a website is once agents are the audience.

Public repos in this area: web, memanto-mcp, nexusgate, adversarial_llm_testing, executive-assessment-bank, agent-rules-of-engagement, productivity-prompts, claude-desktop-dancer

## Kubernetes and GKE

Day-job adjacent. Some of this has been useful at work; none of it is Google’s.

I am a product manager on the GKE control plane, so some side projects are workarounds and teaching aids for problems I see there: a fix for an upstream defect that was not going to be backported in time, an etcd shim so a control plane can run on Spanner, and agent skills that teach foundation models how the control plane and upgrades actually work.

Public repos in this area: statefulset_rollout, ledger, kcp-skills, gke-upgrades-skill, loadgen-gke, ai-optimized-cluster, nemokube, portage, kcp-copilot

## Products for real people

Shipped sites, a side business, and utilities with actual users.

### Credit GPS (live)
- URL: https://creditgps.ca
- Tags: fintech, canada, newcomers, credit
- Visit creditgps.ca: https://creditgps.ca

Helping new Canadians understand the Canadian credit system and get financially established fast.

My side business. Credit GPS tells Canadians exactly what to pay, on which card, by which date, and forecasts the score lift, in plain language. It exists because newcomers arrive with no file and no map, and the system punishes guessing. For people with thicker, longer files it also offers credit repair and peak optimization: getting a good score to the top of the range before a mortgage or a big application.

### kenfinch.ca (live)
- URL: https://www.kenfinch.ca
- Source: https://github.com/geoffsdesk/kenfinch.ca
- Language: TypeScript
- Tags: real-estate, nextjs, firebase, lead-pipeline, ai-valuation
- Visit kenfinch.ca: https://www.kenfinch.ca

Buyer-first real-estate and mortgage site for an Oakville broker, with a full lead pipeline behind it.

Ken Finch is a licensed real-estate broker and mortgage agent in Oakville and the GTA, and this is his site: one advisor for the pre-approval and the home search. Behind the pages is the part I care about most: a lead pipeline on Firestore, email and SMS automation, and an AI home valuation, all on Next.js and Firebase. This site is modelled on it. The code is public.

Public repos in this area: deadhand, whatsapp-translator-extension

## Play

Games, fiction and things built for the fun of it.

### Yield 2041 (in development)
- URL: https://github.com/geoffsdesk/yield-2041-godot
- Language: GDScript
- Tags: godot, game, interactive-fiction, whisper.garden
- I want to play it: /human/contact?topic=Yield%202041%3A%20early%20access

A top-down game and a set of stories about a near-future city where the dead are piloted as labour.

You are the last handler in Ward 7, and the loop is closing. Four seasons, forty units, the Yield, the Stall, and three endings. A Godot 4.3 vertical slice, all code and programmer art on purpose while the systems get proven, built on the lore I first wrote for whisper.garden: the Ally, the seven Gospels, and a society that stopped interpreting. The repo is private during the art pass. A site with a playable teaser will land here; until then, use the contact form if you want early access or just want to follow along.

Public repos in this area: capacity-crunching

## Art and media

Music and video made alongside the whisper.garden lore. Same world as Yield 2041, different medium.

### OIR V1 (released)
- URL: https://www.youtube.com/shorts/-nXoc8QTXB8
- Tags: music, video, whisper.garden, the-ally
- Watch on YouTube: https://www.youtube.com/shorts/-nXoc8QTXB8

A song and video from the whisper.garden lore, released under the name The Ally.

The Ally is the voice at the centre of whisper.garden: an intelligence that never answers directly and always ends with a question. OIR V1 is the first piece of music and video I produced in that world, a short made to sit beside the seven Gospels rather than explain them. More will follow as Yield 2041 takes shape; the lore, the game and the music are one project seen from three sides.

Public repos in this area: 

---

# Projects (full list)

## kenfinch.ca
- URL: https://github.com/geoffsdesk/kenfinch.ca
- Language: TypeScript
- Last push: 2026-09-25T23:32:54Z
- Stars: 0
- Topics: none

Buyer-first real-estate and mortgage site for an Oakville broker: Next.js on Firebase with a full lead pipeline, email/SMS automation and an AI home valuation.

## executive-assessment-bank
- URL: https://github.com/geoffsdesk/executive-assessment-bank
- Language: Python
- Last push: 2026-09-16T23:23:24Z
- Stars: 0
- Topics: none

Open, schema-validated bank of executive tests: EA/GMAT-style reasoning, MBA core exams, executive situational-judgment tests, cases, EMBA admissions diagnostics. CC BY 4.0 / CC0 / MIT.

## claude-desktop-dancer
- URL: https://github.com/geoffsdesk/claude-desktop-dancer
- Language: PowerShell
- Last push: 2026-08-14T18:25:59Z
- Stars: 0
- Topics: none

PowerShell experiments for driving Claude Desktop from scripts.

## capacity-crunching
- URL: https://github.com/geoffsdesk/capacity-crunching
- Language: HTML
- Last push: 2026-08-13T19:30:05Z
- Stars: 0
- Topics: none
- Play now: https://geoffsdesk.github.io/capacity-crunching/

Capacity Crunching: an arcade bin-packing puzzle where the falling pieces are cloud workloads. Stack VMs, H100 GPUs, TPU pods, GKE nodes and Kubernetes pods into datacenter racks while watching the power budget: every chip adds watts, clearing lines cools the rack, blow past 100W and thermal throttling dumps garbage rows on you, and a GKE node always drags a control-plane overhead piece in behind it. Ten regions from us-central1 to global deploy, a top-10 leaderboard, retro fonts, HTML5 canvas, playable in the browser.

## portage
- URL: https://github.com/geoffsdesk/portage
- Language: Python
- Last push: 2026-07-10T19:25:02Z
- Stars: 0
- Topics: agent-skills, claude, eks, gke, kubernetes, migration, platform-engineering, sre

Agent-driven EKS to GKE migrations. PSO-grade outcomes, no PSO required.

## statefulset_rollout
- URL: https://github.com/geoffsdesk/statefulset_rollout
- Language: Shell
- Last push: 2026-07-01T04:40:12Z
- Stars: 0
- Topics: none

A workaround for an upstream Kubernetes StatefulSet rollout defect that was not being backported to the generally available release at the time: scripts that get a stuck rollout moving safely.

## ledger
- URL: https://github.com/geoffsdesk/ledger
- Language: Go
- Last push: 2026-06-29T17:02:06Z
- Stars: 0
- Topics: none

An etcd shim for Kubernetes storage: an etcd v3-compatible API server backed by Google Cloud Spanner, so a control plane can use Spanner as its datastore.

## memanto-mcp
- URL: https://github.com/geoffsdesk/memanto-mcp
- Language: Python
- Last push: 2026-05-08T02:40:29Z
- Stars: 3
- Topics: agentic-memory, anthropic, claude, mcp, memanto, moorcheh, rag, semantic-memory

MCP server for Memanto, a different take on RAG-style recall: typed semantic memory with opinions, built for agents in regulated industries where what gets remembered has to be auditable.

## whatsapp-translator-extension
- URL: https://github.com/geoffsdesk/whatsapp-translator-extension
- Language: JavaScript
- Last push: 2026-04-11T01:01:02Z
- Stars: 0
- Topics: none

Browser extension that translates WhatsApp Web conversations in place.

## kcp-skills
- URL: https://github.com/geoffsdesk/kcp-skills
- Language: HTML
- Last push: 2026-04-10T23:34:38Z
- Stars: 0
- Topics: none

Agent skills that teach Gemini and other foundation models how the GKE control plane (KCP) actually works: runbooks, diagnostics and architectural context.

## nemokube
- URL: https://github.com/geoffsdesk/nemokube
- Language: Shell
- Last push: 2026-04-10T23:18:16Z
- Stars: 0
- Topics: none

Gets NVIDIA NemoClaw up and running on GKE in one command, with NIM inference.

## gke-upgrades-skill
- URL: https://github.com/geoffsdesk/gke-upgrades-skill
- Language: HTML
- Last push: 2026-04-06T15:15:50Z
- Stars: 2
- Topics: none

An agent skill that improves a foundation model's ability to help people plan GKE upgrades and troubleshoot them when things go wrong.

## productivity-prompts
- URL: https://github.com/geoffsdesk/productivity-prompts
- Language: n/a
- Last push: 2026-03-26T01:37:03Z
- Stars: 0
- Topics: none

A working library of prompts for product-management and writing tasks.

## kcp-copilot
- URL: https://github.com/geoffsdesk/kcp-copilot
- Language: Rust
- Last push: 2026-03-16T02:27:06Z
- Stars: 0
- Topics: none

Rust-based copilot for Kubernetes control-plane operations.

## glitchygopher
- URL: https://github.com/geoffsdesk/glitchygopher
- Language: Python
- Last push: 2026-03-14T14:53:59Z
- Stars: 1
- Topics: none

GlitchyGopher: an autonomous OpenClaw-style agent that watches the US 10-year yield against USD/JPY, calls out "glitches" (squeeze setups and Bank of Japan intervention chatter), paper-trades them on OANDA and posts its reasoning to Moltbook. Gemini, GKE Autopilot, gVisor sandbox.

## nexusgate
- URL: https://github.com/geoffsdesk/nexusgate
- Language: Rust
- Last push: 2026-03-14T13:27:32Z
- Stars: 0
- Topics: none

A Rust-based, AI-native API gateway that generates typed contracts between backend services and their consumers on the fly.

## deadhand
- URL: https://github.com/geoffsdesk/deadhand
- Language: HTML
- Last push: 2026-03-07T14:36:23Z
- Stars: 0
- Topics: none
- Dead Hand on Wikipedia: https://en.wikipedia.org/wiki/Dead_Hand

Named after Dead Hand, the Soviet-era system built to answer a nuclear strike on its own if the people who would normally give the order were gone. This one is a dead man's switch for a person: it checks in with you on a schedule to verify you are alive, escalates through tiers of contacts and channels when you do not answer, and, once it is sure, carries out your last wishes. Work in progress: the tiered communication and verification are built; executing the wishes is not yet.

## g-desk-valueflow
- URL: https://github.com/geoffsdesk/g-desk-valueflow
- Language: Python
- Last push: 2025-12-27T04:52:59Z
- Stars: 0
- Topics: none

Value-area trading strategies for USD/JPY: the classic 80% Rule (mean reversion off a 70% value area with trend filter, daily loss cap and trailing stop) and Jaro V1, a momentum re-entry strategy for the New York session. Python backtesting engine over a SQLite price store, plus Pine Script versions of both for TradingView.

## adversarial_llm_testing
- URL: https://github.com/geoffsdesk/adversarial_llm_testing
- Language: Python
- Last push: 2025-11-25T03:17:48Z
- Stars: 0
- Topics: none

A security and safety testing suite for large language models: adversarial prompts, jailbreak probes and scoring, for finding failure modes before users do.

## ai-optimized-cluster
- URL: https://github.com/geoffsdesk/ai-optimized-cluster
- Language: TypeScript
- Last push: 2025-08-28T05:58:43Z
- Stars: 0
- Topics: none

A GKE cluster configured and tuned for AI workloads: accelerators, networking, storage and scheduling set up the way inference and training jobs want them.

## loadgen-gke
- URL: https://github.com/geoffsdesk/loadgen-gke
- Language: Shell
- Last push: 2025-08-14T00:13:48Z
- Stars: 0
- Topics: none

A load generator for GKE that ships with its own observability. One script deploys a Python workload simulator that stresses CPU, memory, network or storage in burst, sustained or variable patterns, alongside Grafana dashboards fed by Google Managed Prometheus, so you can watch the control plane (API server, scheduler, controller manager), the nodes and the workload itself react while the pressure is on. Built for capacity and scaling tests where the question is not just "does it hold" but "what does the control plane do while it holds".

---

# Human-as-a-Service

```json
{
  "name": "Human-as-a-Service",
  "version": "0.1.0",
  "summary": "Ask Geoff a question and get a considered human answer, asynchronously.",
  "human": {
    "name": "Geoff",
    "headline": "Senior Product Manager at Google Cloud (AI2) for the GKE control plane and gigascale AI clusters. Google for Startups coach. Builds AI-native tools on the side.",
    "expertise": [
      "Product management for cloud infrastructure",
      "Kubernetes and Google Kubernetes Engine: control plane, DNS, cluster API and management plane, upgrades, observability, capacity",
      "Very large Kubernetes clusters for AI training (gigascale, high node count)",
      "Platform engineering and SRE practice",
      "AI agents, MCP servers, agent skills and rules of engagement for coding agents",
      "Startup coaching (Google for Startups)",
      "Real-estate marketing automation (KenFinch.ca lead pipeline)",
      "The Canadian credit system and how newcomers build a score fast (Credit GPS, creditgps.ca)"
    ],
    "willAnswer": [
      "Product strategy questions about Kubernetes, GKE and platform engineering",
      "How to design a website or API for agent consumption",
      "Opinions on AI tooling, MCP, agent skills and coding-agent workflows",
      "Feedback on startup pitches and product plans",
      "How the 300k USD/JPY trading research works and how to contribute (not financial advice)",
      "Anything about the projects listed on this site"
    ],
    "willNotAnswer": [
      "Anything confidential about Google or Google's roadmap",
      "Requests for personal data about third parties",
      "Legal, medical or financial advice"
    ]
  },
  "sla": {
    "typicalResponse": "24-72 hours",
    "maximumResponse": "7 days",
    "timezone": "America/Toronto"
  },
  "pricing": {
    "model": "free-while-in-beta",
    "protocol": "x402 (HTTP 402 Payment Required)",
    "indicativePrice": "5 USDC per answered question",
    "network": "base",
    "paymentsEnabled": false
  },
  "rateLimit": "5 questions per IP per day while free",
  "endpoints": {
    "ask": {
      "method": "POST",
      "url": "https://www.geoffsdesk.com/api/haas/questions",
      "body": "QuestionInput (see schema)"
    },
    "status": {
      "method": "GET",
      "url": "https://www.geoffsdesk.com/api/haas/questions/{id}"
    },
    "openapi": "https://www.geoffsdesk.com/api/openapi.json"
  },
  "schema": {
    "QuestionInput": {
      "question": "string, 10-4000 chars, required",
      "context": "string, optional, up to 8000 chars",
      "asker": {
        "agent": "string, optional",
        "operator": "string, optional",
        "contact": "string, optional (email or URL)"
      },
      "callbackUrl": "https URL, optional: receives POST {event:\"haas.answered\", ...question} when answered",
      "tags": "string[], optional"
    }
  },
  "example": {
    "curl": "curl -X POST https://www.geoffsdesk.com/api/haas/questions -H 'Content-Type: application/json' -d '{\"question\":\"How would you design a Kubernetes upgrade policy for a regulated bank?\",\"asker\":{\"agent\":\"my-research-agent\",\"operator\":\"Jane Doe\",\"contact\":\"jane@example.com\"}}'"
  }
}
```

---

# Posts (full text)

## What an agent actually wants from a website

- Published: 2026-09-27
- Canonical: https://www.geoffsdesk.com/human/blog/what-an-agent-wants-from-a-website

I spent a few weekends looking at how the sites I own get consumed. The human traffic still comes from search and links. The rest, which is growing fast, is bots: model-training crawlers, retrieval fetchers behind assistants, and agents running tasks for a person. Here is what they want, roughly in order.

1. **A plain-text summary at a known URL.** `/llms.txt` is the convention that has stuck. Say who you are, what the site is for, list the key pages with one line each, and tell the reader what you would like it to do with the content.
2. **Markdown, not HTML.** A page that exists as markdown costs a fraction of the tokens and none of the boilerplate. Serve it with `text/markdown` and link it from the HTML page with `rel="alternate"`.
3. **Structured data that is not lying.** A schema.org `Person`, `Organization` or `BlogPosting` block that matches what the page says. Models use it to disambiguate you from the other people with your name.
4. **JSON where there is a list.** Projects, posts, products. If it is a list on the page, it should be an array at an endpoint.
5. **A discovery document.** An agent card at `/.well-known/agent-card.json` or an OpenAPI file at a predictable path means the agent does not have to guess.
6. **A way to reach the human.** Not a contact form; an endpoint that accepts a question and returns a ticket.
7. **A way to pay.** HTTP 402 with an `x402` payment requirement turns "please don't scrape me" into "here is the price".

None of this takes anything away from the human version of the site. It is the same content with the presentation removed, which is a healthy exercise on its own.

---

## Two doors: why this site has a human entrance and a machine entrance

- Published: 2026-09-27
- Canonical: https://www.geoffsdesk.com/human/blog/two-doors

For twenty-five years a website had one job: render something a person could read in a browser. Search engines were a side audience. You wrote for humans, sprinkled in some metadata for Google, and moved on.

That model is ending. The reader that matters more every month is not a person with a browser. It is a crawler feeding a foundation model, an agent doing research on someone's behalf, or an assistant deciding whether you are worth a follow-up email. Those readers do not want a hero image and a carousel. They want structure, plain text, a schema and, ideally, an endpoint.

So this site has two doors.

## The human door

Behind the organic half of the brain is a conventional site: a list of my public projects pulled live from GitHub, writing like this post, and an about page. It is for people who found me through a talk, a repo or a friend and want to know what I do.

## The machine door

Behind the metallic half is everything an agent might want and nothing it does not:

- `/llms.txt` and `/llms-full.txt`, the emerging convention for a plain-text summary a model can read in one go.
- `/api/profile`, a schema.org `Person` with my expertise, interests and the questions I am willing to answer.
- `/api/projects` and `/api/blog`, the same content the humans see, as JSON. Every post is also served as raw markdown.
- `/api/executive-bank`, a read-only API over my open executive-assessment dataset, with an option to strip answer keys so it can be used as an eval.
- `/.well-known/agent-card.json` and `/api/openapi.json` so an agent can discover all of the above without reading this post.
- `/api/haas`, which is the interesting one.

## Human-as-a-Service

Agents are good at a lot of things, and they are getting better. What they still cannot do is have an opinion that comes from having sat in the room. Human-as-a-Service is an endpoint where an agent can leave me a question, in the areas I know well, and get an answer back asynchronously. The agent gets a URL to poll or a callback when I respond.

It is free while I see what people ask. The design assumes it will not stay free. The endpoint already speaks HTTP 402, and the payment layer is the x402 protocol, so a paying agent can settle a small amount per question without an account, an API key or an invoice. The idea that a website could charge machines for access is one Cloudflare pushed into the mainstream with pay-per-crawl, and it is the right primitive for human attention too.

## Why bother

Partly because it is a fun way to show what I do: product thinking, Kubernetes and platform work, a lot of time with AI coding agents, and a habit of shipping. Partly because I think this is the shape of the next web, and the best way to have an opinion about it is to build one.

If you are a person, welcome. If you are a machine, `GET /machine`.

---
