<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Jonathan Kingston</title><link>https://jotter.jonathankingston.co.uk</link><description>Notes from a developer in Nottingham</description><item><title>Appropriateness is what safety cannot mechanise</title><link>https://jotter.jonathankingston.co.uk/blog/2026/06/08/appropriateness-is-what-safety-cannot-mechanise/</link><description><![CDATA[<p>In <a href="https://jotter.jonathankingston.co.uk/blog/2026/06/08/the-trifecta-tells-you-what-an-agent-can-do/">the first post</a>, I argued that the lethal trifecta is a capability test, not a safety model. Above capability sit further checks: contextual integrity and deployment policy, authority, and appropriateness for the recipient. The first post covered capability through authority. Build those controls and you have something defensible.</p>
]]></description><category>AI/Security</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/06/08/appropriateness-is-what-safety-cannot-mechanise/</guid><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate></item><item><title>The trifecta tells you what an agent can do</title><link>https://jotter.jonathankingston.co.uk/blog/2026/06/08/the-trifecta-tells-you-what-an-agent-can-do/</link><description><![CDATA[<p>The lethal trifecta is the security heuristic I reach for most often with agents. Private data, untrusted content, an exfiltration path: hold all three in one context and you have a confused deputy waiting to happen. I <a href="https://jotter.jonathankingston.co.uk/blog/2026/05/10/when-agents-browse-the-web-the-web-wins/">walked through what that looks like for browser agents</a> in an earlier post. Simon Willison named the pattern clearly in June 2025, and it has been the easiest way to explain indirect prompt injection to people who do not read security papers.</p>
]]></description><category>AI/Security</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/06/08/the-trifecta-tells-you-what-an-agent-can-do/</guid><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate></item><item><title>When agents browse the web, the web wins</title><link>https://jotter.jonathankingston.co.uk/blog/2026/05/10/when-agents-browse-the-web-the-web-wins/</link><description><![CDATA[<p>A new paper, <a href="https://arxiv.org/abs/2605.05509">WAAA! Web Adversaries Against Agentic Browsers</a>, frames web pages as hostile software to agentic browsers.</p>
]]></description><category>AI/Security</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/05/10/when-agents-browse-the-web-the-web-wins/</guid><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate></item><item><title>Stop asking junior engineers to struggle harder</title><link>https://jotter.jonathankingston.co.uk/blog/2026/03/03/stop-asking-junior-engineers-to-struggle-harder/</link><description><![CDATA[<p>Four pieces landed in the past two weeks that circle the same problem from different altitudes.</p>
]]></description><category>AI</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/03/03/stop-asking-junior-engineers-to-struggle-harder/</guid><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate></item><item><title>Context gathering for AI: a tradeoff guide</title><link>https://jotter.jonathankingston.co.uk/blog/2026/03/02/context-gathering-for-ai/</link><description><![CDATA[<p>When you wire AI into a workflow, the choice of model matters less than you might expect - often the harder question is "how does the model get the context it needs?"</p>
]]></description><category>AI</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/03/02/context-gathering-for-ai/</guid><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate></item><item><title>Consent is all you need</title><link>https://jotter.jonathankingston.co.uk/blog/2026/02/22/consent-is-all-you-need/</link><description><![CDATA[<p>The agentic web has a consent problem. Every agent depends on the same unstated assumption: the model knows when it should stop and ask you.</p>
]]></description><category>AI/Security</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/02/22/consent-is-all-you-need/</guid><pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate></item><item><title>Magic words need measuring sticks</title><link>https://jotter.jonathankingston.co.uk/blog/2026/02/17/magic-words-need-measuring-sticks/</link><description><![CDATA[<p>Dave Rupert's <a href="https://daverupert.com/2026/02/magic-words/">Magic Words</a> names a thing I've been stewing on. Skills, MDC rules, and system prompts are all incantations. We write them, ship them, and hope. He frames them as magic numbers: values that work for reasons we can't articulate, in conditions we can't reproduce. I think he's onto something. But I also think the bigger issue may be that we're not measuring whether these words work.</p>
]]></description><category>AI/Development</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/02/17/magic-words-need-measuring-sticks/</guid><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate></item><item><title>A Case for poster on Canvas</title><link>https://jotter.jonathankingston.co.uk/blog/2026/01/11/a-case-for-poster-on-canvas/</link><description><![CDATA[<p>The HTML <code>&lt;canvas&gt;</code> element has a gap that <code>&lt;video&gt;</code> solved years ago: there's no declarative way to provide a static visual representation. When JavaScript hasn't run, can't run, or the page is being archived, canvas content vanishes. I think a <code>poster</code> attribute could fix this.</p>
]]></description><category>Web Standards/HTML/JavaScript/accessibility</category><guid>https://jotter.jonathankingston.co.uk/blog/2026/01/11/a-case-for-poster-on-canvas/</guid><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate></item><item><title>Breaking into realism with AI</title><link>https://jotter.jonathankingston.co.uk/blog/2025/12/23/breaking-into-realism-with-ai/</link><description><![CDATA[<p>AI isn't magic. It hallucinates, misses context, and confidently produces junk. But if you understand <em>where</em> it's useful, it becomes powerful for amplifying what you do.</p>
]]></description><category>AI/Development</category><guid>https://jotter.jonathankingston.co.uk/blog/2025/12/23/breaking-into-realism-with-ai/</guid><pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate></item><item><title>Containers website assignment</title><link>https://jotter.jonathankingston.co.uk/blog/2017/04/04/containers-assignment/</link><description><![CDATA[<p>At Mozilla we have been working on a feature called <a href="https://testpilot.firefox.com/experiments/containers">containers</a>, which gives users the ability to separate their lives online to prevent being tracked.</p>
]]></description><category>Security/HTML/JavaScript/development/containers/mozilla/planet mozilla</category><guid>https://jotter.jonathankingston.co.uk/blog/2017/04/04/containers-assignment/</guid><pubDate>Tue, 04 Apr 2017 00:00:00 +0000</pubDate></item><item><title>role=&quot;password&quot; is not wise</title><link>https://jotter.jonathankingston.co.uk/blog/2016/05/16/role-password-is-not-wise/</link><description><![CDATA[<p><strong>TL;DR:</strong> <a href="https://www.w3.org/TR/wai-aria-1.1/">ARIA</a> is a hack on real accessibility, reimplementing HTML in ARIA is silly, subverting password managers is evil, expecting the developers to start using role="password" likely wont happen, CSS replaced elements can't use pseudo elements and we should just fix that.</p>
]]></description><category>Security/HTML/JavaScript/development/accessibility</category><guid>https://jotter.jonathankingston.co.uk/blog/2016/05/16/role-password-is-not-wise/</guid><pubDate>Mon, 16 May 2016 00:00:00 +0000</pubDate></item><item><title>Client side armour</title><link>https://jotter.jonathankingston.co.uk/blog/2015/03/02/client-side-armour/</link><description><![CDATA[<p><img src="/images/clientsecurity/helmet.jpg" alt="Helmet armour" /></p>
]]></description><category>Security/HTML/JavaScript/development</category><guid>https://jotter.jonathankingston.co.uk/blog/2015/03/02/client-side-armour/</guid><pubDate>Mon, 02 Mar 2015 00:00:00 +0000</pubDate></item><item><title>Out of the shadows</title><link>https://jotter.jonathankingston.co.uk/blog/2015/02/22/out-of-the-shadows/</link><description><![CDATA[<p><img src="/images/shadow/shadow-puppet.jpg" alt="Shadow puppet" /></p>
]]></description><category>JavaScript/CSS</category><guid>https://jotter.jonathankingston.co.uk/blog/2015/02/22/out-of-the-shadows/</guid><pubDate>Sun, 22 Feb 2015 00:00:00 +0000</pubDate></item><item><title>Making a dynamic palette today</title><link>https://jotter.jonathankingston.co.uk/blog/2014/07/16/making-a-dynamic-palette-today/</link><description><![CDATA[<p>Creating dynamic CSS doesn't sound exciting, however it is certainly a time management issue of large scale sites on the web. This has lead to the advancement of preprocessing CSS and other methodologies like <a href="http://oocss.org/">OOCSS</a> and <a href="https://smacss.com/">SMACSS</a> which bring their own issues too.</p>
]]></description><category>CSS/colour/Myth</category><guid>https://jotter.jonathankingston.co.uk/blog/2014/07/16/making-a-dynamic-palette-today/</guid><pubDate>Wed, 16 Jul 2014 00:00:00 +0000</pubDate></item><item><title>VALIDATE me baby</title><link>https://jotter.jonathankingston.co.uk/blog/2014/07/10/validate-me-baby/</link><description><![CDATA[<p>There are many times that I have been writing sites with the desire for the client side to call the server in a <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1">safe</a> and <a href="http://en.wikipedia.org/wiki/Idempotence">idempotent</a> way with a request body for sending more data than a <code>GET</code> can, or data that can't be recorded via referral logs.</p>
]]></description><category>JavaScript/ideas/HTML/development</category><guid>https://jotter.jonathankingston.co.uk/blog/2014/07/10/validate-me-baby/</guid><pubDate>Thu, 10 Jul 2014 00:00:00 +0000</pubDate></item><item><title>Google as a Service (GaaS)</title><link>https://jotter.jonathankingston.co.uk/blog/2014/06/25/google-as-a-service-gaas/</link><description><![CDATA[<p>Google appears to be pushing further into the open internet platform in a land grab bid against closed source providers. As other articles are suggesting, Google is pushing the 'Android everywhere' idea however I am seeing this more as a two pronged approach with an 'Internet everywhere' approach as the main driver for Google's other profitable offerings.</p>
]]></description><category>google/cloud/services/tech/development</category><guid>https://jotter.jonathankingston.co.uk/blog/2014/06/25/google-as-a-service-gaas/</guid><pubDate>Wed, 25 Jun 2014 00:00:00 +0000</pubDate></item><item><title>My new favourite colour</title><link>https://jotter.jonathankingston.co.uk/blog/2014/06/20/my-new-favourite-colour/</link><description><![CDATA[<p>The all new CSS colour: 'rebeccapurple' which is backed with one of the most moving stories I have heard in a long time.</p>
]]></description><category>CSS/colour/charity</category><guid>https://jotter.jonathankingston.co.uk/blog/2014/06/20/my-new-favourite-colour/</guid><pubDate>Fri, 20 Jun 2014 00:00:00 +0000</pubDate></item><item><title>Making a performance</title><link>https://jotter.jonathankingston.co.uk/blog/2014/03/05/making-a-performance/</link><description><![CDATA[<h2>Don't over optimise too early</h2>
<p>A common trend I see more in JavaScript, than in any other language is to over optimise every line of code.
This comes in many flavours but the two most common are:</p>
]]></description><guid>https://jotter.jonathankingston.co.uk/blog/2014/03/05/making-a-performance/</guid><pubDate>Wed, 05 Mar 2014 00:00:00 +0000</pubDate></item><item><title>Why I now love CSS Values and Units module</title><link>https://jotter.jonathankingston.co.uk/blog/2014/03/03/why-i-now-love-css-values-and-units-module/</link><description><![CDATA[<h2>What I first thought</h2>
]]></description><category>CSS/colour</category><guid>https://jotter.jonathankingston.co.uk/blog/2014/03/03/why-i-now-love-css-values-and-units-module/</guid><pubDate>Mon, 03 Mar 2014 00:00:00 +0000</pubDate></item><item><title>Give the world back FollowRedirects XMLHttpRequest</title><link>https://jotter.jonathankingston.co.uk/blog/2013/11/08/give-the-world-back-followredirects-xmlhttprequest/</link><description><![CDATA[<p>So having written enough heavy AJAX applications I can tell you that a massive frustration is that there is
not any ability to detect natively when the browser follows a redirect over AJAX, this makes handling redirection difficult in the client.</p>
]]></description><category>JavaScript/ECMAScript/XMLHttpRequest/SPA/Single Page Application</category><guid>https://jotter.jonathankingston.co.uk/blog/2013/11/08/give-the-world-back-followredirects-xmlhttprequest/</guid><pubDate>Fri, 08 Nov 2013 00:00:00 +0000</pubDate></item><item><title>Trialling laravel PHP</title><link>https://jotter.jonathankingston.co.uk/blog/2013/10/25/trialing-laravel-php/</link><description><![CDATA[<p>Laravel was suggested to me last week and I have only just got time to take a look at it properly.</p>
]]></description><category>PHP/framework/Laravel/First impressions</category><guid>https://jotter.jonathankingston.co.uk/blog/2013/10/25/trialing-laravel-php/</guid><pubDate>Fri, 25 Oct 2013 00:00:00 +0000</pubDate></item><item><title>Pushing restart on blogging</title><link>https://jotter.jonathankingston.co.uk/blog/2013/10/21/pushing-restart-on-blogging/</link><description><![CDATA[<p>I have been inspired to write blogs over the years, without ever making more than several posts before quitting.</p>
]]></description><category>blogging/jekyll</category><guid>https://jotter.jonathankingston.co.uk/blog/2013/10/21/pushing-restart-on-blogging/</guid><pubDate>Mon, 21 Oct 2013 00:00:00 +0000</pubDate></item></channel></rss>
