Skip to content

Releases: SmooAI/smooth

v0.26.5

Choose a tag to compare

@github-actions github-actions released this 28 Jul 04:29
538c5f9

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Patch Changes

  • 8ea21d1: Fix th code dying with "Error: unknown error" on any turn longer than 15 seconds.

    The keep-alive heartbeat serialized ClientEvent::Ping directly, putting the
    bespoke {"type":"Ping"} on a wire that speaks the canonical operator protocol.
    The server rejected it every 15s with VALIDATION_ERROR / missing 'action' field,
    and that error tore down whatever turn was in flight — while the daemon went on
    to finish the work and persist an answer the user never saw.

    Three fixes:

    • The heartbeat now builds its frame with to_canonical_frame, like every other
      outbound message. The loop moved into a testable heartbeat_loop function, so
      the regression test drives the real path instead of the helper that was always
      correct.
    • New shared smooth_cast::wire::error_message, used by th code,
      th api smooth-operator, and the bench driver. All three read the error frame
      with as_str() on what is actually an object, so every real server complaint
      surfaced as the literal string "unknown error"; the code is now included in the
      message. The bench's unit test asserted a frame shape the server never emits, so
      it passed while the driver was wrong — corrected to the real shape.
    • An error frame only ends the turn it names. Unattributed protocol errors render
      as an inline warning and let the turn keep streaming.
  • 580017e: The message composer now grows with what you type, in both th code and Big Smooth.

    th code — the input was one clipped row: anything past the box width was
    invisible, \n was rewritten to a space on typing and paste, and the cursor was
    placed by adding a raw byte offset to the box origin, so it drifted on any
    multi-byte character. It now wraps, grows to six rows, and scrolls beyond that.

    • New composer module holds the wrap arithmetic — rows, cursor row/column, and
      scroll clamping — so the renderer and the height calculation can't disagree
      about where a row ends. Pure and unit-tested, including a property-style check
      that every wrapped row is a valid char boundary at every width.
    • Multi-line paste keeps its structure. Line endings are normalized over the
      whole pasted string because terminals disagree about the separator (tmux sends
      bare \r, Unix \n, Windows \r\n) and CRLF can't be collapsed one char at
      a time.
    • Mouse capture is enabled only while the draft is taller than the box, and
      released the moment it fits again. The TUI keeps finalized chat in the
      terminal's own scrollback, so holding capture for the whole session would cost
      native wheel-scroll and drag-select permanently; scoping it to "there's a long
      draft open" keeps the default interaction intact. It is also released
      unconditionally on exit.
    • Once you scroll by hand the view stays put until you type again, instead of
      snapping back to the cursor every frame.
    • The box borrows rows from the streaming preview, which is clamped so at least
      one preview row survives — a long draft can't hide the answer you're replying to.

    Big Smooth — the composer had max-h-40 but rows={1} pinned it to one
    line, so the cap was unreachable. It now uses CSS field-sizing-content (with a
    JS fallback for browsers without it) to grow to that cap and scroll past it.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.26.4

Choose a tag to compare

@github-actions github-actions released this 28 Jul 03:49
8ea21d1

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Patch Changes

  • d0f6326: Fix the flaky provision_generates_and_persists_when_unset test that reddened every Release CI run since 2026-07-22 (th-d9dbd7). It and provision_prefers_env_token both mutate the process-global SMOOTH_LOCAL_TOKEN, and cargo runs tests in parallel threads of one process — so the env-token test's set_var could leak into the generate-and-persist test, which then took the env branch and never wrote ~/.smooth/operator-token, failing its .exists() assertion. The release job's scheduling exposed the race that PR Checks got lucky on. Both tests now serialize on a TOKEN_ENV_LOCK, mirroring the existing GATEWAY_ENV_LOCK pattern.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.26.3

Choose a tag to compare

@github-actions github-actions released this 27 Jul 19:50
c4bd7d1

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Patch Changes

  • 32174fa: Fix the legacy-auth migration stranding a valid session. migrate_legacy() skipped the migration whenever the XDG auth directory merely existed, but an earlier run with nothing to migrate creates that directory empty and returns — so any session written to the legacy ~/.smooth/auth afterwards (what the daemon's browser login does) could never migrate. Both th and the daemon then resolved the empty default profile and reported "Not logged in" while a perfectly good session sat in the legacy tree. The guard is now content-based: migrate unless the XDG tree actually holds a session, in the default profile or any named one.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.26.2

Choose a tag to compare

@github-actions github-actions released this 27 Jul 19:14
3c96aba

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Patch Changes

  • e76400c: th code now remembers the conversation across turns. It built a fresh client per turn and each connect created its own session and its own conversation, so Big Smooth started from zero every message — tell it your favorite color and the next turn it answered "you've never told me." The TUI now records the conversation the server binds it to and replays it as conversationId on later connects, so every turn appends to one conversation (the same resume path the web SPA uses). This also stops the empty-session churn of one throwaway session per message.

  • b6bb168: Big Smooth and th now always read the same Smoo AI credentials. Signing in through the daemon's browser flow left the th tool it shells out to logged out, because the daemon's credential path depended on who launched it: only th resolved the active auth profile (exporting SMOOAI_USER_AUTH_FILE / SMOOAI_AUTH_FILE), so a daemon started by th up inherited the right files and was accidentally correct, while one started by launchd or nohup smooth-daemon — how smoo-hub runs it — silently fell back to the legacy ~/.smooth/auth/* tree. Profile resolution moved to smooth_policy::auth_paths (shared by both binaries) and smooth-daemon now resolves it at startup, so it no longer matters how the daemon was started.

    Also removes the deprecated th api login / logout / whoami, superseded by th auth login [--m2m] / th auth logout / th auth whoami. Two spellings for one identity was actively confusing, and only th auth understands auth profiles. The th api <resource> verbs are unaffected. Docs corrected: th auth login is Smoo AI identity, not LLM-provider auth.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.26.1

Choose a tag to compare

@github-actions github-actions released this 27 Jul 17:22
0019df1

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Patch Changes

  • 4c4eb10: Fix the intermittently-red Release workflow: the file-tree walker's sort comparator called Path::is_dir() on every comparison, which is a live filesystem stat. When the walked tree changed mid-sort — parallel tests creating and dropping temp dirs under /tmp — a path could answer "directory" for one comparison and "file" for the next, making the ordering non-transitive and tripping Rust's slice::sort "comparison function does not correctly implement a total order" panic. The comparator now memoizes each path's verdict for the duration of the walk, so it stays a total order no matter what happens on disk underneath it.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.26.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 15:28
7e014ce

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Minor Changes

  • 4bf038b: th roles — first-class CLI for editing an org's RBAC roles (SMOODEV-2368 /
    ADR-105), so you can manage the custom-role catalog without clicking through the
    web dashboard or hand-rolling curl against a user JWT.

    Subcommands (all take --org/SMOOAI_ORG_ID and --json): list and show
    (full permission-key list) read the catalog; create <name> makes a custom role
    (with --template <kind> it seeds from an archetype via
    /workforce/role-templates/create-role); delete removes a custom role;
    grant/revoke add/remove permission keys with a read-modify-write that
    preserves every existing key exactly (PATCH the whole array), set-permissions
    replaces the set wholesale; member-roles <email> shows a member's roles and
    assign/unassign edit them (read-modify-write over the replace-all PUT).

    System roles (organizationId == null) are immutable, so
    grant/revoke/set-permissions/delete refuse them locally with a clear error
    before any API call. Keys that don't match [a-z0-9_.*-] warn but still send
    (the server is the source of truth for validity). Rides the user JWT
    (th auth login) because the roles routes 401 under an M2M token.

Patch Changes

  • 4bfce2b: feat(daemon): Big Smooth auto-recalls durable memories into every turn

    Bumps the engine pin (smooth-operator-server/-svc) to ce2f9e3
    (th-daemon-memory-seam = the core-1.7.0 daemon lineage + the cherry-picked
    StorageAdapter::memory_for_access seam from smooth-operator #330 / th-374b27),
    and overrides memory_for_access on the daemon's SqliteStorageAdapter to
    return its durable SQLite memory store. The engine's runner now feeds that store
    to AgentConfig::with_memory, so remembered preferences (the remember tool's
    writes, th-6d1692) are auto-injected into every turn via memory.recall(...)
    no explicit recall call needed, and they survive daemon restarts. Closes the
    last gap so "always add shows to smoo-hub" actually influences later turns
    unprompted (th-7a9832).

  • fbf6a71: th code is a first-class Big Smooth client again — canonical WS protocol
    (pearl th-248f33).

    th code spoke the bespoke smooth-bigsmooth protocol (TaskStart out,
    Connected/TokenDelta in). That crate was deleted with the microVM stack
    (th-f4a801) and Big Smooth now hosts smooth-operator's canonical,
    schema-driven WS — so nothing had spoken th code's dialect for months and
    every turn died on "Timed out waiting for Connected event".

    It now speaks the same protocol as the web SPA (smooth-web/web/src/operator.ts):
    create_conversation_session on connect, send_message per turn, streaming
    back over stream_token / stream_chunk. Same daemon, same conversations and
    sessions, same tools — just a terminal instead of a browser.

    Translation happens at the edge of client.rs, mapping canonical frames onto
    the TUI's existing internal events, so app.rs/render.rs are untouched.
    Details that came from reading the shipped client rather than guessing: the
    session reply IS the connection signal; tool calls and results both nest
    under rawResponse (reading state.toolResult leaves tools stuck "running"
    forever); stream_reasoning is dropped so chain-of-thought never renders as
    the answer. Cancel/steer have no canonical verb, so they send nothing rather
    than a frame the server would reject.

    Verified end-to-end against the live daemon: a real turn streams a reply.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.25.1

Choose a tag to compare

@github-actions github-actions released this 26 Jul 23:30
29db9df

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Patch Changes

  • 4d7ce2f: Add a create_artifact agent tool (smooth-tools): Big Smooth can now write a self-contained HTML report/artifact into <workspace>/.smooth-artifacts/ and get back the absolute path plus a clickable file:// URL — Claude Code Artifacts style. Registered in the default tool set so every host (including the daemon) gets it. Rendering artifacts inline in smooth-web is a follow-up.

  • dcee87a: Big Smooth can now delegate subtasks to a sidekick (pearl th-1adf55).

    The engine already shipped DispatchSubagentTool (send_sidekick) — the
    daemon just never registered it. Now tools_for builds it from the engine's
    built-in cast plus a snapshot of THIS turn's tool set, so a sidekick inherits
    the same kernel-sandboxed fs/grep/bash instances filtered to its role's
    clearance (scout read-only, runner full), and runs in its own isolated
    conversation returning only a summary — keeping an expensive investigation out
    of the parent's context window (the win behind Claude Code's Task tool).

    Registered last so the snapshot never contains send_sidekick itself (no
    recursive dispatch), and only when a gateway is resolvable (a sidekick with no
    model would just error). Sidekick sub-calls still cross the load-bearing kernel
    sandbox, but NOT the daemon's userspace deny-policy/narc hooks — documented
    in-code as a known defense-in-depth gap for this first cut.

  • 7f6b64f: Fix th pearls pull failing with "cannot merge with uncommitted changes"

    DOLT_PULL merges, and Dolt refuses to merge a dirty working set — but
    read-path commands dirty it as a side effect: th msg inbox and the
    th msg watch poll loop heartbeat the agents table without committing.
    That wedged th pearls pull on every invocation, and silently stopped
    th msg watch from receiving remote messages at all (it swallows pull
    errors, so each poll's own heartbeat blocked the next poll's pull).

    SmoothDolt::pull now commits the working set first, via a new
    commit_working_set helper that no-ops when the store is already clean
    (commit passes --allow-empty, so an unconditional call would add an
    empty commit per pull). Fixing it at that shared choke point covers every
    caller, including interrupted commands that leave the store dirty.

  • ff955e0: Maintain session metadata in the daemon's durable store (th-503c80). Appending a
    message now increments the owning session's messageCount (and refreshes
    lastActivityAt/updatedAt) and writes it through to sqlite, so sessions no
    longer report messageCount: 0 despite having real messages. Empty-session
    churn is out of scope here — the engine's handle_create_session mints a fresh
    session per WS connection when no known conversationId is passed, which the
    storage adapter can't prevent.

  • dcda585: Add the smooth-glow-up skill — Smooth's Presence design language.

    Sibling to smooai's smooai-glow-up (Aurora), but for a terminal-first
    product. Aurora is a dashboard language: cool midnight ground, teal→gold→coral
    spent as heat. Presence is for a personal agent you cohabit with: a warm
    ground, and color spent on presence and attention — the teal→blue th
    gradient reserved for Big Smooth himself, amber meaning only "he needs you".

    Grounded in what already ships (crates/smooth-code/src/theme.rs,
    crates/smooth-web/web/src/globals.css) and covers all three Smooth surfaces:
    the th code TUI, th CLI output, and the smooth-web SPA — including the
    terminal translation of web ideas (borders not glass, foreground-only styling,
    form-not-just-color), pipe/NO_COLOR safety, and how to actually see a TUI
    change (ratatui TestBackend snapshots + tmux capture-pane).

  • fe323d9: Add th referrals — the operator CLI for the partner / advocate referral program (SMOODEV-1035), which had API routes and schemas but no way to drive them short of hand-rolled curl. Covers show / create / update for the program economics, partners list|add|update|remove, link to print a partner's shareable referral URL, plus attributions / visits / commissions. Registered as top-level th referrals and under th api referrals. --rate takes a human percentage (20) rather than basis points, and partners are addressable by email, display name, or code instead of uuid. Referral links point at api.smoo.ai/r/<code> — the host that actually serves the redirect; the marketing site 404s that path.

  • d18e080: Fix th code: send the local auth token so it can actually connect
    (pearl th-6dd202).

    th code called connect_async with no authentication at all, while the
    daemon runs the operator's strict-auth local flavor — so every session
    died on 401 Unauthorized even with a healthy Big Smooth, and the error
    unhelpfully suggested Run: th up for a server that was already up.

    Verified against the live daemon: no-auth → 401, Authorization: Bearer
    401 (the upgrade path doesn't consult headers), ?token=<correct> → 101
    Switching Protocols, ?token=WRONG → 401. The client now resolves the token
    the same way the daemon does (SMOOTH_LOCAL_TOKEN~/.smooth/operator-token,
    read-only — the daemon owns provisioning) and passes it as the query param,
    percent-encoded so a token containing &/#/space can't silently truncate
    the URL. A 401 now explains the token mismatch instead of misdirecting.

  • ec502ee: th code: first application of the smooth-glow-up (Presence) skill
    (pearl th-24cdf3).

    • Greeting printed twice on every cold start — the splash renders "Type a
      message to get started. /help for commands." and app.rs added an identical
      System: message directly beneath it. Removed the duplicate.
    • Status bar hierarchy. It was flat pipe-soup — identity, metrics and
      keybindings in one uniform gray separated by |, with the health dot buried
      mid-row. Now presence leads (the health glyph opens the line — it's Big
      Smooth's "I'm awake" signal), live state reads next, and the static
      keybindings are dimmed and right-aligned so alignment does the separating
      work. Middots replace pipes throughout.
    • Health state no longer color-only. Three identical differing only by
      hue said nothing under NO_COLOR, on a mono terminal, or to the ~8% of users
      who can't separate green from amber. The shape now carries it too: awake,
      degraded, unknown.

    Verified by rendering under tmux at 110/120/80 columns and with NO_COLOR=1.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.25.0

Choose a tag to compare

@github-actions github-actions released this 26 Jul 20:53
d641f8e

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Minor Changes

  • a2467a6: th dashboard layout get|add|remove — the dashboard-layout commands graduate to a top-level command (pearl th-93d811), following the config/widgets/pearls promotion pattern. th api dashboard keeps working as the REST-mirror spelling; both dispatch to the same implementation.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.24.0

Choose a tag to compare

@github-actions github-actions released this 26 Jul 16:08
6f5d254

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Minor Changes

  • c905ee7: th api dashboard layout get|add|remove — manage your Smoo AI main-dashboard
    widget layout from the CLI (SMOODEV-2753).

    Layouts are per (user, org, dashboard type) rows behind
    GET/PUT /organizations/{org}/dashboard/layout, previously reachable only by
    clicking around the web dashboard or hand-rolling curl against a user JWT.
    layout add <widget_id> does a read-modify-write: fetches the saved layout,
    appends the widget below the current grid with the size→span mapping the web
    uses (small 3 / medium 6 / large 9 / full 12 on the 12-column grid), and PUTs
    it back — the server validates the widget id against its registry, so a typo
    fails loudly instead of saving a dead tile. layout remove is the inverse;
    layout get prints the saved (or default) layout as JSON. Rides the user JWT
    (th auth login) because layout rows are keyed by user id — M2M tokens can't
    own a layout. Dogfood: added the new aws_cost_forecast widget to the Smoo AI
    org dashboard with th api dashboard layout add aws_cost_forecast.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)

v0.23.4

Choose a tag to compare

@github-actions github-actions released this 26 Jul 03:57
e573e69

Install

Homebrew (recommended — macOS + Linux):

brew install SmooAI/tools/th

curl | sh:

curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

Build from source (Cargo):

git clone https://github.com/SmooAI/smooth.git
cd smooth
cargo install --path crates/smooth-cli

Upgrade

# Homebrew
brew update && brew upgrade th

# curl|sh — re-run the installer (it overwrites in place)
curl -fsSL https://raw.githubusercontent.com/SmooAI/smooth/main/install.sh | sh

# Cargo — from your cloned checkout
cd smooth && git pull && cargo install --path crates/smooth-cli --force

What's new

Patch Changes

  • 889cc82: Big Smooth: extend the system prompt to an industry-best-practice agentic
    prompt (pearl th-67b1e1).

    BIG_SMOOTH_PERSONA grew from ~70 words (identity + personal-not-support +
    no-chain-of-thought) to a full sectioned agent prompt: Agency (finish
    the job, adapt on failure, prefer doing over describing), Tools (use
    them not guesses, never fabricate results, verify, parallelize),
    Memory (recall at task start, remember durable facts like the vault
    location), Skills & tracking (read SKILL.md, track via pearls),
    Environment (workspace/vault/always-on), and Judgment (sensible
    defaults vs ask, confirm destructive/outward-facing actions, secrets,
    honest reporting). The two hard-won fixes — personal-assistant-not-support
    and no reasoning narration — stay first and firm for the fast local model.

Downloads

Platform File name
macOS (Apple Silicon) th-macos-arm64.tar.gz
Linux (x86_64) th-linux-x86_64.tar.gz
Linux (arm64) th-linux-arm64.tar.gz

Source · README · Homebrew tap · Pearls (work tracker)