A nanobot-class personal agent with none of the Python. joshbot is a single ~19MB static binary — no venv, no runtime dependencies. Self-hosted, curl to running in under a minute, and scriptable enough to test in CI.
curl -fsSL https://raw.githubusercontent.com/bigknoxy/joshbot/main/install.sh | bash
joshbot uses a ReAct (Reasoning + Acting) loop — it thinks, uses tools, learns from results, and iterates — all within a single conversation.
Send a message via CLI, Telegram, or script. Every channel feeds into a common message bus.
The LLM core analyzes your intent with full context — past conversations, stored memories, available skills and tools.
Runs tools (search files, fetch web pages, execute code, delegate subagents) and observes results.
Key facts are extracted and saved to long-term memory. Repeated tool patterns auto-create reusable skills.
From daily productivity to deep research — joshbot handles the spectrum.
Summarizes calendar, tasks, and priorities into a morning plan. Flag urgent items and draft replies.
Gathers information across multiple sources, cross-references, and returns a structured brief with citations.
Retains facts, preferences, and decisions across days. Retrieves relevant context without being reminded.
Generates, explains, debugs, and refactors code. Runs lint/tests on results. Investigates bugs systematically.
Schedule reminders in plain durations (30m, 2h, 1d), one-off or repeating. A heartbeat scans for unchecked tasks and follows up on its own.
Observes repeated tool-use patterns and generates reusable skills. Common tasks become one-command operations.
Fans out independent tasks to parallel subagents or chains steps sequentially. Each gets focused context.
The interactive CLI and Telegram print the answer as it is generated instead of after the turn ends. On by default since v1.48.0 — set streaming: false to restore whole-reply delivery. Scripted output is unaffected either way.
In a real terminal, joshbot agent gives you Tab slash-command completion, Up/Down history, multiline editing (Alt+Enter) and a prompt that shows the current model.
Switch models or personalities per-session (/model, /personality), summarize context (/compact) and inspect status (/status) — in the CLI and from the Telegram menu.
Chat from anywhere via Telegram or Discord. Full skill and memory access from your phone. Telegram uses long-polling, Discord an outbound gateway websocket — no webhooks or inbound ports either way. Both channels fail closed — an empty allowlist rejects everyone. Enable one at a time: the bus has a single outbound channel that both read competitively, so running them together has them steal each other's replies.
Attach a picture with joshbot agent -m "what is this?" --image shot.png (repeatable), or just send a photo on Telegram. The type is decided by sniffing the bytes, never by the extension or by what the sender declared — PNG, JPEG, GIF and WebP, 5 MB per image and 20 MB per request. If no configured model is known to accept images, the run fails before any provider call with an error naming the models it tried; unknown models count as not vision-capable, so a typo reads as a typo rather than a provider 400. Sessions record what was sent — type, size, SHA-256 — not the bytes.
Define profiles for a hosted model and your local Ollama, then pick one per run with --profile — on agent, gateway and preflight. A profile stores the name of the environment variable holding its key, never the key, and a typo, a disabled profile or an unset variable stops the run at startup instead of surfacing as a 401 mid-conversation. joshbot profiles list shows what each would dial and is safe to paste into a bug report.
Every command runs non-interactively. Pipe one message with agent -m, get machine-readable output with --output-format json or NDJSON with stream-json, and thread turns with --resume. Meaningful exit codes make it safe to gate CI on.
API keys, auth headers and your home directory are stripped from logs and joshbot status before you ever see them — so a bug report is safe to paste. Conversations on disk stay verbatim, owner-only.
Downloads a single binary for your platform (Linux/macOS, amd64/arm64), verifies it, and points you at joshbot onboard. Open source, MIT licensed. Your data stays on your machine.