Skip to content

FAQ

The shell is Tauri 2 (cross-platform in principle), but stint leans hard on macOS-specific bits: Keychain for secret storage, menu-bar tray, dock visibility transitions, native macOS menus. Porting to Linux or Windows would mean either dropping those features or building per-platform equivalents (secret-service on Linux, wincred on Windows, etc.).

No fundamental blocker — just a scope decision. A Linux build is plausibly Phase 8+ work if there’s demand.

Yes, fully. Every mutation persists to a local SQLite database immediately. When you go online, the sync queue drains and Solidtime catches up.

The popover and main window work normally offline. The only thing that fails is calendar refresh (Google API call) and Solidtime sync — both queue and retry transparently when connectivity returns.

Not currently. stint is designed around Solidtime as the source of truth for projects, organizations, and historical entries. A standalone mode (local-only, no remote sync) is on the roadmap but unscheduled.

If you want a self-hosted backend without standing up Solidtime, Solidtime has a Docker setup that runs on ~512MB of RAM.

WhereWhat
~/Library/Application Support/stint/stint.dbSQLite database — time entries, projects, calendar accounts, sync queue
macOS Keychain (tech.reyem.stint.* service prefix)Solidtime PAT/OAuth tokens, calendar OAuth tokens (per account)
~/Library/Logs/tech.reyem.stint/stint.log.<date>Application logs, daily rotation, 14-file cap

Everything is local. No cloud storage, no third-party backup.

No analytics, no telemetry. The only outbound traffic stint generates is:

  1. Solidtime API calls — to your Solidtime instance, for sync.
  2. Calendar API calls — to Google (if you connected a calendar).
  3. Auto-update check — once every 24 hours, to github.com/reyemtech/stint/releases/latest/download/latest.json (a static JSON manifest, no user identifier).
  4. stint update for standalone CLI installs — same endpoint, on demand.

You can disable auto-update under Settings → Updates (sets the polling interval effectively to “never until you click Check now”).

Where does the CLI binary live after brew install?

Section titled “Where does the CLI binary live after brew install?”

Apple Silicon: /opt/homebrew/bin/stint → symlink into /Applications/Stint.app/Contents/MacOS/stint.

Intel Mac: /usr/local/bin/stint → same symlink target.

The CLI binary inside the .app bundle is the same one shipped via curl | sh; the only difference is the install path.

Can I use brew install + curl | sh together?

Section titled “Can I use brew install + curl | sh together?”

Yes — they coexist at different paths. brew install symlinks to /opt/homebrew/bin/stint; the standalone installer writes to /usr/local/bin/stint or ~/.local/bin/stint. Whichever is earlier in your PATH wins when you type stint.

stint update on the brew-installed binary won’t try to overwrite the brew symlink; it detects the .app-bundled install and tells you to use brew upgrade --cask stint instead.

Three paths, each works:

  1. In-app: Settings → Updates → Install. Auto-checked every 24h.
  2. Brew: brew upgrade --cask stint. Picks up the latest cask version.
  3. Standalone CLI: stint update. Self-replaces the binary atomically.

All three converge on the same release artifacts.

Can I trigger stint from a shell script, Raycast, or Alfred?

Section titled “Can I trigger stint from a shell script, Raycast, or Alfred?”

Yes. Every CLI verb accepts a global --json flag for structured output:

Terminal window
stint --json current
stint --json start "writing tests" --project p-uuid
stint --json today | jq '.[] | .description'

For deep links from Raycast / Alfred / Shortcuts, use the stint:// URL scheme:

Terminal window
open "stint://start?description=writing%20tests"
open "stint://stop"
open "stint://current"

See Scripting stint and the CLI reference.

How do I drive stint from Claude, Codex, or OpenCode?

Section titled “How do I drive stint from Claude, Codex, or OpenCode?”
Terminal window
stint skill install # interactive picker
stint skill install claude # explicit

The installer registers stint’s MCP server with the harness and lays down a SKILL.md / rules fragment so the agent knows when and how to call the eight tools (start, stop, current, list_entries, list_projects, list_tasks, update_entry, delete_entry). See AI integration for the full integration story.

The HTTP API is off by default. When you enable it (stint config set api.enabled true), the server binds to 127.0.0.1 on an ephemeral port — loopback only, never reachable from another machine on the network. It runs inside the Stint.app process, so quitting the app closes the listener. There’s no separate daemon and no token (localhost is the trust boundary).

Yes. Stint.app registers the stint:// URL scheme on macOS:

URLEffect
stint://start?description=…&project=…&billable=trueStart a timer
stint://stopStop the running timer
stint://currentFocus the current-entry view
stint://entry/<local-uuid>Open an entry in the main window
stint://project/<solidtime-id>Open the Today view focused on a project
stint://task/<solidtime-id>Open Today filtered to a task (resolves parent project automatically)

open "stint://stop" from the shell, or wire into Raycast / Alfred / Shortcuts.

github.com/reyemtech/stint.

Issues for bug reports and feature requests.

Reyem Tech. stint is MIT-licensed — fork it, modify it, ship your own version with a different OAuth client.

The repository’s CLAUDE.md is the canonical reference for repo structure, conventions, and gotchas — useful reading even if you’re not contributing.