<?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: Peak</title>
    <description>The latest articles on DEV Community by Peak (@peakaistack).</description>
    <link>https://dev.to/peakaistack</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%2F4107176%2F2276a5b9-8725-4b90-868f-e04160cee247.png</url>
      <title>DEV Community: Peak</title>
      <link>https://dev.to/peakaistack</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/peakaistack"/>
    <language>en</language>
    <item>
      <title>The Google Business Profile Audit: A Room-by-Room Walkthrough</title>
      <dc:creator>Peak</dc:creator>
      <pubDate>Mon, 21 Sep 2026 03:10:00 +0000</pubDate>
      <link>https://dev.to/peakaistack/the-google-business-profile-audit-a-room-by-room-walkthrough-nj1</link>
      <guid>https://dev.to/peakaistack/the-google-business-profile-audit-a-room-by-room-walkthrough-nj1</guid>
      <description>&lt;h1&gt;
  
  
  The Google Business Profile Audit: A Room-by-Room Walkthrough
&lt;/h1&gt;

&lt;p&gt;An agency sells you a "GBP audit" as a mysterious deliverable. Here's the open secret: it's a checklist. Anyone can run it — you, this afternoon, in the Google Business Profile dashboard, for free. What you're buying from the agency isn't secret knowledge; it's an hour of someone else's attention and the discipline to look at every room instead of the two you already know are messy.&lt;/p&gt;

&lt;p&gt;This post is that walkthrough. Five rooms — identity, completeness, reputation, media, technical health — with a checkpoint list for each: what to check, what "pass" looks like, and the fix when it fails. Print it, open your dashboard in another tab, and mark as you go. (If you want the ranked "which lever matters most" thinking, that's the companion piece on GBP optimization; this one is the systematic inspection.)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt; A Google Business Profile audit is a systematic check of five areas: identity (name, categories, address, phone, hours — correct and consistent), completeness (services, products, description, attributes filled in), reputation (review flow, ratings, replies, Q&amp;amp;A), media (fresh real photos, videos, recent posts), and technical health (your ownership, no duplicates, no warnings, insights readable). Each finding gets a concrete fix in the dashboard. Done properly it takes about an hour and needs no paid tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Room 1: Identity — Who Google Thinks You Are
&lt;/h2&gt;

&lt;p&gt;The foundation room. Everything else underperforms if identity is wrong.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Checkpoint&lt;/th&gt;
&lt;th&gt;Pass looks like&lt;/th&gt;
&lt;th&gt;Fix if it fails&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Business name&lt;/td&gt;
&lt;td&gt;Your real name only — no "Bangkok", no service words added&lt;/td&gt;
&lt;td&gt;Edit to bare name; move keywords to services/posts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Primary category&lt;/td&gt;
&lt;td&gt;The one thing you most want to be found for&lt;/td&gt;
&lt;td&gt;Change it; expect ranking shifts for 2–4 weeks after&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Secondary categories&lt;/td&gt;
&lt;td&gt;2–4 accurate, no hopeful stuffing&lt;/td&gt;
&lt;td&gt;Remove irrelevant ones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Address&lt;/td&gt;
&lt;td&gt;Exactly matches your site and other listings&lt;/td&gt;
&lt;td&gt;Correct it; then fix the other listings to match&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Phone&lt;/td&gt;
&lt;td&gt;One primary number, clickable, in use&lt;/td&gt;
&lt;td&gt;Update; check old numbers still listed in directories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Hours&lt;/td&gt;
&lt;td&gt;Current, plus special hours for upcoming Thai holidays&lt;/td&gt;
&lt;td&gt;Set special hours for the next 60 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Service area (if no storefront)&lt;/td&gt;
&lt;td&gt;Real neighborhoods you serve — no fake pins&lt;/td&gt;
&lt;td&gt;Trim to reality&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The category checkpoint deserves a second look even if you think you pass: Google renames and reorganizes its category taxonomy several times a year, and a category that was right in 2024 may silently no longer exist in the form you picked.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/graphics/google-business-profile-audit-checklist.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/graphics/google-business-profile-audit-checklist.png" alt="Diagram of the five-room GBP audit: identity, completeness, reputation, media, and technical health checkpoints"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Room 2: Completeness — Every Field Filled or Deliberately Empty
&lt;/h2&gt;

&lt;p&gt;Google treats profile completeness as an effort signal, and customers treat empty fields as red flags. Walk every tab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Services / products&lt;/strong&gt;: listed with search-shaped names and one-line descriptions. "Same-day crowns" beats "Dental". Bilingual service names where genuinely bilingual.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business description&lt;/strong&gt;: 750 characters, offering in the first 250, no keyword stuffing, no URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attributes&lt;/strong&gt;: every relevant toggle set — outdoor seating, halal, English-speaking staff, free Wi-Fi. Attributes feed the qualifier chips customers filter with.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booking/appointment links&lt;/strong&gt;: present if you take bookings; a dead link is worse than none, so click it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website link&lt;/strong&gt;: correct URL, correct protocol, loads on mobile in under a few seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opening date / social profiles&lt;/strong&gt;: filled where the dashboard offers them.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"completeness_targets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"services"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all real offerings, search-shaped names"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"750 chars, offering first"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"every relevant toggle set"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"link"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"loads on mobile, tracked separately from direct traffic"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A field left empty &lt;em&gt;deliberately&lt;/em&gt; (you don't do deliveries — don't claim delivery) is a pass. An empty field you never got around to is a finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Room 3: Reputation — What Customers See and Say
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Review count and rating trend&lt;/strong&gt;: not just the number — the last 90 days. A 4.8 built on reviews that stopped six months ago reads differently than a 4.5 flowing weekly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review keywords&lt;/strong&gt;: do reviews mention what you want to be found for? If nobody mentions your actual service, invite the mention naturally at the counter ("tell Google what you came for").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reply coverage&lt;/strong&gt;: every review answered, in the reviewer's language, including the 3-star shrugs. Unanswered negative reviews are the loudest thing on your profile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fake/hostile reviews&lt;/strong&gt;: flagged (report in the dashboard), never argued with in public beyond one calm factual reply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Q&amp;amp;A&lt;/strong&gt;: your top-5 real customer questions seeded and answered — both languages if your customers mix. Check for stranger-answered questions with wrong info and correct them with your own answer plus an upvote.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Room 4: Media — The Room Everyone Photographs Badly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Photo count and freshness&lt;/strong&gt;: something new in the last 30 days. Real phone photos; exteriors at night matter on dark Bangkok sois.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cover photo&lt;/strong&gt;: deliberately set — the one photo that represents you in search, not whatever Google auto-picked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category coverage&lt;/strong&gt;: exterior, interior, product, team. A profile of only food photos tells Google and customers nothing about the place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video&lt;/strong&gt;: one short clip (even 15 seconds) if you have it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Posts (Updates tab)&lt;/strong&gt;: at least one post from the last 30 days, specific and true. The tab is also a trust signal: a ghost-town Updates tab reads as a closed business.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logo and cover&lt;/strong&gt;: uploaded, current, not pixelated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Room 5: Technical Health — The Room Behind the Walls
&lt;/h2&gt;

&lt;p&gt;The checks most owners never open, where the expensive problems live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ownership&lt;/strong&gt;: you hold owner-level access with your own email — not an agency's, not a former employee's. Managers come and go; the owner account is the deed to the house.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate profiles&lt;/strong&gt;: search your business name and address on Maps. One listing only. If you find a second — old address, agency-created, employee-created — request merge/removal through support. (Full method in the NAP consistency piece; this is the checkpoint form of it.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account warnings&lt;/strong&gt;: the dashboard's policy section shows violations and suspension risk. A suspended profile explains most "sudden invisibility" mysteries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification status&lt;/strong&gt;: verified, and re-verified after any address change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insights readable&lt;/strong&gt;: Performance tab shows calls, direction requests, website clicks, and the search phrases that found you. No data for weeks = something upstream is broken.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scoring the Walkthrough
&lt;/h2&gt;

&lt;p&gt;Don't aim for perfection; aim for findings with fixes attached. A useful output format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IDENTITY       6/7   — primary category wrong (fix: Restaurant → Coffee shop)
COMPLETENESS   4/6   — attributes empty; description missing first-250 offering
REPUTATION     3/5   — 0 replies to last 6 reviews; Q&amp;amp;A unseeded
MEDIA          2/6   — no new photo in 5 months; cover auto-picked
TECHNICAL      5/5   — clean ownership, no duplicates
TOTAL         20/29  — biggest lever: media room, this week
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That "biggest lever" line is the actual deliverable an agency would sell you: the one or two rooms where an hour of work moves the most. Re-run the walkthrough monthly — it takes 20 minutes once the first pass is done — and the scores become your progress log.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Room&lt;/th&gt;
&lt;th&gt;First-pass time&lt;/th&gt;
&lt;th&gt;Typical finding&lt;/th&gt;
&lt;th&gt;Payoff speed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Identity&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;Wrong/stale category&lt;/td&gt;
&lt;td&gt;Weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Completeness&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;Empty attributes, weak description&lt;/td&gt;
&lt;td&gt;Weeks–months&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reputation&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;Unanswered reviews, unseeded Q&amp;amp;A&lt;/td&gt;
&lt;td&gt;Months, compounding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Media&lt;/td&gt;
&lt;td&gt;10 min&lt;/td&gt;
&lt;td&gt;Stale photos, ghost Updates tab&lt;/td&gt;
&lt;td&gt;Weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Technical&lt;/td&gt;
&lt;td&gt;10 min&lt;/td&gt;
&lt;td&gt;Duplicate profile, agency-owned account&lt;/td&gt;
&lt;td&gt;Immediate once fixed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How often should I audit my profile?
&lt;/h3&gt;

&lt;p&gt;A full five-room walkthrough every quarter, with the technical room (duplicates, warnings, ownership) checked monthly — those fail silently and expensively. After any big change — move, rebrand, category edit, new branch — re-run the identity and technical rooms the same week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I pay someone to do this audit?
&lt;/h3&gt;

&lt;p&gt;Yes, and now you know exactly what you'd be buying: this checklist, run attentively, with findings written up. It's a legitimate service — but run this free version first. Either you'll fix everything yourself, or you'll hand the agency a precise scope instead of a blank check.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the most common audit finding in Bangkok businesses?
&lt;/h3&gt;

&lt;p&gt;Three, tied: stale primary categories (taxonomy drift), unanswered reviews in the "other" language (Thai owners skipping English reviews and vice versa), and duplicate profiles left over from a previous agency or an enthusiastic employee. All three are fixable in a day.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will fixing audit findings change my ranking?
&lt;/h3&gt;

&lt;p&gt;Individually, each fix is modest — this is plumbing, not fireworks. Collectively, a profile that passes all five rooms removes the quiet caps that were holding back your reviews, categories, and content work. Judge it the honest way: grid-scan before the fixes, rescan the same grid a month after, compare shapes.&lt;/p&gt;




&lt;p&gt;An audit isn't a judgment — it's a map. Twenty-nine checkpoints, an hour, and you'll know exactly which room of your shop Google has never been allowed to see properly.&lt;/p&gt;

&lt;p&gt;Start with the "before" picture: run a free Google Maps grid scan at &lt;a href="https://gbppeak.com/free-maps" rel="noopener noreferrer"&gt;gbppeak.com/free-maps&lt;/a&gt; — no signup — then audit, fix, and rescan the same grid in a month to see what moved.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>marketing</category>
      <category>smallbusiness</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop Retyping Everything: A Slash-Command Console for Your Local LLM Stack</title>
      <dc:creator>Peak</dc:creator>
      <pubDate>Fri, 18 Sep 2026 04:04:59 +0000</pubDate>
      <link>https://dev.to/peakaistack/stop-retyping-everything-a-slash-command-console-for-your-local-llm-stack-3mc7</link>
      <guid>https://dev.to/peakaistack/stop-retyping-everything-a-slash-command-console-for-your-local-llm-stack-3mc7</guid>
      <description>&lt;p&gt;You've built the perfect local LLM session ritual. It goes: reset the context with a rolling summary, re-inject the profile, set &lt;code&gt;num_ctx&lt;/code&gt;, pull in the right prompt file, then finally ask your question. Fifteen minutes of setup knowledge that makes the output excellent — and you retype or re-paste some version of it every single session, because it lives in your head and your clipboard history.&lt;/p&gt;

&lt;p&gt;Meanwhile, the cloud CLI tools solved this exact problem years ago with slash commands: &lt;code&gt;/compact&lt;/code&gt; to summarize the thread, &lt;code&gt;/model&lt;/code&gt; to swap engines, &lt;code&gt;/deploy&lt;/code&gt; to fire a saved multi-step playbook. One terse line controls the &lt;em&gt;tool&lt;/em&gt; while your normal words control the &lt;em&gt;task&lt;/em&gt;. It's a good pattern — and unlike the models themselves, the pattern is trivially copyable. Nothing about it requires a vendor. A local stack is already a pile of files, scripts, and a model server; a command console over that pile is an afternoon of bash.&lt;/p&gt;

&lt;p&gt;Here's the build: a tiny &lt;code&gt;lm&lt;/code&gt; command, three species of command behind it, and the habit that turns your best session rituals into one-line operations — for you &lt;em&gt;and&lt;/em&gt; for your automations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt; A slash-command console for a local LLM stack is a small shell CLI (e.g. &lt;code&gt;lm&lt;/code&gt;) that dispatches typed commands to three species: prompt-commands (markdown files injected into the session), tool-commands (scripts that change state — context resets, model switches), and connector-commands (MCP-style tool calls). Local equivalents of the famous ones: &lt;code&gt;/compact&lt;/code&gt; becomes a rolling-summary script, &lt;code&gt;/model&lt;/code&gt; flips a MODEL_TAG variable behind one local API door, and &lt;code&gt;/skill&lt;/code&gt; loads a saved playbook file. Because the console is just a script surface, n8n workflows can call the same commands — one control layer for humans and automations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Three Species of Command
&lt;/h2&gt;

&lt;p&gt;Every slash command you've envied in a cloud CLI decomposes into exactly three species. Sorting them this way is what makes the local build clean:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Species&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Lives as&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prompt-command&lt;/td&gt;
&lt;td&gt;Injects a saved prompt/instruction set&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.md&lt;/code&gt; file in &lt;code&gt;commands/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/skill review-pr&lt;/code&gt; loads the review playbook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-command&lt;/td&gt;
&lt;td&gt;Changes state outside the conversation&lt;/td&gt;
&lt;td&gt;Bash/Python script&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/compact&lt;/code&gt; summarizes + resets context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connector-command&lt;/td&gt;
&lt;td&gt;Calls an external tool or API&lt;/td&gt;
&lt;td&gt;MCP server / HTTP call&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/issue list&lt;/code&gt; queries the tracker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The distinction matters because the species fail differently. A prompt-command that's wrong just produces a bad draft (edit the file, retry — free). A tool-command that's wrong &lt;em&gt;changes something&lt;/em&gt; (deleted context, switched model mid-task) — those get a confirmation step. Design the console with that asymmetry in mind: prompt-commands are safe to fire freely; tool-commands ask before they act.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Translator: Cloud Command → Local Equivalent
&lt;/h2&gt;

&lt;p&gt;Before building, notice how directly the famous commands map:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cloud CLI&lt;/th&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;th&gt;Your local version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/compact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Summarize thread, free context&lt;/td&gt;
&lt;td&gt;Script: model summarizes session → save → start fresh session with summary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/clear&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hard reset&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;rm session.md&lt;/code&gt; (or new session file)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Switch engine&lt;/td&gt;
&lt;td&gt;Flip &lt;code&gt;MODEL_TAG&lt;/code&gt; in your env — one door, new engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/context&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show window usage&lt;/td&gt;
&lt;td&gt;Token-count script over the session file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/skill deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Saved multi-step playbook&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;commands/deploy.md&lt;/code&gt; prompt file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List commands&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ls commands/&lt;/code&gt; — the folder IS the menu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The cloud tools bundled decades of operator ergonomics into a CLI. The ideas are portable; the vendor isn't required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build the Launcher
&lt;/h2&gt;

&lt;p&gt;One small dispatcher is the whole interface. Bash keeps it inspectable:&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="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="c"&gt;# lm — slash-command console for the local stack&lt;/span&gt;
&lt;span class="nv"&gt;CMD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;shift&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="nv"&gt;CMDIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LM_COMMANDS&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.lm/commands&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;SESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LM_SESSION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.lm/session.md&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;MODEL_TAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MODEL_TAG&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;llama3&lt;/span&gt;&lt;span class="p"&gt;.2&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;API&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:11434/v1"&lt;/span&gt;

&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CMD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
  /help|help&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CMDIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/\.md$//;s/^/  \//'&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
  /clear&lt;span class="p"&gt;)&lt;/span&gt;      : &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"session reset"&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
  /context&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{printf "~%d tokens on the board\n", $1*1.3}'&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
  /model&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MODEL_TAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"engine: &lt;/span&gt;&lt;span class="nv"&gt;$MODEL_TAG&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
  /compact&lt;span class="p"&gt;)&lt;/span&gt;    &lt;span class="nb"&gt;exec &lt;/span&gt;bash ~/.lm/scripts/compact.sh &lt;span class="p"&gt;;;&lt;/span&gt;
  /&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="nv"&gt;F&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CMDIR&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMD&lt;/span&gt;&lt;span class="p"&gt;#/&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.md"&lt;/span&gt;
               &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$F&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"loaded &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CMD&lt;/span&gt;&lt;span class="p"&gt;#/&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                            &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"no such command — /help"&lt;/span&gt; &lt;span class="p"&gt;;;&lt;/span&gt;
  &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;           &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$*&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;   &lt;span class="c"&gt;# plain text = conversation&lt;/span&gt;
&lt;span class="k"&gt;esac&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thirty lines, and you already have &lt;code&gt;/help&lt;/code&gt;, &lt;code&gt;/clear&lt;/code&gt;, &lt;code&gt;/context&lt;/code&gt;, &lt;code&gt;/model&lt;/code&gt;, and any prompt-command you drop into &lt;code&gt;~/.lm/commands/&lt;/code&gt;. The session is a file — which is the quiet superpower: you can grep it, back it up, diff it, and hand it to n8n.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Two Commands Worth Doing Properly
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;/compact&lt;/code&gt; — the rolling summary, scripted
&lt;/h3&gt;

&lt;p&gt;The single highest-value tool-command. At milestones, the model compresses the session and the console starts fresh with the summary on the board:&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="c"&gt;# ~/.lm/scripts/compact.sh&lt;/span&gt;
&lt;span class="nv"&gt;SUMMARY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ollama run &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$MODEL_TAG&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"""
Summarize this session as a handoff: decisions made, formats agreed,
open questions, next step. Max 120 words.
Session: &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"""&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
: &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"## Handoff from previous session"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SUMMARY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"compacted — &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; &amp;lt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SESS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; words on the board"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it at milestones, not when the window is already choking — a summary of a cluttered board inherits the clutter. This is the same rolling-summary discipline from context management, now one keystroke instead of a ritual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Skills are just files — and the folder is the menu
&lt;/h3&gt;

&lt;p&gt;Your multi-step playbooks (the deploy checklist, the PR review rubric, the client-report format) become prompt-commands the moment they're saved as markdown:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# ~/.lm/commands/review-pr.md&lt;/span&gt;
Review this diff as a payments-service maintainer.
Order findings by severity. Check: error handling on network calls,
currency rounding, secrets in logs, missing tests for changed branches.
Describe fixes; do not rewrite code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And because &lt;code&gt;/help&lt;/code&gt; is just &lt;code&gt;ls&lt;/code&gt;, the menu grows itself. The discipline that makes skills valuable is treating them as software: when a command's output disappoints, you edit the file — the command gets sharper forever. A skill nobody refines is a macro nobody debugged.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Console for Humans and Machines
&lt;/h2&gt;

&lt;p&gt;Here's the payoff unique to owning the layer: n8n calls the same commands you do. The console becomes the single control surface for the whole stack — your fingers and your automations speak identical syntax:&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="na"&gt;workflow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nightly-session-reset&lt;/span&gt;
&lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;
&lt;span class="na"&gt;nodes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;compact&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;execute-command&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lm&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/compact"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;queue-morning-brief&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;execute-command&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lm&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/skill&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;morning-brief"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;run-brief&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http-request&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/api/generate"&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${MODEL_TAG}"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;stream&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{session}}"&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deliver&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;telegram&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{brief}}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every automation you build this way inherits every command improvement automatically — refine &lt;code&gt;/skill morning-brief&lt;/code&gt; once, and both your manual runs and the 2 a.m. cron get the upgrade. No vendor console required, and the whole interface is grep-able text.&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/graphics/local-llm-slash-commands.png" class="article-body-image-wrapper"&gt;&lt;img src="/images/graphics/local-llm-slash-commands.png" alt="Explainer graphic — the local slash-command console: a dispatcher routes three command species (prompt files, state-changing scripts, connector calls), maps the famous cloud commands to local equivalents, and serves both the human terminal and n8n automations through one surface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pitfalls, Ported Over
&lt;/h2&gt;

&lt;p&gt;The cloud operators learned these the expensive way; you can skip to the conclusions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One command per turn.&lt;/strong&gt; Don't stack &lt;code&gt;/compact&lt;/code&gt; and &lt;code&gt;/skill&lt;/code&gt; in a single breath — each command mutates session state, and stacking makes the result order-dependent and hard to debug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compact at milestones, not at the wall.&lt;/strong&gt; Summarizing a healthy session preserves the story; summarizing a drowning one preserves the chaos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills are software.&lt;/strong&gt; Version them, edit them, delete the ones you don't use. A commands folder with 40 stale files is a menu you can't trust; ten sharp ones is an operator's console.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Make It Practical Tonight
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Write the launcher (or paste the one above), create &lt;code&gt;~/.lm/commands/&lt;/code&gt;, drop in your single most-retyped instruction as the first &lt;code&gt;.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;/compact&lt;/code&gt; this week — it's the command that pays for the whole console.&lt;/li&gt;
&lt;li&gt;Move one recurring n8n prompt onto a &lt;code&gt;/skill&lt;/code&gt; file so a human and a cron share it.&lt;/li&gt;
&lt;li&gt;Retire one clipboard-history ritual for good. That's the feeling of operating instead of re-typing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The chat apps gave the world a conversation. The CLI tools gave operators a console. Your local stack deserves the second one — and unlike the models, it's yours to keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Isn't this just aliases and scripts I could write anyway?&lt;/strong&gt;&lt;br&gt;
It is — deliberately. The value isn't a novel technology; it's the convention: one dispatcher, one commands folder, one session file, three command species. Aliases accumulate as an unstructured pile; the console pattern keeps prompt state, tool state, and connectors separated, which is what makes behaviors like "/help lists everything" and "n8n calls the same command" fall out for free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is this different from just using a chat UI with saved prompts?&lt;/strong&gt;&lt;br&gt;
A chat UI keeps the prompts in its own database and the session in its own memory. The console keeps both as plain files — so sessions are diffable, commands are versionable, the whole surface works over SSH, scripts compose it, and nothing is locked behind an interface that will be redesigned next quarter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I do the confirmation-safety thing for tool-commands?&lt;/strong&gt;&lt;br&gt;
Yes, cheaply: wrap dangerous dispatches in a read-prompt when the terminal is interactive, and require an explicit &lt;code&gt;--yes&lt;/code&gt; flag otherwise. The asymmetry rule from the design section becomes mechanical: prompt-commands fire freely; tool-commands that mutate sessions or switch engines confirm first — including when n8n calls them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about multi-step skills that need real logic, not just a prompt?&lt;/strong&gt;&lt;br&gt;
Let the species compose: a skill file can &lt;em&gt;instruct the model&lt;/em&gt; to invoke connector-commands at each step, or the dispatcher can run a small script that chains several commands. Prompt logic for judgment-heavy flows, script logic for deterministic ones — the same division you already use everywhere else in the stack.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>ollama</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Slop Has Fingerprints: How to Recognize AI Writing Anywhere</title>
      <dc:creator>Peak</dc:creator>
      <pubDate>Thu, 03 Sep 2026 03:50:59 +0000</pubDate>
      <link>https://dev.to/peakaistack/slop-has-fingerprints-how-to-recognize-ai-writing-anywhere-di1</link>
      <guid>https://dev.to/peakaistack/slop-has-fingerprints-how-to-recognize-ai-writing-anywhere-di1</guid>
      <description>&lt;p&gt;You've read a hundred of them by now — the blog post that starts "In today's fast-paced world," balances every claim with a "however," calls a spreadsheet a "tapestry," and ends by summarizing what you just read back to you. Polished, punctual, and completely empty. That's slop, and once you can name its fingerprints, you see it everywhere: in your inbox, in your feed, sometimes — uncomfortably — in your own drafts.&lt;/p&gt;

&lt;p&gt;Here's the twist that makes this skill double-sided. The same fingerprints that let you &lt;em&gt;spot&lt;/em&gt; slop in other people's content also tell you what to scrub from your own. And the reason the skill matters more than ever: the detectors can't be trusted to do it for you.&lt;/p&gt;

&lt;p&gt;The earlier guide on this blog covered the writer's side — measuring your drafts (sentence variance, stock-word density) and repairing them. This one is the recognition side: the full fingerprint kit for spotting machine-flavored text anywhere, why detection tools fail at the same job, and the human-voice markers that separate assisted writing from published slop.&lt;/p&gt;

&lt;p&gt;:::answer&lt;br&gt;
AI slop shows recognizable fingerprints: stock vocabulary (delve, tapestry, leverage, harness, robust, pivotal), uniform sentence lengths with low "burstiness," balanced non-committal stances, abstract details instead of named specifics, and packaging filler — pre-summaries, restated conclusions, polite sign-offs. Recognize it by scanning for those markers; avoid producing it by adding specific names and numbers, varying sentence rhythm, using contractions and asides, and deleting the packaging. Detection tools are unreliable judges — pattern recognition by a human editor is the dependable test.&lt;br&gt;
:::&lt;/p&gt;
&lt;h2&gt;
  
  
  Why the Detectors Can't Save You
&lt;/h2&gt;

&lt;p&gt;The tempting move is to outsource slop-spotting to an AI detector. Resist it. Detectors look for statistical patterns, and the populations overlap badly at both ends: non-native speakers and methodical writers get flagged as machines; a lightly-edited AI draft skates through as human. A tool that misfires in both directions isn't a judge — it's a coin with a user interface.&lt;/p&gt;

&lt;p&gt;The real cause of slop isn't the model anyway. It's the prompting. Give a model minimal instructions and it defaults to its statistical middle: polite, balanced, slightly verbose — the exact texture everyone recognizes. Slop is what unedited defaults look like. Which means both recognizing it and avoiding it are learnable pattern skills, and the patterns are specific.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fingerprint 1: The Lexicon
&lt;/h2&gt;

&lt;p&gt;Individual words prove nothing; word &lt;em&gt;frequency&lt;/em&gt; proves a lot. The slop lexicon, in families:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overworked verbs:&lt;/strong&gt; leverage, delve, harness, synergize, underscore, uphold, transform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flowery nouns:&lt;/strong&gt; tapestry, landscape (figurative), symphony, myriad, realm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inflated adjectives:&lt;/strong&gt; pivotal, crucial, seamless, robust, transformative, game-changing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One "delve" is a style choice. Three per page is an unedited draft. These words share a function — each is a placeholder for a thought that never got specific. Where a human writes "the invoicing mess," slop writes "operational friction across the financial landscape."&lt;/p&gt;
&lt;h2&gt;
  
  
  Fingerprint 2: Flat Rhythm (Low Burstiness)
&lt;/h2&gt;

&lt;p&gt;Human writing bursts — a forty-word sprawl, then four words. Then another long one, because the thought genuinely unfolds that way. Model defaults produce a steady 15–20-word drumbeat, paragraph after paragraph, section after section. Nothing lands because nothing &lt;em&gt;arrives&lt;/em&gt; — there's no short sentence doing percussion.&lt;/p&gt;

&lt;p&gt;Structural tells ride along: repeated transition scaffolding ("In this section...", "As we have seen..."), the pre-summary that announces what the piece will say before saying it, and the safety wrap — a conclusion that restates the body plus a polite sign-off nobody asked for.&lt;/p&gt;
&lt;h2&gt;
  
  
  Fingerprint 3: Hollow Specificity
&lt;/h2&gt;

&lt;p&gt;The deepest tell. Slop is specific about nothing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Slop phrasing&lt;/th&gt;
&lt;th&gt;Human phrasing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"a local business"&lt;/td&gt;
&lt;td&gt;"the print shop on Silom Road, third floor"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"significant growth"&lt;/td&gt;
&lt;td&gt;"400 users in June, 1,200 by December"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"a variety of tools"&lt;/td&gt;
&lt;td&gt;"n8n for routing, a Google Sheet as the queue"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"many experts agree"&lt;/td&gt;
&lt;td&gt;"every ops lead I interviewed this quarter"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And the anecdotes are &lt;em&gt;too&lt;/em&gt; useful — a story that serves the point perfectly, with no tangents, no wrong turns, no irrelevant detail. Real experience leaves skid marks. Generated experience arrives valet-parked. Add the tell-tale balance: every claim immediately hedged with "however, on the other hand" until the piece commits to nothing.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Quick Spot-Scan
&lt;/h2&gt;

&lt;p&gt;Reading anything suspicious, run the 30-second check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Lexicon: any delve/tapestry/leverage/robust? count them
2. Rhythm: are nearly all sentences 15-20 words?
3. Packaging: pre-summary? restated conclusion? polite sign-off?
4. Specificity: one named number, tool, or place in the whole piece?
5. Stance: does it commit to any opinion at all?

3+ hits = slop. Publish nothing that scores it on your own drafts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For your own writing at volume, the same scan runs as a local pass — a small model flagging lexicon hits and uniform paragraphs, with client work never leaving the machine. The human makes the call; the machine does the counting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping Your Voice When the Machine Helps
&lt;/h2&gt;

&lt;p&gt;Using AI and publishing slop are different activities, separated by a few deliberate habits:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feed specifics in.&lt;/strong&gt; The model can't invent your reality. "The team saw significant growth" is what you get from a vague brief; "between June and December we went from 400 to 1,200 users" is what you get from giving it the numbers. Garbage briefing, garbage output — the fingerprint was yours first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Burst on purpose.&lt;/strong&gt; After a long explanatory sentence, drop a short one. Three words if you like. The rhythm is the register of a person speaking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strip the packaging.&lt;/strong&gt; Delete the hook that opens "In today's fast-paced world," the conclusion that restates the body, and any sign-off hoping the piece helped. If the sentence adds no information, it's wrapping paper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reintroduce the human markers.&lt;/strong&gt; Contractions ("don't," not "do not"). Parentheticals — (I checked three sources before claiming this). Minor flaws, occasionally: the sentence that runs a little long because the thought deserved it. Editors smooth these out; humans put them back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit to a stance.&lt;/strong&gt; Slop hedges everything. A take — even a modest, defensible one — is the single strongest anti-slop signal available, because the statistical middle never has one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What's the difference between AI assistance and AI slop?
&lt;/h3&gt;

&lt;p&gt;Assistance is using the tool to organize, outline, and draft — with your judgment curating what ships. Slop is publishing the default output: its phrasing, its structure, its non-committal balance, unedited. The tool is the same; the oversight is the difference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does AI-generated prose sound boring?
&lt;/h3&gt;

&lt;p&gt;It optimizes toward the middle of its training data, and the middle is smooth. No lived experience means no vivid imagery, no cost to being wrong, no reason to be brief. Boring is what averaging looks like in text form.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I quickly tell if something is AI-written?
&lt;/h3&gt;

&lt;p&gt;Scan for the cluster: sterile contractions-free prose, both-sides hedging, stock lexicon, uniform rhythm, zero named specifics. No single marker convicts — the combination does. And remember the reverse test fails too: some humans write like this, which is exactly why detectors struggle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I run my drafts through an AI detector?
&lt;/h3&gt;

&lt;p&gt;As a curiosity, maybe; as a gate, no. The detector misfires on real humans and misses edited machine text. The 30-second pattern scan above — run by you — is more reliable, costs nothing, and doubles as your editing checklist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap-Up
&lt;/h2&gt;

&lt;p&gt;Slop isn't a technology problem; it's a defaults problem, and defaults have fingerprints. Learn them once — the lexicon, the flat rhythm, the hollow specificity, the packaging — and you'll spot the stuff everywhere, including your own drafts. Then flip the kit around: feed the machine specifics, burst your rhythm, strip the wrapper, keep your contractions and your stance. Detection tools will keep failing at this job. You don't have to.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>writing</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
