shmakk

AI-supervised terminal. No GUI. No bloat. Just your shell, smarter.
Optionally: talks back.

takes advantage of errors so you don't have to think about them

npm install -g git+https://github.com/marbad1994/shmakk.git
shmakk : MainThread
marcus@tobarko.ai ~/D/r/s/demo-deepseek> shmakk
session started. type commands or questions naturally.
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek> Hey can we chat?
[shmakk task] (Ctrl-C to interrupt)
⊥ thinking...
Sure, we can chat! What's on your mind? Need help with
something in your project, or just want to bounce around some ideas?
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek> whats the fastest way to reverse a string in python
[shmakk task] (Ctrl-C to interrupt)
⊥ thinking...
Slice with step -1:
 
s[::-1]
 
Fastest and most Pythonic. Works on any sequence.
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek>
marcus@tobarko.ai ~/D/r/s/demo-deepseek (main)> set up a react and flask project with a login page using oauth, follow best practice and set it up with docker compose and add redis and mongodb
[shmakk task] (Ctrl-C to interrupt)
⊥ thinking...
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek [127]>
list_dir(.)
1 entries
make_dir(backend) — created
make_dir(frontend/src/components) — created
make_dir(nginx) — created
write_file(backend/requirements.txt) — written
write_file(backend/app.py) — written
· read 3 files
write_file(docker-compose.yml) — written
 
Done. React + Flask + OAuth + Redis + MongoDB + Nginx scaffolded.
Run with: docker compose up --build
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek>
# shmakk uses your machine's command history + probability
# to correct typos. no LLM call. instant.
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek> gti commit -m "fix login bug"
[shmakk task] (Ctrl-C to interrupt)
correcting: gtigit (your history, p=0.99)
running: git commit -m "fix login bug"
 
[main 7d3a91f] fix login bug
2 files changed, 18 insertions(+), 4 deletions(-)
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek> docekr-compose up
[shmakk task] (Ctrl-C to interrupt)
correcting: docekr-composedocker-compose (your history, p=0.97)
running: docker-compose up
 
Starting demo-deepseek_redis_1 ... done
Starting demo-deepseek_mongo_1 ... done
Starting demo-deepseek_backend_1 ... done
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek>
# install a skill from any URL — shmakk handles the rest
 
marcus@tobarko.ai ~> shmakk --install-skill https://example.com/skills/rust-expert.md
[shmakk task] (Ctrl-C to interrupt)
⊥ fetching skill...
fetched: rust-expert.md (2.1 KB)
installed to: ~/.shmakk/skills/rust-expert
Skill 'rust-expert' ready. It will be loaded automatically
when relevant context is detected.
 
marcus@tobarko.ai ~> shmakk --list-skills
rust-expert loaded from https://example.com/skills/rust-expert.md
docker-compose loaded from https://example.com/skills/docker.md
git-flow loaded from https://example.com/skills/git-flow.md
 
marcus@tobarko.ai ~> shmakk --load-skill rust-expert
rust-expert skill active for this session.
 
marcus@tobarko.ai ~>
# runtime profiles, live switching, context budgeting
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek> shmakk --profile builder
profile: builder (large context, file-write optimised)
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek> shmakk --profile-set tiny
switching to profile: tiny (minimal context, fastest responses)
restarting inner shell…
ready.
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek> shmakk --compact
context budget: 18 400 / 32 000 tokens used
conversation history cleared. context reset.
 
# available profiles
tiny minimal context, fastest responses
balanced default — good for daily work
deep larger investigations, multi-step tasks
builder editing and building large projects
 
marcus@tobarko.ai ~/D/r/s/demo-deepseek>
# always-on speech-to-speech. no hotkey. just speak.
# 100% local — whisper + kokoro ONNX, no API, no cloud.
 
marcus@tobarko.ai ~> shmakk --sts
[shmakk] STT ready (Whisper-base ONNX)
[shmakk] TTS ready (Kokoro-82M, voice=af_river)
 
listening...
🎤 hey can you check if there are any syntax errors in agent.js
[shmakk task] (Ctrl-C to interrupt)
· read agent.js
No syntax errors. One thing worth flagging: the tool
result cache uses JSON.stringify as a key — that could
collide for deeply nested args. Low risk for current tools.
[shmakk] 🔊 speaking as af_river...
 
listening...
🎤 stop
🤫 stopped
 
listening...
today's voice schedule — deterministic, feels random
seed = date × prime → bucket sizes 2–5h → voice index. same day = same schedule. no state, no config.
what it does

🎤 Voice — speaks back

Always-on mic via VAD. Speak naturally, pause to send. Kokoro TTS reads responses aloud sentence-by-sentence so the first word plays in under a second. Say stop to interrupt mid-sentence. 28 voices, all local, no API.

🎲 A different voice every few hours

shmakk rotates through all 28 Kokoro voices on a deterministic daily schedule — changes every 2 to 5 hours, timed differently each day. No randomness at runtime, no state. Just a hash of the date. Feels alive, costs nothing.

Typo correction

Deterministic, no API call. Uses your machine's command history and probability to fix typos the way you type, not some generic model.

Chat in shell

Just write. Ask questions, get answers, run suggested commands — all without leaving the terminal. Session history is preserved until you --compact.

Project scaffolding

Describe what you want in plain English. shmakk plans, creates dirs, writes files, asks before anything risky. Subagents spawned automatically for parallel work.

Skills

Extend behaviour with any URL: shmakk --install-skill <url>. Loaded per-session or automatically when relevant context is detected.

Runtime profiles

tiny · balanced · deep · builder. Switch live with --profile-set. Context budgeting and loop-stall protection built in.

Safety

Risky commands always confirm before running. Secrets (.env, tokens, keys) are never sent to the AI. Defensive handling for fallback tool-call formats.

⭐ Star on GitHub Read the docs

works with any OpenAI-compatible API — bring your own key