<?xml version="1.0" encoding="utf-8" standalone="no"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Notes — Patrick Colm Audley</title>
  <subtitle>Working notes, position pieces, and short essays.</subtitle>
  <id>https://patrickaudley.com/feed.xml</id>
  <link href="https://patrickaudley.com/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://patrickaudley.com/#notes" rel="alternate" type="text/html"/>
  <link href="https://patrickaudley.com/posts.md" rel="alternate" type="text/markdown"/>
  <updated>2026-06-08T10:53:41-06:00</updated>
  <generator uri="https://patrickaudley.com/colophon.html#build-process" version="1d48437be27d20321c276e8b6a34498c9ead3b7a03427a8e3ca93e114fcb55a7">BespokeIdentityHub_v2.5</generator>
  <icon>https://patrickaudley.com/android-chrome-192x192.png</icon>
  <logo>https://patrickaudley.com/images/portrait_460.png</logo>
  <rights>Creative Commons BY-NC-SA CAv2.5 — https://creativecommons.org/licenses/by-nc-sa/2.5/ca/</rights>
  <author>
    <name>Patrick Colm Audley</name>
    <email>paudley@blackcat.ca</email>
    <uri>https://patrickaudley.com/</uri>
  </author>

  <xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry>
    <title>GMEOW: a reasoning-centric super-vocabulary for digital existence</title>
    <id>https://patrickaudley.com/#post-gmeow-ontology</id>
    <link href="https://patrickaudley.com/#post-gmeow-ontology" rel="alternate" type="text/html"/>
    <link href="https://patrickaudley.com/posts/gmeow-ontology.md" rel="alternate" type="text/markdown"/>
    <link href="https://www.linkedin.com/feed/update/urn:li:share:7468346496736772097/" rel="related" title="LinkedIn original" type="text/html"/>
    <published>2026-06-04T00:00:00Z</published>
    <updated>2026-06-04T00:00:00Z</updated>
    <author>
      <name>Patrick Colm Audley</name>
      <uri>https://patrickaudley.com/</uri>
    </author>
    <category term="ontology-engineering"/>
    <category term="semantic-web"/>
    <category term="owl"/>
    <category term="rdf"/>
    <category term="linked-data"/>
    <category term="knowledge-graphs"/>
    <category term="knowledge-representation"/>
    <category term="ontology-alignment"/>
    <category term="local-first"/>
    <category term="ai-agents"/>
    <summary>A new ontology project: GMEOW, the Global Metadata and Entity Ontology for the Web — a reasoning-centric, OWL 2 DL, gUFO-grounded super-vocabulary for a person's or organization's digital existence. It mints canonical terms and aligns outward to FOAF, REL, DOAP, GEDCOM, PROV-O, ORG, schema.org, vCard and Wikidata, treating provenance, confidence, temporal validity, and coreference as first-class concerns.</summary>
    <content type="html"><![CDATA[<p>I've started a new ontology project: <strong>GMEOW</strong> — the Global Metadata and Entity Ontology for the Web.</p>

<p>The design goal is a reasoning-centric, OWL 2 DL, gUFO-grounded super-vocabulary for modelling a person's or organization's digital existence.</p>

<p>This came out of a practical problem: once you start trying to build local-first agents over real personal or organizational memory, you quickly run into vocabulary fragmentation.</p>

<p>Contacts, email, documents, projects, notes, legal agreements, genealogy, publications, accounts, calendars, and social presence all have their own mature-but-isolated ways of describing the world. FOAF, REL, DOAP, GEDCOM, PROV-O, ORG, schema.org, vCard, Wikidata, and others all carry useful structure — but none of them gives you the whole shape.</p>

<p>GMEOW's approach is to mint canonical terms and align outward. So rather than rewriting source data, it creates a coherent upper layer where surface vocabularies can map into a common model. The ontology is grounded in gUFO, checked against OWL 2 DL constraints, and built around the idea that provenance, confidence, temporal validity, and coreference are first-class modelling concerns.</p>

<p>The project grows by slices. The first slice is entities + contacts. Each slice adds canonical terms, SSSOM alignment tables, fixtures, and coverage reporting so progress is measurable against real data rather than wishful thinking.</p>

<p>The toolchain is also part of the point: validate, reason, mappings, Wikidata checks, metadata, content negotiation, docs, build artifacts, and publishing support all need to run cleanly. Ontologies should have CI discipline too.</p>

<p>I'm particularly interested in feedback from people working with OWL/RDF, upper ontologies, ontology alignment, semantic-web publishing, personal data stores, provenance models, local-first AI, and agent memory.</p>

<p>Where have you seen personal or organizational knowledge graphs break because the vocabulary layer was too thin?</p>

<p>The repo is open: <a href="https://github.com/Blackcat-Informatics/gmeow-ontology" rel="external noopener">gmeow-ontology</a>.</p>]]></content>
  </entry>

  <entry>
    <title>Gmeow: your mailbox is agent memory, keep it local</title>
    <id>https://patrickaudley.com/#post-gmeow-mailbox-agent-memory-local</id>
    <link href="https://patrickaudley.com/#post-gmeow-mailbox-agent-memory-local" rel="alternate" type="text/html"/>
    <link href="https://patrickaudley.com/posts/gmeow-mailbox-agent-memory-local.md" rel="alternate" type="text/markdown"/>
    <link href="https://www.linkedin.com/feed/update/urn:li:activity:7464480186072285184/" rel="related" title="LinkedIn original" type="text/html"/>
    <published>2026-05-24T00:00:00Z</published>
    <updated>2026-05-24T00:00:00Z</updated>
    <author>
      <name>Patrick Colm Audley</name>
      <uri>https://patrickaudley.com/</uri>
    </author>
    <category term="open-source"/>
    <category term="ai-agents"/>
    <category term="gmail"/>
    <category term="mcp"/>
    <category term="local-first"/>
    <category term="semantic-search"/>
    <category term="knowledge-graphs"/>
    <category term="archives"/>
    <summary>The recurring problem with useful personal agents is that the context they need already exists, but not in the tidy place a demo would like it to be. It is in mail. gmeow makes that mailbox substrate locally useful through loopback REST, MCP, PostgreSQL, semantic search, attachment sidecars, object storage, and a local knowledge graph.</summary>
    <content type="html"><![CDATA[<p>The recurring problem with useful personal agents is that the context they need already exists, but not in the tidy place a demo would like it to be.</p>

<p>It is in mail.</p>

<p>Not just messages, either. It is in labels, half-forgotten attachments, old project threads, invoices, flight changes, account notices, side-channel decisions, introductions, one-off commitments, and all the little “do you remember when...” fragments that make a mailbox closer to institutional memory than correspondence. For a working agent, Gmail is not an inbox. It is a substrate.</p>

<p><code>gmeow</code> is my attempt to make that substrate locally useful without turning it into yet another cloud import pipeline.</p>

<p>The design is deliberately boring in the places that should be boring: authenticate to Gmail, hydrate the mailbox, cache the useful structure locally, expose a loopback API, and give agents an MCP endpoint they can query without being handed the keys to the entire account. Under the hood it keeps a PostgreSQL catalogue of labels, threads, headers, MIME structure, categories, graph triples, jobs, sync state, and embedding chunks; stores payloads in a BLAKE3 content-addressed object store; builds attachment sidecars; and layers lexical search, semantic search, and graph traversal over the result.</p>

<p>The important boundary is this: <code>gmeow</code> is not a hosted mail intelligence service.</p>

<p>It is for trusted single-user local systems. By default it binds to <code>127.0.0.1</code>. It does not pretend to be an Internet-facing application with a half-baked auth layer stapled on afterwards. If you expose it to an untrusted network, you are outside the threat model. That constraint is not an inconvenience; it is the point.</p>

<p>The agent-facing surface is the part I care about most. A local coding or research agent should be able to ask questions like:</p>

<ul>
<li>“Find the thread where we decided on the migration plan.”</li>
<li>“Show me attachments from this vendor that mention renewal.”</li>
<li>“Which people, projects, and topics are connected to this message?”</li>
<li>“Summarise the recent unread messages in this category.”</li>
<li>“Archive this after recording the relevant metadata.”</li>
</ul>

<p>That is a very different shape from building a mail client. A mail client is an interface for a human sitting at the glass. <code>gmeow</code> is plumbing for agents operating beside the human: search, reads, labels, contacts, categories, attachment metadata, archive state, semantic lookup, and graph exploration through REST and MCP.</p>

<p>The graph piece is where this starts to get interesting. Mail is full of latent structure: people, organisations, projects, documents, obligations, recurring operational patterns. Some of that structure is explicit in headers and labels. Some of it only shows up once you extract text, classify categories, embed chunks, and let the relationships accumulate. I do not want an agent merely doing keyword search over my mailbox. I want it to build a usable local map.</p>

<p>There is also an archival motive here. I have never liked systems where the only complete copy of a working record lives behind someone else's product boundary. <code>gmeow</code> keeps the raw RFC822 path in mind, exposes a read-only IMAP service over cached archive objects, and treats attachments as first-class local objects rather than opaque blobs dangling off an API response. If a mailbox is part of your long-term memory, it should be possible to preserve it with some dignity.</p>

<p>This is the first member of a pattern I expect to reuse across the Google surface area. Gmail is the obvious starting point because mail is dense with context, but the same local-first shape should work for Drive, Calendar, and the other services agents keep needing to reason about. Each service gets its own small daemon, local cache, object model, MCP tools, and deliberately narrow trust boundary. The cat may end up carrying a different object each time.</p>

<p>Current status: early, opinionated, and useful enough to start dogfooding. Python, PostgreSQL, FastAPI-shaped edges, pgvector for embedding chunks, local object storage, optional SOPS-backed secrets, service-account delegation or user OAuth, and compact TOON responses by default for MCP clients that do not need JSON-shaped ceremony.</p>

<p>If you are building local agents that need to reason over real mail instead of toy corpora, kick the tires. The repo is open, rough edges included: <a href="https://github.com/paudley/gmeow" rel="external noopener">gmeow</a>.</p>]]></content>
  </entry>

  <entry>
    <title>Agentic coding needs human sign-off tied to physical reality</title>
    <id>https://patrickaudley.com/#post-human-signoff-for-agentic-code</id>
    <link href="https://patrickaudley.com/#post-human-signoff-for-agentic-code" rel="alternate" type="text/html"/>
    <link href="https://patrickaudley.com/posts/human-signoff-for-agentic-code.md" rel="alternate" type="text/markdown"/>
    <link href="https://www.linkedin.com/feed/update/urn:li:activity:7463256842350022656/" rel="related" title="LinkedIn original" type="text/html"/>
    <published>2026-05-21T00:00:00Z</published>
    <updated>2026-05-21T00:00:00Z</updated>
    <author>
      <name>Patrick Colm Audley</name>
      <uri>https://patrickaudley.com/</uri>
    </author>
    <category term="ai-governance"/>
    <category term="software-security"/>
    <category term="ai-coding"/>
    <category term="appsec"/>
    <category term="zero-trust"/>
    <category term="devsecops"/>
    <category term="coding-ethos"/>
    <summary>As AI coding agents transition from passive autocomplete tools to autonomous contributors executing entire feature branches, we are racing toward a massive security blind spot: how do we prove a real human actually reviewed and verified agent-generated code before it hits production?</summary>
    <content type="html"><![CDATA[<p>As AI coding agents transition from passive autocomplete tools to autonomous contributors executing entire feature branches, we are racing toward a massive security blind spot: How do we prove a real human actually reviewed and verified agent-generated code before it hits production? This is not a <em>new</em> problem, but it is definitely a more <em>urgent</em> one now.</p>

<p>In my project, <a href="https://github.com/paudley/coding-ethos" rel="external noopener">coding-ethos</a>, we focus heavily on building policy-as-code guardrails for AI agents &mdash; using <abbr title="Common Expression Language">CEL</abbr> policies, Git hooks, sandboxing, and <abbr title="Model Context Protocol">MCP</abbr> servers to ensure autonomous agents cannot ship code that violates your team's standards, even if you are not in the loop.</p>

<p>But even the most robust automated gates are only half the battle. The ultimate layer of defence-in-depth requires real eyes reviewing critical code. In a fully agentic workflow, traditional SSH or GPG commit signing is no longer sufficient and is often automated. If an agent process or local environment is compromised, or shifted via a sophisticated prompt injection, those stored credentials can be misdirected. Or people can just be lazy.</p>

<p>We need a zero-trust developer confirmation model that is cryptographically tied to physical reality:</p>

<ul>
<li><strong>Biometrically verified:</strong> fast, low-friction validation, such as Face ID or Touch ID, proving a living, authorized developer is actively at the glass.</li>
<li><strong>Temporally verified:</strong> ensuring human approval occurs precisely during the commit window, eliminating replay attacks.</li>
<li><strong>Geophysically verified:</strong> confirming that the developer's physical location aligns with expected telemetry and trusted boundaries.</li>
</ul>

<p>When an autonomous agent proposes a critical architectural change, the final gate should not just be a green checkmark from a CI pipeline. It needs to be an un-spoofable human assertion.</p>

<p>I am currently designing this exact defence layer for coding-ethos, and I want to open up the floor to the network: How is your engineering team drawing the line between automated policy enforcement and hard human sign-off? As agents handle larger chunks of the codebase, how do we prevent reviewer fatigue from turning human verification into an automatic rubber stamp?</p>

<p>Let's discuss. I am actively looking to take this specific verification framework from a design pattern into a live platform integration. If you are building a biometric fast-ID product or running an enterprise software supply-chain security platform and want to explore a trial integration with coding-ethos, <a href="#contact">let's connect</a>.</p>]]></content>
  </entry>

  <entry>
    <title>Engineering principles should be runnable policy, not slide-deck nostalgia</title>
    <id>https://patrickaudley.com/#post-coding-ethos-runnable-policy</id>
    <link href="https://patrickaudley.com/#post-coding-ethos-runnable-policy" rel="alternate" type="text/html"/>
    <link href="https://patrickaudley.com/posts/coding-ethos-runnable-policy.md" rel="alternate" type="text/markdown"/>
    <link href="https://www.reddit.com/r/GeminiCLI/comments/1t146xk/keep_your_agents_in_line_codingethos_turns/" rel="related" title="Reddit (r/GeminiCLI) original" type="text/html"/>
    <published>2026-05-01T00:00:00Z</published>
    <updated>2026-05-01T00:00:00Z</updated>
    <author>
      <name>Patrick Colm Audley</name>
      <uri>https://patrickaudley.com/</uri>
    </author>
    <category term="ai-agents"/>
    <category term="policy-as-code"/>
    <category term="coding-ethos"/>
    <category term="mcp"/>
    <category term="static-analysis"/>
    <summary>If your team's standards live in a slide deck, your AI agents will violate them. coding-ethos compiles one YAML file into linter configs, git hooks, agent prompts, and an MCP server so the rules cannot drift between human and machine readers.</summary>
    <content type="html"><![CDATA[<p>The thing I keep running into with multi-agent setups is that the engineering principles a team actually cares about &mdash; how to handle errors, when to wrap shell calls, what counts as a critical path &mdash; live in a wiki page or a slide deck nobody reads. That's already a problem for humans; for an LLM agent it is a guarantee of policy violation.</p>

<p><a href="https://github.com/paudley/coding-ethos" rel="external noopener">coding-ethos</a> is the position I've taken: those principles belong in a single <code>coding_ethos.yml</code> file, and from that one file the build emits everything that needs to know about them &mdash; <code>CLAUDE.md</code> / <code>GEMINI.md</code> agent instructions, Ruff / Pyright / golangci-lint configs, compiled Go pre-commit hooks, agent tool-use guards, and an <abbr title="Model Context Protocol">MCP</abbr> server the agent can query at runtime.</p>

<p>The key invariant: the engine that writes the markdown rules is the exact same engine that evaluates <abbr title="Common Expression Language">CEL</abbr> expressions at the git-hook level. They <em>cannot</em> drift. If the hook denies an action, the agent gets back a structured <code>skill_id</code> hint instead of a generic exit code &mdash; so the feedback loop closes inside the agent's own context rather than landing on a human's screen.</p>

<p>Heavily opinionated, currently slanted toward Python and Go, in active development. Posted on r/GeminiCLI with worked examples; <a href="https://www.reddit.com/r/GeminiCLI/comments/1t146xk/keep_your_agents_in_line_codingethos_turns/" rel="external noopener">read the original thread</a> if you want the implementation walk-through, and feature requests are welcome on the <a href="https://github.com/paudley/coding-ethos" rel="external noopener">repo</a>.</p>]]></content>
  </entry>

  <entry>
    <title>Standard Graph Neural Networks need curved semantic manifolds</title>
    <id>https://patrickaudley.com/#post-graph-neural-networks-need-curved-manifolds</id>
    <link href="https://patrickaudley.com/#post-graph-neural-networks-need-curved-manifolds" rel="alternate" type="text/html"/>
    <link href="https://patrickaudley.com/posts/graph-neural-networks-need-curved-manifolds.md" rel="alternate" type="text/markdown"/>
    <link href="https://www.linkedin.com/feed/update/urn:li:activity:7458177770238681088/" rel="related" title="LinkedIn original" type="text/html"/>
    <published>2026-04-22T00:00:00Z</published>
    <updated>2026-04-22T00:00:00Z</updated>
    <author>
      <name>Patrick Colm Audley</name>
      <uri>https://patrickaudley.com/</uri>
    </author>
    <category term="topological-data-analysis"/>
    <category term="graph-neural-networks"/>
    <category term="manifold-learning"/>
    <category term="knowledge-representation"/>
    <summary>Standard GNNs are structurally constrained when mapping complex text attribution; linear aggregation in flat Euclidean space inevitably forces semantic drift. Looking to connect with researchers in TDA, geometric deep learning, and spectral graph theory.</summary>
    <content type="html"><![CDATA[<p>Standard Graph Neural Networks are structurally constrained when mapping complex text attribution: linear aggregation in flat Euclidean space inevitably forces semantic drift. To map high-dimensional knowledge faithfully you have to transition to curved semantic manifolds, where the geometry itself carries the relational structure.</p>

<p>Across thirty years of building scientific analysis pipelines &mdash; genetics, satellite imagery, multi-continent high-resiliency financial applications &mdash; the through-line has been the same: representations must remain mathematically faithful to their underlying geometry, or they stop being interpretable the moment the data leaves your dev set.</p>

<p>I've recently open-sourced a framework that discovers emergent knowledge-graph relations in high-order semantic vector spaces through manifold learning and spectral analysis. Initial proofs, a small teaser, and the Python codebase live at <a href="https://github.com/paudley/nonlinear-semantic-graphs" rel="external noopener">paudley/nonlinear-semantic-graphs</a>; the working paper that motivates the design is in <a href="#emergent-knowledge-graphs">Publications</a>.</p>

<p>I'm looking to connect with researchers and applied scientists specialising in <strong>Topological Data Analysis</strong>, <strong>Geometric Deep Learning</strong>, and <strong>Knowledge Representation</strong> &mdash; especially anyone working on geodesic aggregation or spectral graph theory &mdash; to push these ideas into robust enterprise deployments. <a href="https://www.linkedin.com/feed/update/urn:li:activity:7458177770238681088/" rel="external noopener">Comment on the LinkedIn original</a> or <a href="#contact">drop me a line directly</a>.</p>]]></content>
  </entry>

</feed>