<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>TypeScript on AIBussin — AI applications, systems and books</title>
		<link>https://aibussin.com/categories/typescript/</link>
		<description>Recent content in TypeScript on AIBussin — AI applications, systems and books</description>
		<generator>Hugo</generator>
		<language>en-US</language>
		
		
		
		
			<lastBuildDate>Sun, 04 Oct 2026 09:00:00 +0100</lastBuildDate>
		
			<atom:link href="https://aibussin.com/categories/typescript/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Your First Extension</title>
				<link>https://aibussin.com/books/pi/15-chapter/</link>
				<pubDate>Fri, 02 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/15-chapter/</guid>
				<description>&lt;p&gt;The review guard can instruct the model to run &lt;code&gt;scripts/run-checks.sh&lt;/code&gt;, but a skill cannot itself register a new model-callable operation, intercept tool execution, or register a status display. Those integrations need an extension; the script a skill asks the model to run is still executable code, but it is not an extension hook.&lt;/p&gt;&#xA;&lt;p&gt;This chapter builds the smallest extension that does something a skill cannot.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-an-extension-is&#34;&gt;What an extension is&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;extensions.md&lt;/code&gt;: extensions are TypeScript modules loaded into the Pi process, and their factory functions register tools, commands, shortcuts, providers, event handlers, renderers, and terminal UI.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Events and the Extension Lifecycle</title>
				<link>https://aibussin.com/books/pi/16-chapter/</link>
				<pubDate>Fri, 02 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/16-chapter/</guid>
				<description>&lt;p&gt;The review guard can suggest running the checks. It cannot stop a &lt;code&gt;git push --force&lt;/code&gt; that the model decides to run while fixing a conflict.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;code&gt;tool_call&lt;/code&gt; handler can block a matching invocation of a tool before its body runs. That makes it a useful extension-level guard, not an unconditional prohibition: commands can reach the same effect through other tools or paths the handler does not inspect. Getting this right requires knowing the lifecycle, because handlers run in registration order and a return value only matters for events declared to accept one.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tools in Depth</title>
				<link>https://aibussin.com/books/pi/17-chapter/</link>
				<pubDate>Fri, 02 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/17-chapter/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://aibussin.com/books/pi/15-chapter/&#34;&gt;Chapter 15&amp;rsquo;s&lt;/a&gt; &lt;code&gt;review-scope&lt;/code&gt; tool told the model which command to run. That is a tool shaped like a suggestion. This chapter turns it into a tool shaped like a tool: It can execute work, return structured data, publish risk hints, and control how it is exposed to the model.&lt;/p&gt;&#xA;&lt;h2 id=&#34;five-exposures&#34;&gt;Five exposures&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;exposure&lt;/code&gt; controls how the model reaches a tool. &amp;ldquo;Callable&amp;rdquo; means callable from other tools through &lt;code&gt;ctx.executeTool()&lt;/code&gt; — which is what &lt;code&gt;codemode&lt;/code&gt; scripts do.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Model Access Without the Coding Agent</title>
				<link>https://aibussin.com/books/pi/36-chapter/</link>
				<pubDate>Sun, 04 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/36-chapter/</guid>
				<description>&lt;p&gt;Everything so far has run inside a coding agent. You have been using a tool that&#xA;reads files, runs commands and keeps a session, and you have been attaching to&#xA;it. That is the right place to start, because Pi&amp;rsquo;s host is where most people meet&#xA;Pi.&lt;/p&gt;&#xA;&lt;p&gt;It is the wrong place to stop, because most of what an application needs from a&#xA;model is not an agent. It is one question and one answer: &lt;em&gt;is this claim&#xA;supported by this evidence?&lt;/em&gt; One input, one typed result, nothing to run, nothing&#xA;to remember.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Agent Core on Its Own</title>
				<link>https://aibussin.com/books/pi/37-chapter/</link>
				<pubDate>Sun, 04 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/37-chapter/</guid>
				<description>&lt;p&gt;The claim checker from &lt;a href=&#34;https://aibussin.com/books/pi/36-chapter/&#34;&gt;chapter 36&lt;/a&gt; has a limit. Given the evidence you handed it,&#xA;it can produce a schema-valid assessment, including &lt;code&gt;insufficient&lt;/code&gt; when the evidence&#xA;is inadequate. It cannot independently fetch more evidence in that single call,&#xA;and the model may still judge the evidence incorrectly.&lt;/p&gt;&#xA;&lt;p&gt;Looking for more is a loop: the model asks for something, you run it, you give&#xA;the result back, and the model decides again. You have seen that loop for thirty-six&#xA;chapters, from the outside. This chapter runs it from the inside, in about forty&#xA;lines, using the same class the coding agent is built on.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Stochastic Step Is a Typed Function</title>
				<link>https://aibussin.com/books/pi/38-chapter/</link>
				<pubDate>Sun, 04 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/38-chapter/</guid>
				<description>&lt;p&gt;An unconstrained agent may finish with prose, and prose is a fragile interface&#xA;between software components.&lt;/p&gt;&#xA;&lt;p&gt;You can pass a paragraph to another function, but branching on its meaning&#xA;requires interpretation or parsing whose behavior you must define and test.&#xA;An ordinary agent can stop after deciding it is finished, without producing the&#xA;structure a downstream function expects. This chapter puts a validated value at&#xA;that boundary instead.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://aibussin.com/books/pi/36-chapter/&#34;&gt;Chapter 36&lt;/a&gt; fixed this for a single call. This chapter fixes it for a loop. The&#xA;result is the most reusable idea in the book, and it fits in one function.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Seams, Hooks, and Irreversible Decisions</title>
				<link>https://aibussin.com/books/pi/39-chapter/</link>
				<pubDate>Sun, 04 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/39-chapter/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://aibussin.com/books/pi/01-chapter/&#34;&gt;Chapter 1&lt;/a&gt; ended on a sentence that has been quietly organising the book since:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An extension point is a real architectural seam only for decisions it can&#xA;intercept before those decisions become irreversible.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It was stated there as a finding about forks of the coding agent, and it was&#xA;argued from three cases. This chapter tests it on something you can run. The agent&#xA;core has nine function-shaped options that run around a request or a tool call, and for each one the useful question is not &lt;em&gt;what&#xA;does it give me&lt;/em&gt; but &lt;em&gt;what can I still decide by the time it fires&lt;/em&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Composing Agent Operations</title>
				<link>https://aibussin.com/books/pi/40-chapter/</link>
				<pubDate>Sun, 04 Oct 2026 09:00:00 +0100</pubDate>
				<guid>https://aibussin.com/books/pi/40-chapter/</guid>
				<description>&lt;p&gt;The tempting next move is to make every part of the pipeline an agent. One agent&#xA;retrieves, another assesses, another summarises, and they talk. That may be useful&#xA;when the tasks genuinely require independent decisions or work, but it introduces&#xA;more model calls, coordination and failure paths than this claim checker needs.&lt;/p&gt;&#xA;&lt;p&gt;This chapter is the argument against doing that by default, made with a&#xA;pipeline you can run. The rule it demonstrates:&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
