Janbot help · macOS 14+ · Apple Silicon
Get Janbot running, then hand it real work.
Janbot is a native Mac agent that reads your documents, runs commands, searches the web, remembers what matters, and repeats on a schedule. You pick the model, and your data stays on your machine. These pages take you from first install to your first finished task, then cover every control in the app.
new here? start with Getting started → then Chat & the agent
Install Janbot
Janbot ships as a single Mac app. There's no account to create and nothing to meter. The public download is paused while we finish entity and EULA work; builds are shared privately with people who request access.
Requirements
| What | You need |
|---|---|
| macOS | macOS 14 (Sonoma) or later |
| Hardware | Apple Silicon (M1 or newer) |
| Disk / RAM | The app is ~29 MB. A local model needs more, so check the RAM table. Cloud models need almost nothing locally. |
| A model | Either a local server (LM Studio, Ollama) or a cloud API key (Claude, OpenRouter, Hugging Face). You pick during onboarding. |
Request access
- Use Request access to tell us you're interested.
- If we share a build with you, open the
.dmgand drag Janbot into your Applications folder. - The first time you launch, right-click Janbot.app → Open, then confirm. After that it opens normally.
Installer links are not published on this site yet. Preview builds may be unsigned, so macOS may say the app "cannot be verified." Use right-click → Open once (not a double-click) if Gatekeeper prompts you.
Janbot lives in your menu bar. Closing the window hides it rather than quitting, so schedules and goals keep running. To have it start automatically, turn on Start Janbot on login in Settings → Agent.
Onboarding, in four steps
The first launch walks you through a short setup and then drops you into your first chat.
Welcome
Meet your bot. Private, on your Mac, ready in minutes. Choose Get started.
Model setup
Janbot reads your chip and RAM and recommends a local model that fits, with download progress. Continue when it's ready.
Workspace
Pick a working directory. This is the sandbox folder for files Janbot creates and edits for you.
Done
Finish and land in the main app, ready for your first message.
If you only plan to use Claude, OpenRouter, or Hugging Face, you don't need a local model. You can move past the local download and add your API key later in Settings → Models.
Send your first message
- Type a request in the composer at the bottom. For example: "Summarize the PDF I'm about to drop in and list three action items."
- Attach a file with the paperclip, or drag and drop it onto the composer.
- Press Enter to send (Shift+Enter makes a new line).
- Watch the turn unfold. Thinking, tool calls, and any approval requests all appear inside the reply. See Chat & the agent.
After onboarding, Janbot resumes your latest task chat on restart, so you pick up where you left off.
Rounds, not replies
Janbot doesn't just answer. It works. A single message can turn into many rounds of thinking, using a tool, and reading the result, and you see all of it as it happens.
The composer
- Attachments. Add files with the button, drag-and-drop, or paste. PDF, Excel, Word, PowerPoint, and images are all read natively.
- Slash commands. Type
/to autocomplete a skill (see Skills). This works mid-message, and on Telegram or Slack too. - Model. Send with your default model, or pick another enabled slot from the pool.
- Reason sets how hard the model thinks for this message: Auto / Low / Medium / High / XHigh. Auto scales with the request, while High and above enable deeper thinking. Effort can also escalate on its own if the work looks incomplete.
- Capabilities is labelled Allowed for this chat. It decides which tool groups and MCP servers this conversation may use. More on it below.
- Stop halts a run at any time while it's working.
Reading a turn
An assistant turn evolves inside its bubble: thinking, tool calls, approval prompts, and questions all appear there in order (the "turn timeline"). When the run finishes, it collapses to a summary like "Thought for 6s · 9 actions," which you can expand again. Long threads open at the latest turn; scroll up or choose Earlier messages for history.
Replies can include inline images, link previews, and document preview cards. Each response offers Copy, Share, and Retry; your own prompts are selectable and copyable too.
Approvals & questions
When Janbot wants to change your world, whether that's writing a file, editing something, or running a shell command, it pauses and asks inline, batching related calls into one request. Your choices:
- Allow permits this action (or batch) once.
- Deny refuses it, and Janbot reads that and takes another path.
- Allow & trust session auto-approves gated tools until this conversation ends or the app restarts.
Expand any request to see the raw tool arguments. Janbot can also ask you a multiple-choice question mid-run when it needs a decision. Tune what requires approval in Safety.
Capabilities: per-chat policy
The Capabilities picker sets what a single chat is allowed to touch. Built-in tool groups start on; MCP servers inherit your Settings defaults. Switching or reopening a chat resets the picker (the first send on a new draft can preserve your choices). An MCP server that needs sign-in stays disabled until you Connect it in Settings → MCP. Turning a namespace off is a policy choice for that conversation only, so it doesn't change anything globally.
The sidebar
| Section | What's in it |
|---|---|
| Tasks | Your recent chat threads; New task to start one. |
| Scheduled | Cron-style agent jobs with their own threads. See Tasks. |
| Goals | Standing long-term goals the agent checks over time. |
| Archived | Older or manually archived chats, schedules, and goals. Restore them where offered. |
Each regular task has rename / archive / delete actions in its header bar. Opening Settings swaps the sidebar for settings navigation with a Back to app link.
Bring whichever mind you like
Janbot runs on local models, cloud models, or a mix. You set one default and can override the model per message. If your default is unreachable, Janbot falls back to other enabled models automatically.
Local vs cloud
| Provider | How you connect | Notes |
|---|---|---|
| LM Studio | Local server on port 1234 | Auto-detected |
| Ollama | Local on port 11434 | List, pull, and delete models in-app |
| vLLM | Local on port 8000 | Auto-detect / Use |
| llama.cpp | Local on port 8080 | Auto-detect / Use |
| Claude | API key in Settings → Models | Models listed from the Anthropic API, with search |
| Hugging Face | HF token | Inference API |
| OpenRouter | API key | Requests set data collection to deny |
| Custom API | Base URL + optional key | Any OpenAI-compatible endpoint; lists /v1/models, or hand-enter IDs |
The model pool & default
In Settings → Models, enable the providers you want and fill up to three model slots. Choose one as your default and Save default. Every chat starts on the default; the composer can override Model and Reason per message. Transient network or rate-limit errors retry automatically, and there's an in-app test you can run without touching your files.
Recommended local models by RAM
| RAM | Model | LM Studio search | ollama pull |
|---|---|---|---|
| 8 GB | Qwen3 4B (4-bit) | qwen3-4b | qwen3:4b |
| 16 GB | Qwen3 8B (4-bit) | qwen3-8b | qwen3:8b |
| 32 GB | Qwen3 30B-A3B (4-bit) | qwen3-30b-a3b | qwen3:30b-a3b |
A small model that can read your files and run your commands gets more done than a giant that can only talk. An 8 GB Mac is enough to start.
Where your files live, and where Janbot lives
Janbot keeps two things apart: the working directory where it makes files for you, and Application Support where the app keeps its own brain.
Working directory
This is the sandbox folder for deliverables: reports, spreadsheets, and documents Janbot creates or edits on your behalf. You choose it during onboarding (often ~/Janbot-test by default) and can change it in Settings → Agent. It's a blank workspace, not where personality or memory live.
Personality: SOUL & USER
Janbot's behavior and what it knows about you are held in editable personality files (SOUL and USER), reachable from Settings → Agent. Edits to personality are gated behind approval, like any other change to your world. These live under Application Support, not in your working directory.
Deleting a file in your working directory never touches Janbot's memory or settings. Wiping memory never deletes your deliverables. See Privacy & data for the exact paths and the reset options.
Work that runs without you
Some jobs shouldn't wait for you to remember them. Scheduled tasks run on a clock; goals are standing intentions the agent revisits over time.
| Kind | What it is | Cadence |
|---|---|---|
| Scheduled | A saved prompt that runs on a schedule in its own chat thread. Each run stores the prompt, then the result. | every Xm, every Xh, daily HH:MM, weekly DAY HH:MM |
| Goal | A sticky long-term goal; the agent tells you when it'll check in again. | No fixed clock; a background worker decides. |
The config bar
Open a scheduled task or goal to find its controls on the thread: name and prompt/goal text, enable/pause, Run now, Reasoning effort, a Notify channel to mirror results to Telegram or Slack, and archive. Runs use your default model with the reasoning you set, and show a live Running… state when a background run is active. Add new ones with the + next to Scheduled or Goals in the sidebar.
Scheduled work only fires while the app is running. Since closing the window just hides it, that's usually fine. But if you quit fully, turn on Start Janbot on login so schedules survive a restart.
Slash commands that expand into real work
A skill is a reusable prompt pack. Type / in the composer to autocomplete one; it expands into a richer instruction for the agent.
Bundled skills
| Command | What it does |
|---|---|
/research | Deep web research written to a report file |
/summarize | Summarize a URL |
/write | Writing help |
/remember | Store lasting notes |
/wiki | Navigate your knowledge wiki |
/pdf /docx /xlsx /pptx | Create, read, or edit a specific document format |
/office | Umbrella guidance for Office files |
/create-skill | Author a new skill of your own |
Managing skills
The Skills curator lives in Settings → Agent. It pins the bundled skills and can archive agent-created skills that have gone unused for 90 days; run it manually with Run curator. Skills you or the agent write are hot-reloadable, so new ones show up in autocomplete right away.
It asks before it acts
Janbot has real hands, so it's built to check with you before using them. Approvals and the sandbox are on by default; you decide how much to loosen.
Why the pauses
Anything that changes your machine, like writing or editing files, running shell commands, or editing personality, pauses the run for your inline approval. You can allow once, deny, or Allow & trust session to stop being asked until the conversation ends.
Approval rules
Tune what needs approval in Settings → Safety:
| Rule | Effect |
|---|---|
| Auto-approve file writes in working directory | Skip the prompt for writes inside your sandbox folder |
| Auto-approve all file writes (danger) | Skip prompts for writes anywhere Janbot can reach |
| Auto-approve create directory | Let Janbot make folders without asking |
| Auto-approve all shell commands (danger) | Run any shell command without asking |
| Auto-approve workflow and personality edits | Let it manage schedules/goals and edit personality unprompted |
| Workflow tool calls require approval | Keep a prompt in front of workflow/schedule changes |
"Auto-approve all file writes" and "auto-approve all shell commands" remove the guardrails that keep the agent inside your sandbox. Only enable them when you fully trust the task and know what the agent can reach.
The Seatbelt sandbox
Shell commands run inside macOS Seatbelt, on by default:
- On. Shell skips the approval pause, but dangerous patterns are still blocked at execution, and the network is denied by default (allowlisted
curl/wgetcan reach out). - Off. Janbot falls back to a shell allowlist plus the approval path. The built-in allowlist covers common read-only commands and a few read-only git commands.
Hooks (advanced)
Power users can intercept the agent's actions with hooks. There's no Settings UI for them, so you define them in ~/Library/Application Support/Janbot/agent/hooks.json for events like pre/post tool use, prompt submit, pre-compact, and stop, with actions such as allow, deny, audit log, or redact. See the hooks reference for the full schema.
Reach Janbot from anywhere
Connectors let Janbot talk to the services you already use. Set them up in Settings → Connectors, where each card has a Connect or Manage dialog.
| Connector | What it does |
|---|---|
| Telegram | Chat with Janbot from your phone using a bot token from @BotFather |
| Slack | Index channels, optionally reply to DMs/@mentions, and post from your desktop chat |
| Google Workspace | Pick services, then authorize in the browser |
| Local files | Mount folders read-only or read-write |
Telegram
- Two-way, with history saved. Photos you send go to the model; Janbot sends images back with
when the file is under your working directory. - Scheduled/goal results can be delivered to Telegram.
- Rate limit is about 5 messages per 60 seconds per user; it auto-reconnects when a token is saved.
Slack
- Two modes: interactive (reply to DMs and @mentions) or search-only. You can restrict it to an allowlisted Slack user.
- An indexer makes channel history searchable; sending a message from the desktop is approval-gated, and the bot must be in the channel.
- Rate limit is about 5 messages per 60 seconds per channel.
Google Workspace
- Services: Gmail, Calendar, Drive (read), and Docs & Slides (read/write).
- You authorize in the browser and grant only the scopes you select; writes stay approval-gated.
Local folders
Mount folders outside your working directory read-only or read-write. Tools respect each mount's permission boundary.
When you talk to Janbot through Telegram or Slack, it has a reduced tool set compared to the desktop app.
Plug in more tools
MCP (Model Context Protocol) servers add tools from other apps and services: Linear, Spark, your own scripts, and more. Manage them in Settings → MCP.
Add a server
- Add a stdio server (a local command) or a Streamable HTTP remote server.
- Set any environment variables or auth headers it needs.
- For OAuth servers, choose Connect. A browser window handles sign-in, and tokens are stored in Application Support or your Keychain.
- Check the server's health and the tools it discovered.
- Enable it for a chat from the composer's Capabilities picker.
MCP tool calls are approval-gated like everything else, unless you opt a server into auto-approve per server. Turn that on only for servers you trust, since it lets those tools act without asking.
A server that needs OAuth stays disabled in the Capabilities picker until you complete Connect in Settings → MCP. Credentials, tests, approval policy, and editing all stay in Settings, not the chat.
It remembers on purpose
With wiki-backed memory on, Janbot turns what it learns into a structured, searchable knowledge base, and the most relevant notes get pulled into new chats automatically.
How it feels
- Observations are merged into a markdown wiki of linked pages, then indexed for hybrid keyword + vector search.
- Embeddings run on-device, so nothing is sent away in order to be remembered.
- Relevant memories and their sources can appear as citations on responses.
Managing memory
Turn Wiki-backed memory on or off in Settings → Agent → Interface. The Memory tab (under Advanced; make it visible from Agent) lets you browse, edit, and delete stored memories and watch the ingest queue. Deleting a wiki entry removes its markdown, so a re-index won't bring it back.
Also under Agent → Interface: Strict completeness check runs a gap review before Janbot responds (and a citation check when the web was used). It's skipped automatically on High and above reasoning.
What stays on your Mac
Your conversations, settings, memories, wiki, skills, and personality all live on your machine. Data only leaves when you point Janbot at a cloud model or a connector that calls an external service.
Where things live
Everything Janbot knows lives in one file you can open:
~/Library/Application Support/Janbot/janbot.db| Location | Holds |
|---|---|
| …/Janbot/janbot.db | Chats, tasks, settings, memories, stats |
| …/Janbot/agent/ | Personality (SOUL, USER), skills, wiki, hooks, context |
| …/Janbot/runtime/ | Runtime caches and catalogs |
| Your working directory | The files Janbot makes for you (a blank sandbox, not personality) |
Secrets are stored in the macOS Keychain in signed release builds (in vault files under Application Support for unsigned/dev builds).
With a local model from LM Studio or Ollama, a complete agent run makes zero network calls. Inference, memory, and embeddings all happen on your hardware. Data only leaves your Mac when you configure a cloud provider (Claude, Hugging Face, OpenRouter, Custom) or use web/connector tools that call external APIs.
Resetting & wiping
In Settings → Agent → Data management:
| Button | What it does |
|---|---|
| Clear all tasks | Removes chats, scheduled/goal tasks, and context folders |
| Clear all memory | Wipes memories, wiki, stats, workflow runs, and traces, but keeps settings and task definitions |
| Reset settings | Restores defaults but keeps your data |
| Factory reset | Clears everything |
When you choose a cloud model, your prompts (and attached content) leave your Mac to reach that provider. OpenRouter requests are sent with data collection set to deny, but the prompt still travels. Use a local model for fully on-device runs.
Common questions
Quick fixes for the things people hit first. If something here doesn't match the app, trust the app, since labels move faster than docs.
Gatekeeper blocks the app
Private preview builds may be unsigned. Right-click Janbot.app → Open (don't double-click) and confirm once. See Install.
No models, or "can't connect"
Is LM Studio or Ollama actually running? Check the ports (1234 for LM Studio, 11434 for Ollama). For cloud, confirm the API key is saved in Settings → Models. Try Auto-detect and the in-app test.
Janbot keeps asking for approval
That's the safety model working. Use Allow & trust session for a run, or loosen specific rules in Settings → Safety. Keep Seatbelt on so shell doesn't need a pause for every command.
Shell can't reach the network
Seatbelt denies network by default. Prefer the web tools for anything online, or carefully adjust the sandbox/allowlist. See Safety.
Capabilities is missing my MCP tools
Complete Connect (OAuth) in Settings → MCP, then enable the server in the chat's Capabilities picker. Calls may still ask for approval. See MCP.
A scheduled task didn't run
Check it's enabled, that the schedule format is valid (daily 09:00, weekly MON 09:00, etc.), and that the app is running. Turn on Start Janbot on login so it survives restarts. See Tasks.
Where are my files?
Deliverables are in your working directory. The app's own data (personality, skills, wiki, database) is under Application Support. See Privacy & data.
Telegram or Slack is silent
Check the token, wait for reconnect, and mind the rate limits (~5 messages/60s). For Slack, confirm the mode (interactive vs search-only), any user allowlist, and that the bot is in the channel. See Connectors.
Memory isn't recalling anything
Make sure Wiki-backed memory is on, open the Memory tab, and check the ingest queue for pending or failed items. See Memory.
Factory reset vs. clear memory?
Clear all memory wipes what Janbot knows but keeps your settings and task definitions. Factory reset clears everything. Full table in Privacy & data.
What's RTK?
An optional tool for token-optimized shell output. If it's installed, Janbot uses it automatically, and there's nothing to configure.