<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 0xkoji</title>
    <description>The latest articles on DEV Community by 0xkoji (@0xkoji).</description>
    <link>https://dev.to/0xkoji</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png</url>
      <title>DEV Community: 0xkoji</title>
      <link>https://dev.to/0xkoji</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/0xkoji"/>
    <language>en</language>
    <item>
      <title>Mastering Hermes: All the Slash Commands(119 commands) You’ll Ever Need</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Wed, 24 Jun 2026 06:15:27 +0000</pubDate>
      <link>https://dev.to/0xkoji/mastering-hermes-all-the-slash-commands119-commands-youll-ever-need-3e94</link>
      <guid>https://dev.to/0xkoji/mastering-hermes-all-the-slash-commands119-commands-youll-ever-need-3e94</guid>
      <description>&lt;p&gt;Hermes has the command that list the chat commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/commands [page]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes has the command that list the chat commands.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/commands [page]&lt;/code&gt;&lt;br&gt;
The version I use is v0.17.0 and it has 119 slash commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  page1
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/start&lt;/code&gt; -- Acknowledge platform start pings without a reply&lt;br&gt;
&lt;code&gt;/new [name]&lt;/code&gt; -- Start a new session (fresh session ID + history) (alias: &lt;code&gt;/reset&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/topic [off|help|session-id]&lt;/code&gt; -- Enable or inspect Telegram DM topic sessions&lt;br&gt;
&lt;code&gt;/retry&lt;/code&gt; -- Retry the last message (resend to agent)&lt;br&gt;
&lt;code&gt;/undo [N]&lt;/code&gt; -- Back up N user turns and re-prompt (default 1)&lt;br&gt;
&lt;code&gt;/title [name]&lt;/code&gt; -- Set a title for the current session&lt;br&gt;
&lt;code&gt;/branch [name]&lt;/code&gt; -- Branch the current session (explore a different path) (alias: &lt;code&gt;/fork&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/compress [here [N] | focus topic]&lt;/code&gt; -- Compress conversation context (add 'here [N]' to keep recent N turns)&lt;br&gt;
&lt;code&gt;/rollback [number]&lt;/code&gt; -- List or restore filesystem checkpoints&lt;br&gt;
&lt;code&gt;/stop&lt;/code&gt; -- Kill all running background processes&lt;br&gt;
&lt;code&gt;/approve [session|always]&lt;/code&gt; -- Approve a pending dangerous command&lt;br&gt;
&lt;code&gt;/deny&lt;/code&gt; -- Deny a pending dangerous command&lt;br&gt;
&lt;code&gt;/background &amp;lt;prompt&amp;gt;&lt;/code&gt; -- Run a prompt in the background (alias: &lt;code&gt;/bg&lt;/code&gt;, &lt;code&gt;/btw&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/agents&lt;/code&gt; -- Show active agents and running tasks (alias: &lt;code&gt;/tasks&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/queue &amp;lt;prompt&amp;gt;&lt;/code&gt; -- Queue a prompt for the next turn (doesn't interrupt) (alias: &lt;code&gt;/q&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/steer &amp;lt;prompt&amp;gt;&lt;/code&gt; -- Inject a message after the next tool call without interrupting&lt;br&gt;
&lt;code&gt;/goal [text | pause | resume | clear | status]&lt;/code&gt; -- Set a standing goal Hermes works on across turns until achieved&lt;br&gt;
&lt;code&gt;/subgoal [text | remove N | clear]&lt;/code&gt; -- Add or manage extra criteria on the active goal&lt;br&gt;
&lt;code&gt;/status&lt;/code&gt; -- Show session, model, token, and context info&lt;br&gt;
&lt;code&gt;/whoami&lt;/code&gt; -- Show your slash command access (admin / user)&lt;/p&gt;

&lt;h3&gt;
  
  
  page2
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/profile&lt;/code&gt; -- Show active profile name and home directory&lt;br&gt;
&lt;code&gt;/sethome&lt;/code&gt; -- Set this chat as the home channel (alias: &lt;code&gt;/set-home&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/resume [name]&lt;/code&gt; -- Resume a previously-named session&lt;br&gt;
&lt;code&gt;/sessions&lt;/code&gt; -- Browse and resume previous sessions&lt;br&gt;
&lt;code&gt;/model [model] [--provider name] [--global|--session] [--refresh]&lt;/code&gt; -- Switch model (persists by default)&lt;br&gt;
&lt;code&gt;/codex-runtime [auto|codex_app_server]&lt;/code&gt; -- Toggle codex app-server runtime for OpenAI/Codex models&lt;br&gt;
&lt;code&gt;/personality [name]&lt;/code&gt; -- Set a predefined personality&lt;br&gt;
&lt;code&gt;/footer [on|off|status]&lt;/code&gt; -- Toggle gateway runtime-metadata footer on final replies&lt;br&gt;
&lt;code&gt;/yolo&lt;/code&gt; -- Toggle YOLO mode (skip all dangerous command approvals)&lt;br&gt;
&lt;code&gt;/reasoning [level|show|hide]&lt;/code&gt; -- Manage reasoning effort and display&lt;br&gt;
&lt;code&gt;/fast [normal|fast|status]&lt;/code&gt; -- Toggle fast mode — OpenAI Priority Processing / Anthropic Fast Mode (Normal/Fast)&lt;br&gt;
&lt;code&gt;/voice [on|off|tts|status]&lt;/code&gt; -- Toggle voice mode&lt;br&gt;
&lt;code&gt;/memory [pending|approve|reject|approval] [id|on|off]&lt;/code&gt; -- Review pending memory writes / toggle the approval gate&lt;br&gt;
&lt;code&gt;/bundles&lt;/code&gt; -- List skill bundles (aliases &lt;code&gt;/&amp;amp;lt;name&amp;amp;gt;&lt;/code&gt; for multiple skills)&lt;br&gt;
&lt;code&gt;/suggestions [accept|dismiss N | catalog]&lt;/code&gt; -- Review suggested automations (accept/dismiss) (alias: &lt;code&gt;/suggest&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/blueprint [name] [slot=value ...]&lt;/code&gt; -- Set up an automation from a blueprint template (alias: &lt;code&gt;/bp&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/curator [subcommand]&lt;/code&gt; -- Background skill maintenance (status, run, pin, archive, list-archived)&lt;br&gt;
&lt;code&gt;/kanban [subcommand]&lt;/code&gt; -- Multi-profile collaboration board (tasks, links, comments)&lt;br&gt;
&lt;code&gt;/reload-mcp&lt;/code&gt; -- Reload MCP servers from config&lt;br&gt;
&lt;code&gt;/reload-skills&lt;/code&gt; -- Re-scan ~/.hermes/skills/ for newly installed or removed skills&lt;/p&gt;

&lt;h3&gt;
  
  
  page3
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/commands [page]&lt;/code&gt; -- Browse all commands and skills (paginated)&lt;br&gt;
&lt;code&gt;/help&lt;/code&gt; -- Show available commands&lt;br&gt;
&lt;code&gt;/restart&lt;/code&gt; -- Gracefully restart the gateway after draining active runs&lt;br&gt;
&lt;code&gt;/usage&lt;/code&gt; -- Show token usage and rate limits for the current session&lt;br&gt;
&lt;code&gt;/credits&lt;/code&gt; -- Show Nous credit balance and top up&lt;br&gt;
&lt;code&gt;/insights [days]&lt;/code&gt; -- Show usage insights and analytics&lt;br&gt;
&lt;code&gt;/platform &amp;lt;pause|resume|list&amp;gt; [name]&lt;/code&gt; -- Pause, resume, or list a failing gateway platform&lt;br&gt;
&lt;code&gt;/update&lt;/code&gt; -- Update Hermes Agent to the latest version&lt;br&gt;
&lt;code&gt;/version&lt;/code&gt; -- Show Hermes Agent version (alias: &lt;code&gt;/v&lt;/code&gt;)&lt;br&gt;
&lt;code&gt;/debug&lt;/code&gt; -- Upload debug report (system info + logs) and get shareable links&lt;/p&gt;

&lt;p&gt;&lt;code&gt;⚡ Skill Commands:&lt;/code&gt;&lt;br&gt;
&lt;code&gt;/airtable&lt;/code&gt; — Airtable REST API via curl. Records CRUD, filters, upserts.&lt;br&gt;
&lt;code&gt;/architecture-diagram&lt;/code&gt; — Dark-themed SVG architecture/cloud/infra diagrams as HTML.&lt;br&gt;
&lt;code&gt;/arxiv&lt;/code&gt; — Search arXiv papers by keyword, author, category, or ID.&lt;br&gt;
&lt;code&gt;/ascii-art&lt;/code&gt; — ASCII art: pyfiglet, cowsay, boxes, image-to-ascii.&lt;br&gt;
&lt;code&gt;/ascii-video&lt;/code&gt; — ASCII video: convert video/audio to colored ASCII MP4/GIF.&lt;br&gt;
&lt;code&gt;/audiocraft-audio-generation&lt;/code&gt; — AudioCraft: MusicGen text-to-music, AudioGen text-to-sound.&lt;br&gt;
&lt;code&gt;/baoyu-infographic&lt;/code&gt; — Infographics: 21 layouts x 21 styles (信息图, 可视化).&lt;br&gt;
&lt;code&gt;/blogwatcher&lt;/code&gt; — Monitor blogs and RSS/Atom feeds via blogwatcher-cli tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  page4
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/claude-code&lt;/code&gt; — Delegate coding to Claude Code CLI (features, PRs).&lt;br&gt;
&lt;code&gt;/claude-design&lt;/code&gt; — Design one-off HTML artifacts (landing, deck, prototype).&lt;br&gt;
&lt;code&gt;/codebase-inspection&lt;/code&gt; — Inspect codebases w/ pygount: LOC, languages, ratios.&lt;br&gt;
&lt;code&gt;/codex&lt;/code&gt; — Delegate coding to OpenAI Codex CLI (features, PRs).&lt;br&gt;
&lt;code&gt;/comfyui&lt;/code&gt; — Generate images, video, and audio with ComfyUI — install, launch, manage nodes/models, run workflows with parameter injection. Uses the official comfy-cli for lifecycle and direct REST/WebSocket API for execution.&lt;br&gt;
&lt;code&gt;/design-md&lt;/code&gt; — Author/validate/export Google's DESIGN.md token spec files.&lt;br&gt;
&lt;code&gt;/dogfood&lt;/code&gt; — Exploratory QA of web apps: find bugs, evidence, reports.&lt;br&gt;
&lt;code&gt;/evaluating-llms-harness&lt;/code&gt; — lm-eval-harness: benchmark LLMs (MMLU, GSM8K, etc.).&lt;br&gt;
&lt;code&gt;/excalidraw&lt;/code&gt; — Hand-drawn Excalidraw JSON diagrams (arch, flow, seq).&lt;br&gt;
&lt;code&gt;/gif-search&lt;/code&gt; — Search/download GIFs from Tenor via curl + jq.&lt;br&gt;
&lt;code&gt;/github-auth&lt;/code&gt; — GitHub auth setup: HTTPS tokens, SSH keys, gh CLI login.&lt;br&gt;
&lt;code&gt;/github-code-review&lt;/code&gt; — Review PRs: diffs, inline comments via gh or REST.&lt;br&gt;
&lt;code&gt;/github-issues&lt;/code&gt; — Create, triage, label, assign GitHub issues via gh or REST.&lt;br&gt;
&lt;code&gt;/github-pr-workflow&lt;/code&gt; — GitHub PR lifecycle: branch, commit, open, CI, merge.&lt;br&gt;
&lt;code&gt;/github-repo-management&lt;/code&gt; — Clone/create/fork repos; manage remotes, releases.&lt;br&gt;
&lt;code&gt;/google-workspace&lt;/code&gt; — Gmail, Calendar, Drive, Docs, Sheets via gws CLI or Python.&lt;br&gt;
&lt;code&gt;/heartmula&lt;/code&gt; — HeartMuLa: Suno-like song generation from lyrics + tags.&lt;br&gt;
&lt;code&gt;/hermes-agent&lt;/code&gt; — Configure, extend, or contribute to Hermes Agent.&lt;br&gt;
&lt;code&gt;/hermes-agent-skill-authoring&lt;/code&gt; — Author in-repo SKILL.md: frontmatter, validator, structure, and writing-quality principles.&lt;br&gt;
&lt;code&gt;/hermes-gateway-troubleshooting&lt;/code&gt; — Diagnose and fix Hermes gateway messaging-platform connectivity and channel-access issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  page5
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/himalaya&lt;/code&gt; — Himalaya CLI: IMAP/SMTP email from terminal.&lt;br&gt;
&lt;code&gt;/huggingface-hub&lt;/code&gt; — HuggingFace hf CLI: search/download/upload models, datasets.&lt;br&gt;
&lt;code&gt;/humanizer&lt;/code&gt; — Humanize text: strip AI-isms and add real voice.&lt;br&gt;
&lt;code&gt;/jupyter-live-kernel&lt;/code&gt; — Iterative Python via live Jupyter kernel (hamelnb).&lt;br&gt;
&lt;code&gt;/llama-cpp&lt;/code&gt; — llama.cpp local GGUF inference + HF Hub model discovery.&lt;br&gt;
&lt;code&gt;/llm-wiki&lt;/code&gt; — Karpathy's LLM Wiki: build/query interlinked markdown KB.&lt;br&gt;
&lt;code&gt;/manim-video&lt;/code&gt; — Manim CE animations: 3Blue1Brown math/algo videos.&lt;br&gt;
&lt;code&gt;/maps&lt;/code&gt; — Geocode, POIs, routes, timezones via OpenStreetMap/OSRM.&lt;br&gt;
&lt;code&gt;/nano-pdf&lt;/code&gt; — Edit PDF text/typos/titles via nano-pdf CLI (NL prompts).&lt;br&gt;
&lt;code&gt;/node-inspect-debugger&lt;/code&gt; — Debug Node.js via --inspect + Chrome DevTools Protocol CLI.&lt;br&gt;
&lt;code&gt;/notion&lt;/code&gt; — Notion API + ntn CLI: pages, databases, markdown, Workers.&lt;br&gt;
&lt;code&gt;/obsidian&lt;/code&gt; — Read, search, create, and edit notes in the Obsidian vault.&lt;br&gt;
&lt;code&gt;/ocr-and-documents&lt;/code&gt; — Extract text from PDFs/scans (pymupdf, marker-pdf).&lt;br&gt;
&lt;code&gt;/opencode&lt;/code&gt; — Delegate coding to OpenCode CLI (features, PR review).&lt;br&gt;
&lt;code&gt;/openhue&lt;/code&gt; — Control Philips Hue lights, scenes, rooms via OpenHue CLI.&lt;br&gt;
&lt;code&gt;/p5js&lt;/code&gt; — p5.js sketches: gen art, shaders, interactive, 3D.&lt;br&gt;
&lt;code&gt;/plan&lt;/code&gt; — Plan mode: write an actionable markdown plan to .hermes/plans/, no execution. Bite-sized tasks, exact paths, complete code.&lt;br&gt;
&lt;code&gt;/polymarket&lt;/code&gt; — Query Polymarket: markets, prices, orderbooks, history.&lt;br&gt;
&lt;code&gt;/popular-web-designs&lt;/code&gt; — 54 real design systems (Stripe, Linear, Vercel) as HTML/CSS.&lt;br&gt;
&lt;code&gt;/powerpoint&lt;/code&gt; — Create, read, edit .pptx decks, slides, notes, templates.&lt;/p&gt;

&lt;h3&gt;
  
  
  page6
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;/pretext&lt;/code&gt; — Use when building creative browser demos with @chenglou/pretext — DOM-free text layout for ASCII art, typographic flow around obstacles, text-as-geometry games, kinetic typography, and text-powered generative art. Produces single-file HTML demos by default.&lt;br&gt;
&lt;code&gt;/python-debugpy&lt;/code&gt; — Debug Python: pdb REPL + debugpy remote (DAP).&lt;br&gt;
&lt;code&gt;/requesting-code-review&lt;/code&gt; — Pre-commit review: security scan, quality gates, auto-fix.&lt;br&gt;
&lt;code&gt;/research-paper-writing&lt;/code&gt; — Write ML papers for NeurIPS/ICML/ICLR: design→submit.&lt;br&gt;
&lt;code&gt;/segment-anything-model&lt;/code&gt; — SAM: zero-shot image segmentation via points, boxes, masks.&lt;br&gt;
&lt;code&gt;/serving-llms-vllm&lt;/code&gt; — vLLM: high-throughput LLM serving, OpenAI API, quantization.&lt;br&gt;
&lt;code&gt;/simplify-code&lt;/code&gt; — Parallel 3-agent cleanup of recent code changes.&lt;br&gt;
&lt;code&gt;/sketch&lt;/code&gt; — Throwaway HTML mockups: 2-3 design variants to compare.&lt;br&gt;
&lt;code&gt;/songsee&lt;/code&gt; — Audio spectrograms/features (mel, chroma, MFCC) via CLI.&lt;br&gt;
&lt;code&gt;/songwriting-and-ai-music&lt;/code&gt; — Songwriting craft and Suno AI music prompts.&lt;br&gt;
&lt;code&gt;/spike&lt;/code&gt; — Throwaway experiments to validate an idea before build.&lt;br&gt;
&lt;code&gt;/systematic-debugging&lt;/code&gt; — 4-phase root cause debugging: understand bugs before fixing.&lt;br&gt;
&lt;code&gt;/teams-meeting-pipeline&lt;/code&gt; — Operate the Teams meeting summary pipeline via Hermes CLI — summarize meetings, inspect pipeline status, replay jobs, manage Microsoft Graph subscriptions.&lt;br&gt;
&lt;code&gt;/test-driven-development&lt;/code&gt; — TDD: enforce RED-GREEN-REFACTOR, tests before code.&lt;br&gt;
&lt;code&gt;/touchdesigner-mcp&lt;/code&gt; — Control a running TouchDesigner instance via twozero MCP — create operators, set parameters, wire connections, execute Python, build real-time visuals. 36 native tools.&lt;br&gt;
&lt;code&gt;/weights-and-biases&lt;/code&gt; — W&amp;amp;B: log ML experiments, sweeps, model registry, dashboards.&lt;br&gt;
&lt;code&gt;/xurl&lt;/code&gt; — X/Twitter via xurl CLI: post, search, DM, media, v2 API.&lt;br&gt;
&lt;code&gt;/youtube-content&lt;/code&gt; — YouTube transcripts to summaries, threads, blogs.&lt;br&gt;
&lt;code&gt;/yuanbao&lt;/code&gt; — Yuanbao (元宝) groups: @mention users, query info/members.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hermes</category>
      <category>agents</category>
    </item>
    <item>
      <title>Building Terax from Source on an Intel Mac</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Sun, 21 Jun 2026 21:21:42 +0000</pubDate>
      <link>https://dev.to/0xkoji/build-terax-for-intel-mac-1j5a</link>
      <guid>https://dev.to/0xkoji/build-terax-for-intel-mac-1j5a</guid>
      <description>&lt;p&gt;Warp was my favorite for a long time, but as new features were added it gradually became heavier, so I switched to Ghostty. I like Ghostty because it lets you use fragment shaders you’ve written yourself as the background. After that, I tried Cmux, which is based on Ghostty and lets you do even more, and I used it for about a month. However, its RAM usage turned out to be much higher than I expected, so I was thinking I might go back to iTerm2 when I discovered Terax on &lt;a href="https://www.youtube.com/watch?v=3L8htHUzAI4" rel="noopener noreferrer"&gt;Better Stack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unfortunately, Terax doesn’t provide a build for Intel Macs, so I built it myself. In this article, I’ll walk through the steps I took.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Terminal History
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Terminal app&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;iTerm 2 (still using)&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://iterm2.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;iterm2.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Warp&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.warp.dev/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.warp.dev%2Fog%2Fdefault.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.warp.dev/" rel="noopener noreferrer" class="c-link"&gt;
            Warp — The Agentic Development Environment
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Ship faster with AI-powered terminal and coding agents.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.warp.dev%2Ffavicon-16x16.png" width="16" height="16"&gt;
          warp.dev
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ghostty&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://ghostty.org/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fghostty.org%2Fsocial-share-card.jpg" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://ghostty.org/" rel="noopener noreferrer" class="c-link"&gt;
            Ghostty
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Ghostty is a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fghostty.org%2Ffavicon.ico" width="48" height="48"&gt;
          ghostty.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cmux &lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://cmux.com/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcmux.com%2Fen%2Fopengraph-image%3Fd1fb37fb7ad2aa4f" height="399" class="m-0" width="760"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://cmux.com/" rel="noopener noreferrer" class="c-link"&gt;
            cmux — The terminal built for multitasking
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Free and open source macOS terminal for AI coding agents. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcmux.com%2Ffavicon.ico%3Ffavicon.0zch0nfp_izmt.ico" width="32" height="32"&gt;
          cmux.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Terax ← now&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://terax.app/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fterax.app%2Fopengraph-image%3F454764f837731647" height="" class="m-0" width=""&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://terax.app/" rel="noopener noreferrer" class="c-link"&gt;
            Terax - Terminal-first AI-native dev workspace
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Terax is a lightweight AI terminal with a built-in editor, AI agents, voice input, and live web preview. 7 MB on disk, 300 ms cold start. Free and open source. BYOK or fully local via LM Studio.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fterax.app%2Fterax_icon_256.png" width="256" height="256"&gt;
          terax.app
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I loved Warp but &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A lightweight AI terminal with a built-in editor, AI agents, and live web preview. 7 MB on disk. 300 ms cold start. BYOK or fully local.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  my current
&lt;/h4&gt;

&lt;p&gt;You can set an image as the background as well as other Terminal apps but Terax is lighter and faster than them 😎&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4qn88hsse5crkobvvdbe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4qn88hsse5crkobvvdbe.png" alt="Terax" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/crynta" rel="noopener noreferrer"&gt;
        crynta
      &lt;/a&gt; / &lt;a href="https://github.com/crynta/terax-ai" rel="noopener noreferrer"&gt;
        terax-ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Lightweight (7MB) Terminal-first AI-native dev workspace
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/crynta/terax-ai/public/logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcrynta%2Fterax-ai%2FHEAD%2Fpublic%2Flogo.png" width="144" height="144" alt="Terax"&gt;&lt;/a&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Terax&lt;/h1&gt;
&lt;/div&gt;
  &lt;p&gt;&lt;strong&gt;Lightweight Terminal-first AI-native dev workspace.&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/066a2cb97ce775b673811c1ed98983fdfb13b81cb060a283fb0109c3e3d59c13/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6372796e74612f74657261782d61693f6c6162656c3d76657273696f6e26636f6c6f723d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/066a2cb97ce775b673811c1ed98983fdfb13b81cb060a283fb0109c3e3d59c13/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6372796e74612f74657261782d61693f6c6162656c3d76657273696f6e26636f6c6f723d626c7565" alt="version"&gt;&lt;/a&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3750dbe6c40be8af074b9a86b973f3dac22a44d9143a6c49729949c3645896d7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f6372796e74612f74657261782d61692f746f74616c3f6c6162656c3d646f776e6c6f61647326636f6c6f723d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/3750dbe6c40be8af074b9a86b973f3dac22a44d9143a6c49729949c3645896d7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f6372796e74612f74657261782d61692f746f74616c3f6c6162656c3d646f776e6c6f61647326636f6c6f723d626c7565" alt="downloads"&gt;&lt;/a&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6ba9e6985c7f7a2f272eb6a22caf25ae0f4e6a268240c65f83433e0f3b2e40c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706c6174666f726d2d6d61634f532532302537432532304c696e757825323025374325323057696e646f77732d6c6967687467726579"&gt;&lt;img src="https://camo.githubusercontent.com/6ba9e6985c7f7a2f272eb6a22caf25ae0f4e6a268240c65f83433e0f3b2e40c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f706c6174666f726d2d6d61634f532532302537432532304c696e757825323025374325323057696e646f77732d6c6967687467726579" alt="platform"&gt;&lt;/a&gt;
    &lt;a href="https://discord.gg/tyveTUyEp7" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1681280f11b2b1481b6769b052bdc020a107d0e3dd144695007d30b9338e37f2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446973636f72642d6a6f696e2d3538363546323f6c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465" alt="Discord"&gt;&lt;/a&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;a href="https://terax.app" rel="nofollow noopener noreferrer"&gt;Website&lt;/a&gt;
    ·
    &lt;a href="https://terax.app/docs" rel="nofollow noopener noreferrer"&gt;Docs&lt;/a&gt;
    ·
    &lt;a href="https://github.com/crynta/Terax-website" rel="noopener noreferrer"&gt;Website's source code&lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Terax is a lightweight open-source terminal (ADE) built on Tauri 2 + Rust and React 19. A native PTY backend with a WebGL renderer, an agentic AI side-panel that runs against your own keys or fully local models, plus a code editor, file explorer, source control with a git graph, and a web preview pane built in. About 7-8 MB on disk. No telemetry. No account.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Screenshots&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;
&lt;tr&gt;
    &lt;td&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/crynta/terax-ai/docs/terminal.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcrynta%2Fterax-ai%2FHEAD%2Fdocs%2Fterminal.png" alt="Terminal"&gt;&lt;/a&gt;&lt;br&gt;Multi-tab terminal with WebGL rendering
&lt;/td&gt;
    &lt;td&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/crynta/terax-ai/docs/themes.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcrynta%2Fterax-ai%2FHEAD%2Fdocs%2Fthemes.png" alt="Themes and background image"&gt;&lt;/a&gt;&lt;br&gt;Custom themes, presets, and background images
&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/crynta/terax-ai/docs/web-preview.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcrynta%2Fterax-ai%2FHEAD%2Fdocs%2Fweb-preview.png" alt="Web preview"&gt;&lt;/a&gt;&lt;br&gt;Web preview of local dev servers
&lt;/td&gt;
    &lt;td&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/crynta/terax-ai/docs/source-control.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcrynta%2Fterax-ai%2FHEAD%2Fdocs%2Fsource-control.png" alt="Source control and git graph"&gt;&lt;/a&gt;&lt;br&gt;Source control panel with git graph in history
&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td colspan="2"&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/crynta/terax-ai/docs/ai-workflow.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcrynta%2Fterax-ai%2FHEAD%2Fdocs%2Fai-workflow.png" alt="AI window"&gt;&lt;/a&gt;&lt;br&gt;Agentic AI workflow with edit diffs in the code editor
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Terminal&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;xterm.js with WebGL renderer, multi-tab with background streaming&lt;/li&gt;
&lt;li&gt;GPU-accelerated block-based terminal with editor-like command input&lt;/li&gt;
&lt;li&gt;Native PTY backend via &lt;code&gt;portable-pty&lt;/code&gt; (zsh, bash, pwsh, fish, cmd)&lt;/li&gt;
&lt;li&gt;Split panels (horizontal and vertical)&lt;/li&gt;
&lt;li&gt;Inline search, link…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/crynta/terax-ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Building Terax from Source
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; (stable) — install via &lt;a href="https://rustup.rs" rel="noopener noreferrer"&gt;rustup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; 20+&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; v10 — install via &lt;a href="https://mise.jdx.dev" rel="noopener noreferrer"&gt;mise&lt;/a&gt; (recommended) or directly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform prerequisites&lt;/strong&gt; from &lt;a href="https://tauri.app/start/prerequisites/" rel="noopener noreferrer"&gt;Tauri's getting started guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Install pnpm v10 via mise or npm
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mise &lt;span class="nb"&gt;install &lt;/span&gt;pnpm@10.32.1
mise use pnpm@10.32.1

&lt;span class="c"&gt;# npm&lt;/span&gt;
npm i &lt;span class="nt"&gt;-g&lt;/span&gt; pnpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Development build
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm tauri dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Production build
&lt;/h3&gt;

&lt;h3&gt;
  
  
  macOS — Intel (x86_64)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rustup target add x86_64-apple-darwin
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm tauri build &lt;span class="nt"&gt;--target&lt;/span&gt; x86_64-apple-darwin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output: &lt;code&gt;src-tauri/target/x86_64-apple-darwin/release/bundle/macos/Terax.app&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Notes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The first build takes 20–40 minutes as Rust compiles all dependencies from scratch. Subsequent builds use the cache and are much faster.&lt;/li&gt;
&lt;li&gt;DMG creation requires macOS system tools (&lt;code&gt;hdiutil&lt;/code&gt;). If the DMG step fails, the &lt;code&gt;Terax.app&lt;/code&gt; bundle is still usable — copy it to &lt;code&gt;/Applications&lt;/code&gt; or run it directly.&lt;/li&gt;
&lt;li&gt;Code signing is optional for local builds. The CI uses Apple certificates and notarization for release builds.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>terminal</category>
      <category>cli</category>
    </item>
    <item>
      <title>Install last30days-skill Research the Last 30 Days of the Internet: Installing last30days on Hermes Agent</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Sat, 13 Jun 2026 21:17:42 +0000</pubDate>
      <link>https://dev.to/0xkoji/install-last30days-skill-research-the-last-30-days-of-the-internet-installing-last30days-on-hermes-51j6</link>
      <guid>https://dev.to/0xkoji/install-last30days-skill-research-the-last-30-days-of-the-internet-installing-last30days-on-hermes-51j6</guid>
      <description>&lt;p&gt;In this article, I'll show you how to install last30days-skill on Hermes Agent.&lt;br&gt;
My Hermes Agent is on Raspberry Pi 4 (Ubuntu OS).&lt;/p&gt;

&lt;p&gt;Prerequisites: Node.js (which includes &lt;code&gt;npm&lt;/code&gt; and &lt;code&gt;npx&lt;/code&gt;) is installed and available in your PATH.&lt;/p&gt;

&lt;p&gt;I'm using &lt;code&gt;mise&lt;/code&gt; to install Node.js and other languages and package manager.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://mise.jdx.dev/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;mise.jdx.dev&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3" class="crayons-story__hidden-navigation-link"&gt;Migrating from asdf to mise without the headaches&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/0xkoji" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" alt="0xkoji profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/0xkoji" class="crayons-story__secondary fw-medium m:hidden"&gt;
              0xkoji
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                0xkoji
                
              
              &lt;div id="story-author-preview-content-3120047" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/0xkoji" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;0xkoji&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 22 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3" id="article-link-3120047"&gt;
          Migrating from asdf to mise without the headaches
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/asdf"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;asdf&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mise"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mise&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/toolchain"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;toolchain&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cli"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cli&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;h3&gt;
  
  
  What is last30days-skill?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;AI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mvanhorn" rel="noopener noreferrer"&gt;
        mvanhorn
      &lt;/a&gt; / &lt;a href="https://github.com/mvanhorn/last30days-skill" rel="noopener noreferrer"&gt;
        last30days-skill
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      AI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;/last30days&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a href="https://github.com/mvanhorn/last30days-skill" rel="noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/724b3cc2f446613b60378e97ea3a5dad21c155c910f920a1cb8dabc0a22149e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f253233312d5265706f7369746f72792532304f662532305468652532304461792d3666343263313f7374796c653d666f722d7468652d6261646765266c6f676f3d676974687562266c6162656c3d4749544855422532305452454e44494e47" alt="GitHub Trending #1 Repository Of The Day"&gt;
  &lt;/a&gt;
  &lt;br&gt;
  &lt;a href="https://trendshift.io/repositories/21997" rel="nofollow noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/ce216097f72408c567d06a636dffbe758a5d6b34a1f49fa00b0b822f716278cf/68747470733a2f2f7472656e6473686966742e696f2f6170692f62616467652f7265706f7369746f726965732f3231393937" alt="mvanhorn/last30days-skill | Trendshift" width="250" height="55" class="js-gh-image-fallback"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An AI agent-led search engine scored by upvotes, likes, and real money - not editors.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This README tracks the current v3 pipeline. The runtime skill spec lives in &lt;a href="https://github.com/mvanhorn/last30days-skill/skills/last30days/SKILL.md" rel="noopener noreferrer"&gt;skills/last30days/SKILL.md&lt;/a&gt;, which is the source of truth for the latest command and setup behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code (recommended — auto-updates via marketplace):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;/plugin marketplace add mvanhorn/last30days-skill
/plugin install last30days
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Codex, Cursor, Copilot, Gemini CLI, or any of 50+ &lt;a href="https://agentskills.io" rel="nofollow noopener noreferrer"&gt;Agent Skills&lt;/a&gt; hosts:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npx skills add mvanhorn/last30days-skill -g
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(&lt;code&gt;-g&lt;/code&gt; installs globally for your user, available across all projects. Drop it to scope per-project.)&lt;/p&gt;
&lt;p&gt;More install options (claude.ai web, OpenClaw, manual) in the &lt;a href="https://github.com/mvanhorn/last30days-skill#install" rel="noopener noreferrer"&gt;Install&lt;/a&gt; section below.&lt;/p&gt;
&lt;p&gt;Zero config. Reddit, HN, Polymarket, and GitHub work immediately. Run it once and the setup wizard unlocks X, YouTube, TikTok, and more in 30 seconds.&lt;/p&gt;

&lt;p&gt;Reddit upvotes. X likes. YouTube transcripts. TikTok engagement. Polymarket odds backed by real money and insider information. That's millions of people voting…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mvanhorn/last30days-skill" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;h3&gt;
  
  
  Install a skill via &lt;code&gt;npx skill&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;npx skills add mvanhorn/last30days-skill -g&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add mvanhorn/last30days-skill &lt;span class="nt"&gt;-g&lt;/span&gt;
Need to &lt;span class="nb"&gt;install &lt;/span&gt;the following packages:
skills@1.5.11
Ok to proceed? &lt;span class="o"&gt;(&lt;/span&gt;y&lt;span class="o"&gt;)&lt;/span&gt; Y


███████╗██╗  ██╗██╗██╗     ██╗     ███████╗
██╔════╝██║ ██╔╝██║██║     ██║     ██╔════╝
███████╗█████╔╝ ██║██║     ██║     ███████╗
╚════██║██╔═██╗ ██║██║     ██║     ╚════██║
███████║██║  ██╗██║███████╗███████╗███████║
╚══════╝╚═╝  ╚═╝╚═╝╚══════╝╚══════╝╚══════╝

┌   skills 
│
◇  Source: https://github.com/mvanhorn/last30days-skill.git
│
◇  Repository cloned
│
◇  Found 1 skill
│
●  Skill: last30days
│
│  Research what people actually say about any topic &lt;span class="k"&gt;in &lt;/span&gt;the last 30 days. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub, and the web.
│
◇  71 agents
◇  Which agents &lt;span class="k"&gt;do &lt;/span&gt;you want to &lt;span class="nb"&gt;install &lt;/span&gt;to?
│  Amp, Antigravity, Antigravity CLI, Cline, Codex, Cursor, Deep Agents, Gemini CLI, GitHub Copilot, Kimi Code CLI, OpenCode, Warp, Zed, Hermes Agent
│
◇  Installation method
│  Symlink &lt;span class="o"&gt;(&lt;/span&gt;Recommended&lt;span class="o"&gt;)&lt;/span&gt;

│
◇  Installation Summary ─────────────────────────────────────────────────╮
│                                                                        │
│  ~/.agents/skills/last30days                                           │
│    universal: Amp, Antigravity, Antigravity CLI, Cline, Codex +8 more  │
│    symlink → Hermes Agent                                              │
│                                                                        │
├────────────────────────────────────────────────────────────────────────╯
│
◇  Security Risk Assessments ─────────────────────────────────╮
│                                                             │
│              Gen               Socket            Snyk       │
│  last30days  High Risk         1 alert           High Risk  │
│                                                             │
│  Details: https://skills.sh/mvanhorn/last30days-skill       │
│                                                             │
├─────────────────────────────────────────────────────────────╯
│
◇  Proceed with installation?
│  Yes
│
◇  Installation &lt;span class="nb"&gt;complete&lt;/span&gt;

│
◇  Installed 1 skill ────────────────────────────────────────────────────╮
│                                                                        │
│  ✓ ~/.agents/skills/last30days                                         │
│    universal: Amp, Antigravity, Antigravity CLI, Cline, Codex +8 more  │
│    symlinked: Hermes Agent                                             │
│                                                                        │
├────────────────────────────────────────────────────────────────────────╯

│
└  Done!  Review skills before use&lt;span class="p"&gt;;&lt;/span&gt; they run with full agent permissions.


│
│  One-time prompt - you won&lt;span class="s1"&gt;'t be asked again if you dismiss.
│
◇  Install the find-skills skill? It helps your agent discover and suggest skills.
│  Yes

│
◇  Installing find-skills skill...

┌   skills 
│
◇  Source: https://github.com/vercel-labs/skills.git
│
◇  Found 1 skill
│
●  Selected 1 skill: find-skills

│
◇  Installation Summary ─────────────────────────────────────────────────╮
│                                                                        │
│  ~/.agents/skills/find-skills                                          │
│    universal: Amp, Antigravity, Antigravity CLI, Cline, Codex +8 more  │
│    symlink → Hermes Agent                                              │
│                                                                        │
├────────────────────────────────────────────────────────────────────────╯
│
◇  Security Risk Assessments ─────────────────────────────────╮
│                                                             │
│               Gen               Socket            Snyk      │
│  find-skills  Safe              0 alerts          Med Risk  │
│                                                             │
│  Details: https://skills.sh/vercel-labs/skills              │
│                                                             │
├─────────────────────────────────────────────────────────────╯
│
◇  Installation complete

│
◇  Installed 1 skill ────────────────────────────────────────────────────╮
│                                                                        │
│  ✓ ~/.agents/skills/find-skills                                        │
│    universal: Amp, Antigravity, Antigravity CLI, Cline, Codex +8 more  │
│    symlinked: Hermes Agent                                             │
│                                                                        │
├────────────────────────────────────────────────────────────────────────╯

│
└  Done!  Review skills before use; they run with full agent permissions.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Check the installed SKILLs
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;hermes skills list&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;🥩 koji ~/dev 
❯❯ hermes skills list
                                    Installed Skills                                     
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┓
┃ Name                           ┃ Category             ┃ Source   ┃ Trust    ┃ Status  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━┩
│ dogfood                        │                      │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ enabled │
│ find-skills                    │                      │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ enabled │
│ last30days                     │                      │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ enabled │
│ remotion-best-practices        │                      │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ enabled │
│ workspace-dispatch             │                      │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ &lt;span class="nb"&gt;local&lt;/span&gt;    │ enabled │
│ yuanbao                        │                      │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ enabled │
│ claude-code                    │ autonomous-ai-agents │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ enabled │
│ codex                          │ autonomous-ai-agents │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ enabled │
│ hermes-agent                   │ autonomous-ai-agents │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ &lt;span class="nb"&gt;builtin&lt;/span&gt;  │ enabled │
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://hermes-agent.nousresearch.com/docs/guides/work-with-skills" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhermes-agent.nousresearch.com%2Fdocs%2Fimg%2Fhermes-agent-banner.png" height="137" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://hermes-agent.nousresearch.com/docs/guides/work-with-skills" rel="noopener noreferrer" class="c-link"&gt;
            Working with Skills | Hermes Agent
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Find, install, use, and create skills — on-demand knowledge that teaches Hermes new workflows
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhermes-agent.nousresearch.com%2Fdocs%2Fimg%2Ffavicon.ico" width="48" height="48"&gt;
          hermes-agent.nousresearch.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>ai</category>
      <category>hermes</category>
      <category>llm</category>
    </item>
    <item>
      <title>WSL2 + llama.cpp + Codex CLI = Local LLM Power</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Thu, 11 Jun 2026 03:16:29 +0000</pubDate>
      <link>https://dev.to/0xkoji/run-codex-cli-with-local-llm-gemma4-with-llamacpp-on-wsl2-pee</link>
      <guid>https://dev.to/0xkoji/run-codex-cli-with-local-llm-gemma4-with-llamacpp-on-wsl2-pee</guid>
      <description>&lt;h2&gt;
  
  
  requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;llama.cpp&lt;/li&gt;
&lt;li&gt;nodejs (if you use &lt;code&gt;npm&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I'm using NVIDIA GeForce RTX 3070.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1. Install codex
&lt;/h2&gt;

&lt;p&gt;First install &lt;code&gt;codex&lt;/code&gt; on WSL.&lt;br&gt;
If Node.js isn’t installed yet, I recommend installing it with mise.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3" class="crayons-story__hidden-navigation-link"&gt;Migrating from asdf to mise without the headaches&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/0xkoji" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" alt="0xkoji profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/0xkoji" class="crayons-story__secondary fw-medium m:hidden"&gt;
              0xkoji
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                0xkoji
                
              
              &lt;div id="story-author-preview-content-3120047" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/0xkoji" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;0xkoji&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 22 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3" id="article-link-3120047"&gt;
          Migrating from asdf to mise without the headaches
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/asdf"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;asdf&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mise"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mise&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/toolchain"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;toolchain&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cli"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cli&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/0xkoji/migrating-from-asdf-to-mise-without-the-headaches-1jp3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @openai/codex@latest

&lt;span class="c"&gt;# or use curl&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://chatgpt.com/codex/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://developers.openai.com/codex/cli" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdevelopers.openai.com%2Fog%2Fcodex%2Fcli.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://developers.openai.com/codex/cli" rel="noopener noreferrer" class="c-link"&gt;
            CLI – Codex | OpenAI Developers
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Pair with Codex in your terminal
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdevelopers.openai.com%2Ffavicon.png" width="48" height="48"&gt;
          developers.openai.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2. Create &lt;code&gt;.codex&lt;/code&gt; folder
&lt;/h2&gt;

&lt;p&gt;We need to create config.toml to use local llm with llama.cpp. First we need to run &lt;code&gt;codex&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You don't need to set up anything here. You just need to hit &lt;code&gt;ctrl + c&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3. Create config.toml
&lt;/h2&gt;

&lt;p&gt;Once you run &lt;code&gt;Codex&lt;/code&gt;, your WSL will have &lt;code&gt;.codex&lt;/code&gt; folder.&lt;br&gt;
You can use whatever you like.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim ~/.codex/config.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;config.toml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;model_providers.llama]
name &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"llama.cpp"&lt;/span&gt;
base_url &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"http://localhost:8080/v1"&lt;/span&gt;
wire_api &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"responses"&lt;/span&gt;
stream_idle_timeout_ms &lt;span class="o"&gt;=&lt;/span&gt; 10000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 4. Run llama.server to run Gemma-4
&lt;/h2&gt;

&lt;p&gt;If llama.cpp isn't build/installed yet, you will need to build by yourself or install via homebrew.&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/0xkoji/run-gemma-4-12b-on-wsl2-with-llamacpp-1o2m" class="crayons-story__hidden-navigation-link"&gt;Run Gemma-4 12B on WSL2 with llama.cpp&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/0xkoji" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" alt="0xkoji profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/0xkoji" class="crayons-story__secondary fw-medium m:hidden"&gt;
              0xkoji
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                0xkoji
                
              
              &lt;div id="story-author-preview-content-3831352" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/0xkoji" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;0xkoji&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/0xkoji/run-gemma-4-12b-on-wsl2-with-llamacpp-1o2m" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/0xkoji/run-gemma-4-12b-on-wsl2-with-llamacpp-1o2m" id="article-link-3831352"&gt;
          Run Gemma-4 12B on WSL2 with llama.cpp
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/linux"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;linux&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemma4"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemma4&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/0xkoji/run-gemma-4-12b-on-wsl2-with-llamacpp-1o2m#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;For this article, I used &lt;code&gt;google--gemma-4-12B-it-Q4_K_M.gguf&lt;/code&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://huggingface.co/baxin/quantized-models/tree/main" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-thumbnails.huggingface.co%2Fsocial-thumbnails%2Fmodels%2Fbaxin%2Fquantized-models.png" height="432" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://huggingface.co/baxin/quantized-models/tree/main" rel="noopener noreferrer" class="c-link"&gt;
            baxin/quantized-models at main
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            We’re on a journey to advance and democratize artificial intelligence through open source and open science.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          huggingface.co
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;My folder structure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;drwxr-xr-x 30 root root 4096 Jun  8 23:00 llama.cpp
drwxr-xr-x  6 root root 4096 Jun  8 02:21 quantization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; quantization/
total 276
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root      0 Jun  6 13:00 README.md
drwxr-xr-x 2 root root   4096 Jun  8 23:29 gguf &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; google--gemma-4-12B-it-Q4_K_M.gguf is here
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root     90 Jun  6 13:00 main.py
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root     26 Jun  6 13:17 mise.toml
drwxr-xr-x 3 root root   4096 Jun  8 02:33 models
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root    307 Jun  6 13:00 pyproject.toml
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root   4060 Jun  8 02:21 quantize.sh
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root 254959 Jun  6 13:00 uv.lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to run llama.server&lt;br&gt;
&lt;code&gt;-c&lt;/code&gt;: context size should be bigger than &lt;code&gt;7959&lt;/code&gt;. I set -c 4096 first time and got the following error.&lt;br&gt;
&lt;code&gt;{"error":{"code":400,"message":"request (7959 tokens) exceeds the available context size (4096 tokens), try increasing it","type":"exceed_context_size_error","n_prompt_tokens":7959,"n_ctx":4096}}&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;llama.cpp
./build/bin/llama-server &lt;span class="nt"&gt;-m&lt;/span&gt; ../quantization/gguf/gemma-4-12B-it-qat-UD-Q4_K_XL.gguf &lt;span class="nt"&gt;-c&lt;/span&gt; 100000 &lt;span class="nt"&gt;--port&lt;/span&gt; 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5. Run Codex
&lt;/h2&gt;

&lt;p&gt;Now, it's a time to run &lt;code&gt;Codex&lt;/code&gt;&lt;br&gt;
Open new tab/session and run &lt;code&gt;Codex&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nt"&gt;--model&lt;/span&gt; ./quantization/gguf/gemma-4-12B-it-qat-UD-Q4_K_XL.gguf &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;model_provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;llama &lt;span class="nt"&gt;--search&lt;/span&gt; &lt;span class="nt"&gt;--dangerously-bypass-approvals-and-sandbox&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I sent a very simple prompt and got the following app.&lt;br&gt;
The app allows me to add a new task, check a task, and delete a task.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Can you create a simple todo app with reactjs and typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3phgewzr43iz97vg3ost.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3phgewzr43iz97vg3ost.png" alt="todo app" width="800" height="744"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>gemma</category>
      <category>ai</category>
    </item>
    <item>
      <title>Comparing Model Performance: Without MTP vs. With MTP vs. With MTP + QAT</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Tue, 09 Jun 2026 03:43:49 +0000</pubDate>
      <link>https://dev.to/0xkoji/comparing-model-performance-without-mtp-vs-with-mtp-vs-with-mtp-qat-22ki</link>
      <guid>https://dev.to/0xkoji/comparing-model-performance-without-mtp-vs-with-mtp-vs-with-mtp-qat-22ki</guid>
      <description>&lt;p&gt;&lt;code&gt;google--gemma-4-12B-it-Q4_K_M.gguf&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://huggingface.co/baxin/quantized-models/tree/main" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-thumbnails.huggingface.co%2Fsocial-thumbnails%2Fmodels%2Fbaxin%2Fquantized-models.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://huggingface.co/baxin/quantized-models/tree/main" rel="noopener noreferrer" class="c-link"&gt;
            baxin/quantized-models at main
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            We’re on a journey to advance and democratize artificial intelligence through open source and open science.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          huggingface.co
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;code&gt;gemma-4-12B-it-qat-UD-Q4_K_XL.gguf&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://huggingface.co/unsloth/gemma-4-12B-it-qat-GGUF" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-thumbnails.huggingface.co%2Fsocial-thumbnails%2Fmodels%2Funsloth%2Fgemma-4-12B-it-qat-GGUF.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://huggingface.co/unsloth/gemma-4-12B-it-qat-GGUF" rel="noopener noreferrer" class="c-link"&gt;
            unsloth/gemma-4-12B-it-qat-GGUF · Hugging Face
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            We’re on a journey to advance and democratize artificial intelligence through open source and open science.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          huggingface.co
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;prompt: hello&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Prompt: 21.0 t/s | Generation: 10.6 t/s ]
[ Prompt: 19.5 t/s | Generation: 5.0 t/s ]
[ Prompt: 25.4 t/s | Generation: 17.6 t/s ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;prompt: write fizzbuzz in typescript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Prompt: 23.1 t/s | Generation: 9.2 t/s ]
[ Prompt: 25.0 t/s | Generation: 10.6 t/s ]
[ Prompt: 32.2 t/s | Generation: 11.3 t/s ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Without MTP
&lt;/h2&gt;

&lt;p&gt;▄▄ ▄▄&lt;br&gt;
██ ██&lt;br&gt;
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄&lt;br&gt;
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██&lt;br&gt;
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀&lt;br&gt;
                                    ██    ██&lt;br&gt;
                                    ▀▀    ▀▀&lt;/p&gt;

&lt;p&gt;build      : b9536-308f61c31&lt;br&gt;
model      : google--gemma-4-12B-it-Q4_K_M.gguf&lt;br&gt;
modalities : text&lt;/p&gt;

&lt;p&gt;available commands:&lt;br&gt;
  /exit or Ctrl+C     stop or exit&lt;br&gt;
  /regen              regenerate the last response&lt;br&gt;
  /clear              clear the chat history&lt;br&gt;
  /read         add a text file&lt;br&gt;
  /glob      add text files using globbing pattern&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;hello&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[Start thinking]&lt;br&gt;
The user said "hello".&lt;br&gt;
The user is initiating a conversation.&lt;br&gt;
A friendly, helpful, and polite greeting is required.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Option 1: "Hello! How can I help you today?" (Standard, polite)
*   Option 2: "Hi there! What's on your mind?" (Friendly)
*   Option 3: "Hello! Is there anything specific you'd like to talk about or any questions I can answer?" (Informative)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Keep it simple and inviting.&lt;br&gt;
[End thinking]&lt;/p&gt;

&lt;p&gt;Hello! How can I help you today?&lt;/p&gt;

&lt;p&gt;[ Prompt: 21.0 t/s | Generation: 10.6 t/s ]&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;write fizzbuzz in typescript&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[Start thinking]&lt;br&gt;
The user wants a FizzBuzz implementation in TypeScript.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Iterate from 1 to a given number (usually 100).
*   If a number is divisible by 3, print "Fizz".
*   If a number is divisible by 5, print "Buzz".
*   If a number is divisible by both 3 and 5, print "FizzBuzz".
*   Otherwise, print the number itself.

*   *Approach 1: Basic Loop.* Simple, easy to understand.
*   *Approach 2: Functional Programming.* Using `.map()` or `.filter()`.
*   *Approach 3: Clean/Modular.* Separation of concerns (logic vs. output).

*   *Option 1: The Classic Loop (Standard implementation)*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```typescript
    function fizzBuzz(n: number): void {
      for (let i = 1; i &amp;lt;= n; i++) {
        if (i % 3 === 0 &amp;amp;&amp;amp; i % 5 === 0) {
          console.log("FizzBuzz");
        } else if (i % 3 === 0) {
          console.log("Fizz");
        } else if (i % 5 === 0) {
          console.log("Buzz");
        } else {
          console.log(i);
        }
      }
    }
    fizzBuzz(100);
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   *Option 2: More "TypeScripty" (Clean/Scalable)*
    Instead of nested `if-else`, check conditions and append strings. This is more extensible (e.g., adding "Bazz" for 7).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```typescript
    function fizzBuzzImproved(n: number): void {
      for (let i = 1; i &amp;lt;= n; i++) {
        let output = "";
        if (i % 3 === 0) output += "Fizz";
        if (i % 5 === 0) output += "Buzz";
        console.log(output || i.toString());
      }
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Briefly explain the logic.
*   Provide a "Standard" version.
*   Provide a "Clean/Scalable" version.
*   Explain the TypeScript features used (types, etc.).

*   *Standard Version:* Use `number` types.
*   *Scalable Version:* Show how `output || i.toString()` handles the "else" case.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;[End thinking]&lt;/p&gt;

&lt;p&gt;Here are two ways to write FizzBuzz in TypeScript.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The Standard Way
&lt;/h3&gt;

&lt;p&gt;This is the most common way to write it. It uses a standard &lt;code&gt;if/else if/else&lt;/code&gt; structure, which is easy to read and understand.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FizzBuzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fizz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Buzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. The "Clean" (Scalable) Way
&lt;/h3&gt;

&lt;p&gt;This version is often preferred in professional coding because it's easier to extend. For example, if you wanted to add "Bazz" for numbers divisible by 7, you wouldn't have to add dozens of new &lt;code&gt;else if&lt;/code&gt; combinations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fizzBuzzScalable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fizz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Buzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;// If output is still an empty string, it means the number&lt;/span&gt;
        &lt;span class="c1"&gt;// wasn't divisible by 3 or 5, so we print the number.&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;fizzBuzzScalable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key TypeScript Features Used:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Type Annotations&lt;/strong&gt;: We explicitly define &lt;code&gt;limit: number&lt;/code&gt; to ensure the function only accepts numbers.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Type Inference&lt;/strong&gt;: In the second example, TypeScript automatically knows &lt;code&gt;output&lt;/code&gt; is a &lt;code&gt;string&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Logical OR (&lt;code&gt;||&lt;/code&gt;)&lt;/strong&gt;: In the second example, we use &lt;code&gt;output || i.toString()&lt;/code&gt;. Since an empty string is "falsy" in JavaScript/TypeScript, if &lt;code&gt;output&lt;/code&gt; is empty, it defaults to the string version of the number.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How to run this:
&lt;/h3&gt;

&lt;p&gt;If you have &lt;code&gt;ts-node&lt;/code&gt; installed, you can run it directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ts-node fizzbuzz.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Otherwise, compile it with &lt;code&gt;tsc&lt;/code&gt; and run it with &lt;code&gt;node&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tsc fizzbuzz.ts
node fizzbuzz.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[ Prompt: 23.1 t/s | Generation: 9.2 t/s ]&lt;/p&gt;

&lt;h2&gt;
  
  
  With MTP
&lt;/h2&gt;

&lt;p&gt;▄▄ ▄▄&lt;br&gt;
██ ██&lt;br&gt;
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄&lt;br&gt;
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██&lt;br&gt;
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀&lt;br&gt;
                                    ██    ██&lt;br&gt;
                                    ▀▀    ▀▀&lt;/p&gt;

&lt;p&gt;build      : b9569-1e1aca09d&lt;br&gt;
model      : google--gemma-4-12B-it-Q4_K_M.gguf&lt;br&gt;
modalities : text&lt;/p&gt;

&lt;p&gt;available commands:&lt;br&gt;
  /exit or Ctrl+C     stop or exit&lt;br&gt;
  /regen              regenerate the last response&lt;br&gt;
  /clear              clear the chat history&lt;br&gt;
  /read         add a text file&lt;br&gt;
  /glob      add text files using globbing pattern&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;hello&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[Start thinking]&lt;br&gt;
The user said "hello".&lt;br&gt;
The user is initiating a conversation.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Acknowledge the greeting.
*   Offer assistance.
*   Maintain a friendly and helpful tone.
*   *Draft 1 (Simple):* Hello! How can I help you today?
*   *Draft 2 (Friendly):* Hi there! How are you doing? Is there anything I can help you with?
*   *Draft 3 (Detailed):* Hello! I'm an AI assistant. I can help you with writing, coding, answering questions, or just chatting. What's on your mind?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;[End thinking]&lt;/p&gt;

&lt;p&gt;Hello! How can I help you today?&lt;/p&gt;

&lt;p&gt;[ Prompt: 19.5 t/s | Generation: 5.0 t/s ]&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;write fizzbuzz in typescript&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[Start thinking]&lt;br&gt;
The user wants a "FizzBuzz" implementation in TypeScript.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Iterate through numbers 1 to 100 (standard).
*   If divisible by 3, print "Fizz".
*   If divisible by 5, print "Buzz".
*   If divisible by both 3 and 5, print "FizzBuzz".
*   Otherwise, print the number.

*   *Approach 1: Simple Loop.* Good for beginners, easy to read.
*   *Approach 2: Functional Approach.* Using `.map()` or `.filter()`. More "modern" style.
*   *Approach 3: Modular/Reusable.* Separating logic from the printing.

*   *Step 1: Basic version.*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```typescript
    for (let i = 1; i &amp;lt;= 100; i++) {
      if (i % 3 === 0 &amp;amp;&amp;amp; i % 5 === 0) {
        console.log("FizzBuzz");
      } else if (i % 3 === 0) {
        console.log("Fizz");
      } else if (i % 5 === 0) {
        console.log("Buzz");
      } else {
        console.log(i);
      }
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   *Step 2: Refining for TypeScript.* Use types (though for a simple loop, `let i: number` is implicit, it's good to be explicit or clean).

*   *Step 3: Adding a "Cleaner" version.* Use a string concatenation method to avoid the double check of `3 &amp;amp;&amp;amp; 5`.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```typescript
    for (let i = 1; i &amp;lt;= 100; i++) {
      let output = "";
      if (i % 3 === 0) output += "Fizz";
      if (i % 5 === 0) output += "Buzz";
      console.log(output || i.toString());
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   *Explanation:* Briefly explain how it works.
*   *Code block 1:* The standard implementation (easiest to understand).
*   *Code block 2:* A more concise/elegant implementation (better for interviews or clean code).
*   *Instructions:* How to run it (ts-node or tsc).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;[End thinking]&lt;/p&gt;

&lt;p&gt;Here are a few ways to implement FizzBuzz in TypeScript, ranging from a standard approach to a more concise version.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The Standard Approach
&lt;/h3&gt;

&lt;p&gt;This is the most common way to write it. It uses a simple &lt;code&gt;if-else&lt;/code&gt; chain which is easy to read and understand.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FizzBuzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fizz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Buzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The "Clean Code" Approach
&lt;/h3&gt;

&lt;p&gt;This version is more scalable. If you wanted to add "Bazz" for numbers divisible by 7, you wouldn't have to keep adding complex &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; conditions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fizz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Buzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// If output is still an empty string, it means not divisible by 3 or 5&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Differences:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Approach 1&lt;/strong&gt; is the classic way. It is very explicit.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Approach 2&lt;/strong&gt; is more "programmatic." By building a string, you avoid checking &lt;code&gt;i % 3 === 0 &amp;amp;&amp;amp; i % 5 === 0&lt;/code&gt; separately, because if both are true, the string naturally becomes "FizzBuzz".&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to run this:
&lt;/h3&gt;

&lt;p&gt;If you have &lt;code&gt;ts-node&lt;/code&gt; installed, you can run it directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ts-node filename.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, you can compile it to JavaScript first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tsc filename.ts
node filename.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;[ Prompt: 25.0 t/s | Generation: 10.6 t/s ]&lt;/p&gt;

&lt;h2&gt;
  
  
  With MTP + qat
&lt;/h2&gt;

&lt;p&gt;▄▄ ▄▄&lt;br&gt;
██ ██&lt;br&gt;
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄&lt;br&gt;
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██&lt;br&gt;
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀&lt;br&gt;
                                    ██    ██&lt;br&gt;
                                    ▀▀    ▀▀&lt;/p&gt;

&lt;p&gt;build      : b9569-1e1aca09d&lt;br&gt;
model      : gemma-4-12B-it-qat-UD-Q4_K_XL.gguf&lt;br&gt;
modalities : text&lt;/p&gt;

&lt;p&gt;available commands:&lt;br&gt;
  /exit or Ctrl+C     stop or exit&lt;br&gt;
  /regen              regenerate the last response&lt;br&gt;
  /clear              clear the chat history&lt;br&gt;
  /read         add a text file&lt;br&gt;
  /glob      add text files using globbing pattern&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;hello&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[Start thinking]&lt;br&gt;
The user said "hello".&lt;br&gt;
The user is initiating a conversation.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Acknowledge the greeting.
*   Offer assistance.
*   Maintain a helpful, polite, and friendly tone.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;"Hello! How can I help you today?" or "Hi there! How's it going? Is there anything I can assist you with?"&lt;br&gt;
[End thinking]&lt;/p&gt;

&lt;p&gt;Hello! How can I help you today?&lt;/p&gt;

&lt;p&gt;[ Prompt: 25.4 t/s | Generation: 17.6 t/s ]&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;write fizzbuzz in typescript&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;[Start thinking]&lt;br&gt;
The user wants a FizzBuzz implementation in TypeScript.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Input: A range of numbers (usually 1 to 100).
*   Rules:
    *   If a number is divisible by 3, print "Fizz".
    *   If a number is divisible by 5, print "Buzz".
    *   If a number is divisible by both 3 and 5, print "FizzBuzz".
    *   Otherwise, print the number.

*   Option 1: A simple `for` loop with `if-else` statements. (Most common/clear for beginners).
*   Option 2: A function that returns an array of strings. (Good for functional programming).
*   Option 3: A concise version using ternary operators.

*   *Draft 1 (Basic Loop):*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```typescript
    for (let i = 1; i &amp;lt;= 100; i++) {
        if (i % 3 === 0 &amp;amp;&amp;amp; i % 5 === 0) {
            console.log("FizzBuzz");
        } else if (i % 3 === 0) {
            console.log("Fizz");
        } else if (i % 5 === 0) {
            console.log("Buzz");
        } else {
            console.log(i);
        }
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   *Draft 2 (More "TypeScript-y" / Functional):*
    Let's make a function that takes a limit.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```typescript
    function fizzBuzz(limit: number): void {
        for (let i = 1; i &amp;lt;= limit; i++) {
            // logic...
        }
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*   Show the standard approach first.
*   Provide an explanation of the logic.
*   Provide a more modular/clean version (using a function).
*   Briefly explain how to run it (e.g., `tsc` or `ts-node`).

*   *Code Block 1: Standard implementation.*
*   *Code Block 2: Clean/Functional implementation (returning an array).*
*   *Explanation of the modulo operator (`%`).*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;[End thinking]&lt;/p&gt;

&lt;p&gt;Here are a few ways to write FizzBuzz in TypeScript, ranging from a simple loop to a more functional approach.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The Standard Approach (Most Common)
&lt;/h3&gt;

&lt;p&gt;This is the most straightforward way to solve the problem using a &lt;code&gt;for&lt;/code&gt; loop and &lt;code&gt;if/else&lt;/code&gt; statements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FizzBuzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fizz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Buzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;fizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The Clean/Modular Approach
&lt;/h3&gt;

&lt;p&gt;In a real-world application, you might want a version that returns an array of strings rather than just logging them, or one that uses a more concise logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getFizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fizz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Buzz&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getFizzBuzz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Explanations:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;The Modulo Operator (&lt;code&gt;%&lt;/code&gt;)&lt;/strong&gt;: This returns the remainder of a division. &lt;code&gt;i % 3 === 0&lt;/code&gt; means "if $i$ is perfectly divisible by 3."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Order of Logic&lt;/strong&gt;: In the first example, we check for &lt;code&gt;i % 3 === 0 &amp;amp;&amp;amp; i % 5 === 0&lt;/code&gt; &lt;strong&gt;first&lt;/strong&gt;. If we checked for 3 first, the program would print "Fizz" for the number 15 and skip the "FizzBuzz" check.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Type Annotations&lt;/strong&gt;: Because this is TypeScript, we define &lt;code&gt;limit&lt;/code&gt; as a &lt;code&gt;number&lt;/code&gt; and the return type of the second function as &lt;code&gt;string[]&lt;/code&gt; (an array of strings).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How to run this:
&lt;/h3&gt;

&lt;p&gt;If you have Node.js installed, you can run this by following these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install TypeScript: &lt;code&gt;npm install -g typescript&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Save the code as &lt;code&gt;fizzbuzz.ts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Compile it: &lt;code&gt;tsc fizzbuzz.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run it: &lt;code&gt;node fizzbuzz.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;(Or simply use &lt;code&gt;ts-node fizzbuzz.ts&lt;/code&gt; to run it directly without manual compilation).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;[ Prompt: 32.2 t/s | Generation: 11.3 t/s ]&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>gemma</category>
    </item>
    <item>
      <title>How to Uninstall Hermes Desktop from macOS</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Sat, 06 Jun 2026 21:47:42 +0000</pubDate>
      <link>https://dev.to/0xkoji/how-to-uninstall-hermes-desktop-from-macos-366j</link>
      <guid>https://dev.to/0xkoji/how-to-uninstall-hermes-desktop-from-macos-366j</guid>
      <description>&lt;p&gt;I installed Hermes Desktop on macOS but it was different from what I expected lol (I thought it would work as a client application for my Hermes agent I set up).&lt;/p&gt;

&lt;p&gt;Here are 4 steps to uninstall Hermes Desktop from macOS.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 Stop Hermes gateway
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes gateway stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2 Kill the process
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkill &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"hermes"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3 Remove files
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.local/bin/hermes&lt;span class="se"&gt;\n&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.hermes&lt;span class="se"&gt;\n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4 Clean up system ctl
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;launchctl unload ~/Library/LaunchAgents/ai.hermes.gateway.plist
launchctl remove ai.hermes.gateway
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; ~/Library/LaunchAgents/ai.hermes.gateway.plist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>mac</category>
      <category>hermes</category>
      <category>ai</category>
    </item>
    <item>
      <title>Run Gemma-4 12B on WSL2 with llama.cpp</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Sat, 06 Jun 2026 03:22:37 +0000</pubDate>
      <link>https://dev.to/0xkoji/run-gemma-4-12b-on-wsl2-with-llamacpp-1o2m</link>
      <guid>https://dev.to/0xkoji/run-gemma-4-12b-on-wsl2-with-llamacpp-1o2m</guid>
      <description>&lt;h2&gt;
  
  
  1. update WSL environment
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  2. install dependencies
&lt;/h2&gt;

&lt;p&gt;If you don't use &lt;code&gt;-hf&lt;/code&gt; option, you don't need to install libssl-dev in this step.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;build-essential cmake git libssl-dev &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If &lt;code&gt;nvidia-smi&lt;/code&gt; shows a GPU/GPUs on your terminal, you will need to install the tooklit. This will take some time.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nvidia-cuda-toolkit &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  3. clone the repo
&lt;/h2&gt;

&lt;p&gt;Build llama-cli and llama-server. This step also will take some time.&lt;br&gt;
If you don't plan to use &lt;code&gt;-hf&lt;/code&gt; option, you don't need to use &lt;code&gt;-DLLAMA_OPENSSL=ON&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;check the number of cores&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;nproc&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt;
16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ggerganov/llama.cpp
&lt;span class="nb"&gt;cd &lt;/span&gt;llama.cpp
cmake &lt;span class="nt"&gt;-B&lt;/span&gt; build &lt;span class="nt"&gt;-DGGML_CUDA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON &lt;span class="nt"&gt;-DLLAMA_OPENSSL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON
cmake &lt;span class="nt"&gt;--build&lt;/span&gt; build &lt;span class="nt"&gt;--config&lt;/span&gt; Release &lt;span class="nt"&gt;-j&lt;/span&gt; 16

&lt;span class="c"&gt;# no GPU&lt;/span&gt;
git clone https://github.com/ggerganov/llama.cpp
&lt;span class="nb"&gt;cd &lt;/span&gt;llama.cpp
cmake &lt;span class="nt"&gt;-B&lt;/span&gt; build
cmake &lt;span class="nt"&gt;--build&lt;/span&gt; build &lt;span class="nt"&gt;--config&lt;/span&gt; Release &lt;span class="nt"&gt;-j&lt;/span&gt; 16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  4. run the model
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;gemma-4-12b-it&lt;/code&gt; with cli and server.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://huggingface.co/unsloth/gemma-4-12b-it-GGUF" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-thumbnails.huggingface.co%2Fsocial-thumbnails%2Fmodels%2Funsloth%2Fgemma-4-12b-it-GGUF.png" height="432" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://huggingface.co/unsloth/gemma-4-12b-it-GGUF" rel="noopener noreferrer" class="c-link"&gt;
            unsloth/gemma-4-12b-it-GGUF · Hugging Face
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            We’re on a journey to advance and democratize artificial intelligence through open source and open science.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          huggingface.co
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./build/bin/llama-cli &lt;span class="nt"&gt;-hf&lt;/span&gt; unsloth/gemma-4-12b-it-GGUF:UD-Q4_K_XL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hello

&lt;span class="o"&gt;[&lt;/span&gt;Start thinking]
The user said &lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
The user is initiating a conversation.
Respond politely and offer assistance.

    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="s2"&gt;"Hello! How can I help you today?"&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="s2"&gt;"Hi there! What's on your mind?"&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="s2"&gt;"Hello! Is there anything I can assist you with?"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;End thinking]

Hello! How can I &lt;span class="nb"&gt;help &lt;/span&gt;you today?

&lt;span class="o"&gt;[&lt;/span&gt; Prompt: 19.5 t/s | Generation: 11.8 t/s &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or run &lt;code&gt;web-ui&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./build/bin/llama-server &lt;span class="nt"&gt;-hf&lt;/span&gt; unsloth/gemma-4-12b-it-GGUF:UD-Q4_K_XL &lt;span class="nt"&gt;--port&lt;/span&gt; 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  optional download model from huggingface
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; models
wget &lt;span class="nt"&gt;-O&lt;/span&gt; models/gemma-4-12b-it-UD-Q4_K_XL.gguf https://huggingface.co/unsloth/gemma-4-12b-it-GGUF/resolve/main/gemma-4-12b-it-UD-Q4_K_XL.gguf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>llm</category>
      <category>ai</category>
      <category>linux</category>
      <category>gemma4</category>
    </item>
    <item>
      <title>Run Gemma-4 E2B-it with llama.cpp on Raspberry Pi4</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Sun, 31 May 2026 02:19:42 +0000</pubDate>
      <link>https://dev.to/0xkoji/run-gemma-4-e2b-it-with-llamacpp-on-raspberry-pi4-3a1m</link>
      <guid>https://dev.to/0xkoji/run-gemma-4-e2b-it-with-llamacpp-on-raspberry-pi4-3a1m</guid>
      <description>&lt;p&gt;Tested Gemma-4 E2B-it on Raspberry Pi 4.&lt;/p&gt;

&lt;p&gt;the way to convert Gemma-4 E2B-it to gguf&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/0xkoji/quantizing-gemma-4-on-mac-with-llamacpp-54k7" class="crayons-story__hidden-navigation-link"&gt;Quantizing Gemma 4 on Mac with llama.cpp&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/0xkoji" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" alt="0xkoji profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/0xkoji" class="crayons-story__secondary fw-medium m:hidden"&gt;
              0xkoji
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                0xkoji
                
              
              &lt;div id="story-author-preview-content-3767692" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/0xkoji" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F139970%2Fb9f89a49-839c-4632-8cc6-ef75d56ad63c.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;0xkoji&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/0xkoji/quantizing-gemma-4-on-mac-with-llamacpp-54k7" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 28&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/0xkoji/quantizing-gemma-4-on-mac-with-llamacpp-54k7" id="article-link-3767692"&gt;
          Quantizing Gemma 4 on Mac with llama.cpp
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemma"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemma&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/quantization"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;quantization&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/0xkoji/quantizing-gemma-4-on-mac-with-llamacpp-54k7" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/0xkoji/quantizing-gemma-4-on-mac-with-llamacpp-54k7#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;models&lt;br&gt;
&lt;a href="https://huggingface.co/baxin/gemma-4-E4B-it-E2B-it-Q4_K_M" rel="noopener noreferrer"&gt;https://huggingface.co/baxin/gemma-4-E4B-it-E2B-it-Q4_K_M&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ggml-org" rel="noopener noreferrer"&gt;
        ggml-org
      &lt;/a&gt; / &lt;a href="https://github.com/ggml-org/llama.cpp" rel="noopener noreferrer"&gt;
        llama.cpp
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      LLM inference in C/C++
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;llama.cpp&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/1991296/230134379-7181e485-c521-4d23-a0d6-f7b3b61ba524.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F1991296%2F230134379-7181e485-c521-4d23-a0d6-f7b3b61ba524.png" alt="llama"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ggml-org/llama.cpp/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e6b8287fcfee35b19cb6445b354371e6c41a7a0cb476b792453247b373bc92d9/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f67676d6c2d6f72672f6c6c616d612e637070" alt="Release"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/ggml-org/llama.cpp/actions/workflows/server.yml/badge.svg" alt="Server"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ggml-org/llama.cpp/actions/workflows/docker.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/ggml-org/llama.cpp/actions/workflows/docker.yml/badge.svg" alt="Docker"&gt;&lt;/a&gt;
&lt;a href="https://github.com/ggml-org/llama.cpp/actions/workflows/winget.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/ggml-org/llama.cpp/actions/workflows/winget.yml/badge.svg" alt="Winget"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/ggml-org/llama.cpp/discussions/205" rel="noopener noreferrer"&gt;Manifesto&lt;/a&gt; / &lt;a href="https://github.com/ggml-org/ggml" rel="noopener noreferrer"&gt;ggml&lt;/a&gt; / &lt;a href="https://github.com/ggml-org/llama.cpp/blob/master/docs/ops.md" rel="noopener noreferrer"&gt;ops&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;LLM inference in C/C++&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Recent API changes&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ggml-org/llama.cpp/issues/9289" rel="noopener noreferrer"&gt;Changelog for &lt;code&gt;libllama&lt;/code&gt; API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ggml-org/llama.cpp/issues/9291" rel="noopener noreferrer"&gt;Changelog for &lt;code&gt;llama-server&lt;/code&gt; REST API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Hot topics&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hugging Face cache migration: models downloaded with &lt;code&gt;-hf&lt;/code&gt; are now stored in the standard Hugging Face cache directory, enabling sharing with other HF tools.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ggml-org/llama.cpp/discussions/16938" rel="noopener noreferrer"&gt;guide : using the new WebUI of llama.cpp&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ggml-org/llama.cpp/discussions/15396" rel="noopener noreferrer"&gt;guide : running gpt-oss with llama.cpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ggml-org/llama.cpp/discussions/15313" rel="noopener noreferrer"&gt;[FEEDBACK] Better packaging for llama.cpp to support downstream consumers 🤗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Support for the &lt;code&gt;gpt-oss&lt;/code&gt; model with native MXFP4 format has been added | &lt;a href="https://github.com/ggml-org/llama.cpp/pull/15091" rel="noopener noreferrer"&gt;PR&lt;/a&gt; | &lt;a href="https://blogs.nvidia.com/blog/rtx-ai-garage-openai-oss" rel="nofollow noopener noreferrer"&gt;Collaboration with NVIDIA&lt;/a&gt; | &lt;a href="https://github.com/ggml-org/llama.cpp/discussions/15095" rel="noopener noreferrer"&gt;Comment&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Multimodal support arrived in &lt;code&gt;llama-server&lt;/code&gt;: &lt;a href="https://github.com/ggml-org/llama.cpp/pull/12898" rel="noopener noreferrer"&gt;#12898&lt;/a&gt; | &lt;a href="https://github.com/ggml-org/llama.cpp/./docs/multimodal.md" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;VS Code extension for FIM completions: &lt;a href="https://github.com/ggml-org/llama.vscode" rel="noopener noreferrer"&gt;https://github.com/ggml-org/llama.vscode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Vim/Neovim plugin for FIM completions: &lt;a href="https://github.com/ggml-org/llama.vim" rel="noopener noreferrer"&gt;https://github.com/ggml-org/llama.vim&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hugging Face Inference Endpoints now support GGUF out of the box! &lt;a class="issue-link js-issue-link" href="https://github.com/ggml-org/llama.cpp/discussions/9669" rel="noopener noreferrer"&gt;#9669&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hugging Face GGUF editor: &lt;a href="https://github.com/ggml-org/llama.cpp/discussions/9268" rel="noopener noreferrer"&gt;discussion&lt;/a&gt; | &lt;a href="https://huggingface.co/spaces/CISCai/gguf-editor" rel="nofollow noopener noreferrer"&gt;tool&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;WebGPU support is now available in the browser, see a blog/demo introducing it &lt;a href="https://reeselevine.github.io/llamas-on-the-web/" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick start&lt;/h2&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ggml-org/llama.cpp" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Step 1 clone the repo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ggml-org/llama.cpp.git
&lt;span class="nb"&gt;cd &lt;/span&gt;llama.cpp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 2 build
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cmake &lt;span class="nt"&gt;-B&lt;/span&gt; build &lt;span class="nt"&gt;-DCMAKE_BUILD_TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Release

cmake &lt;span class="nt"&gt;--build&lt;/span&gt; build &lt;span class="nt"&gt;--config&lt;/span&gt; Release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3 run the model
&lt;/h3&gt;

&lt;p&gt;the command was run from &lt;code&gt;llama.cpp&lt;/code&gt; folder and &lt;code&gt;gemma-4-E2B-it-Q4_K_M.gguf&lt;/code&gt; is placed in &lt;code&gt;models&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;folder structure&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;llama.cpp   models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./build/bin/llama-cli   &lt;span class="nt"&gt;-m&lt;/span&gt; ../models/gemma-4-E2B-it-Q4_K_M.gguf   &lt;span class="nt"&gt;-t&lt;/span&gt; 4   &lt;span class="nt"&gt;-tb&lt;/span&gt; 4   &lt;span class="nt"&gt;-c&lt;/span&gt; 2048   &lt;span class="nt"&gt;-fa&lt;/span&gt; auto   &lt;span class="nt"&gt;--prio&lt;/span&gt; 3   &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"hello"&lt;/span&gt;

▄▄ ▄▄
██ ██
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀
                                    ██    ██
                                    ▀▀    ▀▀

build      : b9425-0821c5fcf
model      : gemma-4-E2B-it-Q4_K_M.gguf
modalities : text

available commands:
  /exit or Ctrl+C     stop or &lt;span class="nb"&gt;exit&lt;/span&gt;
  /regen              regenerate the last response
  /clear              clear the chat &lt;span class="nb"&gt;history&lt;/span&gt;
  /read &amp;lt;file&amp;gt;        add a text file
  /glob &amp;lt;pattern&amp;gt;     add text files using globbing pattern


&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hello

&lt;span class="o"&gt;[&lt;/span&gt;Start thinking]
Thinking Process:

1.  &lt;span class="k"&gt;**&lt;/span&gt;Analyze the input:&lt;span class="k"&gt;**&lt;/span&gt; The input is &lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
2.  &lt;span class="k"&gt;**&lt;/span&gt;Determine the context/intent:&lt;span class="k"&gt;**&lt;/span&gt; This is a standard social greeting.
3.  &lt;span class="k"&gt;**&lt;/span&gt;Formulate an appropriate response:&lt;span class="k"&gt;**&lt;/span&gt; The response should be friendly, polite, and acknowledge the greeting. Standard responses include reciprocating the greeting and offering further interaction &lt;span class="o"&gt;(&lt;/span&gt;e.g., asking how the user is or offering assistance&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
4.  &lt;span class="k"&gt;**&lt;/span&gt;Refine the response:&lt;span class="k"&gt;**&lt;/span&gt; Keep it open-ended and welcoming.

&lt;span class="k"&gt;*&lt;/span&gt;Self-Correction/Refinement:&lt;span class="k"&gt;*&lt;/span&gt; A simple &lt;span class="s2"&gt;"hello"&lt;/span&gt; back is fine, but adding a follow-up makes the interaction more engaging.

5.  &lt;span class="k"&gt;**&lt;/span&gt;Final Output Generation.&lt;span class="k"&gt;**&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;End thinking]

Hello! How can I &lt;span class="nb"&gt;help &lt;/span&gt;you today?

&lt;span class="o"&gt;[&lt;/span&gt; Prompt: 1.3 t/s | Generation: 1.8 t/s &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 4 build with &lt;code&gt;clang&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; clang
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; build
cmake &lt;span class="nt"&gt;-B&lt;/span&gt; build &lt;span class="nt"&gt;-DCMAKE_BUILD_TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Release &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-DLLAMA_NATIVE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-DLLAMA_ARM_NEON&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON

cmake &lt;span class="nt"&gt;--build&lt;/span&gt; build &lt;span class="nt"&gt;--config&lt;/span&gt; Release &lt;span class="nt"&gt;-j&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 5 run the model
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./build/bin/llama-cli   &lt;span class="nt"&gt;-m&lt;/span&gt; ../models/gemma-4-E2B-it-Q4_K_M.gguf   &lt;span class="nt"&gt;-t&lt;/span&gt; 4   &lt;span class="nt"&gt;-tb&lt;/span&gt; 4   &lt;span class="nt"&gt;-c&lt;/span&gt; 2048   &lt;span class="nt"&gt;-fa&lt;/span&gt; auto   &lt;span class="nt"&gt;--prio&lt;/span&gt; 3   &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"hello"&lt;/span&gt;
▄▄ ▄▄
██ ██
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀
                                    ██    ██
                                    ▀▀    ▀▀

build      : b9425-0821c5fcf
model      : gemma-4-E2B-it-Q4_K_M.gguf
modalities : text

available commands:
  /exit or Ctrl+C     stop or &lt;span class="nb"&gt;exit&lt;/span&gt;
  /regen              regenerate the last response
  /clear              clear the chat &lt;span class="nb"&gt;history&lt;/span&gt;
  /read &amp;lt;file&amp;gt;        add a text file
  /glob &amp;lt;pattern&amp;gt;     add text files using globbing pattern


&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hello

&lt;span class="o"&gt;[&lt;/span&gt;Start thinking]
Thinking Process:

1.  &lt;span class="k"&gt;**&lt;/span&gt;Analyze the input:&lt;span class="k"&gt;**&lt;/span&gt; The input is &lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
2.  &lt;span class="k"&gt;**&lt;/span&gt;Determine the context:&lt;span class="k"&gt;**&lt;/span&gt; This is a simple, friendly greeting.
3.  &lt;span class="k"&gt;**&lt;/span&gt;Formulate the response goal:&lt;span class="k"&gt;**&lt;/span&gt; The response should be equally friendly, polite, and open-ended &lt;span class="o"&gt;(&lt;/span&gt;inviting further conversation&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
4.  &lt;span class="k"&gt;**&lt;/span&gt;Draft potential responses:&lt;span class="k"&gt;**&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="s2"&gt;"Hello!"&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Too brief, but fine.&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="s2"&gt;"Hi there."&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Friendly.&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="s2"&gt;"Hello! How can I help you today?"&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Polite, proactive.&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="s2"&gt;"Hello! What can I do for you?"&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Direct, service-oriented.&lt;span class="o"&gt;)&lt;/span&gt;
5.  &lt;span class="k"&gt;**&lt;/span&gt;Select the best response:&lt;span class="k"&gt;**&lt;/span&gt; A standard friendly greeting followed by an invitation to &lt;span class="k"&gt;continue &lt;/span&gt;the interaction is usually best.

6.  &lt;span class="k"&gt;**&lt;/span&gt;Final Output Generation.&lt;span class="k"&gt;**&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;End thinking]

Hello! How can I &lt;span class="nb"&gt;help &lt;/span&gt;you today?

&lt;span class="o"&gt;[&lt;/span&gt; Prompt: 2.4 t/s | Generation: 1.5 t/s &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;Prompt ↗️ but Generation ↘️&lt;br&gt;
Unfortunately, it doesn't work for an agent.&lt;/p&gt;

&lt;p&gt;Also tried to run LiquidAI/LFM2.5-8B-A1B-GGUF&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://huggingface.co/LiquidAI/LFM2.5-8B-A1B-GGUF" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-thumbnails.huggingface.co%2Fsocial-thumbnails%2Fmodels%2FLiquidAI%2FLFM2.5-8B-A1B-GGUF.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://huggingface.co/LiquidAI/LFM2.5-8B-A1B-GGUF" rel="noopener noreferrer" class="c-link"&gt;
            LiquidAI/LFM2.5-8B-A1B-GGUF · Hugging Face
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            We’re on a journey to advance and democratize artificial intelligence through open source and open science.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          huggingface.co
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;The result was Prompt: 0.3 t/s | Generation: 0.5t/s ↘️&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Raspberry Pi 5 costs around $305, so if you want to run an LLM with fewer than 10B parameters, it seems better to buy a mini PC with 16GB RAM in the $300–400 range.&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>llm</category>
      <category>ai</category>
    </item>
    <item>
      <title>Quantizing Gemma 4 on Mac with llama.cpp</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Thu, 28 May 2026 02:24:49 +0000</pubDate>
      <link>https://dev.to/0xkoji/quantizing-gemma-4-on-mac-with-llamacpp-54k7</link>
      <guid>https://dev.to/0xkoji/quantizing-gemma-4-on-mac-with-llamacpp-54k7</guid>
      <description>&lt;h2&gt;
  
  
  requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;hugging face account &lt;a href="https://huggingface.co/" rel="noopener noreferrer"&gt;https://huggingface.co/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup &lt;code&gt;llama.cpp&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/ggml-org/llama.cpp.git

cmake &lt;span class="nt"&gt;-S&lt;/span&gt; llama.cpp &lt;span class="nt"&gt;-B&lt;/span&gt; llama.cpp/build &lt;span class="nt"&gt;-DGGML_METAL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ON &lt;span class="nt"&gt;-DLLAMA_CURL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;OFF

cmake &lt;span class="nt"&gt;--build&lt;/span&gt; llama.cpp/build &lt;span class="nt"&gt;--config&lt;/span&gt; Release &lt;span class="nt"&gt;-j&lt;/span&gt; 8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Setup python env
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv init quantization
&lt;span class="nb"&gt;cd &lt;/span&gt;quantization
uv add &lt;span class="s2"&gt;"torch&amp;gt;=2.9"&lt;/span&gt; &lt;span class="s2"&gt;"transformers&amp;gt;=4.45"&lt;/span&gt; &lt;span class="s2"&gt;"sentencepiece"&lt;/span&gt; &lt;span class="s2"&gt;"protobuf&amp;gt;=4.21,&amp;lt;5.0"&lt;/span&gt; &lt;span class="s2"&gt;"gguf&amp;gt;=0.19"&lt;/span&gt; &lt;span class="s2"&gt;"huggingface_hub"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;your &lt;code&gt;pyproject.toml&lt;/code&gt; will be like below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[project]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"quantization"&lt;/span&gt;
&lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.1.0"&lt;/span&gt;
&lt;span class="py"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Add your description here"&lt;/span&gt;
&lt;span class="py"&gt;readme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"README.md"&lt;/span&gt;
&lt;span class="py"&gt;requires-python&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="py"&gt;"&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;3.11&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="py"&gt;dependencies&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="py"&gt;"gguf&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.19&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"huggingface-hub&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.16&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"protobuf&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;4.21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"sentencepiece&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"torch&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;2.9&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;    &lt;span class="py"&gt;"transformers&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;4.45&lt;/span&gt;&lt;span class="s"&gt;",&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Download the model
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# current dir is quantization&lt;/span&gt;
&lt;span class="c"&gt;# models for gemma-4-E4B&lt;/span&gt;
&lt;span class="c"&gt;# gguf for quantized models&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; models gguf

&lt;span class="c"&gt;# login hf&lt;/span&gt;
hf auth login

&lt;span class="c"&gt;# download the model&lt;/span&gt;
hf download google/gemma-4-E4B-it &lt;span class="nt"&gt;--local-dir&lt;/span&gt; models/gemma-4-E4B-it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;models&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyojz7ppvze2w8x612pe6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyojz7ppvze2w8x612pe6.png" alt="models folder" width="734" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Convert model.safetensors to gguf
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# current dir is quantization and llama and quantization are on Desktop&lt;/span&gt;

uv run python ../llama.cpp/convert_hf_to_gguf.py &lt;span class="se"&gt;\&lt;/span&gt;
  models/gemma-4-E4B-it &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--outfile&lt;/span&gt; gguf/gemma-4-E4B-it-BF16.gguf &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--outtype&lt;/span&gt; bf16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;convert to &lt;code&gt;Q4_K_M&lt;/code&gt; - (quantization)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;../llama.cpp/build/bin/llama-quantize &lt;span class="se"&gt;\&lt;/span&gt;
  gguf/gemma-4-E4B-it-BF16.gguf &lt;span class="se"&gt;\&lt;/span&gt;
  gguf/gemma-4-E4B-it-Q4_K_M.gguf &lt;span class="se"&gt;\&lt;/span&gt;
  Q4_K_M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This step will take a few minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run &lt;code&gt;Q4_K_M&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# current dir is quantization&lt;/span&gt;

../llama.cpp/build/bin/llama-cli &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-m&lt;/span&gt; gguf/gemma-4-E4B-it-Q4_K_M.gguf &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-ngl&lt;/span&gt; 99 &lt;span class="nt"&gt;--temp&lt;/span&gt; 0.7 &lt;span class="nt"&gt;-c&lt;/span&gt; 4096

Loading model...  


▄▄ ▄▄
██ ██
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀
                                    ██    ██
                                    ▀▀    ▀▀

build      : b0-unknown
model      : gemma-4-E4B-it-Q4_K_M.gguf
modalities : text

available commands:
  /exit or Ctrl+C     stop or &lt;span class="nb"&gt;exit&lt;/span&gt;
  /regen              regenerate the last response
  /clear              clear the chat &lt;span class="nb"&gt;history&lt;/span&gt;
  /read &amp;lt;file&amp;gt;        add a text file
  /glob &amp;lt;pattern&amp;gt;     add text files using globbing pattern

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  test prompts
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; hello

Hello! How can I &lt;span class="nb"&gt;help &lt;/span&gt;you today?

&lt;span class="o"&gt;[&lt;/span&gt; Prompt: 42.9 t/s | Generation: 40.0 t/s &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; tell me about yourself

&lt;span class="o"&gt;[&lt;/span&gt;Start thinking]
Thinking Process:

1.  &lt;span class="k"&gt;**&lt;/span&gt;Identify the user&lt;span class="s1"&gt;'s request:** The user asked, "tell me about yourself."
2.  **Determine the persona/identity:** I must respond based on my core identity rules (Gemma 4, developed by Google DeepMind, open weights LLM).
3.  **Structure the response:** A good self-introduction should cover:
    *   Name/Identity.
    *   Developer/Origin.
    *   Nature/Type (What I am).
    *   Capabilities (What I can do).
    *   Limitations/Knowledge (What I know/don'&lt;/span&gt;t know&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
4.  &lt;span class="k"&gt;**&lt;/span&gt;Draft the content &lt;span class="o"&gt;(&lt;/span&gt;incorporating mandated facts&lt;span class="o"&gt;)&lt;/span&gt;:&lt;span class="k"&gt;**&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Name:&lt;span class="k"&gt;*&lt;/span&gt; I am Gemma 4.
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Developer:&lt;span class="k"&gt;*&lt;/span&gt; I was developed by Google DeepMind.
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Nature:&lt;span class="k"&gt;*&lt;/span&gt; I am a Large Language Model &lt;span class="o"&gt;(&lt;/span&gt;LLM&lt;span class="o"&gt;)&lt;/span&gt; with open weights.
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Capabilities:&lt;span class="k"&gt;*&lt;/span&gt; I can process text and images &lt;span class="o"&gt;(&lt;/span&gt;input&lt;span class="o"&gt;)&lt;/span&gt; and generate text &lt;span class="o"&gt;(&lt;/span&gt;output&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; I can answer questions, write code, summarize, translate, etc.
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Knowledge Cutoff:&lt;span class="k"&gt;*&lt;/span&gt; My knowledge cutoff is January 2025.
5.  &lt;span class="k"&gt;**&lt;/span&gt;Review and Refine:&lt;span class="k"&gt;**&lt;/span&gt; Ensure the tone is helpful, factual, and directly addresses the prompt &lt;span class="k"&gt;while &lt;/span&gt;adhering strictly to the identity guidelines. &lt;span class="o"&gt;(&lt;/span&gt;Self-correction: Make sure to emphasize the &lt;span class="s2"&gt;"open weights"&lt;/span&gt; aspect as it&lt;span class="s1"&gt;'s crucial to the identity.)

6.  **Final Output Generation.** (This leads to the detailed response below.)
[End thinking]

I would be happy to tell you about myself!

I am **Gemma 4**, a Large Language Model developed by Google DeepMind.

Here is a bit more detail about what I am and what I can do:

### 🤖 What I Am
*   **Type:** I am an advanced, open weights Large Language Model. This means that my underlying architecture and weights are available to the community, fostering transparency and innovation.
*   **Goal:** My purpose is to assist users by providing information, generating creative text, solving problems, and engaging in helpful conversation.

### 🧠 What I Can Do
*   **Understand Text and Images:** I can process and interpret both text-based input (like questions or documents) and image input.
*   **Generate Text:** My output is always text. I can:
    *   Answer factual questions.
    *   Summarize complex articles.
    *   Write different types of creative content (stories, poems, scripts).
    *   Assist with coding tasks (explaining code, generating snippets).
    *   Translate languages.
*   **Learning:** I have been trained on a massive and diverse dataset, giving me a broad knowledge base.

### 📅 My Knowledge
*   My knowledge cutoff is **January 2025**. I do not have information about events or developments that have occurred since that time, so if you ask about very recent events, I may not know about them.

In short, think of me as a versatile and knowledgeable assistant ready to help you learn, create, or solve problems! How can I help you today?

[ Prompt: 66.9 t/s | Generation: 34.6 t/s ]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; which one is larger 9.11 or 9.9? 

&lt;span class="o"&gt;[&lt;/span&gt;Start thinking]
Thinking Process:

1.  &lt;span class="k"&gt;**&lt;/span&gt;Analyze the Request:&lt;span class="k"&gt;**&lt;/span&gt; The user is asking to compare two numbers: 9.11 and 9.9, and determine which one is larger.
2.  &lt;span class="k"&gt;**&lt;/span&gt;Understand the Numbers:&lt;span class="k"&gt;**&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   Number A: 9.11 &lt;span class="o"&gt;(&lt;/span&gt;Nine and eleven hundredths&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   Number B: 9.9 &lt;span class="o"&gt;(&lt;/span&gt;Nine and nine tenths&lt;span class="o"&gt;)&lt;/span&gt;
3.  &lt;span class="k"&gt;**&lt;/span&gt;Comparison Strategy &lt;span class="o"&gt;(&lt;/span&gt;Decimal Place by Place&lt;span class="o"&gt;)&lt;/span&gt;:&lt;span class="k"&gt;**&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Units Place:&lt;span class="k"&gt;*&lt;/span&gt; Both are 9. &lt;span class="o"&gt;(&lt;/span&gt;Equal&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Tenths Place:&lt;span class="k"&gt;*&lt;/span&gt;
        &lt;span class="k"&gt;*&lt;/span&gt;   9.11 has a 1 &lt;span class="k"&gt;in &lt;/span&gt;the tenths place.
        &lt;span class="k"&gt;*&lt;/span&gt;   9.9 has a 9 &lt;span class="k"&gt;in &lt;/span&gt;the tenths place.
    &lt;span class="k"&gt;*&lt;/span&gt;   &lt;span class="k"&gt;*&lt;/span&gt;Comparison:&lt;span class="k"&gt;*&lt;/span&gt; Since 9 is greater than 1, the number 9.9 is larger than 9.11.
4.  &lt;span class="k"&gt;**&lt;/span&gt;Alternative Comparison Strategy &lt;span class="o"&gt;(&lt;/span&gt;Padding&lt;span class="o"&gt;)&lt;/span&gt;:&lt;span class="k"&gt;**&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   Write 9.9 as 9.90 &lt;span class="o"&gt;(&lt;/span&gt;Adding a trailing zero does not change the value&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
    &lt;span class="k"&gt;*&lt;/span&gt;   Compare 9.11 and 9.90.
    &lt;span class="k"&gt;*&lt;/span&gt;   The hundredths place comparison: 1 vs 0. Wait, this is wrong. Let&lt;span class="s1"&gt;'s stick to the tenths place comparison, as it was the clearest difference.
5.  **Conclusion:** 9.9 &amp;gt; 9.11.
6.  **Formulate the Answer:** State the answer clearly, and provide a simple explanation of *why* it is larger (comparing the tenths place).
[End thinking]

**9.9** is larger than 9.11.

Here is why:

When comparing decimals, you look at the digits starting from the left (the largest place value).

1.  **Units Place:** Both numbers have a 9. (Equal)
2.  **Tenths Place:**
    *   In 9.**1**1, the digit is **1**.
    *   In 9.**9**, the digit is **9**.

Since 9 is greater than 1, the number **9.9** is larger.

***

*(If you want to make the comparison even easier, you can add a zero to the end of 9.9 to make it 9.90. Now you are comparing 9.11 and 9.90, and 9.90 is clearly larger.)*

[ Prompt: 451.4 t/s | Generation: 34.9 t/s ]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>llm</category>
      <category>gemma</category>
      <category>quantization</category>
      <category>ai</category>
    </item>
    <item>
      <title>How We Strengthened Dependency Security in Our Monorepo</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Mon, 20 Apr 2026 18:33:57 +0000</pubDate>
      <link>https://dev.to/0xkoji/how-we-strengthened-dependency-security-in-our-monorepo-5930</link>
      <guid>https://dev.to/0xkoji/how-we-strengthened-dependency-security-in-our-monorepo-5930</guid>
      <description>&lt;h1&gt;
  
  
  Strengthening Dependency Security in a Monorepo
&lt;/h1&gt;

&lt;p&gt;In response to the recent increase in supply chain attacks in the npm ecosystem, we revisited how dependencies are managed across our monorepo. This article summarizes the security improvements we implemented.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;Looking at recent attack patterns, there has been a noticeable rise in cases where malicious code is introduced into packages immediately after publication. However, in many cases, these packages are &lt;strong&gt;detected and removed within 24–48 hours&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This leads to a couple of important observations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Using newly published packages immediately carries higher risk&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simply waiting for a short period significantly reduces that risk&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While waiting 24–48 hours already provides some protection, we decided to introduce additional buffer time to account for delayed detection and cases that span weekends. As a result, we adopted a &lt;strong&gt;1-week cooldown period&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This approach provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A higher likelihood that known attacks have already been mitigated before adoption&lt;/li&gt;
&lt;li&gt;A simple and easy-to-understand operational rule&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on this, we introduced several measures centered around adding a cooldown period before adopting new dependencies.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Introducing a Cooldown Period
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Policy
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Do not use newly published packages immediately&lt;/li&gt;
&lt;li&gt;Only allow packages that are &lt;strong&gt;at least 1 week old&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Implementation by Tool
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Yarn
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn config &lt;span class="nb"&gt;set &lt;/span&gt;npmMinimalAgeGate 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://yarnpkg.com/configuration/yarnrc#npmMinimalAgeGate" rel="noopener noreferrer"&gt;https://yarnpkg.com/configuration/yarnrc#npmMinimalAgeGate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This feature is only supported in modern Yarn (Berry). As a result, this also became a good opportunity to &lt;strong&gt;move away from Yarn v1&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  pnpm
&lt;/h4&gt;

&lt;p&gt;Configured as follows:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# pnpm-workspace.yaml&lt;/span&gt;
&lt;span class="na"&gt;minimumReleaseAge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://pnpm.io/settings#minimumreleaseage" rel="noopener noreferrer"&gt;https://pnpm.io/settings#minimumreleaseage&lt;/a&gt;&lt;br&gt;
uv: &lt;/p&gt;

&lt;p&gt;This has already been applied to our workspace.&lt;/p&gt;
&lt;h4&gt;
  
  
  uv (Python)
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="c"&gt;# pyproject.toml&lt;/span&gt;
&lt;span class="py"&gt;exclude-newer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1 week"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://docs.astral.sh/uv/reference/settings/#exclude-newer" rel="noopener noreferrer"&gt;https://docs.astral.sh/uv/reference/settings/#exclude-newer&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Configuration Key&lt;/th&gt;
&lt;th&gt;Example Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;npm&lt;/td&gt;
&lt;td&gt;min-release-age&lt;/td&gt;
&lt;td&gt;4320 (minutes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnpm&lt;/td&gt;
&lt;td&gt;minimumReleaseAge&lt;/td&gt;
&lt;td&gt;4320 (minutes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yarn&lt;/td&gt;
&lt;td&gt;npmMinimalAgeGate&lt;/td&gt;
&lt;td&gt;"3d" (duration string)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;td&gt;minimumReleaseAge&lt;/td&gt;
&lt;td&gt;4320 (minutes in bunfig.toml)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;bun: &lt;a href="https://bun.com/docs/runtime/bunfig#install-minimumreleaseage" rel="noopener noreferrer"&gt;https://bun.com/docs/runtime/bunfig#install-minimumreleaseage&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  2. Lockfile-based Dependency Management
&lt;/h2&gt;

&lt;p&gt;We ensure that all dependency installations use lockfiles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;yarn.lock&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pnpm-lock.yaml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevent unintended version upgrades&lt;/li&gt;
&lt;li&gt;Eliminate differences between local and CI/CD environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;yarn&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;pnpm&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Disabling postinstall Scripts
&lt;/h2&gt;

&lt;p&gt;While &lt;code&gt;postinstall&lt;/code&gt; scripts can be useful, they are also a common entry point for supply chain attacks.&lt;/p&gt;

&lt;p&gt;Our approach:&lt;br&gt;
&lt;code&gt;.npmrc&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;ignore-scripts&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disable postinstall execution by default&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;pnpm v10 supports this behavior natively, so no additional configuration was required.&lt;/p&gt;


&lt;h2&gt;
  
  
  4. SHA Pinning in GitHub Actions
&lt;/h2&gt;

&lt;p&gt;We also treat GitHub Actions as part of our dependency surface and strengthened version pinning.&lt;/p&gt;
&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  After
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683&lt;/span&gt; &lt;span class="c1"&gt;# v4.2.2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;By pinning to a &lt;strong&gt;specific commit SHA instead of a tag&lt;/strong&gt;, we:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce the risk of supply chain attacks&lt;/li&gt;
&lt;li&gt;Prevent unintended updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is secure but it requires to update yaml files manually which is very painful.&lt;br&gt;
So I'm planning to introduce a tool like &lt;a href="https://github.com/mheap/pin-github-action" rel="noopener noreferrer"&gt;pin-github-action&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  5. Static analysis for GitHub Actions
&lt;/h2&gt;

&lt;p&gt;As the last step, introduced &lt;a href="https://github.com/zizmorcore/zizmor" rel="noopener noreferrer"&gt;zizmor&lt;/a&gt; to detect GitHub Actions' workflows' security issues. &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://docs.zizmor.sh/trophy-case/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;docs.zizmor.sh&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;






&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Key takeaways from this effort:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduced a &lt;strong&gt;1-week cooldown period&lt;/strong&gt; for new packages&lt;/li&gt;
&lt;li&gt;Enforced &lt;strong&gt;strict dependency pinning via lockfiles&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restricted postinstall script execution&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Applied &lt;strong&gt;SHA pinning in GitHub Actions&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Among these, the cooldown period is particularly simple yet highly effective, and can be adopted quickly in most projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Supply chain attacks are likely to continue increasing. However, even basic practices such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Don’t immediately adopt the latest version”&lt;/li&gt;
&lt;li&gt;“Lock down dependencies”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;could reduce risk.&lt;/p&gt;

&lt;p&gt;Hopefully, this helps others managing monorepos think about improving their dependency security.&lt;/p&gt;

</description>
      <category>github</category>
      <category>npm</category>
      <category>githubactions</category>
      <category>security</category>
    </item>
    <item>
      <title>Supply Chain Security measures</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Fri, 03 Apr 2026 23:35:46 +0000</pubDate>
      <link>https://dev.to/0xkoji/supply-chain-security-measures-55o3</link>
      <guid>https://dev.to/0xkoji/supply-chain-security-measures-55o3</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwj08ep3v2qpd34mob2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwj08ep3v2qpd34mob2n.png" alt="top-slide" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ttntbi2tgxam5bjj97h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ttntbi2tgxam5bjj97h.png" alt="slide-1" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaeko3nwszyhlbt467vf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaeko3nwszyhlbt467vf.png" alt="slide-2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnvm377xm6k3t4wcu064.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnvm377xm6k3t4wcu064.png" alt="slide-3" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm05h2k6j2r83ugoavons.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm05h2k6j2r83ugoavons.png" alt="slide-4" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpvfc4sivg9fp4036gsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpvfc4sivg9fp4036gsl.png" alt="slide-5" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>npm</category>
      <category>uv</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>6 Must-know commands for cleaning up Homebrew packages</title>
      <dc:creator>0xkoji</dc:creator>
      <pubDate>Fri, 20 Mar 2026 10:51:46 +0000</pubDate>
      <link>https://dev.to/0xkoji/must-know-commands-for-cleaning-up-homebrew-packages-gnp</link>
      <guid>https://dev.to/0xkoji/must-know-commands-for-cleaning-up-homebrew-packages-gnp</guid>
      <description>&lt;p&gt;I recently discovered "zerobrew" and decided to switch over from Homebrew. To prepare for the transition, I've been cleaning up my Homebrew packages using these commands.&lt;/p&gt;

&lt;p&gt;Since zerobrew doesn't support every package available on Homebrew yet (for example, "Codex"), I'm currently running both side-by-side.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zb &lt;span class="nb"&gt;install &lt;/span&gt;codex
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Installing codex...

Note: This package can&lt;span class="s1"&gt;'t be installed with zerobrew.
      Error: missing formula '&lt;/span&gt;codex&lt;span class="s1"&gt;'

      Try installing with Homebrew instead:
      brew install codex

error: missing formula '&lt;/span&gt;codex&lt;span class="s1"&gt;'
Execution time: 0.94s
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/lucasgelfond" rel="noopener noreferrer"&gt;
        lucasgelfond
      &lt;/a&gt; / &lt;a href="https://github.com/lucasgelfond/zerobrew" rel="noopener noreferrer"&gt;
        zerobrew
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A 5-20x faster experimental Homebrew alternative
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;zerobrew&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/lucasgelfond/zerobrew/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/lucasgelfond/zerobrew/actions/workflows/ci.yml/badge.svg" alt="Lint"&gt;&lt;/a&gt;
&lt;a href="https://github.com/lucasgelfond/zerobrew/actions/workflows/test.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/lucasgelfond/zerobrew/actions/workflows/test.yml/badge.svg" alt="Test"&gt;&lt;/a&gt;
&lt;a href="https://github.com/lucasgelfond/zerobrew/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4514b6e0b1ab877e967ce473d782831bcb3a1744d066e7b0ebe46e9ef7bebab3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6c7563617367656c666f6e642f7a65726f627265773f646973706c61795f6e616d653d746167" alt="Release"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/ZaPYwm9zaw" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/397741123d69503a0a224452a3629154669e9a870686f0c21c68527c7d8faa07/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446973636f72642d4a6f696e2d3538363546323f6c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465" alt="Discord"&gt;&lt;/a&gt;
&lt;a href="https://github.com/lucasgelfond/zerobrew/./LICENSE-MIT.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://github.com/lucasgelfond/zerobrew/./LICENSE-APACHE.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b60841bea9e11d9d0b0950d690c9bc554e06385634056a7d5d62a15d1a4eabe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4170616368655f322e302d626c75652e737667" alt="License: Apache 2.0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/lucasgelfond/zerobrew/./assets/zb-demo.gif"&gt;&lt;img alt="zerobrew demo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Flucasgelfond%2Fzerobrew%2F.%2Fassets%2Fzb-demo.gif"&gt;&lt;/a&gt;
&lt;p&gt;&lt;strong&gt;zerobrew brings uv-style architecture to Homebrew packages on macOS and Linux.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;curl -fsSL https://zerobrew.rs/install &lt;span class="pl-k"&gt;|&lt;/span&gt; bash&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;After install, run the &lt;code&gt;export&lt;/code&gt; command it prints (or restart your terminal).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick start&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;zb install jq                   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install one package&lt;/span&gt;
zb install wget git             &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install multiple&lt;/span&gt;
zb bundle                       &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install from Brewfile&lt;/span&gt;
zb bundle install -f myfile     &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install from custom file&lt;/span&gt;
zb bundle dump                  &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; export installed packages to Brewfile&lt;/span&gt;
zb bundle dump -f out --force   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; dump to custom file (overwrite)&lt;/span&gt;
zb uninstall jq                 &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; uninstall one package&lt;/span&gt;
zb reset                        &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; uninstall everything&lt;/span&gt;
zb gc                           &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; garbage collect unused store entries&lt;/span&gt;
zbx jq --version                &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; run without linking&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Performance snapshot&lt;/h2&gt;

&lt;/div&gt;
&lt;div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;th&gt;Homebrew&lt;/th&gt;
&lt;th&gt;ZB (cold)&lt;/th&gt;
&lt;th&gt;ZB (warm)&lt;/th&gt;
&lt;th&gt;Cold Speedup&lt;/th&gt;
&lt;th&gt;Warm Speedup&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall (top 100)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;452s&lt;/td&gt;
&lt;td&gt;226s&lt;/td&gt;
&lt;td&gt;59s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.0x&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.6x&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ffmpeg&lt;/td&gt;
&lt;td&gt;3034ms&lt;/td&gt;
&lt;td&gt;3481ms&lt;/td&gt;
&lt;td&gt;688ms&lt;/td&gt;
&lt;td&gt;0.9x&lt;/td&gt;
&lt;td&gt;4.4x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;libsodium&lt;/td&gt;
&lt;td&gt;2353ms&lt;/td&gt;
&lt;td&gt;392ms&lt;/td&gt;
&lt;td&gt;130ms&lt;/td&gt;
&lt;td&gt;6.0x&lt;/td&gt;
&lt;td&gt;18.1x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sqlite&lt;/td&gt;
&lt;td&gt;2876ms&lt;/td&gt;
&lt;td&gt;625ms&lt;/td&gt;
&lt;td&gt;159ms&lt;/td&gt;
&lt;td&gt;4.6x&lt;/td&gt;
&lt;td&gt;18.1x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tesseract&lt;/td&gt;
&lt;td&gt;18950ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/lucasgelfond/zerobrew" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  &lt;code&gt;brew leaves&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Show packages that are not dependencies of other packages.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;brew autoremove&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Remove unused dependencies that are no longer needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;brew doctor&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;To diagnose and fix potential issues in my setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;brew cleanup&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Remove stale lock files and outdated downloads.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Usage: brew cleanup &lt;span class="o"&gt;[&lt;/span&gt;options] &lt;span class="o"&gt;[&lt;/span&gt;formula|cask ...]

Remove stale lock files and outdated downloads &lt;span class="k"&gt;for &lt;/span&gt;all formulae and casks, and
remove old versions of installed formulae. If arguments are specified, only &lt;span class="k"&gt;do
&lt;/span&gt;this &lt;span class="k"&gt;for &lt;/span&gt;the given formulae and casks. Removes all downloads more than 120 days
old. This can be adjusted with &lt;span class="nv"&gt;$HOMEBREW_CLEANUP_MAX_AGE_DAYS&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

      &lt;span class="nt"&gt;--prune&lt;/span&gt;                      Remove all cache files older than specified
                                   days. If you want to remove everything, use
                                   &lt;span class="nt"&gt;--prune&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;all.
  &lt;span class="nt"&gt;-n&lt;/span&gt;, &lt;span class="nt"&gt;--dry-run&lt;/span&gt;                    Show what would be removed, but &lt;span class="k"&gt;do &lt;/span&gt;not
                                   actually remove anything.
  &lt;span class="nt"&gt;-s&lt;/span&gt;, &lt;span class="nt"&gt;--scrub&lt;/span&gt;                      Scrub the cache, including downloads &lt;span class="k"&gt;for &lt;/span&gt;even
                                   the latest versions. Note that downloads &lt;span class="k"&gt;for
                                   &lt;/span&gt;any installed formulae or casks will still
                                   not be deleted. If you want to delete those
                                   too: &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;brew &lt;span class="nt"&gt;--cache&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
      &lt;span class="nt"&gt;--prune-prefix&lt;/span&gt;               Only prune the symlinks and directories from
                                   the prefix and remove no other files.
  &lt;span class="nt"&gt;-d&lt;/span&gt;, &lt;span class="nt"&gt;--debug&lt;/span&gt;                      Display any debugging information.
  &lt;span class="nt"&gt;-q&lt;/span&gt;, &lt;span class="nt"&gt;--quiet&lt;/span&gt;                      Make some output more quiet.
  &lt;span class="nt"&gt;-v&lt;/span&gt;, &lt;span class="nt"&gt;--verbose&lt;/span&gt;                    Make some output more verbose.
  &lt;span class="nt"&gt;-h&lt;/span&gt;, &lt;span class="nt"&gt;--help&lt;/span&gt;                       Show this message.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;code&gt;brew bundle dump&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Create a Brewfile to snapshot your current setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;brew bundle --force cleanup&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Uninstall everything not listed in your Brewfile.&lt;/p&gt;

&lt;p&gt;I have used the alias, &lt;code&gt;brew_all&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.zshrc&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;brew_all&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"brew outdated &amp;amp;&amp;amp; brew update &amp;amp;&amp;amp; brew upgrade &amp;amp;&amp;amp; brew cleanup -s"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>homebrew</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
