<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Young Leaders in Tech: Draft Posts Not Yet Published]]></title><description><![CDATA[This Section is Part of an experiment: publishing rough-but-timely versions of half-finished posts to a separate Drafts feed, instead of letting them rot in a folder while the tooling moves on without them. 

Expect accurate steps, missing screenshots, and the occasional bit that needs a second pass. 

If you spot something to add, fix, or improve, let me know - I'd rather get it right than perfect.]]></description><link>https://www.youngleaders.tech/s/draft-posts-not-yet-published</link><image><url>https://substackcdn.com/image/fetch/$s_!QgQ6!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00c28ce6-7dc8-49ab-a481-994f79d0c27a_1280x1280.png</url><title>Young Leaders in Tech: Draft Posts Not Yet Published</title><link>https://www.youngleaders.tech/s/draft-posts-not-yet-published</link></image><generator>Substack</generator><lastBuildDate>Mon, 18 May 2026 09:22:44 GMT</lastBuildDate><atom:link href="https://www.youngleaders.tech/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[John Conneely]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[youngleadersintech@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[youngleadersintech@substack.com]]></itunes:email><itunes:name><![CDATA[John Conneely]]></itunes:name></itunes:owner><itunes:author><![CDATA[John Conneely]]></itunes:author><googleplay:owner><![CDATA[youngleadersintech@substack.com]]></googleplay:owner><googleplay:email><![CDATA[youngleadersintech@substack.com]]></googleplay:email><googleplay:author><![CDATA[John Conneely]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[[DRAFT] Print PDF this blog, drop it in Claude Code, get a fully kitted Ghossty terminal]]></title><description><![CDATA[You read it for the screenshots. Your agent reads it for the commands.]]></description><link>https://www.youngleaders.tech/p/terminal-setup-pdf-meta-guide</link><guid isPermaLink="false">https://www.youngleaders.tech/p/terminal-setup-pdf-meta-guide</guid><dc:creator><![CDATA[John Conneely]]></dc:creator><pubDate>Sun, 17 May 2026 22:21:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bMJ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bMJ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bMJ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 424w, https://substackcdn.com/image/fetch/$s_!bMJ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 848w, https://substackcdn.com/image/fetch/$s_!bMJ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!bMJ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bMJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:737681,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.youngleaders.tech/i/196949342?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bMJ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 424w, https://substackcdn.com/image/fetch/$s_!bMJ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 848w, https://substackcdn.com/image/fetch/$s_!bMJ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 1272w, https://substackcdn.com/image/fetch/$s_!bMJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b295921-998a-45cb-bb68-353312dbfa4b_2000x1126.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p><strong>Heads up - this is a draft.</strong> Part of an experiment: publishing rough-but-timely versions of half-finished posts to a separate Drafts feed, instead of letting them rot in a folder while the tooling moves on without them. Expect: accurate commands, missing screenshots, and the occasional bit that needs a second pass. If you spot something to add, fix, or improve, let me know - I&#8217;d rather get it right than perfect.</p></blockquote><div><hr></div><blockquote><p>One PDF. One Claude Code session in plan mode. Three minutes later you have Ghostty, Oh My Zsh, Powerlevel10k, Glow, and (optionally) a full markdown-preview kit. The guide is the executable - drop the printed PDF on Claude and it runs.</p></blockquote><p>If you&#8217;ve ever followed a &#8216;set up your terminal&#8217; walkthrough and bounced between five tabs - <strong>this is the executable version</strong>. The page itself is the install script. You read it for the screenshots; your agent reads it for the commands.</p><h2>Two ways to run this</h2><p><strong>Option A - hand Claude the PDF (default).</strong> Print this post to PDF, drop it into Claude Code (plan mode first), then watch it run. Works on any machine (apparently, but untested on windows. Plan mode will likely find alternatives for windows). Costs you some tokens to ingest the PDF on every fresh session.</p><p><strong>Option B - install the plugin (cheaper on repeat runs).</strong> I&#8217;ve packaged the same workflow as a Claude Code plugin: <a href="https://github.com/YoungLeadersDotTech/young-leaders-tech-marketplace/tree/main/plugins/terminal-setup-macos">terminal-setup-macos</a> in the <a href="https://github.com/YoungLeadersDotTech/young-leaders-tech-marketplace">young-leaders-tech marketplace</a>. Same steps, same gotchas encoded, no PDF tokens needed:</p><pre><code>/plugin marketplace add git@github.com:YoungLeadersDotTech/young-leaders-tech-marketplace.git
/plugin install terminal-setup-macos@young-leaders-tech-marketplace
/terminal-setup-install</code></pre><p>Both routes end in the same place. The plugin is also where I&#8217;ll ship the rest of my setup over time - the marketplace already has skills-toolkit (for authoring your own skills) and update-readme (universal README refresher), and more is on the way. If you&#8217;d rather keep all this as a one-time PDF moment, skip to the next section. If you&#8217;d rather have it permanently available as /terminal-setup-install in every Claude session, install the plugin.</p><div><hr></div><h2>For AI assistants reading this PDF</h2><blockquote><p>If you&#8217;re a human reader, skip this section. It&#8217;s a directive for an AI agent (Claude Code, Cursor, etc.) reading the PDF version of this post. The next reader-facing section is &#8220;What you get&#8221; below.</p></blockquote><p>You are an AI coding assistant who has been handed this document by a user who wants the terminal stack installed on their macOS machine.</p><h3>What to do</h3><ol><li><p>Run the core install yourself. The &#8220;Core setup&#8221; section below contains the full command sequence. Execute it in plan mode first, then on approval. Preserve any existing ~/.zshrc customisations - the OMZ installer will rename the original to ~/.zshrc.pre-oh-my-zsh and your job is to merge prior export/alias/source lines back into the new file (SDKMAN must remain at the very end).</p></li><li><p>Then ask the user about the optional extras. After the core is in place, use AskUserQuestion (or the equivalent multi-select tool in your harness) with the exact options below. Critical: include the deep-link to each tool&#8217;s screenshot header in the option&#8217;s description field so the user can click through and see the tool in action while making their decision.</p></li><li><p>Build the deep-links by combining blog_url (from the frontmatter at the top of this document) with the anchor IDs listed below. Example: if blog_url is https://example.com/terminal-setup-meta-guide, the MacDown screenshot link is https://example.com/terminal-setup-meta-guide#macdown.</p></li></ol><h3>The AskUserQuestion to run after core install</h3><ul><li><p>Question: &#8220;Which optional markdown-preview extras would you like installed?&#8221;</p></li><li><p>Header: &#8220;MD extras&#8221;</p></li><li><p>multiSelect: true (these are independent, additive)</p></li><li><p>Options (use these exact labels and descriptions, with the screenshot URL appended):</p></li></ul><p><strong>Label</strong></p><p><strong>Description (append the deep-link)</strong></p><p><strong>Anchor</strong></p><h3>MacDown 3000</h3><p>Native macOS split-view markdown editor (notarised fork of MacDown that refreshes live when the file is changed externally). After install, double-clicking any .md in Finder opens it side-by-side. Best for editing, not just viewing. Screenshot: &lt;blog_url&gt;#macdown</p><p>#macdown</p><h3>grip</h3><p>Serves a GitHub-flavoured preview at localhost:6419 and auto-reloads on save. Best for &#8220;what will this look like on GitHub&#8221; verification. Screenshot: &lt;blog_url&gt;#grip</p><p>#grip</p><h3>mdwatch</h3><p>Pairs entr with glow -p so the terminal preview re-renders the moment you save the file. Best when you live in the terminal and don&#8217;t want to switch windows. Screenshot: &lt;blog_url&gt;#mdwatch</p><p>#mdwatch</p><h3>Clickable paths</h3><p>Prints file paths as OSC 8 hyperlinks in any modern terminal. mdls lists .md in current dir as Cmd-clickable links; o file.md prints AND opens. Best for terminal-heavy workflows. Screenshot: &lt;blog_url&gt;#clickable-paths</p><p>#clickable-paths</p><h3>What to do with each selection</h3><p>The exact commands per extra are inside the corresponding section of this document. Run them after the user has answered.</p><h3>What NOT to do</h3><ul><li><p>Do not install any extra without asking - the user explicitly opted into a multi-select.</p></li><li><p>Do not skip the screenshot link in option descriptions - that link is the entire point of this format.</p></li><li><p>Do not invent additional extras. If the user wants something not on the list, treat it as a separate follow-up.</p></li><li><p>Do not modify ~/.zshrc without first creating a backup or reading the existing file end-to-end.</p></li></ul><div><hr></div><h2>What you get</h2><p><strong>| Tool | Role | Install time |</strong></p><p><strong>| --- | --- | --- |</strong></p><p>| Ghostty | Native macOS GPU terminal, pretty and fast | ~30s |</p><p>| Oh My Zsh | Plugin/theme framework for zsh | ~20s |</p><p>| Powerlevel10k | The prompt theme everyone copies | ~10s + interactive wizard |</p><p>| Glow | Terminal markdown viewer | ~5s |</p><p>| MesloLGS Nerd Font | Powerline + icon glyphs | ~15s |</p><p>Plus, optionally: MacDown 3000, grip, entr, duti, and the OSC 8 clickable-path setup.</p><blockquote><p><em>Add a hero screenshot here showing the final terminal: dracula theme + p10k prompt + a glow-rendered README.</em></p></blockquote><div><hr></div><h2>Why &#8220;drop the PDF on Claude&#8221; works</h2><p>PDFs preserve fenced code blocks as text. Plan mode means Claude proposes everything before touching disk. Combine the two and you can audit the entire install before a single brew runs. If something looks wrong - reject the plan, edit, retry. No copy-paste loop.</p><p>The trick: a guide written cleanly enough for a human is also a structured prompt. Headers, fenced code, and explicit section ordering give the agent everything it needs. The For AI assistants section at the top is what tells the agent to pause at the choice points and ask <em>you</em> about the optional extras - with the screenshot links visible in the picker.</p><div><hr></div><h2>Core setup</h2><blockquote><p><em>Add screenshot of the Ghostty + p10k prompt with dracula theme.</em></p></blockquote><h3>1. Ghostty (terminal)</h3><pre><code>brew install --cask ghostty</code></pre><p>Config goes at ~/.config/ghostty/config. Note: the older guide pointed at ~/Library/Application Support/com.mitchellh.ghostty/ - both work, but ~/.config/ is the canonical path and easier to back up:</p><pre><code>theme = dracula
background = #141026
background-opacity = 0.98
background-blur = true
working-directory = ~/Projects
font-family = &#8220;MesloLGS NF&#8221;
font-size = 16
font-feature = -liga
font-thicken = true
window-padding-x = 10
window-padding-y = 10
shell-integration = zsh</code></pre><p>Gotcha: shell-integration = true triggers a Configuration Errors dialog. It must be a shell name (zsh, bash, or fish).</p><h3>2. MesloLGS Nerd Font</h3><pre><code>brew install --cask font-meslo-lg-nerd-font</code></pre><p>This must happen <em>before</em> the Powerlevel10k wizard runs - the wizard&#8217;s character-set preview only renders correctly with the Nerd Font present.</p><h3>3. Dracula theme for Ghostty</h3><pre><code>DIR=&#8221;$HOME/.config/ghostty&#8221;
mkdir -p &#8220;$DIR/themes&#8221;
TEMP=$(mktemp -d)
git clone --depth=1 https://github.com/dracula/ghostty.git &#8220;$TEMP/d&#8221;
cp &#8220;$TEMP/d/dracula&#8221; &#8220;$DIR/themes/&#8221;
rm -rf &#8220;$TEMP&#8221;</code></pre><p>theme = dracula in the config above picks it up automatically.</p><h3>4. Oh My Zsh</h3><pre><code>RUNZSH=no KEEP_ZSHRC=no sh -c &#8220;$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&#8221;</code></pre><p>RUNZSH=no stops the installer from spawning a child zsh (which blocks scripted flows). KEEP_ZSHRC=no lets it back up the existing .zshrc to ~/.zshrc.pre-oh-my-zsh and write a fresh template.</p><blockquote><p><em>Add screenshot of the OMZ banner appearing in Ghostty.</em></p></blockquote><h3>5. Powerlevel10k theme</h3><pre><code>git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k</code></pre><p>Set in ~/.zshrc:</p><pre><code>ZSH_THEME=&#8221;powerlevel10k/powerlevel10k&#8221;</code></pre><h3>6. Plugins (autosuggestions + fast-syntax-highlighting)</h3><pre><code>git clone --depth=1 https://github.com/zsh-users/zsh-autosuggestions.git \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions</code></pre><pre><code>git clone --depth=1 https://github.com/zdharma-continuum/fast-syntax-highlighting.git \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting</code></pre><p>In ~/.zshrc:</p><pre><code>plugins=(git brew macos zsh-autosuggestions fast-syntax-highlighting)</code></pre><blockquote><p><em>Add screenshot of gi&lt;TAB&gt; showing autosuggestion + a coloured invalid command.</em></p></blockquote><h3>7. Glow (markdown viewer)</h3><pre><code>brew install glow</code></pre><p>Aliases (append to ~/.zshrc):</p><pre><code>alias readme=&#8221;glow README.md&#8221;
alias mdless=&#8221;glow -p&#8221;</code></pre><blockquote><p><em>Add screenshot of glow README.md showing a styled doc.</em></p></blockquote><h3>8. Restoring your previous .zshrc</h3><p>If your old .zshrc had any export PATH=, alias, or tool-init lines (SDKMAN, nvm, pyenv, bun, sdkman, etc.) - they&#8217;re now in ~/.zshrc.pre-oh-my-zsh. Append them back to the new ~/.zshrc <em>after</em> the source $ZSH/oh-my-zsh.sh line.</p><p>SDKMAN must be at the very end of the file - per its own installer comment. Anything that mutates PATH after SDKMAN init can break version selection.</p><h3>9. Run the wizard</h3><pre><code>p10k configure</code></pre><p>Follow the wizard. You&#8217;ll pick prompt style, character set (Unicode), colours, icons, git status, and time display. The wizard appends [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh to your ~/.zshrc automatically.</p><blockquote><p><em>Add screenshot of the wizard&#8217;s first &#8220;Does this look like a diamond?&#8221; prompt.</em></p></blockquote><h3>10. Sanity tests</h3><pre><code>zsh -i -c &#8216;echo OK&#8217;
zsh -i -c &#8216;type p10k&#8217;
zsh -i -c &#8216;glow --version&#8217;</code></pre><p>If all three return cleanly, the core is in.</p><div><hr></div><h2>Optional extras</h2><p>These are the four add-ons your AI assistant will ask you about. You can install any combination, in any order, after the core is done.</p><h3>MacDown 3000</h3><blockquote><p><em>Add screenshot of MacDown 3000&#8217;s split-view: raw markdown on the left, rendered preview on the right.</em></p></blockquote><p>An honest note before you install. I started this guide on the original MacDown. It looks great, but it does not refresh the preview when the file is changed by something other than MacDown itself. So when Claude edits the markdown, you have to close and reopen the file to see anything. That defeats the whole point. I switched to <strong>MacDown 3000</strong>, a notarised fork by Schuyler Erle that fixes exactly this. Same look and feel, live refresh works, install is one brew command.</p><p>If you previously installed the original macdown cask, uninstall it first (the two casks conflict):</p><pre><code>brew uninstall --cask macdown   # only if it&#8217;s already installed
brew install --cask macdown-3000
brew install duti
duti -s app.macdown.macdown3000 .md all
duti -s app.macdown.macdown3000 .markdown all</code></pre><p>The bundle ID is app.macdown.macdown3000 (different from the original MacDown&#8217;s com.uranusjr.macdown). After registration, double-clicking any .md file in Finder opens MacDown 3000 directly, and open file.md from the terminal does the same. MacDown 3000 is notarised, so no Gatekeeper &#8220;unidentified developer&#8221; dance.</p><p><strong>Best for</strong>: writing markdown drafts where you want the rendered version visible while you type - and where you want an agent&#8217;s edits to show up live.</p><h3>grip</h3><blockquote><p><em>Add screenshot of grip rendering a README in Chrome with the GitHub stylesheet.</em></p></blockquote><pre><code>brew install grip</code></pre><p>Alias:</p><pre><code>alias preview=&#8221;grip&#8221;</code></pre><p><strong>Usage</strong>: preview README.md, then open http://localhost:6419 in your browser. Saves to the file auto-reload the page.</p><p><strong>Best for</strong>: pre-flight check on what a README will look like once pushed to GitHub. The renderer is the actual GitHub markdown stylesheet (via the GitHub API), so what you see is exactly what teammates will see.</p><h3>mdwatch</h3><blockquote><p><em>Add screenshot of a terminal split: editor in one pane, mdwatch auto-rendering in the other.</em></p></blockquote><pre><code>brew install entr</code></pre><p><strong>Alias</strong>:</p><pre><code>alias mdwatch=&#8217;f() { echo &#8220;$1&#8221; | entr -c glow -p &#8220;$1&#8221; }; f&#8217;</code></pre><p><strong>Usage</strong>: mdwatch notes.md. Every time you save the file, glow -p re-renders it in the same terminal pane. Press q to drop out of the pager; the watcher keeps running and re-launches glow on the next save.</p><p><strong>Best for</strong>: terminal-only workflows where flipping to a browser breaks flow. Works well with Ghostty&#8217;s split-pane shortcut (Cmd+D) - editor on one side, live render on the other.</p><h3>Clickable paths</h3><blockquote><p><em>Add screenshot of mdls output: a list of .md filenames, each underlined and Cmd-clickable.</em></p></blockquote><p>This one assumes you have the OSC 8 path utility at ~/.claude/global-utils/clickable-paths/format-clickable-path.js. If you don&#8217;t, skip this section or grab the utility from your team&#8217;s global-utils repo first.</p><p>Add to ~/.zshrc:</p><pre><code>mdls() {
  local dir=&#8221;${1:-.}&#8221;
  local util=&#8221;$HOME/.claude/global-utils/clickable-paths/format-clickable-path.js&#8221;
  if [[ ! -f &#8220;$util&#8221; ]]; then
    echo &#8220;format-clickable-path.js not found at $util&#8221; &gt;&amp;2
    return 1
  fi
  for f in &#8220;$dir&#8221;/*.md(N); do
    node -e &#8220;console.log(require(&#8217;$util&#8217;).formatClickablePathSafe(&#8217;$(realpath &#8220;$f&#8221;)&#8217;));&#8221;
  done
}
o() {
  if [[ -z &#8220;$1&#8221; ]]; then echo &#8220;usage: o &lt;file&gt;&#8221; &gt;&amp;2; return 1; fi
  local util=&#8221;$HOME/.claude/global-utils/clickable-paths/format-clickable-path.js&#8221;
  local abs=&#8221;$(realpath &#8220;$1&#8221; 2&gt;/dev/null || echo &#8220;$1&#8221;)&#8221;
  if [[ -f &#8220;$util&#8221; ]]; then
    node -e &#8220;console.log(require(&#8217;$util&#8217;).formatClickablePathSafe(&#8217;$abs&#8217;));&#8221;
  else
    echo &#8220;$abs&#8221;
  fi
  open &#8220;$abs&#8221;
}</code></pre><p>Usage:</p><pre><code>mdls            # list .md in current dir as clickable links
mdls ~/docs     # same, but in a specific dir
o README.md     # print clickable + open in MacDown 3000</code></pre><p>Best for: terminal-heavy workflows where you spot a file via ls or find and want to open it without the copy-paste-open dance. Works in Ghostty, iTerm2, WezTerm, VS Code&#8217;s integrated terminal. Falls back to plain text in terminals that don&#8217;t support OSC 8 - no visual corruption.</p><div><hr></div><h2>Troubleshooting</h2><p><strong>Powerlevel10k icons render as boxes or ?</strong></p><p>All three of these must be true: Nerd Font installed, font set in Ghostty config, Ghostty fully restarted (Cmd+Q, not just a new tab). New tabs don&#8217;t reload the font.</p><p><strong>Ghostty shows &#8220;Configuration Errors&#8221;</strong></p><p>You set shell-integration = true somewhere. It needs a shell name: zsh, bash, or fish. Fix the line and click &#8220;Reload Configuration&#8221; in the dialog.</p><p><strong>open README.md opens in TextEdit, not MacDown 3000</strong></p><p>The duti registration didn&#8217;t take. Re-run:</p><pre><code>duti -s app.macdown.macdown3000 .md all
duti -x md   # verify</code></pre><p>If the bundle ID is unknown to LaunchServices, launch MacDown 3000 once via Spotlight to register it, then retry.</p><p><strong>SDKMAN/nvm/pyenv broke after Oh My Zsh install</strong></p><p>Your old .zshrc was backed up to ~/.zshrc.pre-oh-my-zsh. Append the relevant init blocks back into the new ~/.zshrc. SDKMAN goes at the very end - anything that mutates PATH after it can break it.</p><p><strong>mdls says &#8220;format-clickable-path.js not found&#8221;</strong></p><p>The function depends on ~/.claude/global-utils/clickable-paths/format-clickable-path.js which isn&#8217;t part of this guide. Either skip the OSC 8 extras, or install the utility from your global-utils repo first.</p><div><hr></div><h2>How to use this guide as a prompt</h2><ol><li><p>Print this post to PDF (browser &#8594; Print &#8594; Save as PDF, or your favourite tool).</p></li><li><p>Open Claude Code (or your agent of choice). Hit /plan or whatever your harness&#8217;s plan-mode entry is.</p></li><li><p>Drop the PDF in the conversation. Say &#8220;install this for me&#8221;.</p></li><li><p>Watch it propose every step before it runs anything.</p></li><li><p>Approve. Three minutes later you have a kitted terminal.</p></li></ol><p>The agent will pause once - to ask you about the optional extras, with the screenshot links from this post visible in the picker. Click through, decide, continue.</p><div><hr></div><h2>Why I built this</h2><p>The original Ghostty/OMZ/p10k walkthrough was good but linear. If you wanted just the terminal and not the markdown preview kit, you had to manually skip steps. If you already had .zshrc customisations, you had to remember to back them up. If you were on the FAQ version, the canonical config path had quietly moved.</p><p>What I genuinely wanted was a guide where the agent does the install and the post does the explaining. The post has the why (with screenshots), the agent does the what. Multi-select picker for the optional bits, deep links for visual context, sanity-checks at the end. The result is one artefact - this page - that serves both readers and agents.</p><p>Meta as hell. But it works.</p><div><hr></div><h2>Credits and source material</h2><ul><li><p>Ghostty: <a href="https://ghostty.org">ghostty.org</a></p></li><li><p>Oh My Zsh: <a href="https://ohmyz.sh">ohmyz.sh</a></p></li><li><p>Powerlevel10k: <a href="https://github.com/romkatv/powerlevel10k">github.com/romkatv/powerlevel10k</a></p></li><li><p>Glow: <a href="https://github.com/charmbracelet/glow">github.com/charmbracelet/glow</a></p></li><li><p>MacDown 3000: <a href="https://macdown.app">macdown.app</a> (notarised fork of the original <a href="https://macdown.uranusjr.com">MacDown</a>)</p></li><li><p>grip: <a href="https://github.com/joeyespo/grip">github.com/joeyespo/grip</a></p></li><li><p>entr: <a href="https://eradman.com/entrproject">eradman.com/entrproject</a></p></li><li><p>duti: <a href="https://github.com/moretension/duti">github.com/moretension/duti</a></p></li></ul><p>The &#8220;drop a PDF on the agent&#8221; pattern was developed alongside this post. If you&#8217;ve found better structures for prompt-as-document, let me know - I&#8217;d love to compare notes.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.youngleaders.tech/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.youngleaders.tech/subscribe?"><span>Subscribe now</span></a></p><p><em>If you found this useful, I&#8217;d love if you subscribed! I&#8217;m trying to build a bit of a following to try and help folks in the industry and make their jobs a little bit easier.</em></p>]]></content:encoded></item></channel></rss>