<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Stat DS Computing Wiki  - Recent changes [en]</title>
		<link>https://info.stat.cmu.edu/index.php?title=Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.43.9</generator>
		<lastBuildDate>Thu, 05 Nov 2026 07:06:17 GMT</lastBuildDate>
		<item>
			<title>Overleaf</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=1034&amp;oldid=1010</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=1034&amp;oldid=1010</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:20, 30 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Typesetting]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Category:&lt;/ins&gt;Typesetting]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com Overleaf]&amp;#039;&amp;#039;&amp;#039; is a browser-based LaTeX editor. It gives you a full TeX Live installation, a live PDF preview, and Google-Docs-style collaboration, all without installing anything on your machine. For most papers written with co-authors, it has become the default place where the writing actually happens.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com Overleaf]&amp;#039;&amp;#039;&amp;#039; is a browser-based LaTeX editor. It gives you a full TeX Live installation, a live PDF preview, and Google-Docs-style collaboration, all without installing anything on your machine. For most papers written with co-authors, it has become the default place where the writing actually happens.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key infowiki:diff:1.41:old-1010:rev-1034:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 30 Oct 2026 21:20:55 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf</comments>
		</item>
		<item>
			<title>AI Agents: A Primer</title>
			<link>https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1033&amp;oldid=1016</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1033&amp;oldid=1016</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 05:41, 29 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-multi&quot; lang=&quot;en&quot;&gt;(9 intermediate revisions by the same user not shown)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Based on a StatBytes talk&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Based on a StatBytes talk&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This article is adapted from the StatBytes talk [https://drive.google.com/drive/folders/1KnyUo9YNr2XL9N5nJgpzW5jWyulSfTIg?usp=drive_link|&amp;#039;&amp;#039;Piloting the Suit: Workflow tips for agentic AI in statistical research&amp;#039;&amp;#039;]. A small demo repository that goes with it is at [https://github.com/Alex-Shen-CMU/statbytes-agentic-example github.com/Alex-Shen-CMU/statbytes-agentic-example]. Most examples below use Claude Code, but almost everything applies to other coding agents too.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This article is adapted from the StatBytes talk [https://drive.google.com/drive/folders/1KnyUo9YNr2XL9N5nJgpzW5jWyulSfTIg?usp=drive_link|&amp;#039;&amp;#039;Piloting the Suit: Workflow tips for agentic AI in statistical research&amp;#039;&amp;#039;]. A small demo repository that goes with it is at [https://github.com/Alex-Shen-CMU/statbytes-agentic-example github.com/Alex-Shen-CMU/statbytes-agentic-example]. Most examples below use Claude Code, but almost everything applies to other coding agents too.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;See [https://github.com/Alex-Shen-CMU/stats-agent-setup https://github.com/Alex-Shen-CMU/stats-agent-setup] for a collection of commonly used agent skills and agent instruction files relevant for statistics research.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l210&quot;&gt;Line 210:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 212:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A great suit makes a skilled pilot &amp;#039;&amp;#039;&amp;#039;superhuman&amp;#039;&amp;#039;&amp;#039;. It makes an unskilled pilot crash &amp;#039;&amp;#039;&amp;#039;faster&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A great suit makes a skilled pilot &amp;#039;&amp;#039;&amp;#039;superhuman&amp;#039;&amp;#039;&amp;#039;. It makes an unskilled pilot crash &amp;#039;&amp;#039;&amp;#039;faster&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: Slide &quot;Agentic AI is an Iron Man suit&quot; (final overlay). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Agent-iron-man-suit.png|thumb|center|650px|You are the pilot; the agent is the suit.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Best Practices ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Best Practices ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l290&quot;&gt;Line 290:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 289:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A good prompt has five parts: the &amp;#039;&amp;#039;&amp;#039;goal&amp;#039;&amp;#039;&amp;#039;, the relevant &amp;#039;&amp;#039;&amp;#039;context&amp;#039;&amp;#039;&amp;#039; (and where to find it), the &amp;#039;&amp;#039;&amp;#039;constraints&amp;#039;&amp;#039;&amp;#039;, a checkable &amp;#039;&amp;#039;&amp;#039;definition of done&amp;#039;&amp;#039;&amp;#039;, and an instruction to &amp;#039;&amp;#039;&amp;#039;plan and ask questions first&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A good prompt has five parts: the &amp;#039;&amp;#039;&amp;#039;goal&amp;#039;&amp;#039;&amp;#039;, the relevant &amp;#039;&amp;#039;&amp;#039;context&amp;#039;&amp;#039;&amp;#039; (and where to find it), the &amp;#039;&amp;#039;&amp;#039;constraints&amp;#039;&amp;#039;&amp;#039;, a checkable &amp;#039;&amp;#039;&amp;#039;definition of done&amp;#039;&amp;#039;&amp;#039;, and an instruction to &amp;#039;&amp;#039;&amp;#039;plan and ask questions first&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: Slide &quot;Prompts as specs: before and after&quot; (final overlay). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Agent-prompt-before-after.png|thumb|center|700px|A vague prompt vs. a structured one.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Skills ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Skills ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l347&quot;&gt;Line 347:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 343:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Because skills can bundle scripts, they also let the agent &amp;#039;&amp;#039;run&amp;#039;&amp;#039; a deterministic tool instead of &amp;#039;&amp;#039;regenerating&amp;#039;&amp;#039; its logic each time. A summary script that always computes Monte Carlo standard errors the same way is more reliable than asking the model to rewrite that code in every session, and it saves tokens too.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Because skills can bundle scripts, they also let the agent &amp;#039;&amp;#039;run&amp;#039;&amp;#039; a deterministic tool instead of &amp;#039;&amp;#039;regenerating&amp;#039;&amp;#039; its logic each time. A summary script that always computes Monte Carlo standard errors the same way is more reliable than asking the model to rewrite that code in every session, and it saves tokens too.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: A Claude Code session where the agent picks up a skill automatically (e.g. a request to &quot;run a simulation study comparing ...&quot; with the agent reading .claude/skills/simstudy/SKILL.md). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Claude-code-skill-invocation.png|thumb|center|600px|The agent loading a skill when a request matches its description.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l401&quot;&gt;Line 401:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 395:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Git is your undo button:&amp;#039;&amp;#039;&amp;#039; work on branches, protect &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, and review every change before it is merged.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Git is your undo button:&amp;#039;&amp;#039;&amp;#039; work on branches, protect &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, and review every change before it is merged.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: Slide &quot;A concrete workflow: my setup&quot; (laptop → dept. server with tmux + Claude Code + repo clone → GitHub and HPC cluster). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For a complete end-to-end workflow built on this setup, in which tasks are written as GitHub issues and the agent plans, implements, runs experiments on the cluster, and opens a pull request for review, see [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Agentic Workflow via &lt;/ins&gt;GitHub &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Issues&lt;/ins&gt;]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Agent-remote-server-setup.png|thumb|center|700px|Running the agent on an always-on server, with access to GitHub and the cluster.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For a complete end-to-end workflow built on this setup, in which tasks are written as GitHub issues and the agent plans, implements, runs experiments on the cluster, and opens a pull request for review, see [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Claude Code &lt;/del&gt;GitHub &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Issue Workflow&lt;/del&gt;]]. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- TODO: fix this link to match the actual title of the GitHub issue workflow article --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== What Goes in CLAUDE.md ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== What Goes in CLAUDE.md ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l425&quot;&gt;Line 425:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 416:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Things that belong elsewhere: long procedures (make them [[#Skills|skills]]), anything secret such as passwords or tokens (never put these in the repository), and task-specific plans (put them in a &amp;lt;code&amp;gt;PLAN.md&amp;lt;/code&amp;gt; or an issue).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Things that belong elsewhere: long procedures (make them [[#Skills|skills]]), anything secret such as passwords or tokens (never put these in the repository), and task-specific plans (put them in a &amp;lt;code&amp;gt;PLAN.md&amp;lt;/code&amp;gt; or an issue).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: Slide &quot;A concrete workflow: making it work&quot; (left column, the CLAUDE.md terminal example). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Claude-md-example.png|thumb|center|450px|An example CLAUDE.md.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Common Pitfalls ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Common Pitfalls ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l445&quot;&gt;Line 445:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 433:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; The tools change quickly, but the principles here don&#039;t: keep the context small and focused, write prompts like specifications, plan before building, and stay the pilot. For a full worked example, see [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Claude Code &lt;/del&gt;GitHub &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Issue Workflow&lt;/del&gt;]] and the [https://github.com/Alex-Shen-CMU/statbytes-agentic-example demo repository]. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub issue workflow article --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; The tools change quickly, but the principles here don&#039;t: keep the context small and focused, write prompts like specifications, plan before building, and stay the pilot. For a full worked example, see [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Agentic Workflow via &lt;/ins&gt;GitHub &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Issues&lt;/ins&gt;]] and the [https://github.com/Alex-Shen-CMU/statbytes-agentic-example demo repository]. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub issue workflow article --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key infowiki:diff:1.41:old-1016:rev-1033:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:41:27 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:AI_Agents:_A_Primer</comments>
		</item>
		<item>
			<title>File:Agent-dont-be-that-guy.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Agent-dont-be-that-guy.png&amp;diff=1023&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Agent-dont-be-that-guy.png&amp;diff=1023&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Agent-dont-be-that-guy.png&quot; title=&quot;File:Agent-dont-be-that-guy.png&quot;&gt;File:Agent-dont-be-that-guy.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:23:36 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Agent-dont-be-that-guy.png</comments>
		</item>
		<item>
			<title>File:Agent-misconception.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Agent-misconception.png&amp;diff=1022&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Agent-misconception.png&amp;diff=1022&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Agent-misconception.png&quot; title=&quot;File:Agent-misconception.png&quot;&gt;File:Agent-misconception.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:21:31 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Agent-misconception.png</comments>
		</item>
		<item>
			<title>File:Agent-time-cost.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Agent-time-cost.png&amp;diff=1021&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Agent-time-cost.png&amp;diff=1021&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Agent-time-cost.png&quot; title=&quot;File:Agent-time-cost.png&quot;&gt;File:Agent-time-cost.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:20:00 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Agent-time-cost.png</comments>
		</item>
		<item>
			<title>File:Coding-agent-features.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Coding-agent-features.png&amp;diff=1020&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Coding-agent-features.png&amp;diff=1020&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Coding-agent-features.png&quot; title=&quot;File:Coding-agent-features.png&quot;&gt;File:Coding-agent-features.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:18:46 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Coding-agent-features.png</comments>
		</item>
		<item>
			<title>File:Agent-context-window.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Agent-context-window.png&amp;diff=1019&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Agent-context-window.png&amp;diff=1019&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Agent-context-window.png&quot; title=&quot;File:Agent-context-window.png&quot;&gt;File:Agent-context-window.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:16:44 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Agent-context-window.png</comments>
		</item>
		<item>
			<title>File:Agent-token-cost.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Agent-token-cost.png&amp;diff=1018&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Agent-token-cost.png&amp;diff=1018&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Agent-token-cost.png&quot; title=&quot;File:Agent-token-cost.png&quot;&gt;File:Agent-token-cost.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:14:40 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Agent-token-cost.png</comments>
		</item>
		<item>
			<title>File:Coding-agent-read-write-execute.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Coding-agent-read-write-execute.png&amp;diff=1017&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Coding-agent-read-write-execute.png&amp;diff=1017&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Coding-agent-read-write-execute.png&quot; title=&quot;File:Coding-agent-read-write-execute.png&quot;&gt;File:Coding-agent-read-write-execute.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:11:52 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Coding-agent-read-write-execute.png</comments>
		</item>
		<item>
			<title>AI Agents: A Primer</title>
			<link>https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1016&amp;oldid=1013</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1016&amp;oldid=1013</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;The landscape&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 05:09, 29 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l99&quot;&gt;Line 99:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 99:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Terminal-native agents are a natural fit for statistics research, because so much of our work already happens in a shell: &amp;lt;code&amp;gt;Rscript&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt;, and Slurm.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Terminal-native agents are a natural fit for statistics research, because so much of our work already happens in a shell: &amp;lt;code&amp;gt;Rscript&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt;, and Slurm.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: statbytes_figures/claude_code.png from the slides. --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Claude-code-terminal.png|thumb|center|600px|Claude Code running in a terminal.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Core features: read, write, execute ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Core features: read, write, execute ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key infowiki:diff:1.41:old-1013:rev-1016:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:09:53 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:AI_Agents:_A_Primer</comments>
		</item>
		<item>
			<title>File:Agentic-ai-agent-loop.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Agentic-ai-agent-loop.png&amp;diff=1015&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Agentic-ai-agent-loop.png&amp;diff=1015&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Agentic-ai-agent-loop.png&quot; title=&quot;File:Agentic-ai-agent-loop.png&quot;&gt;File:Agentic-ai-agent-loop.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:07:43 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Agentic-ai-agent-loop.png</comments>
		</item>
		<item>
			<title>File:Agentic-ai-llm-harness.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Agentic-ai-llm-harness.png&amp;diff=1014&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Agentic-ai-llm-harness.png&amp;diff=1014&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Agentic-ai-llm-harness.png&quot; title=&quot;File:Agentic-ai-llm-harness.png&quot;&gt;File:Agentic-ai-llm-harness.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:05:10 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Agentic-ai-llm-harness.png</comments>
		</item>
		<item>
			<title>AI Agents: A Primer</title>
			<link>https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1013&amp;oldid=1012</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1013&amp;oldid=1012</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 05:02, 29 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l8&quot;&gt;Line 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 8:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Based on a StatBytes talk&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Based on a StatBytes talk&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This article is adapted from the StatBytes talk &#039;&#039;Piloting the Suit: Workflow tips for agentic AI in statistical research&#039;&#039;. A small demo repository that goes with it is at [https://github.com/Alex-Shen-CMU/statbytes-agentic-example github.com/Alex-Shen-CMU/statbytes-agentic-example]. Most examples below use Claude Code, but almost everything applies to other coding agents too.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This article is adapted from the StatBytes talk &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[https://drive.google.com/drive/folders/1KnyUo9YNr2XL9N5nJgpzW5jWyulSfTIg?usp=drive_link|&lt;/ins&gt;&#039;&#039;Piloting the Suit: Workflow tips for agentic AI in statistical research&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/ins&gt;. A small demo repository that goes with it is at [https://github.com/Alex-Shen-CMU/statbytes-agentic-example github.com/Alex-Shen-CMU/statbytes-agentic-example]. Most examples below use Claude Code, but almost everything applies to other coding agents too.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key infowiki:diff:1.41:old-1012:rev-1013:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Thu, 29 Oct 2026 05:02:19 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:AI_Agents:_A_Primer</comments>
		</item>
		<item>
			<title>AI Agents: A Primer</title>
			<link>https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1012&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=AI_Agents:_A_Primer&amp;diff=1012&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt; &lt;a href=&quot;/index.php?title=Category:AI_Tools&quot; title=&quot;Category:AI Tools&quot;&gt;Category:AI Tools&lt;/a&gt;  &amp;#039;&amp;#039;&amp;#039;Agentic AI&amp;#039;&amp;#039;&amp;#039; tools are AI systems that don&amp;#039;t just answer questions: they take actions. An agent can search for papers, read your files, write and run code, launch jobs on a cluster, and look at the results, all in a loop, until the task you gave it is done. For statistical research, the most mature agents today are &amp;#039;&amp;#039;&amp;#039;AI coding agents&amp;#039;&amp;#039;&amp;#039; such as [https:...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;br /&gt;
[[Category:AI Tools]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Agentic AI&amp;#039;&amp;#039;&amp;#039; tools are AI systems that don&amp;#039;t just answer questions: they take actions. An agent can search for papers, read your files, write and run code, launch jobs on a cluster, and look at the results, all in a loop, until the task you gave it is done. For statistical research, the most mature agents today are &amp;#039;&amp;#039;&amp;#039;AI coding agents&amp;#039;&amp;#039;&amp;#039; such as [https://www.claude.com/product/claude-code Claude Code], OpenAI&amp;#039;s Codex CLI, and Google&amp;#039;s Gemini CLI. They run in your terminal and work directly on your repository.&lt;br /&gt;
&lt;br /&gt;
These tools can save an enormous amount of time, and they can also waste an enormous amount of time (and money). The difference is almost entirely in how they are used. This article explains how agents work, where their costs come from, and a set of concrete practices for getting good results from them in research.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Based on a StatBytes talk&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
This article is adapted from the StatBytes talk &amp;#039;&amp;#039;Piloting the Suit: Workflow tips for agentic AI in statistical research&amp;#039;&amp;#039;. A small demo repository that goes with it is at [https://github.com/Alex-Shen-CMU/statbytes-agentic-example github.com/Alex-Shen-CMU/statbytes-agentic-example]. Most examples below use Claude Code, but almost everything applies to other coding agents too.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What Is an Agentic AI? ==&lt;br /&gt;
An agent has two parts: a &amp;#039;&amp;#039;&amp;#039;large language model (LLM)&amp;#039;&amp;#039;&amp;#039; that does the thinking, and a &amp;#039;&amp;#039;&amp;#039;harness&amp;#039;&amp;#039;&amp;#039; that gives the model a way to act on the world.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #d6eaf3; color: #1d5670; padding: 10px; text-align: left;&amp;quot; | The LLM (the brain)&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #d4edda; color: #155724; padding: 10px; text-align: left;&amp;quot; | The harness (the body)&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px; border-right: 2px solid white;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Text in, text out:&amp;#039;&amp;#039;&amp;#039; At its core, the model predicts the next token given everything before it.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Reasons and plans:&amp;#039;&amp;#039;&amp;#039; It decides what to do next, including &amp;#039;&amp;#039;which tool to call&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Stateless:&amp;#039;&amp;#039;&amp;#039; It knows only what is currently in its context window. It has no memory of yesterday&amp;#039;s session unless something puts that information back in front of it.&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Runs the loop:&amp;#039;&amp;#039;&amp;#039; It sends the conversation to the model, receives a tool call, executes it, and sends back the result.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Executes tools:&amp;#039;&amp;#039;&amp;#039; Web search, reading PDFs, loading data, running code, editing files.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Manages context and memory:&amp;#039;&amp;#039;&amp;#039; It decides what goes into the model&amp;#039;s context and loads standing instructions.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Enforces permissions:&amp;#039;&amp;#039;&amp;#039; It decides what the agent may do without asking, and sandboxes what it runs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The model and harness talk through &amp;#039;&amp;#039;&amp;#039;tool calls&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;observations&amp;#039;&amp;#039;&amp;#039;. The model emits something like &amp;lt;code&amp;gt;{search: &amp;quot;Conformal Prediction&amp;quot;}&amp;lt;/code&amp;gt;. The harness runs the search and returns &amp;quot;10 results: arXiv, ...&amp;quot; as an observation, which becomes part of the conversation for the next step. Around this exchange sit two more parties: &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039;, who supply the goal, the constraints, and the final judgment, and &amp;#039;&amp;#039;&amp;#039;the world&amp;#039;&amp;#039;&amp;#039;, meaning papers, datasets, your files, compute, and the web.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;What is an agentic AI?&amp;quot; (final overlay), showing the LLM and harness boxes, the tool-call/observation arrows, and the &amp;quot;You&amp;quot; and &amp;quot;The world&amp;quot; boxes. --&amp;gt;&lt;br /&gt;
[[File:Agentic-ai-llm-harness.png|thumb|center|700px|An agent is an LLM plus a harness, connected by tool calls and observations.]]&lt;br /&gt;
&lt;br /&gt;
In one sentence: &amp;#039;&amp;#039;&amp;#039;an agent is an LLM in a loop, with tools, running until the task is done.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== The agent loop ===&lt;br /&gt;
A single request like &amp;quot;What are the extensions of conformal prediction for dependent data?&amp;quot; becomes many turns of the same loop:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Gather context:&amp;#039;&amp;#039;&amp;#039; search for papers, read PDFs, load data.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Take action:&amp;#039;&amp;#039;&amp;#039; analyze, compute, draft.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Verify:&amp;#039;&amp;#039;&amp;#039; cross-check sources and numbers, run the tests.&lt;br /&gt;
# Repeat until the model decides no more tool calls are needed, then hand you a summary and sources to review.&lt;br /&gt;
&lt;br /&gt;
One detail matters a great deal for cost: &amp;#039;&amp;#039;&amp;#039;every trip around the loop re-sends the entire conversation to the model.&amp;#039;&amp;#039;&amp;#039; This is covered in [[#The Cost of Using Agents|The Cost of Using Agents]] below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;The agent loop: one task, many turns&amp;quot; (final overlay), with the gather/act/verify cycle around the LLM, the prompt on the left and &amp;quot;Done&amp;quot; on the right. --&amp;gt;&lt;br /&gt;
[[File:Agentic-ai-agent-loop.png|thumb|center|650px|The agent loop: gather context, act, verify, repeat.]]&lt;br /&gt;
&lt;br /&gt;
=== What can agents do? ===&lt;br /&gt;
Although they are marketed as coding tools, coding agents are general-purpose research assistants that happen to live next to your code.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: #d6eaf3;&amp;quot; | Software&lt;br /&gt;
! style=&amp;quot;background-color: #d4edda;&amp;quot; | Computation and data&lt;br /&gt;
! style=&amp;quot;background-color: #e6dcf0;&amp;quot; | Research writing and reading&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Write code:&amp;#039;&amp;#039;&amp;#039; simulations, samplers, neural estimators&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Debug:&amp;#039;&amp;#039;&amp;#039; read tracebacks, bisect regressions&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Refactor:&amp;#039;&amp;#039;&amp;#039; turn a script into a package, port R to Python and back&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Write tests:&amp;#039;&amp;#039;&amp;#039; unit tests, coverage checks, CI&lt;br /&gt;
|&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Run experiments:&amp;#039;&amp;#039;&amp;#039; launch, monitor, collect results&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Analyze data:&amp;#039;&amp;#039;&amp;#039; EDA, summaries, diagnostic plots&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Make figures:&amp;#039;&amp;#039;&amp;#039; iterate on a plot, including from a screenshot of a figure you like&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Reproduce:&amp;#039;&amp;#039;&amp;#039; re-run a paper&amp;#039;s code from its repository&lt;br /&gt;
|&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Literature:&amp;#039;&amp;#039;&amp;#039; search, summarize, compare methods&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Write LaTeX:&amp;#039;&amp;#039;&amp;#039; fix compile errors, build tables from CSVs&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Review:&amp;#039;&amp;#039;&amp;#039; check a derivation, revise a paper draft&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Admin:&amp;#039;&amp;#039;&amp;#039; issues, emails, documentation, READMEs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AI Coding Agents ==&lt;br /&gt;
&lt;br /&gt;
=== The landscape ===&lt;br /&gt;
Coding agents fall roughly into two groups. They share the same core loop, and differ in harness, model, and pricing. &amp;#039;&amp;#039;&amp;#039;The landscape changes monthly&amp;#039;&amp;#039;&amp;#039;, so treat any list like this as a snapshot.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #f5d5db; color: #7a0b1e; padding: 10px; text-align: left;&amp;quot; | Terminal-native&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #d6eaf3; color: #1d5670; padding: 10px; text-align: left;&amp;quot; | IDE and cloud&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px; border-right: 2px solid white;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Claude Code&amp;#039;&amp;#039;&amp;#039; (Anthropic)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Codex CLI&amp;#039;&amp;#039;&amp;#039; (OpenAI)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Gemini CLI&amp;#039;&amp;#039;&amp;#039; (Google)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Aider&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;OpenCode&amp;#039;&amp;#039;&amp;#039; (open source)&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cursor&amp;#039;&amp;#039;&amp;#039;: an AI-first editor&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GitHub Copilot&amp;#039;&amp;#039;&amp;#039;: agent mode inside VS Code and other editors&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cline&amp;#039;&amp;#039;&amp;#039; and similar editor extensions&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cloud agents&amp;#039;&amp;#039;&amp;#039; (Devin, Jules, Copilot coding agent): work on a remote copy of your repository and hand back a pull request&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Terminal-native agents are a natural fit for statistics research, because so much of our work already happens in a shell: &amp;lt;code&amp;gt;Rscript&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt;, and Slurm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: statbytes_figures/claude_code.png from the slides. --&amp;gt;&lt;br /&gt;
[[File:Claude-code-terminal.png|thumb|center|600px|Claude Code running in a terminal.]]&lt;br /&gt;
&lt;br /&gt;
=== Core features: read, write, execute ===&lt;br /&gt;
Every coding agent is built on three capabilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Read&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;glob&amp;lt;/code&amp;gt;): navigate the repository and find the 3 relevant files out of your 300.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Write&amp;#039;&amp;#039;&amp;#039; (edit, create): make targeted diffs rather than rewriting whole files. You can require approval for each edit.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Execute&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;): run &amp;lt;code&amp;gt;Rscript&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pytest&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, and so on, then &amp;#039;&amp;#039;&amp;#039;read the output&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
The output of each command becomes new context, and the agent iterates until the tests pass. This is the key leap over chat assistants: &amp;#039;&amp;#039;&amp;#039;the agent runs the code and sees what happens.&amp;#039;&amp;#039;&amp;#039; There is no more copy-paste ping-pong between a browser tab and your terminal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;Core features: read, write, execute&amp;quot; (final overlay), showing the three boxes and the loop-back arrow. --&amp;gt;&lt;br /&gt;
[[File:Coding-agent-read-write-execute.png|thumb|center|650px|Read, write, execute, and feed the output back in.]]&lt;br /&gt;
&lt;br /&gt;
=== Features beyond the basics ===&lt;br /&gt;
Modern harnesses add a lot on top of the core loop:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Web search:&amp;#039;&amp;#039;&amp;#039; look up documentation, papers, and error messages.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MCP servers:&amp;#039;&amp;#039;&amp;#039; the [https://modelcontextprotocol.io Model Context Protocol] connects the agent to outside services such as GitHub, Slack, Notion, or Zotero.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Test writing:&amp;#039;&amp;#039;&amp;#039; unit tests, edge cases, and regression tests.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SSH and Slurm:&amp;#039;&amp;#039;&amp;#039; with SSH access configured, the agent can run &amp;lt;code&amp;gt;sbatch&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;squeue&amp;lt;/code&amp;gt; on a cluster and pull results back.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Subagents:&amp;#039;&amp;#039;&amp;#039; parallel workers that each start with a fresh context and report back only a summary.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Multimodal input:&amp;#039;&amp;#039;&amp;#039; screenshots, plots, and PDFs of papers. The agent can also render a plot and &amp;#039;&amp;#039;look at its own output&amp;#039;&amp;#039; to fix overlapping labels before you ever see it.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Memory files:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;CLAUDE.md&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;AGENTS.md&amp;lt;/code&amp;gt; for some other agents) holds your project conventions and is loaded into every session.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Skills and hooks:&amp;#039;&amp;#039;&amp;#039; reusable workflows and automatic actions (see [[#Skills|Skills]] below).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;A wealth of features beyond the basics&amp;quot; (final overlay), the wheel of eight feature boxes around &amp;quot;Coding agent&amp;quot;. --&amp;gt;&lt;br /&gt;
[[File:Coding-agent-features.png|thumb|center|650px|Features modern coding agents provide on top of the core loop.]]&lt;br /&gt;
&lt;br /&gt;
== The Cost of Using Agents ==&lt;br /&gt;
Agents have two costs: &amp;#039;&amp;#039;&amp;#039;tokens&amp;#039;&amp;#039;&amp;#039; (money and usage limits) and &amp;#039;&amp;#039;&amp;#039;your time&amp;#039;&amp;#039;&amp;#039;. They are linked, since a confused agent burns both, but they are not the same thing. A cheap, fast agent can still waste your afternoon.&lt;br /&gt;
&lt;br /&gt;
=== Tokens ===&lt;br /&gt;
Recall that every turn of the loop re-sends the whole conversation. If the context grows by a roughly constant amount each turn, then &amp;#039;&amp;#039;&amp;#039;the context size grows linearly and the total number of tokens processed grows quadratically&amp;#039;&amp;#039;&amp;#039; in the number of turns. Prompt caching lowers the price of re-reading earlier context, but it does nothing about the context window&amp;#039;s hard limit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;The cost of AI, part 1: tokens&amp;quot; (final overlay), with the linear vs. quadratic pgfplots figure and the token-sink boxes. --&amp;gt;&lt;br /&gt;
[[File:Agent-token-cost.png|thumb|center|700px|Context grows linearly, total tokens grow quadratically.]]&lt;br /&gt;
&lt;br /&gt;
The biggest token sinks are:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Long contexts:&amp;#039;&amp;#039;&amp;#039; every turn re-reads the whole history.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dumping big outputs:&amp;#039;&amp;#039;&amp;#039; a 50,000-line log, a full CSV, or &amp;lt;code&amp;gt;print(model)&amp;lt;/code&amp;gt; on a large object, all of which stay in context for every later turn.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;High reasoning effort:&amp;#039;&amp;#039;&amp;#039; thinking tokens are billed too.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Open-ended prompts:&amp;#039;&amp;#039;&amp;#039; the agent explores the whole repository to guess what you meant.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Lost threads:&amp;#039;&amp;#039;&amp;#039; re-explaining everything after the context is compacted, polluted, or gone because you started a new session.&lt;br /&gt;
&lt;br /&gt;
=== Context rot ===&lt;br /&gt;
The context window is the agent&amp;#039;s entire working memory. In a long session it fills up with a system prompt, memory files, and your task, plus a lot of noise: files it read that turned out to be irrelevant, logs and tracebacks, failed attempts, and old tangents. The useful work is often a small slice at the end.&lt;br /&gt;
&lt;br /&gt;
That noise costs tokens on every turn, and it &amp;#039;&amp;#039;&amp;#039;also degrades quality&amp;#039;&amp;#039;&amp;#039;. Models get measurably worse as their context fills with irrelevant material (often called &amp;quot;context rot&amp;quot;). They lose instructions given early in the session, repeat fixes that already failed, and contradict earlier decisions. Eventually the agent hits the context limit and has to compact (summarize) its history, which loses detail.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;Anatomy of a full context window&amp;quot; (final overlay), the colored bar with sys./mem./task/files/logs/tangent/work segments and the &amp;quot;context rot&amp;quot; box. --&amp;gt;&lt;br /&gt;
[[File:Agent-context-window.png|thumb|center|700px|A full context window is mostly noise.]]&lt;br /&gt;
&lt;br /&gt;
=== Your time ===&lt;br /&gt;
Where does the wall-clock time of a &amp;quot;2-hour&amp;quot; agent session actually go? In an inefficient session, most of it goes to clarifying, waiting, back-and-forth, and fixing things. In an efficient one, you spend a few minutes on a spec and a plan, the agent does the work in the background, and you spend a few minutes reviewing the diff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;The cost of AI, part 2: your time&amp;quot; (final overlay), the inefficient vs. efficient timeline bars and the four time-sink boxes. --&amp;gt;&lt;br /&gt;
[[File:Agent-time-cost.png|thumb|center|700px|Where the time goes in an inefficient vs. an efficient session.]]&lt;br /&gt;
&lt;br /&gt;
The main time sinks are:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Wrong direction:&amp;#039;&amp;#039;&amp;#039; the agent confidently builds the wrong thing, and you notice 30 minutes later.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Opaque code:&amp;#039;&amp;#039;&amp;#039; you end up debugging 600 lines you didn&amp;#039;t write and don&amp;#039;t understand.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Memory loss:&amp;#039;&amp;#039;&amp;#039; sessions don&amp;#039;t share context, so threads get lost and rebuilt repeatedly.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ambiguity ping-pong:&amp;#039;&amp;#039;&amp;#039; a vague ask produces a vague result, so you ask again.&lt;br /&gt;
&lt;br /&gt;
== The Role of the Researcher ==&lt;br /&gt;
&lt;br /&gt;
=== A common misconception ===&lt;br /&gt;
Because agents &amp;#039;&amp;#039;talk&amp;#039;&amp;#039; like humans, it is tempting to assume they &amp;#039;&amp;#039;think&amp;#039;&amp;#039; like humans, and to treat them as a colleague who shares your intuitions and background. This leads to underspecified requests and surprising results.&lt;br /&gt;
&lt;br /&gt;
A more useful mental model: &amp;#039;&amp;#039;&amp;#039;we have found a way to write computer programs in natural language.&amp;#039;&amp;#039;&amp;#039; Your prompt is source code. Like any program, it does what you &amp;#039;&amp;#039;wrote&amp;#039;&amp;#039;, not what you &amp;#039;&amp;#039;meant&amp;#039;&amp;#039;. Each step from assembly to C to Python/R to English has made programming higher-level and easier to write, but every step is still programming.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;Effective usage: a misconception&amp;quot; (final overlay), the misconception/reality boxes and the Assembly → C → Python/R → English ladder. --&amp;gt;&lt;br /&gt;
[[File:Agent-misconception.png|thumb|center|650px|Prompts are programs written in English.]]&lt;br /&gt;
&lt;br /&gt;
=== You still need to understand code ===&lt;br /&gt;
Using AI for statistics research still requires knowing statistics, or you can&amp;#039;t tell a valid result from a confident hallucination. In the same way, using AI for code still requires knowing how code works, or you can&amp;#039;t tell a good design from 3,000 lines of spaghetti.&lt;br /&gt;
&lt;br /&gt;
You don&amp;#039;t need to write every line yourself, but you do need to know enough to:&lt;br /&gt;
* specify the architecture you want,&lt;br /&gt;
* read a diff,&lt;br /&gt;
* spot a silent bug, and&lt;br /&gt;
* say &amp;quot;no, do it this way.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: statbytes_figures/woops.png from the slides (&amp;quot;Don&amp;#039;t be that guy&amp;quot;). --&amp;gt;&lt;br /&gt;
[[File:Agent-dont-be-that-guy.png|thumb|center|450px|What happens when nobody reviews the agent&amp;#039;s work.]]&lt;br /&gt;
&lt;br /&gt;
=== Agentic AI is an Iron Man suit ===&lt;br /&gt;
A good way to think about the division of labor is an Iron Man suit:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #f5d5db; color: #7a0b1e; padding: 10px; text-align: left;&amp;quot; | The pilot (you)&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #d6eaf3; color: #1d5670; padding: 10px; text-align: left;&amp;quot; | The suit (the agent)&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px; border-right: 2px solid white;&amp;quot; |&lt;br /&gt;
* Where to go&lt;br /&gt;
* What &amp;quot;done&amp;quot; means&lt;br /&gt;
* What is &amp;#039;&amp;#039;correct&amp;#039;&amp;#039;&lt;br /&gt;
* When to abort&lt;br /&gt;
* Taste and judgment&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* Speed&lt;br /&gt;
* Stamina (it works 24/7)&lt;br /&gt;
* Breadth of knowledge&lt;br /&gt;
* Boilerplate at scale&lt;br /&gt;
* Tireless retries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A great suit makes a skilled pilot &amp;#039;&amp;#039;&amp;#039;superhuman&amp;#039;&amp;#039;&amp;#039;. It makes an unskilled pilot crash &amp;#039;&amp;#039;&amp;#039;faster&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;Agentic AI is an Iron Man suit&amp;quot; (final overlay). --&amp;gt;&lt;br /&gt;
[[File:Agent-iron-man-suit.png|thumb|center|650px|You are the pilot; the agent is the suit.]]&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
=== Saving tokens ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 22%; background-color: #f8d7da; color: #721c24;&amp;quot; | Problem&lt;br /&gt;
! style=&amp;quot;background-color: #d4edda; color: #155724;&amp;quot; | Fix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Long contexts&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;One task per session.&amp;#039;&amp;#039;&amp;#039; Use &amp;lt;code&amp;gt;/clear&amp;lt;/code&amp;gt; between tasks, and &amp;lt;code&amp;gt;/compact&amp;lt;/code&amp;gt; with a note on what to keep when you need to continue. A fresh context is cheaper &amp;#039;&amp;#039;and&amp;#039;&amp;#039; smarter.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Big outputs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Keep irrelevant data out of the context.&amp;#039;&amp;#039;&amp;#039; Use &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;tail&amp;lt;/code&amp;gt; on logs, summarize data with &amp;lt;code&amp;gt;head()&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;str()&amp;lt;/code&amp;gt;, and write results to files instead of printing them. Delegate noisy searches to a &amp;#039;&amp;#039;&amp;#039;subagent&amp;#039;&amp;#039;&amp;#039; that returns only a summary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Reasoning effort&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Match effort to the task:&amp;#039;&amp;#039;&amp;#039; low for renames and typos, high for design decisions and nasty bugs. Use a smaller, faster model for grunt work.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Needless exploring&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Say where to look.&amp;#039;&amp;#039;&amp;#039; Point at files (&amp;lt;code&amp;gt;@R/sampler.R&amp;lt;/code&amp;gt;) and name functions. Don&amp;#039;t make the agent search for things you already know.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Going off track&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Interrupt early&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;Esc&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Esc Esc&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/rewind&amp;lt;/code&amp;gt; rolls back to a checkpoint. Restarting from a good state beats a long correction thread.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Lost threads&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Persist state outside the chat:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;CLAUDE.md&amp;lt;/code&amp;gt; for conventions, a &amp;lt;code&amp;gt;PLAN.md&amp;lt;/code&amp;gt; checklist for multi-session work, and GitHub issues or markdown files for the backlog.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Saving time ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 22%; background-color: #f8d7da; color: #721c24;&amp;quot; | Problem&lt;br /&gt;
! style=&amp;quot;background-color: #d4edda; color: #155724;&amp;quot; | Fix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Unclear goal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Say what done looks like:&amp;#039;&amp;#039;&amp;#039; the goal, the constraints, and a concrete check (&amp;quot;done when the tests pass and the estimates match &amp;lt;code&amp;gt;lm()&amp;lt;/code&amp;gt;&amp;quot;). &amp;#039;&amp;#039;&amp;#039;Tell it to ask follow-up questions&amp;#039;&amp;#039;&amp;#039; before starting.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Wrong direction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Plan first.&amp;#039;&amp;#039;&amp;#039; Use plan mode, or say &amp;quot;propose a plan, don&amp;#039;t edit yet.&amp;quot; Reviewing a 10-line plan beats reviewing a 600-line diff.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Opaque code&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Take small steps&amp;#039;&amp;#039;&amp;#039; and commit each one. Ask for &amp;#039;&amp;#039;&amp;#039;tests first&amp;#039;&amp;#039;&amp;#039;, then the implementation. Ask the agent to explain any change you don&amp;#039;t follow.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Repeating yourself&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Package recurring workflows&amp;#039;&amp;#039;&amp;#039; as skills or custom slash commands (e.g. &amp;lt;code&amp;gt;/simstudy&amp;lt;/code&amp;gt;; see [[#Skills|Skills]]). Use hooks to run formatters or linters automatically after edits.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Babysitting&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Use auto mode.&amp;#039;&amp;#039;&amp;#039; Allow-list safe commands (&amp;lt;code&amp;gt;pytest&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Rscript&amp;lt;/code&amp;gt;). Run in a sandbox or container if you want to give the agent more autonomy.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Waiting&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Run it in the background&amp;#039;&amp;#039;&amp;#039; (e.g. in &amp;lt;code&amp;gt;tmux&amp;lt;/code&amp;gt;) and do other work. Run parallel sessions on separate &amp;lt;code&amp;gt;git worktree&amp;lt;/code&amp;gt;s for independent tasks.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Prompts as specs ===&lt;br /&gt;
Since prompts are programs, write them like specifications. Compare:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #C0392B; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vague:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; make the simulation faster&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The agent reads 40 files, rewrites the random number generator, parallelizes the wrong loop, and breaks reproducibility. An hour later your session usage is gone and the result is unusable.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #2E8B57; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Structured:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; Goal: speed up simulate_paths() in @src/sim.py; it is 90% of runtime.&lt;br /&gt;
  Context: profile output in prof.txt. The inner loop over t is pure Python.&lt;br /&gt;
  Constraints: keep the seeded RNG stream identical; no new dependencies&lt;br /&gt;
  beyond numba.&lt;br /&gt;
  Done when: tests/test_sim.py passes and bench.py shows &amp;gt;=5x speedup.&lt;br /&gt;
  First: propose a plan and ask me any questions before editing.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A good prompt has five parts: the &amp;#039;&amp;#039;&amp;#039;goal&amp;#039;&amp;#039;&amp;#039;, the relevant &amp;#039;&amp;#039;&amp;#039;context&amp;#039;&amp;#039;&amp;#039; (and where to find it), the &amp;#039;&amp;#039;&amp;#039;constraints&amp;#039;&amp;#039;&amp;#039;, a checkable &amp;#039;&amp;#039;&amp;#039;definition of done&amp;#039;&amp;#039;&amp;#039;, and an instruction to &amp;#039;&amp;#039;&amp;#039;plan and ask questions first&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;Prompts as specs: before and after&amp;quot; (final overlay). --&amp;gt;&lt;br /&gt;
[[File:Agent-prompt-before-after.png|thumb|center|700px|A vague prompt vs. a structured one.]]&lt;br /&gt;
&lt;br /&gt;
== Skills ==&lt;br /&gt;
&lt;br /&gt;
=== The problem skills solve ===&lt;br /&gt;
After a few weeks with an agent, you will notice that you keep typing the same instructions. Every simulation study needs the same seeding conventions, the same output format, and the same summary table. Every figure should use the same theme and fonts. Every Slurm script needs the same partition and module setup. You have two obvious options, and both are bad:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Retype the instructions every time.&amp;#039;&amp;#039;&amp;#039; This is tedious, and you will forget something, so results drift from one session to the next.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Put everything in &amp;lt;code&amp;gt;CLAUDE.md&amp;lt;/code&amp;gt;.&amp;#039;&amp;#039;&amp;#039; The memory file is loaded into &amp;#039;&amp;#039;every&amp;#039;&amp;#039; session, so a long list of procedures costs tokens on every turn of every task, including the ones that have nothing to do with simulation studies. It also adds to the noise that causes context rot.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Skills&amp;#039;&amp;#039;&amp;#039; are the middle ground: packaged, reusable instructions that are &amp;#039;&amp;#039;&amp;#039;available in every session but loaded only when needed&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== How skills work ===&lt;br /&gt;
A skill is a folder containing a &amp;lt;code&amp;gt;SKILL.md&amp;lt;/code&amp;gt; file, optionally with supporting files such as templates, reference documents, or scripts. In Claude Code, project skills live in &amp;lt;code&amp;gt;.claude/skills/&amp;amp;lt;skill-name&amp;amp;gt;/&amp;lt;/code&amp;gt; inside the repository (so they are shared with everyone who clones it), and personal skills live in &amp;lt;code&amp;gt;~/.claude/skills/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;SKILL.md&amp;lt;/code&amp;gt; file starts with a short header giving the skill&amp;#039;s name and a description of when to use it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.claude/skills/simstudy/&lt;br /&gt;
├── SKILL.md&lt;br /&gt;
├── templates/&lt;br /&gt;
│   ├── run_sim.R&lt;br /&gt;
│   └── simstudy.slurm&lt;br /&gt;
└── scripts/&lt;br /&gt;
    └── summarize_results.R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
name: simstudy&lt;br /&gt;
description: Set up, run, and summarize a Monte Carlo simulation study.&lt;br /&gt;
  Use when the user asks to design or run a simulation study, compare&lt;br /&gt;
  estimators by simulation, or summarize simulation results.&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# Simulation studies&lt;br /&gt;
&lt;br /&gt;
1. Before writing code, confirm with the user: the data-generating&lt;br /&gt;
   process, the estimators being compared, the parameter grid, and the&lt;br /&gt;
   number of replications.&lt;br /&gt;
2. Copy templates/run_sim.R. Each replication takes (scenario, rep_id)&lt;br /&gt;
   and seeds with set.seed(1e5 * scenario + rep_id).&lt;br /&gt;
3. Write one .rds file per scenario to results/raw/. Never print raw&lt;br /&gt;
   results to the console.&lt;br /&gt;
4. Run a 10-replication smoke test locally before submitting anything.&lt;br /&gt;
5. Submit with templates/simstudy.slurm as an array job, one task&lt;br /&gt;
   per scenario.&lt;br /&gt;
6. Summarize with scripts/summarize_results.R: bias, RMSE, coverage,&lt;br /&gt;
   and Monte Carlo standard errors for each.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The key mechanism is &amp;#039;&amp;#039;&amp;#039;progressive disclosure&amp;#039;&amp;#039;&amp;#039;. At the start of a session, the agent sees only the name and description of each skill, which costs a few dozen tokens apiece. When a request matches a description, the agent reads the full &amp;lt;code&amp;gt;SKILL.md&amp;lt;/code&amp;gt;, and it opens the templates or runs the scripts only when it reaches the step that needs them. You can have dozens of skills installed at almost no standing cost. You can also invoke a skill directly by name, for example by typing &amp;lt;code&amp;gt;/simstudy&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Because skills can bundle scripts, they also let the agent &amp;#039;&amp;#039;run&amp;#039;&amp;#039; a deterministic tool instead of &amp;#039;&amp;#039;regenerating&amp;#039;&amp;#039; its logic each time. A summary script that always computes Monte Carlo standard errors the same way is more reliable than asking the model to rewrite that code in every session, and it saves tokens too.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: A Claude Code session where the agent picks up a skill automatically (e.g. a request to &amp;quot;run a simulation study comparing ...&amp;quot; with the agent reading .claude/skills/simstudy/SKILL.md). --&amp;gt;&lt;br /&gt;
[[File:Claude-code-skill-invocation.png|thumb|center|600px|The agent loading a skill when a request matches its description.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Skills, CLAUDE.md, and hooks:&amp;#039;&amp;#039;&amp;#039; Use &amp;lt;code&amp;gt;CLAUDE.md&amp;lt;/code&amp;gt; for short facts that are true in every session (&amp;quot;this project uses renv&amp;quot;, &amp;quot;never run heavy jobs on the login node&amp;quot;). Use a &amp;#039;&amp;#039;&amp;#039;skill&amp;#039;&amp;#039;&amp;#039; for a procedure that is needed only for certain tasks. Use a &amp;#039;&amp;#039;&amp;#039;hook&amp;#039;&amp;#039;&amp;#039; for something that must &amp;#039;&amp;#039;always&amp;#039;&amp;#039; happen after a given action, such as running &amp;lt;code&amp;gt;styler&amp;lt;/code&amp;gt; after every edit to an R file. Hooks are enforced by the harness, while skills and memory files are instructions the model may or may not follow perfectly.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example skills for statistics research ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 20%;&amp;quot; | Skill&lt;br /&gt;
! What it packages&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Simulation study&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| The data-generating process / estimator / replication layout, seeding conventions, file outputs, Slurm array template, and a standard summary of bias, RMSE, coverage, and Monte Carlo error.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Paper figures&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Your plotting theme, font sizes matched to the paper&amp;#039;s column width, colorblind-safe palette, and export settings (vector PDF, correct dimensions). Can include a script that checks for overlapping labels.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;LaTeX tables&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Turning a CSV of results into a &amp;lt;code&amp;gt;booktabs&amp;lt;/code&amp;gt; table with consistent rounding, bolded best entries, and standard errors in parentheses.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Cluster jobs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| The department cluster&amp;#039;s partitions, module loads, resource defaults, and etiquette rules, plus how to check on and resubmit failed array tasks.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;R package check&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Running &amp;lt;code&amp;gt;devtools::document()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;devtools::test()&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;R CMD check&amp;lt;/code&amp;gt;, and fixing NOTEs and WARNINGs in a fixed order.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Reproducibility audit&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| A checklist for a project before submission or code release: pinned environments (&amp;lt;code&amp;gt;renv&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;uv&amp;lt;/code&amp;gt;), seeds, hard-coded paths, and whether a clean clone reproduces every figure.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Paper reading notes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| A fixed template for summarizing a paper: setting, assumptions, main result, proof technique, and how it relates to your work. Useful for building a consistent literature file.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Referee report&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Your structure for reviewing a manuscript, from summary through major and minor comments, with a reminder to check derivations and simulation designs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tips for writing skills ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;The description is what triggers the skill.&amp;#039;&amp;#039;&amp;#039; Write it as &amp;quot;what this does, and when to use it&amp;quot;, using the words you would actually type in a request. A skill with a vague description will never be picked up.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Keep &amp;lt;code&amp;gt;SKILL.md&amp;lt;/code&amp;gt; short.&amp;#039;&amp;#039;&amp;#039; Put long reference material in separate files and tell the agent when to open them.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Write the skill after doing the task by hand once.&amp;#039;&amp;#039;&amp;#039; Do the workflow with the agent interactively, then ask it to turn the session into a skill and edit the result.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Commit project skills to the repository&amp;#039;&amp;#039;&amp;#039; so collaborators (and their agents) follow the same conventions.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Only install skills from sources you trust.&amp;#039;&amp;#039;&amp;#039; A skill can contain scripts that the agent will run, so read third-party skills before installing them.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Check your agent&amp;#039;s documentation.&amp;#039;&amp;#039;&amp;#039; The skill format has been adopted by several coding agents besides Claude Code, but locations and details vary between tools and change over time.&lt;br /&gt;
&lt;br /&gt;
== Running Agents on a Remote Server ==&lt;br /&gt;
Agents are most useful when they can run unattended, so it pays to run them somewhere that stays on. A simple setup is to run the agent inside a &amp;lt;code&amp;gt;tmux&amp;lt;/code&amp;gt; session on an always-on department server, with your laptop (or phone) serving only as a window into it:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;tmux:&amp;#039;&amp;#039;&amp;#039; start a session with &amp;lt;code&amp;gt;tmux new -s claude&amp;lt;/code&amp;gt;, detach with &amp;lt;code&amp;gt;Ctrl-b d&amp;lt;/code&amp;gt;, and reattach from anywhere with &amp;lt;code&amp;gt;tmux attach -t claude&amp;lt;/code&amp;gt;. The agent keeps working when you close your laptop.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SSH:&amp;#039;&amp;#039;&amp;#039; set up passwordless key-based authentication and put host details in &amp;lt;code&amp;gt;~/.ssh/config&amp;lt;/code&amp;gt;, so the agent can reach the cluster without ever seeing a password prompt.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Shared server etiquette:&amp;#039;&amp;#039;&amp;#039; the agent edits code and submits jobs; the cluster does the computing. Never let an agent run heavy computations on a shared login or interactive server.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Git is your undo button:&amp;#039;&amp;#039;&amp;#039; work on branches, protect &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;, and review every change before it is merged.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;A concrete workflow: my setup&amp;quot; (laptop → dept. server with tmux + Claude Code + repo clone → GitHub and HPC cluster). --&amp;gt;&lt;br /&gt;
[[File:Agent-remote-server-setup.png|thumb|center|700px|Running the agent on an always-on server, with access to GitHub and the cluster.]]&lt;br /&gt;
&lt;br /&gt;
For a complete end-to-end workflow built on this setup, in which tasks are written as GitHub issues and the agent plans, implements, runs experiments on the cluster, and opens a pull request for review, see [[Claude Code GitHub Issue Workflow]]. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub issue workflow article --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What Goes in CLAUDE.md ==&lt;br /&gt;
&amp;lt;code&amp;gt;CLAUDE.md&amp;lt;/code&amp;gt; sits at the root of the repository and is read at the start of every session. Keep it short, specific, and limited to things that are true for every task. An example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Project: statbytes-agentic-example&lt;br /&gt;
&lt;br /&gt;
## Cluster&lt;br /&gt;
- ssh: user@cluster (keys already set up)&lt;br /&gt;
- The cluster runs Slurm. Relevant partitions: ...&lt;br /&gt;
- Never run heavy jobs on the department server.&lt;br /&gt;
- Do not commit Slurm scripts.&lt;br /&gt;
&lt;br /&gt;
## Conventions&lt;br /&gt;
- One branch per task.&lt;br /&gt;
- Never force-push; never touch main.&lt;br /&gt;
- Don&amp;#039;t guess; ask clarifying questions.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Things that belong elsewhere: long procedures (make them [[#Skills|skills]]), anything secret such as passwords or tokens (never put these in the repository), and task-specific plans (put them in a &amp;lt;code&amp;gt;PLAN.md&amp;lt;/code&amp;gt; or an issue).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Slide &amp;quot;A concrete workflow: making it work&amp;quot; (left column, the CLAUDE.md terminal example). --&amp;gt;&lt;br /&gt;
[[File:Claude-md-example.png|thumb|center|450px|An example CLAUDE.md.]]&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: #f8d7da; color: #721c24; padding: 10px; text-align: left;&amp;quot; | Things to Watch Out For&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Merging code you haven&amp;#039;t read:&amp;#039;&amp;#039;&amp;#039; The agent&amp;#039;s code is your code once it is in your paper. Review every diff, and ask for explanations of anything you don&amp;#039;t follow.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;One endless session:&amp;#039;&amp;#039;&amp;#039; Long sessions get more expensive per turn &amp;#039;&amp;#039;and&amp;#039;&amp;#039; worse in quality. Start fresh for each task.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Printing everything:&amp;#039;&amp;#039;&amp;#039; Large outputs stay in context for the rest of the session. Write to files and summarize.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vague requests:&amp;#039;&amp;#039;&amp;#039; &amp;quot;Make it better&amp;quot; gets you something different, not necessarily better. Give a goal, constraints, and a definition of done.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Letting it run unchecked on shared resources:&amp;#039;&amp;#039;&amp;#039; Allow-list commands deliberately, and keep heavy computation on the cluster&amp;#039;s compute nodes.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Giving it more access than it needs:&amp;#039;&amp;#039;&amp;#039; Scope tokens (e.g. GitHub) to a single repository, keep secrets out of the repository, and protect your &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; branch.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Bloated memory files:&amp;#039;&amp;#039;&amp;#039; Every line of &amp;lt;code&amp;gt;CLAUDE.md&amp;lt;/code&amp;gt; is paid for on every turn. Move procedures into skills.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; The tools change quickly, but the principles here don&amp;#039;t: keep the context small and focused, write prompts like specifications, plan before building, and stay the pilot. For a full worked example, see [[Claude Code GitHub Issue Workflow]] and the [https://github.com/Alex-Shen-CMU/statbytes-agentic-example demo repository]. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub issue workflow article --&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Thu, 29 Oct 2026 04:55:34 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:AI_Agents:_A_Primer</comments>
		</item>
		<item>
			<title>Docker Sandboxes for AI Agents</title>
			<link>https://info.stat.cmu.edu/index.php?title=Docker_Sandboxes_for_AI_Agents&amp;diff=1011&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Docker_Sandboxes_for_AI_Agents&amp;diff=1011&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt; &lt;a href=&quot;/index.php?title=Category:AI_Tools&quot; title=&quot;Category:AI Tools&quot;&gt;Category:AI Tools&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:Containers_and_Virtual_Environments&quot; title=&quot;Category:Containers and Virtual Environments&quot;&gt;Category:Containers and Virtual Environments&lt;/a&gt;  &amp;#039;&amp;#039;&amp;#039;[https://docs.docker.com/ai/sandboxes/ Docker Sandboxes]&amp;#039;&amp;#039;&amp;#039; (the &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; command-line tool) runs AI coding agents such as Claude Code, Codex, Copilot, and Gemini inside disposable, isolated micro virtual machines (&amp;#039;&amp;#039;&amp;#039;microVMs&amp;#039;&amp;#039;&amp;#039;). Inside the sandbox the agent has a full Linux machine to do whateve...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;br /&gt;
[[Category:AI Tools]]&lt;br /&gt;
[[Category:Containers and Virtual Environments]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[https://docs.docker.com/ai/sandboxes/ Docker Sandboxes]&amp;#039;&amp;#039;&amp;#039; (the &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; command-line tool) runs AI coding agents such as Claude Code, Codex, Copilot, and Gemini inside disposable, isolated micro virtual machines (&amp;#039;&amp;#039;&amp;#039;microVMs&amp;#039;&amp;#039;&amp;#039;). Inside the sandbox the agent has a full Linux machine to do whatever it wants with. Your own computer only exposes the project folder you hand it and the network destinations you allow.&lt;br /&gt;
&lt;br /&gt;
The point is to give an agent real autonomy without handing it your whole computer. It can install packages, run builds, and run tests without asking permission at every step, and it still can&amp;#039;t reach your home directory, SSH keys, or cloud credentials.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Before you start&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
This article covers what Docker Sandboxes are and how to install them. For day-to-day use, see Docker&amp;#039;s [https://docs.docker.com/ai/sandboxes/get-started/ getting started guide] and [https://docs.docker.com/ai/sandboxes/usage/ usage guide]. &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; is new and changes quickly between releases, so if a command here doesn&amp;#039;t match what you see, trust the [https://docs.docker.com/ai/sandboxes/install/ official install page] and the [https://docs.docker.com/ai/sandboxes/release-notes/ release notes].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overview: Docker Sandboxes for AI Agents ==&lt;br /&gt;
&lt;br /&gt;
=== How it works ===&lt;br /&gt;
When you run &amp;lt;code&amp;gt;sbx run claude&amp;lt;/code&amp;gt; from a project folder, &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; does the following:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Boots a microVM&amp;#039;&amp;#039;&amp;#039; with its own Linux kernel. It uses the operating system&amp;#039;s built-in hypervisor: Hypervisor.framework on macOS, Windows Hypervisor Platform on Windows, and KVM on Linux.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mounts your current folder&amp;#039;&amp;#039;&amp;#039; into the VM as the workspace. This folder is the only part of your machine the agent can see.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Starts a private Docker daemon&amp;#039;&amp;#039;&amp;#039; inside the VM, so the agent can build images and run containers without touching yours.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Filters outbound network traffic&amp;#039;&amp;#039;&amp;#039; through a policy you choose. The presets are &amp;#039;&amp;#039;Open&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Balanced&amp;#039;&amp;#039; (deny by default, with common development sites allowed), and &amp;#039;&amp;#039;Locked Down&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Handles credentials from the host&amp;#039;&amp;#039;&amp;#039;. For example, Claude Code&amp;#039;s login token stays on your machine rather than being stored in the sandbox. See [https://docs.docker.com/ai/sandboxes/configuration/credentials/ Credentials].&lt;br /&gt;
&lt;br /&gt;
Sandboxes persist after the agent exits. You can stop and resume them, and you delete them when you&amp;#039;re done. Everything the agent installed inside the sandbox is discarded at that point, and your project files are left alone. For the details, see [https://docs.docker.com/ai/sandboxes/architecture/ Architecture] and [https://docs.docker.com/ai/sandboxes/security/isolation/ Isolation layers].&lt;br /&gt;
&lt;br /&gt;
=== How it compares ===&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 16%; background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;width: 28%; background-color: #f8d7da; color: #721c24; padding: 10px; text-align: left;&amp;quot; | Agent run directly on your machine&lt;br /&gt;
! style=&amp;quot;width: 28%; background-color: #fff3cd; color: #856404; padding: 10px; text-align: left;&amp;quot; | Agent in a regular Docker container&lt;br /&gt;
! style=&amp;quot;width: 28%; background-color: #d4edda; color: #155724; padding: 10px; text-align: left;&amp;quot; | Agent in a Docker Sandbox&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Isolation boundary&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | None. The agent runs as &amp;#039;&amp;#039;you&amp;#039;&amp;#039;.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Linux namespaces. All containers share one kernel, so escaping the container means reaching the host (or Docker Desktop&amp;#039;s VM).&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | A separate VM with its own kernel for each sandbox.&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #ffffff;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Files it can touch&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Everything your account can read or write, including other repos, &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;~/.aws&amp;lt;/code&amp;gt;, and browser profiles.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Whatever you bind-mount. It&amp;#039;s easy to mount too much.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Only the workspace folder.&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Network&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Unrestricted.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Unrestricted by default. Egress filtering is your problem.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Policy-controlled, with presets and per-host allow and deny rules.&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #ffffff;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Running Docker itself&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Uses your Docker daemon.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Requires mounting the host&amp;#039;s Docker socket, which is effectively root on the host.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | Uses its own daemon inside the VM. Nothing is shared with the host.&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Setup&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | None.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | You write and maintain the Dockerfile, mounts, and agent install.&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | One command. The common agents come preinstalled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Compared with running an agent directly on your machine:&amp;#039;&amp;#039;&amp;#039; coding agents protect you mostly by asking permission before running commands. After the fiftieth prompt, most people either click &amp;quot;approve&amp;quot; without reading or turn the prompts off entirely. Inside a sandbox, turning prompts off is much less dangerous. A bad command, a hallucinated &amp;lt;code&amp;gt;rm -rf&amp;lt;/code&amp;gt;, or a prompt injection hidden in a README or web page can only reach the workspace and the network hosts you allowed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Compared with plain Docker:&amp;#039;&amp;#039;&amp;#039; you &amp;#039;&amp;#039;can&amp;#039;&amp;#039; build your own agent container. To make it safe, though, you have to solve the problems Sandboxes already handle. You need a kernel boundary rather than a shared kernel, outbound filtering, a way to keep API keys out of the container, and a way for the agent to use Docker without mounting the host socket. Sandboxes also don&amp;#039;t require Docker Desktop. You may see a &amp;lt;code&amp;gt;docker sandbox&amp;lt;/code&amp;gt; command that ships with Docker Desktop. This article uses the standalone &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; CLI instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8d7da; border-left: 5px solid #721c24; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning: What a sandbox does &amp;#039;&amp;#039;not&amp;#039;&amp;#039; protect&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Your workspace.&amp;#039;&amp;#039;&amp;#039; By default the project folder is mounted read-write, so the agent can still delete or break files in it. Commit before you start, or use [https://docs.docker.com/ai/sandboxes/usage/ clone mode] to give the agent a private copy.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;What the agent sends to the model.&amp;#039;&amp;#039;&amp;#039; The sandbox limits what the agent can &amp;#039;&amp;#039;touch&amp;#039;&amp;#039;. It does not limit what gets sent to the model provider&amp;#039;s API as context. Don&amp;#039;t put data you aren&amp;#039;t permitted to share with a third party (for example, restricted or IRB-protected data) in the workspace.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hosts you allow.&amp;#039;&amp;#039;&amp;#039; The Open policy, or broad allow rules, can still be used to move data out of the sandbox. Tokens you give the agent, such as a GitHub token, can be used for anything they&amp;#039;re scoped for.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://docs.docker.com/ai/sandboxes/security/defaults/ Security defaults] for exactly what is and isn&amp;#039;t allowed out of the box.&lt;br /&gt;
&lt;br /&gt;
== Installing on Windows ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Requirements:&amp;#039;&amp;#039;&amp;#039; Windows 11 on a 64-bit Intel or AMD processor (Windows on Arm is not supported), hardware virtualization turned on, and administrator rights &amp;#039;&amp;#039;&amp;#039;once&amp;#039;&amp;#039;&amp;#039; to enable Windows Hypervisor Platform. Run all commands in PowerShell. Steps marked &amp;#039;&amp;#039;&amp;#039;(Administrator)&amp;#039;&amp;#039;&amp;#039; need an elevated prompt: right-click PowerShell and choose &amp;#039;&amp;#039;Run as administrator&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Check your system ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Should print &amp;quot;Microsoft Windows 11 ...&amp;quot;&lt;br /&gt;
(Get-CimInstance Win32_OperatingSystem).Caption&lt;br /&gt;
&lt;br /&gt;
# Should print AMD64&lt;br /&gt;
$env:PROCESSOR_ARCHITECTURE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, open &amp;#039;&amp;#039;&amp;#039;Task Manager → Performance → CPU&amp;#039;&amp;#039;&amp;#039; and check that it shows &amp;#039;&amp;#039;&amp;#039;Virtualization: Enabled&amp;#039;&amp;#039;&amp;#039;. If it shows Disabled, turn on Intel VT-x or AMD-V (SVM) in your BIOS/UEFI settings. Microsoft&amp;#039;s guide covers this: [https://support.microsoft.com/en-us/windows/enable-virtualization-on-windows-c5578302-6e43-4b4b-a449-8ced115f58e1 Enable virtualization on Windows].&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Enable Windows Hypervisor Platform (Administrator) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
Enable-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform -All&lt;br /&gt;
Restart-Computer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After rebooting, check that the feature is on. It should report &amp;lt;code&amp;gt;Enabled&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
(Get-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform).State&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;re on a department-managed laptop without admin rights, this is the one step you&amp;#039;ll need IT for.&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Install sbx ===&lt;br /&gt;
In a &amp;#039;&amp;#039;&amp;#039;regular&amp;#039;&amp;#039;&amp;#039; (non-admin) PowerShell window:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
winget install -h Docker.sbx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This installs &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; for your user only, in &amp;lt;code&amp;gt;%LOCALAPPDATA%\DockerSandboxes&amp;lt;/code&amp;gt;, and adds it to your user &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;. &amp;#039;&amp;#039;&amp;#039;Close and reopen PowerShell&amp;#039;&amp;#039;&amp;#039;, then confirm that it works:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
sbx version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you get &amp;lt;code&amp;gt;sbx is not recognized&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; change hasn&amp;#039;t been picked up yet. Open a new window, or sign out and back in. You can confirm the binary exists with &amp;lt;code&amp;gt;Test-Path &amp;quot;$env:LOCALAPPDATA\DockerSandboxes\bin\sbx.exe&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To install for every user on a shared machine, use the machine-wide MSI described on the [https://docs.docker.com/ai/sandboxes/install/ install page].&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Sign in ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
sbx login&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This opens a browser so you can sign in with a Docker account. If you don&amp;#039;t have one, create one at [https://hub.docker.com/signup Docker Hub]. The [https://docs.docker.com/ai/sandboxes/faq/ FAQ] explains why sign-in is required.&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Run your first sandbox ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
cd $HOME\path\to\your-project&lt;br /&gt;
git status        # commit or stash anything you care about first&lt;br /&gt;
sbx run claude&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first time you run a sandbox, &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; asks you to choose a default network policy. &amp;#039;&amp;#039;&amp;#039;Balanced&amp;#039;&amp;#039;&amp;#039; is a sensible starting point. The first run also takes a minute while the agent image downloads. For Claude Code with a Claude subscription, type &amp;lt;code&amp;gt;/login&amp;lt;/code&amp;gt; inside the sandbox. For other agents or API keys, see the [https://docs.docker.com/ai/sandboxes/agents/ agent pages].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Updating later:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;winget upgrade Docker.sbx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on macOS ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Requirements:&amp;#039;&amp;#039;&amp;#039; a Mac with Apple silicon (M1 or later) running macOS 14 Sonoma or later. Intel Macs are not supported. You also need [https://brew.sh Homebrew]. Run all commands in Terminal.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Check your system ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uname -m                  # should print arm64&lt;br /&gt;
sw_vers -productVersion   # should be 14.0 or higher&lt;br /&gt;
brew --version            # if this fails, install Homebrew from https://brew.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Install sbx ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew trust docker/tap&lt;br /&gt;
brew install docker/tap/sbx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first command marks Docker&amp;#039;s Homebrew tap as trusted. If Homebrew reports &amp;lt;code&amp;gt;brew trust&amp;lt;/code&amp;gt; as an unknown command, run &amp;lt;code&amp;gt;brew update&amp;lt;/code&amp;gt; and try again.&lt;br /&gt;
&lt;br /&gt;
Confirm the install:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sbx version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Sign in ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sbx login&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This opens a browser so you can sign in with a Docker account. If you don&amp;#039;t have one, create one at [https://hub.docker.com/signup Docker Hub]. The [https://docs.docker.com/ai/sandboxes/faq/ FAQ] explains why sign-in is required.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Run your first sandbox ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/path/to/your-project&lt;br /&gt;
git status        # commit or stash anything you care about first&lt;br /&gt;
sbx run claude&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first time you run a sandbox, &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; asks you to choose a default network policy. &amp;#039;&amp;#039;&amp;#039;Balanced&amp;#039;&amp;#039;&amp;#039; is a sensible starting point. For Claude Code with a Claude subscription, type &amp;lt;code&amp;gt;/login&amp;lt;/code&amp;gt; inside the sandbox. For other agents or API keys, see the [https://docs.docker.com/ai/sandboxes/agents/ agent pages].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Updating later:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;brew upgrade docker/tap/sbx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing on Linux ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Requirements:&amp;#039;&amp;#039;&amp;#039; Ubuntu 24.04 or later on x86-64 or 64-bit Arm, KVM hardware virtualization, and &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt;. Docker does &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; support Ubuntu derivatives such as Linux Mint or Pop!_OS, because the install script can configure the wrong package repository on them. For other distributions, see the [https://github.com/docker/sbx-releases#manual-install-from-release-artifacts release artifacts], which Docker does not test. If you&amp;#039;re installing inside a virtual machine, the VM must support nested virtualization.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8d7da; border-left: 5px solid #721c24; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Shared servers and clusters&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Installing &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; needs &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; and membership in the &amp;lt;code&amp;gt;kvm&amp;lt;/code&amp;gt; group, which you usually won&amp;#039;t have on department compute servers or clusters. Run sandboxes on your own machine, or ask the system administrators.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Check your system ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsb_release -ds    # should be Ubuntu 24.04 or later&lt;br /&gt;
uname -m           # x86_64 or aarch64&lt;br /&gt;
lsmod | grep kvm   # should list kvm_intel, kvm_amd, kvm_arm64, or kvm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the last command prints nothing, find out why with:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cpu-checker&lt;br /&gt;
kvm-ok&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The usual cause is that virtualization is turned off in the BIOS/UEFI.&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Add yourself to the kvm group ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo usermod -aG kvm $USER&lt;br /&gt;
newgrp kvm                 # or log out and back in&lt;br /&gt;
groups | grep -w kvm       # should now print your groups, including kvm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Install sbx ===&lt;br /&gt;
Choose &amp;#039;&amp;#039;&amp;#039;one&amp;#039;&amp;#039;&amp;#039; of the following options.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Option A: &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; only.&amp;#039;&amp;#039;&amp;#039; Choose this if you don&amp;#039;t need Docker Engine on the host.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -fsSL https://get.docker.com | sudo REPO_ONLY=1 sh   # adds Docker&amp;#039;s apt repository&lt;br /&gt;
sudo apt install docker-sbx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Option B: Docker Engine and &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; together.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -fsSL https://get.docker.com | sudo SBX=1 sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you&amp;#039;d rather read the install script before running it with root privileges, download it first:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -fsSL https://get.docker.com -o get-docker.sh&lt;br /&gt;
less get-docker.sh&lt;br /&gt;
sudo REPO_ONLY=1 sh get-docker.sh   # or SBX=1 for Option B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm the install:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sbx version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Sign in ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sbx login&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This opens a browser so you can sign in with a Docker account. If you don&amp;#039;t have one, create one at [https://hub.docker.com/signup Docker Hub]. On a machine without a desktop, see [https://docs.docker.com/ai/sandboxes/troubleshooting/ Troubleshooting].&lt;br /&gt;
&lt;br /&gt;
=== Step 5: Run your first sandbox ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/path/to/your-project&lt;br /&gt;
git status        # commit or stash anything you care about first&lt;br /&gt;
sbx run claude&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first time you run a sandbox, &amp;lt;code&amp;gt;sbx&amp;lt;/code&amp;gt; asks you to choose a default network policy. &amp;#039;&amp;#039;&amp;#039;Balanced&amp;#039;&amp;#039;&amp;#039; is a sensible starting point. For Claude Code with a Claude subscription, type &amp;lt;code&amp;gt;/login&amp;lt;/code&amp;gt; inside the sandbox. For other agents or API keys, see the [https://docs.docker.com/ai/sandboxes/agents/ agent pages].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Updating later:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install --only-upgrade docker-sbx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Next steps:&amp;#039;&amp;#039;&amp;#039; Once your first sandbox runs, read the [https://docs.docker.com/ai/sandboxes/usage/ usage guide] for reconnecting, ports, and clone mode. The [https://docs.docker.com/ai/sandboxes/workflows/git/ Git workflows] page covers letting agents push branches, [https://docs.docker.com/ai/sandboxes/governance/access-controls/local/ Local policy] covers tuning network rules, and the [https://docs.docker.com/reference/cli/sbx/ CLI reference] lists every command.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Mon, 26 Oct 2026 20:53:26 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Docker_Sandboxes_for_AI_Agents</comments>
		</item>
		<item>
			<title>Overleaf</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=1010&amp;oldid=998</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=1010&amp;oldid=998</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:48, 26 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;index.php?title=Category:&lt;/del&gt;Typesetting]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Typesetting]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com Overleaf]&amp;#039;&amp;#039;&amp;#039; is a browser-based LaTeX editor. It gives you a full TeX Live installation, a live PDF preview, and Google-Docs-style collaboration, all without installing anything on your machine. For most papers written with co-authors, it has become the default place where the writing actually happens.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com Overleaf]&amp;#039;&amp;#039;&amp;#039; is a browser-based LaTeX editor. It gives you a full TeX Live installation, a live PDF preview, and Google-Docs-style collaboration, all without installing anything on your machine. For most papers written with co-authors, it has become the default place where the writing actually happens.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key infowiki:diff:1.41:old-998:rev-1010:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 26 Oct 2026 20:48:56 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf</comments>
		</item>
		<item>
			<title>Wright GPU Cluster</title>
			<link>https://info.stat.cmu.edu/index.php?title=Wright_GPU_Cluster&amp;diff=1009&amp;oldid=982</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Wright_GPU_Cluster&amp;diff=1009&amp;oldid=982</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Connecting and setting up your environment: &lt;/span&gt; warn about no backups&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:22, 23 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l36&quot;&gt;Line 36:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 36:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To upload scripts or data files, you can use &amp;lt;code&amp;gt;scp&amp;lt;/code&amp;gt; from your local computer (Mac or Linux); on Windows, you can get the Tectia SSH graphical client [https://www.cmu.edu/computing/services/endpoint/software/access.html free through CMU].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To upload scripts or data files, you can use &amp;lt;code&amp;gt;scp&amp;lt;/code&amp;gt; from your local computer (Mac or Linux); on Windows, you can get the Tectia SSH graphical client [https://www.cmu.edu/computing/services/endpoint/software/access.html free through CMU].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;nbsp;&lt;/del&gt;also connect through the [https://code.visualstudio.com/docs/remote/ssh Remote SSH feature of VS Code] if you like. This is useful to&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;nbsp;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can also connect through the [https://code.visualstudio.com/docs/remote/ssh Remote SSH feature of VS Code] if you like. This is useful to&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*navigate the file system from a proper GUI and&amp;amp;nbsp;  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*navigate the file system from a proper GUI and&amp;amp;nbsp;  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*modify code/files/folder in place if you are not familiar with the command line  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*modify code/files/folder in place if you are not familiar with the command line  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Files uploaded to your home directory will be accessible on the head node and all compute nodes, so they can be freely used in compute jobs.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Files uploaded to your home directory will be accessible on the head node and all compute nodes, so they can be freely used in compute jobs.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Danger! Files are not backed up ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Wright&#039;s storage cluster is &#039;&#039;&#039;not backed up.&#039;&#039;&#039; You may lose data if a disk fails. Therefore:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Keep your code backed up in another location (such as by pushing it to GitHub regularly)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Do not use Wright for long-term storage of important data. Download local copies, push it to HuggingFace, or sync it to your Google Drive&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Consider using an online backup tool like [https://www.borgbackup.org/ Borg] or [https://www.tarsnap.com/ Tarsnap] to regularly back up your home directory&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Using Conda ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Using Conda ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key infowiki:diff:1.41:old-982:rev-1009:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 23 Oct 2026 14:22:16 GMT</pubDate>
			<dc:creator>Areinhar</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Wright_GPU_Cluster</comments>
		</item>
		<item>
			<title>Overleaf Git Integration</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf_Git_Integration&amp;diff=1008&amp;oldid=1002</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf_Git_Integration&amp;diff=1008&amp;oldid=1002</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Sending new results to the paper&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:31, 18 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-multi&quot; lang=&quot;en&quot;&gt;(2 intermediate revisions by the same user not shown)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l75&quot;&gt;Line 75:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 75:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- SCREENSHOT: Overleaf project Menu, with the &amp;quot;Sync → Git&amp;quot; entry highlighted. --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- SCREENSHOT: Overleaf project Menu, with the &amp;quot;Sync → Git&amp;quot; entry highlighted. --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Overleaf-menu-sync-git.png|thumb|center|300px|The Git entry in the Overleaf project menu.]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Overleaf-menu-sync-git.png|thumb|center|300px|The Git entry in the Overleaf project menu.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: The Git dialog showing the clone command (blur or crop the project ID if you prefer). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Overleaf-git-clone-url.png|thumb|center|500px|The project&#039;s Git clone URL.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Step 3: Clone the paper inside your experiment repository ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Step 3: Clone the paper inside your experiment repository ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l100&quot;&gt;Line 100:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 97:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: Terminal showing both `git status` outputs (outer repo clean, inner repo on master). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Nested-clone-git-status.png|thumb|center|600px|The outer repository ignores &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;; the inner repository is independent.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #f8d7da; border-left: 5px solid #721c24; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #f8d7da; border-left: 5px solid #721c24; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l186&quot;&gt;Line 186:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 181:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;That&amp;#039;s it. Refresh the Overleaf editor and recompile, and the new figures are there.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;That&amp;#039;s it. Refresh the Overleaf editor and recompile, and the new figures are there.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- SCREENSHOT: Overleaf file tree / editor right after a push, showing the updated figure (optionally with the History panel open). --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Overleaf-after-git-push.png|thumb|center|600px|Pushed figures appear in Overleaf immediately.]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:31:43 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf_Git_Integration</comments>
		</item>
		<item>
			<title>File:Overleaf-menu-sync-git.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-menu-sync-git.png&amp;diff=1005&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-menu-sync-git.png&amp;diff=1005&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-menu-sync-git.png&quot; title=&quot;File:Overleaf-menu-sync-git.png&quot;&gt;File:Overleaf-menu-sync-git.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:29:33 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-menu-sync-git.png</comments>
		</item>
		<item>
			<title>File:Overleaf-git-token.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-git-token.png&amp;diff=1004&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-git-token.png&amp;diff=1004&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded a new version of &lt;a href=&quot;/index.php?title=File:Overleaf-git-token.png&quot; title=&quot;File:Overleaf-git-token.png&quot;&gt;File:Overleaf-git-token.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:29:17 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-git-token.png</comments>
		</item>
		<item>
			<title>Overleaf GitHub Integration</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf_GitHub_Integration&amp;diff=1002&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf_GitHub_Integration&amp;diff=1002&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; moved page &lt;a href=&quot;/index.php?title=Overleaf_GitHub_Integration&amp;amp;redirect=no&quot; class=&quot;mw-redirect&quot; title=&quot;Overleaf GitHub Integration&quot;&gt;Overleaf GitHub Integration&lt;/a&gt; to &lt;a href=&quot;/index.php?title=Overleaf_Git_Integration&quot; title=&quot;Overleaf Git Integration&quot;&gt;Overleaf Git Integration&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;br /&gt;
[[Category:Typesetting]]&lt;br /&gt;
&lt;br /&gt;
If your experiment code lives in a Git repository and your paper lives on Overleaf, you have probably done &amp;#039;&amp;#039;&amp;#039;the upload dance&amp;#039;&amp;#039;&amp;#039;: rerun an experiment, hunt down the regenerated figure on disk, open Overleaf, delete the old file, upload the new one, and repeat for every figure and table that changed. It is slow, it is easy to leave a stale figure behind, and it leaves no record of which version of your code produced which figure in the paper.&lt;br /&gt;
&lt;br /&gt;
Overleaf Premium&amp;#039;s &amp;#039;&amp;#039;&amp;#039;Git integration&amp;#039;&amp;#039;&amp;#039; removes most of this busywork. Every Overleaf project can be cloned as an ordinary Git repository, with no GitHub account or extra repository required. This article describes one way to use it: cloning the Overleaf project &amp;#039;&amp;#039;&amp;#039;inside&amp;#039;&amp;#039;&amp;#039; your experiment repository, in a directory that the experiment repository ignores. Your analysis scripts then write figures and tables straight into the paper, and a single &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; puts them on Overleaf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important: Overleaf Premium is required&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Git integration is a paid Overleaf feature. Check whether you already have access through an institutional license before paying for it yourself. If you don&amp;#039;t use Git yet, read up on the basics first, since this workflow assumes you are comfortable with &amp;lt;code&amp;gt;clone&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;commit&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;push&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;pull&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How It Works ==&lt;br /&gt;
There are several ways to connect a code repository to an Overleaf project. In this one, the two repositories stay &amp;#039;&amp;#039;&amp;#039;completely independent&amp;#039;&amp;#039;&amp;#039;. The Overleaf project is cloned into a subdirectory (here called &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;), and that subdirectory is listed in the experiment repository&amp;#039;s &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt;. The experiment repository never records anything about the paper, and the paper never sees your experimental code. Your scripts simply write files into a folder that happens to be a different Git repository, one whose remote is Overleaf itself.&lt;br /&gt;
&lt;br /&gt;
The final layout looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-experiments/                 ← experiment repo&lt;br /&gt;
├── .gitignore                  ← contains &amp;quot;paper/&amp;quot;&lt;br /&gt;
├── src/&lt;br /&gt;
├── scripts/&lt;br /&gt;
│   └── make_figures.py         ← writes into paper/figures and paper/tables&lt;br /&gt;
├── Makefile&lt;br /&gt;
└── paper/                      ← SEPARATE git repo, ignored by the outer repo&lt;br /&gt;
    ├── .git/                   ← remote: https://git.overleaf.com/&amp;lt;project-id&amp;gt;&lt;br /&gt;
    ├── main.tex&lt;br /&gt;
    ├── refs.bib&lt;br /&gt;
    ├── figures/                ← written by code&lt;br /&gt;
    │   ├── coverage.pdf&lt;br /&gt;
    │   └── PROVENANCE.txt      ← which code version made these&lt;br /&gt;
    └── tables/                 ← written by code&lt;br /&gt;
        └── results.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes flow directly in both directions, with nothing in between:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scripts/make_figures.py ──writes──▶ paper/figures, paper/tables&lt;br /&gt;
paper/   ──git push──▶  Overleaf&lt;br /&gt;
Overleaf ──git pull──▶  paper/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #d4edda; color: #155724; padding: 10px; text-align: left;&amp;quot; | Strengths&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #f8d7da; color: #721c24; padding: 10px; text-align: left;&amp;quot; | Weaknesses&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px; border-right: 2px solid white;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No More Uploading:&amp;#039;&amp;#039;&amp;#039; Regenerated figures and tables reach the paper with one commit and one push, no manual file shuffling required.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Instant Updates:&amp;#039;&amp;#039;&amp;#039; A &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; shows up in the Overleaf editor right away. There is no sync button to remember.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Minimal Setup:&amp;#039;&amp;#039;&amp;#039; No GitHub account, no extra repository, and no linking accounts. You need a token and a clone URL, and that&amp;#039;s it.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No Coupled Tracking:&amp;#039;&amp;#039;&amp;#039; Unlike git submodules, you never need an extra &amp;quot;update the paper pointer&amp;quot; commit in your experiment repository every time the paper changes.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Collaborator Friendly:&amp;#039;&amp;#039;&amp;#039; Co-authors keep writing on Overleaf as usual. Nothing about their workflow changes.&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Provenance Is Up to You:&amp;#039;&amp;#039;&amp;#039; Because the repositories are not linked, you need to record which code produced which figure yourself. A small script (below) handles this.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No Off-Site Copy:&amp;#039;&amp;#039;&amp;#039; The paper lives only on Overleaf (and your local clones). If you want GitHub issues, pull-request reviews, or an independent backup, Overleaf&amp;#039;s GitHub Synchronization is the better fit.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Token Management:&amp;#039;&amp;#039;&amp;#039; You need an Overleaf Git token on every machine you push from, including clusters.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;One More Thing to Clone:&amp;#039;&amp;#039;&amp;#039; Anyone who wants to regenerate the paper&amp;#039;s figures needs to clone the Overleaf project separately.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #e9ecef; text-align: center; padding: 10px;&amp;quot; | 🔗 &amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com/learn/how-to/Git_integration Overleaf Documentation: Git Integration]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Setting It Up ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Generate a Git authentication token ===&lt;br /&gt;
Overleaf doesn&amp;#039;t accept your account password over Git. In Overleaf, open &amp;#039;&amp;#039;&amp;#039;Account Settings&amp;#039;&amp;#039;&amp;#039;, find the &amp;#039;&amp;#039;&amp;#039;Git Integration&amp;#039;&amp;#039;&amp;#039; section, and generate a token. Copy it somewhere safe right away, because Overleaf will only show it once.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Overleaf Account Settings, Git Integration section, with the &amp;quot;Generate token&amp;quot; button visible (blur any existing token). --&amp;gt;&lt;br /&gt;
[[File:Overleaf-git-token.png|thumb|center|600px|Generating an Overleaf Git authentication token.]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Find your project&amp;#039;s clone URL ===&lt;br /&gt;
Open your paper in Overleaf, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; in the top left, and choose &amp;#039;&amp;#039;&amp;#039;Git&amp;#039;&amp;#039;&amp;#039; under the &amp;#039;&amp;#039;Sync&amp;#039;&amp;#039; section. The dialog shows a &amp;lt;code&amp;gt;git clone&amp;lt;/code&amp;gt; command with your project&amp;#039;s URL, which looks like &amp;lt;code&amp;gt;https://git.overleaf.com/&amp;lt;project-id&amp;gt;&amp;lt;/code&amp;gt;. The project ID is the same string that appears in your browser&amp;#039;s address bar when the project is open.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Overleaf project Menu, with the &amp;quot;Sync → Git&amp;quot; entry highlighted. --&amp;gt;&lt;br /&gt;
[[File:Overleaf-menu-sync-git.png|thumb|center|300px|The Git entry in the Overleaf project menu.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: The Git dialog showing the clone command (blur or crop the project ID if you prefer). --&amp;gt;&lt;br /&gt;
[[File:Overleaf-git-clone-url.png|thumb|center|500px|The project&amp;#039;s Git clone URL.]]&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Clone the paper inside your experiment repository ===&lt;br /&gt;
From the root of your experiment repository, tell Git to ignore the &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt; directory &amp;#039;&amp;#039;&amp;#039;before&amp;#039;&amp;#039;&amp;#039; you clone into it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd my-experiments&lt;br /&gt;
echo &amp;quot;paper/&amp;quot; &amp;gt;&amp;gt; .gitignore&lt;br /&gt;
git add .gitignore&lt;br /&gt;
git commit -m &amp;quot;Ignore nested paper clone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
git clone https://git.overleaf.com/&amp;lt;project-id&amp;gt; paper&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When Git asks for credentials, enter &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; as the username and your &amp;#039;&amp;#039;&amp;#039;token&amp;#039;&amp;#039;&amp;#039; as the password. To avoid typing the token every time, let Git remember it with your system&amp;#039;s credential helper (e.g. &amp;lt;code&amp;gt;osxkeychain&amp;lt;/code&amp;gt; on macOS, &amp;lt;code&amp;gt;manager&amp;lt;/code&amp;gt; on Windows). On shared machines, avoid the plain-text &amp;lt;code&amp;gt;store&amp;lt;/code&amp;gt; helper.&lt;br /&gt;
&lt;br /&gt;
Then check that the two repositories don&amp;#039;t see each other:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status          # should NOT list paper/&lt;br /&gt;
git -C paper status # shows the Overleaf project, on branch master&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Terminal showing both `git status` outputs (outer repo clean, inner repo on master). --&amp;gt;&lt;br /&gt;
[[File:Nested-clone-git-status.png|thumb|center|600px|The outer repository ignores &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;; the inner repository is independent.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8d7da; border-left: 5px solid #721c24; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning: Don&amp;#039;t skip the &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; entry&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Without it, a careless &amp;lt;code&amp;gt;git add .&amp;lt;/code&amp;gt; in the experiment repository will register &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt; as an &amp;quot;embedded repository,&amp;quot; which confuses collaborators and anything else that clones your code. If this happens, &amp;lt;code&amp;gt;git rm --cached paper&amp;lt;/code&amp;gt; undoes it.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Point your code at the paper directory ===&lt;br /&gt;
Rather than hard-coding paths in every script, define the paper location once. Using an environment variable with a sensible default means the code still runs for people who haven&amp;#039;t cloned the paper (their figures just land in an ignored folder).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# src/paths.py&lt;br /&gt;
import os&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
&lt;br /&gt;
REPO_ROOT = Path(__file__).resolve().parents[1]&lt;br /&gt;
PAPER_DIR = Path(os.environ.get(&amp;quot;PAPER_DIR&amp;quot;, REPO_ROOT / &amp;quot;paper&amp;quot;))&lt;br /&gt;
FIG_DIR = PAPER_DIR / &amp;quot;figures&amp;quot;&lt;br /&gt;
TAB_DIR = PAPER_DIR / &amp;quot;tables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FIG_DIR.mkdir(parents=True, exist_ok=True)&lt;br /&gt;
TAB_DIR.mkdir(parents=True, exist_ok=True)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;#039;&amp;#039;&amp;#039;figures&amp;#039;&amp;#039;&amp;#039;, save vector PDFs directly into the paper. Removing the creation timestamp means a figure that didn&amp;#039;t actually change produces an identical file, so Git won&amp;#039;t report a pointless change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from src.paths import FIG_DIR&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots(figsize=(3.25, 2.4))   # match your template&amp;#039;s column width&lt;br /&gt;
...&lt;br /&gt;
fig.savefig(FIG_DIR / &amp;quot;coverage.pdf&amp;quot;, bbox_inches=&amp;quot;tight&amp;quot;,&lt;br /&gt;
            metadata={&amp;quot;CreationDate&amp;quot;: None})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;#039;&amp;#039;&amp;#039;tables&amp;#039;&amp;#039;&amp;#039;, write a LaTeX fragment rather than a full document:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from src.paths import TAB_DIR&lt;br /&gt;
&lt;br /&gt;
tex = df.to_latex(index=False, escape=True, float_format=&amp;quot;%.3f&amp;quot;)&lt;br /&gt;
(TAB_DIR / &amp;quot;results.tex&amp;quot;).write_text(tex)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and pull both into the paper as usual:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\includegraphics[width=\linewidth]{figures/coverage}&lt;br /&gt;
...&lt;br /&gt;
\input{tables/results}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;#039;&amp;#039;&amp;#039;numbers quoted in the text&amp;#039;&amp;#039;&amp;#039;, the same idea works. Have your code write LaTeX macros so the prose never goes stale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
(TAB_DIR / &amp;quot;numbers.tex&amp;quot;).write_text(&lt;br /&gt;
    f&amp;quot;\\newcommand{{\\coverageNinetyFive}}{{{cov95:.1f}\\%}}\n&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
% preamble&lt;br /&gt;
\input{tables/numbers}&lt;br /&gt;
% body&lt;br /&gt;
Our intervals achieve \coverageNinetyFive{} empirical coverage.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Day-to-Day Workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Sending new results to the paper ===&lt;br /&gt;
After rerunning your experiments, commit and push from inside &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python scripts/make_figures.py&lt;br /&gt;
&lt;br /&gt;
cd paper&lt;br /&gt;
git pull                         # pick up any text edits made on Overleaf first&lt;br /&gt;
git add figures tables&lt;br /&gt;
git commit -m &amp;quot;Regenerate figures&amp;quot;&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&amp;#039;s it. Refresh the Overleaf editor and recompile, and the new figures are there.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Overleaf file tree / editor right after a push, showing the updated figure (optionally with the History panel open). --&amp;gt;&lt;br /&gt;
[[File:Overleaf-after-git-push.png|thumb|center|600px|Pushed figures appear in Overleaf immediately.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important: Always pull before you push&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Your co-authors are editing the same repository through the Overleaf editor. If anything changed on Overleaf since your last pull, your push will be rejected until you &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; and merge. As long as your code only touches &amp;lt;code&amp;gt;figures/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;tables/&amp;lt;/code&amp;gt;, these merges are automatic.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recording provenance ===&lt;br /&gt;
Since the two repositories aren&amp;#039;t linked, have your script record which code produced the figures. Overleaf&amp;#039;s Git integration does not reliably preserve your local commit messages, so write the information into a &amp;#039;&amp;#039;&amp;#039;file&amp;#039;&amp;#039;&amp;#039; in the paper instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SHA=$(git rev-parse --short HEAD)&lt;br /&gt;
git diff --quiet || SHA=&amp;quot;$SHA-dirty&amp;quot;&lt;br /&gt;
echo &amp;quot;Generated from my-experiments@$SHA on $(date -u +%Y-%m-%dT%H:%MZ)&amp;quot; &amp;gt; paper/figures/PROVENANCE.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;-dirty&amp;lt;/code&amp;gt; suffix flags figures made from uncommitted code. Months later, opening &amp;lt;code&amp;gt;PROVENANCE.txt&amp;lt;/code&amp;gt; (or its history in Overleaf) answers &amp;quot;where did these figures come from?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Automating it with a Makefile ===&lt;br /&gt;
Once the steps above feel familiar, wrap them in a single command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
PAPER := paper&lt;br /&gt;
SHA   := $(shell git rev-parse --short HEAD)$(shell git diff --quiet || echo -dirty)&lt;br /&gt;
&lt;br /&gt;
.PHONY: figures paper-sync&lt;br /&gt;
&lt;br /&gt;
figures:&lt;br /&gt;
	python scripts/make_figures.py&lt;br /&gt;
&lt;br /&gt;
paper-sync: figures&lt;br /&gt;
	git -C $(PAPER) pull --rebase&lt;br /&gt;
	git -C $(PAPER) diff --quiet -- figures tables || \&lt;br /&gt;
	  echo &amp;quot;Generated from my-experiments@$(SHA) on $$(date -u +%Y-%m-%dT%H:%MZ)&amp;quot; &amp;gt; $(PAPER)/figures/PROVENANCE.txt&lt;br /&gt;
	git -C $(PAPER) add figures tables&lt;br /&gt;
	git -C $(PAPER) diff --cached --quiet || \&lt;br /&gt;
	  git -C $(PAPER) commit -m &amp;quot;Regenerate figures from my-experiments@$(SHA)&amp;quot;&lt;br /&gt;
	git -C $(PAPER) push&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now &amp;lt;code&amp;gt;make paper-sync&amp;lt;/code&amp;gt; regenerates everything, pulls in your co-authors&amp;#039; edits, updates the provenance file only when a figure or table actually changed, skips the commit entirely if nothing changed, and pushes straight to Overleaf.&lt;br /&gt;
&lt;br /&gt;
=== Avoiding conflicts ===&lt;br /&gt;
Conflicts are rare if every file has exactly one &amp;quot;owner&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;figures/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;tables/&amp;lt;/code&amp;gt; belong to your code.&amp;#039;&amp;#039;&amp;#039; Never edit them by hand on Overleaf; the next regeneration will silently overwrite your changes. Change the formatting in the code that generates them instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #228B22; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;.tex&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bib&amp;lt;/code&amp;gt; files belong to people.&amp;#039;&amp;#039;&amp;#039; Write them in the Overleaf editor (or locally, then push), and always pull before you push figures.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why Not a Git Submodule? ==&lt;br /&gt;
Git submodules are the &amp;quot;official&amp;quot; way to put one repository inside another, so it is natural to ask why this workflow avoids them.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; | Gitignored Clone&lt;br /&gt;
! style=&amp;quot;background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; | Git Submodule&lt;br /&gt;
|- style=&amp;quot;background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Experiment repo records the paper version&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | Yes (a pointer)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Extra commit in experiment repo per paper change&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | Yes&lt;br /&gt;
|- style=&amp;quot;background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Collaborators need Overleaf credentials to clone the code&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | Yes, for a full clone&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Link between figure and code version&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | Provenance file || style=&amp;quot;padding: 10px;&amp;quot; | Automatic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A submodule gives you exact, automatic provenance, but at a price. Every change to the paper, including every typo fix a co-author makes on Overleaf, needs a matching &amp;quot;bump the submodule&amp;quot; commit in your experiment repository. On top of that, anyone cloning your code with submodules would need an Overleaf token. For a paper that is edited daily, this usually isn&amp;#039;t worth it. The gitignored clone trades automatic provenance for a one-line provenance file, which is plenty in practice.&lt;br /&gt;
&lt;br /&gt;
== Variations ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Want a GitHub copy of the paper?&amp;#039;&amp;#039;&amp;#039; Overleaf&amp;#039;s GitHub Synchronization keeps the project mirrored in a GitHub repository, which you can clone into the gitignored directory in exactly the same way. You gain issues, pull-request reviews, and an off-site backup. The cost is a manual sync step, since Overleaf only exchanges changes with GitHub when someone clicks a button in the Overleaf menu.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #FFD43B; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Generating figures on a cluster:&amp;#039;&amp;#039;&amp;#039; Clone the Overleaf project on the cluster as well, set up your token with a credential helper, and run &amp;lt;code&amp;gt;make paper-sync&amp;lt;/code&amp;gt; there. Alternatively, point &amp;lt;code&amp;gt;PAPER_DIR&amp;lt;/code&amp;gt; at a scratch directory on the cluster, copy the outputs back to your laptop, and push from there, so your token never leaves your own machine.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: #f8d7da; color: #721c24; padding: 10px; text-align: left;&amp;quot; | Things to Watch Out For&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Rejected pushes:&amp;#039;&amp;#039;&amp;#039; Someone edited the paper on Overleaf since your last pull. Run &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt;, then push again. Never force-push to Overleaf.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Authentication failures:&amp;#039;&amp;#039;&amp;#039; The username is literally &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, and the password is your token, not your Overleaf password. If a token stops working, generate a new one and update your credential helper.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Working on branches:&amp;#039;&amp;#039;&amp;#039; Overleaf only knows about &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;. You can branch locally, but only commits merged into &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; can be pushed.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Bloating the project:&amp;#039;&amp;#039;&amp;#039; PNGs and timestamped PDFs change on every run. Prefer vector PDFs with the timestamp removed, and only commit figures that actually changed.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Overleaf project limits:&amp;#039;&amp;#039;&amp;#039; Overleaf limits project size and file counts. Keep raw outputs, checkpoints, and intermediate data in the experiment repository (or out of Git entirely); only put paper-ready figures and tables in &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Leaking tokens:&amp;#039;&amp;#039;&amp;#039; Never paste the token into the clone URL in a shared script or commit it anywhere. Let a credential helper store it.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; This is just one of several ways to connect your code and your paper. If you want your paper on GitHub, try GitHub Synchronization instead; if you want airtight provenance, a submodule may be worth the extra commits.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:27:23 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf_GitHub_Integration</comments>
		</item>
		<item>
			<title>File:Overleaf-git-token.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-git-token.png&amp;diff=1001&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-git-token.png&amp;diff=1001&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-git-token.png&quot; title=&quot;File:Overleaf-git-token.png&quot;&gt;File:Overleaf-git-token.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:27:02 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-git-token.png</comments>
		</item>
		<item>
			<title>Overleaf GitHub Integration</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf_GitHub_Integration&amp;diff=1000&amp;oldid=984</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf_GitHub_Integration&amp;diff=1000&amp;oldid=984</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://info.stat.cmu.edu/index.php?title=Overleaf_GitHub_Integration&amp;amp;diff=1000&amp;amp;oldid=984&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:24:07 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf_GitHub_Integration</comments>
		</item>
		<item>
			<title>Overleaf</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=998&amp;oldid=993</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=998&amp;oldid=993</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Common Pitfalls&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:12, 18 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-multi&quot; lang=&quot;en&quot;&gt;(One intermediate revision by the same user not shown)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Typesetting]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;index.php?title=&lt;/ins&gt;Category:Typesetting]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com Overleaf]&amp;#039;&amp;#039;&amp;#039; is a browser-based LaTeX editor. It gives you a full TeX Live installation, a live PDF preview, and Google-Docs-style collaboration, all without installing anything on your machine. For most papers written with co-authors, it has become the default place where the writing actually happens.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com Overleaf]&amp;#039;&amp;#039;&amp;#039; is a browser-based LaTeX editor. It gives you a full TeX Live installation, a live PDF preview, and Google-Docs-style collaboration, all without installing anything on your machine. For most papers written with co-authors, it has become the default place where the writing actually happens.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l104&quot;&gt;Line 104:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 104:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #228B22; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #228B22; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Git and GitHub sync (Premium):&#039;&#039;&#039; Every Premium project can be cloned directly with Git, and can also be synchronized with a GitHub repository. This lets you edit locally in your own editor, and lets your analysis code write figures and tables straight into the paper. See [[Overleaf GitHub &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sync|Syncing Experiment Code with Overleaf via GitHub&lt;/del&gt;]] for a complete workflow. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub sync article --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Git and GitHub sync (Premium):&#039;&#039;&#039; Every Premium project can be cloned directly with Git, and can also be synchronized with a GitHub repository. This lets you edit locally in your own editor, and lets your analysis code write figures and tables straight into the paper. See [[Overleaf GitHub &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Integration&lt;/ins&gt;]] for a complete workflow. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub sync article --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l134&quot;&gt;Line 134:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 134:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Overleaf is a writing tool, not a research workflow by itself. Once you&#039;re comfortable with the basics, see [[Overleaf GitHub &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Sync|Syncing Experiment Code with Overleaf via GitHub&lt;/del&gt;]] for a way to keep your figures and tables in sync with your code. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub sync article --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Overleaf is a writing tool, not a research workflow by itself. Once you&#039;re comfortable with the basics, see [[Overleaf GitHub &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Integration&lt;/ins&gt;]] for a way to keep your figures and tables in sync with your code. &amp;lt;!-- TODO: fix this link to match the actual title of the GitHub sync article --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:12:50 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf</comments>
		</item>
		<item>
			<title>File:Overleaf-history-view.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-history-view.png&amp;diff=996&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-history-view.png&amp;diff=996&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-history-view.png&quot; title=&quot;File:Overleaf-history-view.png&quot;&gt;File:Overleaf-history-view.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:11:25 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-history-view.png</comments>
		</item>
		<item>
			<title>File:Overleaf-review-panel.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-review-panel.png&amp;diff=995&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-review-panel.png&amp;diff=995&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-review-panel.png&quot; title=&quot;File:Overleaf-review-panel.png&quot;&gt;File:Overleaf-review-panel.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:10:04 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-review-panel.png</comments>
		</item>
		<item>
			<title>File:Overleaf-menu-settings dialogue.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-menu-settings_dialogue.png&amp;diff=994&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-menu-settings_dialogue.png&amp;diff=994&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-menu-settings_dialogue.png&quot; title=&quot;File:Overleaf-menu-settings dialogue.png&quot;&gt;File:Overleaf-menu-settings dialogue.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:08:55 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-menu-settings_dialogue.png</comments>
		</item>
		<item>
			<title>Overleaf</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=993&amp;oldid=988</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=993&amp;oldid=988</guid>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Step 4: Check the project settings&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:08, 18 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l69&quot;&gt;Line 69:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 69:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- SCREENSHOT: The Overleaf project Menu with the Compiler, TeX Live version, and Main document settings highlighted. --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!-- SCREENSHOT: The Overleaf project Menu with the Compiler, TeX Live version, and Main document settings highlighted. --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Overleaf-menu-settings.png|thumb|center|300px|Compiler and main-document settings in the project menu.]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Overleaf-menu-settings&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.png|thumb|center|300px|Where to find the settings menu.]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Overleaf-menu-settings_dialogue&lt;/ins&gt;.png|thumb|center|300px|Compiler and main-document settings in the project menu.]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Working With Co-Authors ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Working With Co-Authors ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:08:28 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf</comments>
		</item>
		<item>
			<title>File:Overleaf-menu-settings.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-menu-settings.png&amp;diff=992&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-menu-settings.png&amp;diff=992&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-menu-settings.png&quot; title=&quot;File:Overleaf-menu-settings.png&quot;&gt;File:Overleaf-menu-settings.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:07:51 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-menu-settings.png</comments>
		</item>
		<item>
			<title>File:Overleaf-editor-overview.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-editor-overview.png&amp;diff=991&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-editor-overview.png&amp;diff=991&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-editor-overview.png&quot; title=&quot;File:Overleaf-editor-overview.png&quot;&gt;File:Overleaf-editor-overview.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:05:45 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-editor-overview.png</comments>
		</item>
		<item>
			<title>File:Overleaf-new-project-menu.png</title>
			<link>https://info.stat.cmu.edu/index.php?title=File:Overleaf-new-project-menu.png&amp;diff=990&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=File:Overleaf-new-project-menu.png&amp;diff=990&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Ajshen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Ajshen (page does not exist)&quot;&gt;&lt;bdi&gt;Ajshen&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php?title=File:Overleaf-new-project-menu.png&quot; title=&quot;File:Overleaf-new-project-menu.png&quot;&gt;File:Overleaf-new-project-menu.png&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:04:45 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=File_talk:Overleaf-new-project-menu.png</comments>
		</item>
		<item>
			<title>Category:Typesetting</title>
			<link>https://info.stat.cmu.edu/index.php?title=Category:Typesetting&amp;diff=989&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Category:Typesetting&amp;diff=989&amp;oldid=0</guid>
			<description>&lt;p&gt;Created blank page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:03:18 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Category_talk:Typesetting</comments>
		</item>
		<item>
			<title>Overleaf</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=988&amp;oldid=983</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf&amp;diff=988&amp;oldid=983</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://info.stat.cmu.edu/index.php?title=Overleaf&amp;amp;diff=988&amp;amp;oldid=983&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Sun, 18 Oct 2026 23:03:09 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf</comments>
		</item>
		<item>
			<title>Overleaf GitHub Integration</title>
			<link>https://info.stat.cmu.edu/index.php?title=Overleaf_GitHub_Integration&amp;diff=984&amp;oldid=0</link>
			<guid isPermaLink="false">https://info.stat.cmu.edu/index.php?title=Overleaf_GitHub_Integration&amp;diff=984&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt; &lt;a href=&quot;/index.php?title=Category:Beginner%27s_Guide_Implementation&quot; title=&quot;Category:Beginner&amp;#039;s Guide Implementation&quot;&gt;XX&lt;/a&gt;  If your experiment code lives in a GitHub repository and your paper lives on Overleaf, you have probably done &amp;#039;&amp;#039;&amp;#039;the upload dance&amp;#039;&amp;#039;&amp;#039;: rerun an experiment, hunt down the regenerated figure on disk, open Overleaf, delete the old file, upload the new one, and repeat for every figure and table that changed. It is slow, it is easy to le...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!-- TODO: set the category (and sort key) to match where this article lives in the wiki --&amp;gt;&lt;br /&gt;
[[Category:Beginner&amp;#039;s_Guide_Implementation|XX]]&lt;br /&gt;
&lt;br /&gt;
If your experiment code lives in a GitHub repository and your paper lives on Overleaf, you have probably done &amp;#039;&amp;#039;&amp;#039;the upload dance&amp;#039;&amp;#039;&amp;#039;: rerun an experiment, hunt down the regenerated figure on disk, open Overleaf, delete the old file, upload the new one, and repeat for every figure and table that changed. It is slow, it is easy to leave a stale figure behind, and it leaves no record of which version of your code produced which figure in the paper.&lt;br /&gt;
&lt;br /&gt;
Overleaf Premium&amp;#039;s &amp;#039;&amp;#039;&amp;#039;GitHub Synchronization&amp;#039;&amp;#039;&amp;#039; feature removes most of this busywork. This article describes one particular way to use it: cloning the paper&amp;#039;s repository &amp;#039;&amp;#039;&amp;#039;inside&amp;#039;&amp;#039;&amp;#039; your experiment repository, in a directory that the experiment repository ignores. Your analysis scripts then write figures and tables straight into the paper, and a single push sends them to Overleaf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important: Overleaf Premium is required&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
GitHub Synchronization is a paid Overleaf feature. Check whether you already have access through an institutional license before paying for it yourself. If you don&amp;#039;t use Git yet, read up on the basics first, since this workflow assumes you are comfortable with &amp;lt;code&amp;gt;clone&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;commit&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;push&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;pull&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How It Works ==&lt;br /&gt;
There are several ways to connect a code repository to an Overleaf project. In this one, the two repositories stay &amp;#039;&amp;#039;&amp;#039;completely independent&amp;#039;&amp;#039;&amp;#039;. The paper repository is cloned into a subdirectory (here called &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;), and that subdirectory is listed in the experiment repository&amp;#039;s &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt;. The experiment repository never records anything about the paper, and the paper repository never sees your experimental code. Your scripts simply write files into a folder that happens to be a different Git repository.&lt;br /&gt;
&lt;br /&gt;
The final layout looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-experiments/                 ← experiment repo (github.com/you/my-experiments)&lt;br /&gt;
├── .gitignore                  ← contains &amp;quot;paper/&amp;quot;&lt;br /&gt;
├── src/&lt;br /&gt;
├── scripts/&lt;br /&gt;
│   └── make_figures.py         ← writes into paper/figures and paper/tables&lt;br /&gt;
├── Makefile&lt;br /&gt;
└── paper/                      ← SEPARATE git repo, ignored by the outer repo&lt;br /&gt;
    ├── .git/                   ← points to github.com/you/my-paper&lt;br /&gt;
    ├── main.tex&lt;br /&gt;
    ├── refs.bib&lt;br /&gt;
    ├── figures/                ← written by code&lt;br /&gt;
    │   └── coverage.pdf&lt;br /&gt;
    └── tables/                 ← written by code&lt;br /&gt;
        └── results.tex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated figures and tables flow from your code to Overleaf, and prose written on Overleaf flows back to your local copy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scripts/make_figures.py ──writes──▶ paper/figures, paper/tables&lt;br /&gt;
paper/   ──git push──▶  GitHub (my-paper)  ──&amp;quot;Pull GitHub changes&amp;quot;──▶  Overleaf&lt;br /&gt;
Overleaf ──&amp;quot;Push Overleaf changes&amp;quot;──▶  GitHub (my-paper)  ──git pull──▶  paper/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #d4edda; color: #155724; padding: 10px; text-align: left;&amp;quot; | Strengths&lt;br /&gt;
! style=&amp;quot;width: 50%; background-color: #f8d7da; color: #721c24; padding: 10px; text-align: left;&amp;quot; | Weaknesses&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px; border-right: 2px solid white;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No More Uploading:&amp;#039;&amp;#039;&amp;#039; Regenerated figures and tables reach the paper with one commit and one push, no manual file shuffling required.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Clean Histories:&amp;#039;&amp;#039;&amp;#039; Paper edits never clutter your code history, and code changes never clutter your paper history.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No Coupled Tracking:&amp;#039;&amp;#039;&amp;#039; Unlike git submodules, you never need an extra &amp;quot;update the paper pointer&amp;quot; commit in your experiment repository every time the paper changes.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Collaborator Friendly:&amp;#039;&amp;#039;&amp;#039; Co-authors can keep writing on Overleaf as usual. Nothing about their workflow changes.&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sync Is Manual:&amp;#039;&amp;#039;&amp;#039; Overleaf does not watch GitHub. Someone has to click a button in Overleaf to pull new changes in (and to push Overleaf edits out).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Provenance Is Up to You:&amp;#039;&amp;#039;&amp;#039; Because the repositories are not linked, the only record of which code produced a figure is whatever you write in the paper&amp;#039;s commit messages. A small script (below) handles this for you.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;One More Thing to Clone:&amp;#039;&amp;#039;&amp;#039; Anyone who wants to regenerate the paper&amp;#039;s figures needs to clone the paper repository separately.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #e9ecef; text-align: center; padding: 10px;&amp;quot; | 🔗 &amp;#039;&amp;#039;&amp;#039;[https://www.overleaf.com/learn/how-to/GitHub_Synchronization Overleaf Documentation: GitHub Synchronization]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Setting It Up ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Link Overleaf to GitHub ===&lt;br /&gt;
In Overleaf, open &amp;#039;&amp;#039;&amp;#039;Account Settings&amp;#039;&amp;#039;&amp;#039; and find the GitHub entry under the project synchronization section. Click &amp;#039;&amp;#039;&amp;#039;Link&amp;#039;&amp;#039;&amp;#039; and authorize Overleaf in the GitHub dialog that pops up.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Overleaf Account Settings page with the GitHub &amp;quot;Link&amp;quot; button visible. --&amp;gt;&lt;br /&gt;
[[File:Overleaf-account-settings-github-link.png|thumb|center|600px|Linking a GitHub account from Overleaf&amp;#039;s account settings.]]&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Create a GitHub repository from your Overleaf project ===&lt;br /&gt;
Open your paper in Overleaf, click &amp;#039;&amp;#039;&amp;#039;Menu&amp;#039;&amp;#039;&amp;#039; in the top left, and choose &amp;#039;&amp;#039;&amp;#039;GitHub&amp;#039;&amp;#039;&amp;#039; under the &amp;#039;&amp;#039;Sync&amp;#039;&amp;#039; section. Select &amp;#039;&amp;#039;&amp;#039;Create a GitHub repository&amp;#039;&amp;#039;&amp;#039;, give it a name (e.g. &amp;lt;code&amp;gt;my-paper&amp;lt;/code&amp;gt;), and make it private. Overleaf then pushes the current contents of your project to the new repository.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Overleaf project Menu, with the &amp;quot;Sync → GitHub&amp;quot; entry highlighted. --&amp;gt;&lt;br /&gt;
[[File:Overleaf-menu-sync-github.png|thumb|center|300px|The GitHub entry in the Overleaf project menu.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: The &amp;quot;Create a GitHub repository&amp;quot; dialog filled in with name and private visibility. --&amp;gt;&lt;br /&gt;
[[File:Overleaf-create-github-repo.png|thumb|center|500px|Creating the paper repository from Overleaf.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tip: Already have the paper on GitHub?&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
You can go the other direction instead. In Overleaf, choose &amp;#039;&amp;#039;&amp;#039;New Project → Import from GitHub&amp;#039;&amp;#039;&amp;#039; and select your existing repository.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Clone the paper inside your experiment repository ===&lt;br /&gt;
From the root of your experiment repository, tell Git to ignore the &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt; directory &amp;#039;&amp;#039;&amp;#039;before&amp;#039;&amp;#039;&amp;#039; you clone into it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd my-experiments&lt;br /&gt;
echo &amp;quot;paper/&amp;quot; &amp;gt;&amp;gt; .gitignore&lt;br /&gt;
git add .gitignore&lt;br /&gt;
git commit -m &amp;quot;Ignore nested paper clone&amp;quot;&lt;br /&gt;
&lt;br /&gt;
git clone git@github.com:you/my-paper.git paper&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check that the two repositories don&amp;#039;t see each other:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status          # should NOT list paper/&lt;br /&gt;
git -C paper status # shows the paper repo, on its own branch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Terminal showing both `git status` outputs (outer repo clean, inner repo on its own branch). --&amp;gt;&lt;br /&gt;
[[File:Nested-clone-git-status.png|thumb|center|600px|The outer repository ignores &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;; the inner repository is independent.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8d7da; border-left: 5px solid #721c24; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning: Don&amp;#039;t skip the &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; entry&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Without it, a careless &amp;lt;code&amp;gt;git add .&amp;lt;/code&amp;gt; in the experiment repository will register &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt; as an &amp;quot;embedded repository,&amp;quot; which confuses collaborators and anything else that clones your code. If this happens, &amp;lt;code&amp;gt;git rm --cached paper&amp;lt;/code&amp;gt; undoes it.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Point your code at the paper directory ===&lt;br /&gt;
Rather than hard-coding paths in every script, define the paper location once. Using an environment variable with a sensible default means the code still runs for people who haven&amp;#039;t cloned the paper (their figures just land in an ignored folder).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# src/paths.py&lt;br /&gt;
import os&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
&lt;br /&gt;
REPO_ROOT = Path(__file__).resolve().parents[1]&lt;br /&gt;
PAPER_DIR = Path(os.environ.get(&amp;quot;PAPER_DIR&amp;quot;, REPO_ROOT / &amp;quot;paper&amp;quot;))&lt;br /&gt;
FIG_DIR = PAPER_DIR / &amp;quot;figures&amp;quot;&lt;br /&gt;
TAB_DIR = PAPER_DIR / &amp;quot;tables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FIG_DIR.mkdir(parents=True, exist_ok=True)&lt;br /&gt;
TAB_DIR.mkdir(parents=True, exist_ok=True)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;#039;&amp;#039;&amp;#039;figures&amp;#039;&amp;#039;&amp;#039;, save vector PDFs directly into the paper. Removing the creation timestamp means a figure that didn&amp;#039;t actually change produces an identical file, so Git won&amp;#039;t report a pointless change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from src.paths import FIG_DIR&lt;br /&gt;
&lt;br /&gt;
fig, ax = plt.subplots(figsize=(3.25, 2.4))   # match your template&amp;#039;s column width&lt;br /&gt;
...&lt;br /&gt;
fig.savefig(FIG_DIR / &amp;quot;coverage.pdf&amp;quot;, bbox_inches=&amp;quot;tight&amp;quot;,&lt;br /&gt;
            metadata={&amp;quot;CreationDate&amp;quot;: None})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;#039;&amp;#039;&amp;#039;tables&amp;#039;&amp;#039;&amp;#039;, write a LaTeX fragment rather than a full document:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from src.paths import TAB_DIR&lt;br /&gt;
&lt;br /&gt;
tex = df.to_latex(index=False, escape=True, float_format=&amp;quot;%.3f&amp;quot;)&lt;br /&gt;
(TAB_DIR / &amp;quot;results.tex&amp;quot;).write_text(tex)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and pull both into the paper as usual:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
\includegraphics[width=\linewidth]{figures/coverage}&lt;br /&gt;
...&lt;br /&gt;
\input{tables/results}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;#039;&amp;#039;&amp;#039;numbers quoted in the text&amp;#039;&amp;#039;&amp;#039;, the same idea works. Have your code write LaTeX macros so the prose never goes stale:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
(TAB_DIR / &amp;quot;numbers.tex&amp;quot;).write_text(&lt;br /&gt;
    f&amp;quot;\\newcommand{{\\coverageNinetyFive}}{{{cov95:.1f}\\%}}\n&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;latex&amp;quot;&amp;gt;&lt;br /&gt;
% preamble&lt;br /&gt;
\input{tables/numbers}&lt;br /&gt;
% body&lt;br /&gt;
Our intervals achieve \coverageNinetyFive{} empirical coverage.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Day-to-Day Workflow ==&lt;br /&gt;
&lt;br /&gt;
=== Sending new results to the paper ===&lt;br /&gt;
After rerunning your experiments, commit and push from inside &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python scripts/make_figures.py&lt;br /&gt;
&lt;br /&gt;
cd paper&lt;br /&gt;
git pull                         # pick up any text edits pushed from Overleaf first&lt;br /&gt;
git add figures tables&lt;br /&gt;
git commit -m &amp;quot;Regenerate figures from my-experiments@$(git -C .. rev-parse --short HEAD)&amp;quot;&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in Overleaf, open &amp;#039;&amp;#039;&amp;#039;Menu → GitHub&amp;#039;&amp;#039;&amp;#039; and click &amp;#039;&amp;#039;&amp;#039;Pull GitHub changes into Overleaf&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: Overleaf GitHub sync dialog showing the &amp;quot;Pull GitHub changes into Overleaf&amp;quot; button, ideally with a pending commit listed. --&amp;gt;&lt;br /&gt;
[[File:Overleaf-pull-github-changes.png|thumb|center|500px|Bringing the regenerated figures into Overleaf.]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; border-left: 5px solid #17a2b8; padding: 15px; margin-bottom: 20px; margin-top: 15px; overflow: hidden;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important: Overleaf does not sync automatically&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Overleaf only picks up changes from GitHub when someone clicks the pull button, and only sends its own changes to GitHub when someone clicks the push button. Forgetting the pull is by far the most common reason the paper still shows old figures.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The commit message above includes the short hash of your experiment repository. Since the two repositories aren&amp;#039;t linked, this message is your record of which code produced which figure. Running &amp;lt;code&amp;gt;git log -- figures/coverage.pdf&amp;lt;/code&amp;gt; inside &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt; will answer &amp;quot;where did this figure come from?&amp;quot; months later.&lt;br /&gt;
&lt;br /&gt;
=== Automating it with a Makefile ===&lt;br /&gt;
Once the steps above feel familiar, wrap them in a single command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
PAPER := paper&lt;br /&gt;
SHA   := $(shell git rev-parse --short HEAD)$(shell git diff --quiet || echo -dirty)&lt;br /&gt;
&lt;br /&gt;
.PHONY: figures paper-sync&lt;br /&gt;
&lt;br /&gt;
figures:&lt;br /&gt;
	python scripts/make_figures.py&lt;br /&gt;
&lt;br /&gt;
paper-sync: figures&lt;br /&gt;
	git -C $(PAPER) pull --rebase&lt;br /&gt;
	git -C $(PAPER) add figures tables&lt;br /&gt;
	git -C $(PAPER) diff --cached --quiet || \&lt;br /&gt;
	  git -C $(PAPER) commit -m &amp;quot;Regenerate figures from my-experiments@$(SHA)&amp;quot;&lt;br /&gt;
	git -C $(PAPER) push&lt;br /&gt;
	@echo &amp;quot;Now click &amp;#039;Pull GitHub changes into Overleaf&amp;#039; in the Overleaf GitHub menu.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now &amp;lt;code&amp;gt;make paper-sync&amp;lt;/code&amp;gt; regenerates everything, skips the commit if nothing actually changed, marks the commit &amp;lt;code&amp;gt;-dirty&amp;lt;/code&amp;gt; if your experiment code had uncommitted changes, and reminds you to pull in Overleaf.&lt;br /&gt;
&lt;br /&gt;
=== When co-authors edit on Overleaf ===&lt;br /&gt;
Before regenerating figures locally, push any Overleaf edits out to GitHub (&amp;#039;&amp;#039;&amp;#039;Menu → GitHub → Push Overleaf changes to GitHub&amp;#039;&amp;#039;&amp;#039;) so that the &amp;lt;code&amp;gt;git pull&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt; picks them up.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- SCREENSHOT: The same GitHub sync dialog, this time highlighting the &amp;quot;Push Overleaf changes to GitHub&amp;quot; button. --&amp;gt;&lt;br /&gt;
[[File:Overleaf-push-to-github.png|thumb|center|500px|Sending Overleaf edits back to GitHub.]]&lt;br /&gt;
&lt;br /&gt;
=== Avoiding conflicts ===&lt;br /&gt;
Conflicts are rare if every file has exactly one &amp;quot;owner&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;figures/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;tables/&amp;lt;/code&amp;gt; belong to your code.&amp;#039;&amp;#039;&amp;#039; Never edit them by hand on Overleaf; the next regeneration will silently overwrite your changes. Change the formatting in the code that generates them instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #228B22; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;.tex&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;.bib&amp;lt;/code&amp;gt; files belong to people.&amp;#039;&amp;#039;&amp;#039; Write them on Overleaf (or locally, then push), and always pull before you push figures.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why Not a Git Submodule? ==&lt;br /&gt;
Git submodules are the &amp;quot;official&amp;quot; way to put one repository inside another, so it is natural to ask why this workflow avoids them.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; |&lt;br /&gt;
! style=&amp;quot;background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; | Gitignored Clone&lt;br /&gt;
! style=&amp;quot;background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; | Git Submodule&lt;br /&gt;
! style=&amp;quot;background-color: #e9ecef; padding: 10px; text-align: left;&amp;quot; | Git Subtree&lt;br /&gt;
|- style=&amp;quot;background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Experiment repo records the paper version&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | Yes (a pointer) || style=&amp;quot;padding: 10px;&amp;quot; | Yes (full history)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Extra commit in experiment repo per paper change&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | Yes || style=&amp;quot;padding: 10px;&amp;quot; | Yes&lt;br /&gt;
|- style=&amp;quot;background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Paper history mixed into code history&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Special clone instructions for collaborators&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | No || style=&amp;quot;padding: 10px;&amp;quot; | &amp;lt;code&amp;gt;--recurse-submodules&amp;lt;/code&amp;gt; || style=&amp;quot;padding: 10px;&amp;quot; | No&lt;br /&gt;
|- style=&amp;quot;background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 10px;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Link between figure and code version&amp;#039;&amp;#039;&amp;#039; || style=&amp;quot;padding: 10px;&amp;quot; | Commit message || style=&amp;quot;padding: 10px;&amp;quot; | Automatic || style=&amp;quot;padding: 10px;&amp;quot; | Automatic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A submodule gives you exact, automatic provenance, but at a price: every change to the paper, including every typo fix a co-author pushes from Overleaf, needs a matching &amp;quot;bump the submodule&amp;quot; commit in your experiment repository. For a paper that is edited daily, that noise usually isn&amp;#039;t worth it. The gitignored clone trades automatic provenance for a scripted commit message, which is plenty in practice.&lt;br /&gt;
&lt;br /&gt;
== Variations ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #005A9C; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Skip GitHub with Overleaf&amp;#039;s Git integration:&amp;#039;&amp;#039;&amp;#039; Overleaf Premium also lets you clone a project directly (&amp;lt;code&amp;gt;git clone https://git.overleaf.com/&amp;lt;project-id&amp;gt;&amp;lt;/code&amp;gt;, using a Git token generated in Account Settings). Clone that into the gitignored directory instead, and a &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; lands in Overleaf immediately with no pull button. The catch is that you no longer get a GitHub copy of the paper for issues, reviews, or backups.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f8f9fa; border-left: 4px solid #FFD43B; padding: 15px; margin-bottom: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Generating figures on a cluster:&amp;#039;&amp;#039;&amp;#039; Clone the paper repository on the cluster as well and run &amp;lt;code&amp;gt;make paper-sync&amp;lt;/code&amp;gt; there. Alternatively, point &amp;lt;code&amp;gt;PAPER_DIR&amp;lt;/code&amp;gt; at a scratch directory on the cluster, copy the outputs back to your laptop, and push from there.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
{| style=&amp;quot;width: 100%; border-collapse: collapse; margin-bottom: 10px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: #f8d7da; color: #721c24; padding: 10px; text-align: left;&amp;quot; | Things to Watch Out For&lt;br /&gt;
|- style=&amp;quot;vertical-align: top; background-color: #f8f9fa;&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot; |&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Forgetting the Overleaf pull:&amp;#039;&amp;#039;&amp;#039; Your figures are on GitHub, but Overleaf still shows the old ones. The reminder in the Makefile helps.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pushing from both sides at once:&amp;#039;&amp;#039;&amp;#039; If Overleaf has unpushed edits and GitHub has new figures, Overleaf has to merge them. Push from Overleaf first, pull locally, then push your figures.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Bloating the paper repository:&amp;#039;&amp;#039;&amp;#039; PNGs and timestamped PDFs change on every run. Prefer vector PDFs with the timestamp removed, and only commit figures that actually changed.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Overleaf project limits:&amp;#039;&amp;#039;&amp;#039; Overleaf limits project size and file counts. Keep raw outputs, checkpoints, and intermediate data in the experiment repository (or out of Git entirely); only put paper-ready figures and tables in &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Working on branches:&amp;#039;&amp;#039;&amp;#039; Overleaf only syncs one branch. Stick to the default branch inside &amp;lt;code&amp;gt;paper/&amp;lt;/code&amp;gt;; anything on another branch won&amp;#039;t show up in Overleaf.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e8f4f8; padding: 15px; text-align: center; margin-top: 20px; font-style: italic;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; This is just one of several ways to connect your code and your paper. If the manual pull button bothers you, try the Git integration variation above; if you want airtight provenance, a submodule may be worth the extra commits.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</description>
			<pubDate>Sun, 18 Oct 2026 22:51:47 GMT</pubDate>
			<dc:creator>Ajshen</dc:creator>
			<comments>https://info.stat.cmu.edu/index.php?title=Talk:Overleaf_GitHub_Integration</comments>
		</item>
</channel></rss>