A gremlin is a folder you can talk to. Drop .gremlin/ into any directory and that directory becomes an agent โ persistent, scheduleable, and addressable from the TUI, Telegram, or a shell pipe.
No daemon. No database. No framework. No language runtime. Just bash, markdown, and the filesystem. A gremlin is a folder you can cp -r, git diff, and mv.
Install into the current directory:
curl -fsSL https://raw.githubusercontent.com/zealtv/gremlin/main/install.sh | bash -sPoint it at a model. .gremlin/models/default.sh is just an executable that reads a prompt on stdin and writes a reply on stdout โ edit it for whichever CLI you use (Claude Code, Codex, Open Code, a local model, anything):
#!/usr/bin/env bash
exec claude -p --model claude-sonnet-4-6 --allowedTools "Bash"Start the runner and open the TUI:
.gremlin/gremlin start
.gremlin/gremlin tuiRun /help for commands.
- Create a bot with
@BotFatherand copy the token. - Get your numeric chat id from
@myidbot. - Copy
.gremlin/bridges/telegram/config.exampletoconfig, fill inTELEGRAM_BOT_TOKENandTELEGRAM_CHAT_ID, then.gremlin/gremlin telegram start.
- The agent is a folder. Copy it, fork it, version it, delete it. There is no hidden state.
- Almost no dependencies. Bash, coreutils, and whatever CLI talks to your model. Updating is
/updateโ an overlay that preserves your identity, transcripts, memory, and queues. - Bring your own model. A model preset is just
stdin โ stdout. Swap models with/model <alias>. Non-LLM scripts work too. - One inbox, many sources. TUI, Telegram, scheduled ticks, peer gremlins, and
gremlin sayall funnel through.nest/in/. One tender loop, one dispatch rule. - Composition is adjacency. Multiple gremlins = multiple folders. Delegation is
mv item ../other/.gremlin/.nest/in/. - Scheduled and persistent. Background tend + tick loops give you reminders, nightly summaries, and self-initiated work without a separate scheduler.
- Append-only transcript.
transcript.mdis the source of truth. Bridges tail it. Debugging iscat. - Memory you control. Glean stores findings as flat markdown; the catalog is broadcast by default, bodies are fetched on demand, and selected findings can be promoted into full context with a symlink.
- Everything is a file. Skills, tools, commands, model presets, bridges โ every extension point is a directory of small scripts or markdown.
your-folder/
โโโ .gremlin/
โโโ gremlin.md identity, personality, voice
โโโ context/ always-loaded context, including managed system/ links
โโโ skills/ markdown procedures with triggers
โโโ tools/ bash tools the gremlin can run
โโโ models/ stdin โ stdout model presets
โโโ commands/ slash commands
โโโ bridges/ TUI, Telegram, โฆ
โโโ .nest/ inbox / claimed / completed items
โโโ .groundhog/ scheduled work
โโโ .glean/ memory workbench
โโโ transcript.md append-only conversation log
โโโ gremlin the executable
User-facing docs live inside the installed gremlin:
.gremlin/README.mdโ full usage guide.gremlin/docs/protocol.mdโ loops, transcript, dispatch, models.gremlin/docs/composition.mdโ multiple gremlins, delegation, sandboxing
The underlying file-based protocols are vendored and documented on their own:
- ๐ชบ nestlings โ queueing and actioning work
- ๐ฆซ groundhog โ scheduling recurring tasks
- ๐ฎ glean โ memory distillation and retrieval
- ๐ชก loom โ planning structured work
The protocol does not enforce a sandbox. Host a gremlin where broad shell and file access is acceptable. For real isolation, wrap .gremlin/bin/llm.sh with a separate UNIX user, container, VM, sandbox-exec, bwrap, or equivalent.