{"slug": "docent-an-open-source-private-ai-assistant-in-your-terminal", "title": "Docent- An Open Source Private AI assistant in your terminal", "summary": "Smartloop released Docent, an open-source private AI assistant that runs in the terminal and lets users chat with PDFs and Office files, search the web, and connect MCP servers, with the CLI automatically downloading the SLP framework 1.2.8 and its models when no local agent is running. The tool installs as both `docent` and `smartloop`, ships prebuilt binaries for Linux (x86_64, aarch64, statically linked against musl), macOS (Apple Silicon and Intel) and Windows (x86_64), and on first use downloads the bge-m3-Q4_K_M.gguf embedding model (~417 MB) plus a default base model into ~/.smartloop/1.2.8/.", "body_md": "Your private AI assistant. Chat with your PDFs and Office files, search the web, and connect MCP servers, all from the terminal. If no local agent is running, the CLI downloads the framework and models it needs and starts one itself.\n\nIt installs as both `docent` and `smartloop`; the two are the same command.\n\nMore at:\n[docs.smartloop.ai](https://smartloop.ai/docs/intro/)\n\nmacOS and Linux\n\n```\ncurl -fsSL https://smartloop.ai/install | sh\n```\n\nWindows (PowerShell):\n\n```\nirm https://smartloop.ai/install.ps1 | iex\n```\n\nThe binary goes to `$CARGO_HOME/bin` (`~/.cargo/bin`) when a Rust toolchain\nalready owns that directory, since it is on your `PATH` anyway; otherwise to\n`~/.local/bin`. If the chosen directory is not on your `PATH`, the installer\nappends an export line to the startup file for your shell — `~/.bashrc`,\n`~/.zshrc`, or `fish_add_path` in `config.fish` — so a new terminal picks it up.\nRe-running the installer will not add that line twice.\n\nOn Windows the binary goes to `%USERPROFILE%\\.smartloop\\bin` and the installer\nsets your user `PATH` through the registry. Restart the shell to pick it up.\n\nSet `SMARTLOOP_CLI_INSTALL_DIR` to install elsewhere, or `SMARTLOOP_CLI_VERSION`\nto pin a specific release.\n\nPrebuilt binaries are published for Linux (x86_64, aarch64 — statically linked against musl), macOS (Apple Silicon and Intel) and Windows (x86_64).\n\nRequires Rust (2024 edition):\n\n```\ncargo install --path .\n```\n\nAny command that talks to the agent starts it when none is running. It\nlistens on a free port it picks itself and writes it to\n`~/.smartloop/server.port`, where the CLI reads it. On first use that means:\n\n1. Download the agent (SLP framework 1.2.8) from `https://dl.smartloop.ai/slp/1.2.8/` into`~/.smartloop/1.2.8/` . Studio desktop uses the same folder and marker files,\nso the two share one install.\n2. Start `slp agent start` in the background with`SLP_HOME=~/.smartloop` ,\nlogging to`~/.smartloop/server.log` . The agent keeps running after the CLI\nexits.\n3. Download the embedding model (`bge-m3-Q4_K_M.gguf` , ~417 MB) into the\nworkspace's`models/embeddings/` folder for document search.\n4. Run the agent's bootstrap, which downloads the default base model, creates the default project and loads the model.\n\nEach step is skipped when its files are already there. Progress shows as a checklist on stderr under the Docent banner that redraws in place, with the active download's bar in Smartloop pink:\n\n```\n[✓] Agent 1.2.8                        667 MB\n[✓] Start agent                    port 50578\n[✓] Embeddings (bge-m3)                417 MB\n[•] Base model sl-mini\n    ██████████████▋░░░░░░░░░░░░░░░   49%  377 MB/769 MB\n[ ] Default project\n[ ] Load model\n[ ] Skills and connections\n```\n\nA step without a bar shows its elapsed time once it runs past a couple of\nseconds, and it ends with `✓ Setup complete in 1min 12s`.\n\nWhen stderr isn't a terminal, each step prints one line as it finishes\ninstead. `docent model enable` shows the same checklist for its download.\n\nTo do this up front, or to stop the agent:\n\n```\ndocent agent start\ndocent agent stop\ndocent login\n```\n\nOpens app.smartloop.ai in the browser to sign in, the same way the desktop app does: once you're in, the page hands the session to the local agent, which stores it and uses it for every platform call. The command waits (up to five minutes) and prints the account it signed in as. If the browser doesn't open, visit the URL it prints.\n\nTo sign in with a token instead, run `docent login --token` and paste it at\nthe prompt (input is hidden), or use `--token <token>` or pipe it on stdin in\nscripts. `docent logout` clears the stored credentials.\n\nList projects:\n\n```\ndocent project list\n```\n\nOutput is rendered as a table showing each project's ID, name, and whether it is a system project.\n\nCreate a project from a blank template:\n\n```\ndocent project create --name my-project\ndocent project create --name my-project --description \"Research notes\"\n```\n\nA blank project starts with no skills; the service seeds it with the workspace defaults. Everything the project stores — skills, documents, its index — lives under the service's own project directory, so there is no working directory to choose.\n\nImport a project from an archive produced by an earlier export:\n\n``` python\ndocent project create --import my-project.zip\ndocent project create --import my-project.zip --name restored-project\n```\n\n`--name` is optional here — pass it to rename the imported project. The import\ngets a fresh project ID, and MCP OAuth credentials are stripped from the\narchive on the way in.\n\nDelete a project:\n\n```\ndocent project delete --id <project-id>\n```\n\nCheck which endpoint the CLI uses, whether the local agent is running there, which model it has loaded, and the per-project agents it has started:\n\n```\ndocent agent status\nEndpoint: http://localhost:50578\nStatus:   healthy\nModel:    sl-mini (Q4_K_M, 32768 ctx, 769 MB)\nProcess:  pid 8738, 250 MB\n+--------------+------+-------+-------+------+--------+\n| Project      | PID  | Port  | Alive | Idle | Memory |\n+--------------+------+-------+-------+------+--------+\n| general_chat | 2668 | 62110 | true  | 94s  | 122 MB |\n+--------------+------+-------+-------+------+--------+\n```\n\n`Endpoint` is the URL the CLI talks to (`SMARTLOOP_API_URL`, or the default).\nThe command exits with status 1 when the agent can't be reached there.\n\nStart an interactive chat with the local agent:\n\n```\ndocent\n```\n\n`docent` on its own is short for `docent run`. In a terminal this opens a full-screen app, laid out like Claude Code. While\na reply runs, a live status line above the prompt shows the agent's current\nstep (web search, document lookup, model selection) and for how long, with a\nline per running download. The finished reply keeps its sources and the model\nthat answered:\n\n```\n> what is the capital of France?\n\n■ Paris is the capital of France.\n\n  References\n  [1] https://en.wikipedia.org/wiki/Paris\n  ⎿  sl-mini · 7 tokens · 0.4 tok/s · 16s\n\n[-] Reading en.wikipedia.org… (4s)\n╭──────────────────────────────────────────────────────────────────────╮\n│ >                                                                    │\n╰──────────────────────────────────────────────────────────────────────╯\n  [enter] send  [esc] interrupt  [?] shortcuts\n```\n\nIt chats in the server's current project, or the one given with `--project`.\nOn exit it prints the session id, to resume with `--session`.\n\n| Key | Does | \n|---|---|\n| `?` | shortcuts | \n| `Shift+Enter` ,`Alt+Enter` ,`Ctrl+J` | new line | \n| `Esc` | interrupt the reply | \n| wheel, `PgUp` /`PgDn` | scroll; drag to select and copy | \n| drop a file | attach an image (PNG, JPEG) or document (PDF, Office, CSV, text) | \n| `Ctrl+O` | models: enable, disable, download | \n| `Ctrl+S` | web search on or off | \n\n| Command | Does | \n|---|---|\n| `/login` ,`/logout` | sign in in the browser ( `--token` to paste one) | \n| `/models` | enable, disable and download models | \n| `/mcp` | MCP servers; `/mcp add <url>` connects one | \n| `/status` | account, model, agent and versions | \n| `/usage` | web searches left, tokens and cost saved | \n| `/upgrade` | Pro plan: 1,000 web searches a month | \n| `/clear` | clear the chat and start a new session | \n| `/help` ,`/quit` |  | \n\nPass an initial prompt to send immediately:\n\n```\ndocent run \"what are some things to do in madrid spain?\"\n```\n\nOptions:\n\n```\ndocent run --project <project-id>   # chat in this project\ndocent run --session <session-id>   # resume an existing session; a new one is created when omitted\ndocent run --plain                  # line-by-line chat instead of the full-screen app\n```\n\nWhen stdin or stdout isn't a terminal, or with `--plain`, `run` chats line by\nline instead: without `--project` it lists your projects and asks which one to\nchat in (press Enter for the current one), then keeps reading prompts from\nstdin until EOF, `/quit`, `/exit`, `/q`, or `exit`. The response streams token\nby token on stdout, and the agent's progress is printed on stderr as\n`[step] message` lines, so it doesn't interleave with the answer. When the\nanswer draws on documents or web pages, the sources it used follow it on\nstdout as a numbered list:\n\n```\nReferences\n[1] https://releases.rs/\n```\n\nThe orchestrator picks which model serves each turn from the models enabled for the project. List what's available and its state for the current project:\n\n```\ndocent model list\n```\n\nEnable or disable a model:\n\n```\ndocent model enable gemma4-e2b\ndocent model disable gemma4-e2b\n```\n\n`enable` downloads the weights first when they aren't on disk yet, showing\nprogress, and only then switches the model on. Weights are shared across\nprojects, so each model downloads once. Models marked `(sign in)` need\n`docent login` first. `disable` also unloads the model from memory. All\nthree take `--project <project-id>` to act on a project other than the current\none. The `sl-mini` orchestrator is always on and isn't listed.\n\nThe CLI connects to the local agent on whatever port it picked\n(`~/.smartloop/server.port`). Point it elsewhere with `SMARTLOOP_API_URL`:\n\n```\nSMARTLOOP_API_URL=http://localhost:9000 docent project list\n```\n\nWith `SMARTLOOP_API_URL` set, the CLI only connects: it never installs or starts\nan agent for that URL.\n\n| Variable | Default | Effect | \n|---|---|---|\n| `SLP_HOME` | `~/.smartloop` | Where the framework, workspace, models and logs live | \n| `SLP_PORT` | a free port | Pin the managed local agent to this port | \n| `SLP_BASE_URL` | `https://dl.smartloop.ai` | Where the framework archive is downloaded from | \n\nReleased under the [MIT License](https://github.com/smartloop-ai/docent/blob/main/LICENSE).", "url": "https://wpnews.pro/news/docent-an-open-source-private-ai-assistant-in-your-terminal", "canonical_source": "https://github.com/smartloop-ai/docent", "published_at": "2026-10-04 17:24:12+00:00", "updated_at": "2026-10-04 17:42:15.710933+00:00", "lang": "en", "topics": ["ai-tools", "ai-agents", "agent-protocols", "developer-tools"], "entities": ["Smartloop", "Docent", "SLP framework 1.2.8", "bge-m3-Q4_K_M.gguf", "Studio", "Rust"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/docent-an-open-source-private-ai-assistant-in-your-terminal", "markdown": "https://wpnews.pro/news/docent-an-open-source-private-ai-assistant-in-your-terminal.md", "text": "https://wpnews.pro/news/docent-an-open-source-private-ai-assistant-in-your-terminal.txt", "jsonld": "https://wpnews.pro/news/docent-an-open-source-private-ai-assistant-in-your-terminal.jsonld"}}