Documentation

GRaPE Scribe

Install, configure, and work with Scribe. From your first prompt to a complete command reference.

Overview

GRaPE Scribe (scribe) is a terminal-based AI coding agent built by Skinnertopia Lab for AI (SLAI). It connects to GRaPE Chat's backend and uses SLAI-hosted models to read, write, and execute code in your local environment.

Scribe is lighter than Claude Code or GitHub Copilot Workspace — it's a single statically-linked binary with no runtime dependencies. It's designed specifically to work with GRaPE 2.5 models, with optimized prompting, context management, and tool formatting for the best performance on SLAI infrastructure.

The CLI authenticates against your GRaPE Chat account via OAuth. It draws from your SLAI usage pool, which is separate from the GRaPE Chat web app: a rolling 5-hour limit plus a weekly cap. Scribe can also run fully offline with local GGUF models, or against ChatGPT (Codex) or any OpenAI/Anthropic-compatible endpoint.

Installation

Download Scribe from the SLAI downloads page. The installer detects your operating system and architecture and verifies the published SHA256. No account is needed to download.

Linux / macOS

bash
curl -fsSL https://skinnertopia.com/install.sh | sh

Windows (PowerShell)

powershell
powershell -ExecutionPolicy ByPass -c "irm https://skinnertopia.com/install.ps1 | iex"

Linux, macOS, and Windows builds support x86_64 and ARM64, including Apple Silicon. After installation, open a terminal in your project and run scribe.

Quick Start

Run scribe in any project directory.

bash
cd ~/my-project
scribe

On the very first run, Scribe walks you through a short guided setup — pick a persona (GRaPE or CRePE) and color scheme, choose a memory preference, and sign in. It auto-detects whether you want hosted, local, or a custom endpoint. After that it opens the interactive TUI; the header shows your model, mode, and context usage.

Interactive Mode

The default mode. Type a message and press Enter. Scribe will reason, call tools, and stream the response back to you.

Key things to know in interactive mode:

  • Type / to open the command palette; /help lists everything.
  • Reference a file with @path/to/file to attach its contents to your prompt.
  • Insert a newline with Alt+Enter (macOS/Linux), Shift+Enter/Ctrl+Enter (Windows), or Ctrl+J anywhere.
  • Press Esc to close menus or pull back a queued message; press it twice to cancel a running turn and three times to undo the model's file changes (the status line shows what's next).
  • Press Tab to accept a follow-up suggestion, or to autocomplete a slash command.
  • Use / for input history and scrolling; Ctrl+V pastes an image from the clipboard.
  • Press Ctrl+C to cancel a running turn; press it again to quit (or type /exit).
  • When subagents are running, Shift+Tab and Ctrl+←/→ switch focus between them.

One-Shot Mode

Pass -p for a single prompt, or pipe stdin. No TUI is launched — output goes straight to stdout. Great for scripts and CI.

bash
# Inline prompt
scribe -p "Explain what this function does" @src/utils.py

# Pipe stdin (treated as the prompt)
cat error.log | scribe -p "What's causing this error?"

# Write output to a file
scribe -p "Write a README" -o README.md

# JSON output (model, response, thinking, tools[], duration)
scribe -p "List all exported functions in @src/" -output-format json

# Replace YOUR_MODEL_ID with an ID from the /model picker
# Pick a model / mode, skip confirmations, no streaming
scribe -p "Fix the failing test" -model YOUR_MODEL_ID -mode code -bypass -no-stream

Flags use single-dash Go style (-p, -model, …); both -p and--p are accepted.

CLI Flags & Subcommands

FlagDefaultDescription
-p <prompt>Run a one-shot prompt (non-interactive). stdin is used if piped.
-cfalseContinue the most recent conversation.
-resume <id>Resume a specific saved conversation by its ID.
-model <id>configOverride the model for this session.
-mode <name>configOverride the agent mode (code, code-review, research, chat, delegator).
-bypassfalseSkip all permission confirmations (turbo mode).
-output-format <fmt>textOne-shot output: text, json, or markdown.
-o <file>Write one-shot output to a file instead of stdout.
-no-streamfalseDisable streaming in one-shot mode.
-no-subagentsfalseDisable the subagent tool so this agent does all work itself.
-versionPrint the version and exit.

Scribe also has a few subcommands (run as scribe <name>):

SubcommandDescription
onboardingRe-run the first-time guided setup.
doctorNon-interactive diagnostics (git, config, auth, daemon). Add --fix to repair.
connectorSet up / manage messaging connectors (discord, telegram, slack, whatsapp, github, kith).
daemonControl the connector background daemon: run | status | logs | start | stop | restart.
mcpPointer to /mcp inside the TUI for MCP server setup.
skillsPointer to /skills inside the TUI.

Slash Commands

In interactive mode, prefix any command with /. Press Tab to autocomplete. Type /help to see all commands in the TUI.

Session & Status

CommandDescription
/newStart a fresh conversation.
/clearClear the visible transcript.
/exitQuit GRaPE Scribe (also /bye).
/statusOverview: rate limits, session spend, and context window.
/usageCheck your 5-hour and weekly rate limits.
/spendSession cost, token spend, and tool reliability.
/statsSession statistics (also /tokens, /context).
/creditsShow your credit balance.
/whoamiShow current user info.
/doctorRun diagnostics on your setup.
/configOpen config.toml (/config show to print it); /reload re-reads it.
/versionPrint the GRaPE Scribe version.

Model & Mode

CommandDescription
/modelSwitch models mid-session (/sort reorders the picker).
/thinking_modeChange the thinking/reasoning mode.
/work_effortChange the model work-effort level.
/show_thinkingToggle whether model thinking is visible.
/modeSet agent mode: code, code-review, research, chat.
/planEnter read-only Plan mode: explore and write a plan, no edits.
/goalWork continuously in Code mode until a goal is achieved (auto-reviewed).
/fallbackConfigure model fallback: cheapest | fastest | specific <model> | prompt | off.
/compactSummarize and compact the conversation to free up context.

Tools & Permissions

CommandDescription
/toolsManage built-in and MCP tools.
/permissionsChange tool permission mode: lenient, turbo, babysitting.
/mcpView or add MCP servers.
/skillsList, add, or remove skills (/skill <name> invokes one).
/localSet up, update, or add offline GGUF models.
/memoryManage universal memory: on | off | add | edit | clear.
/alertSet completion alerts: both | sound | notify | none.
/hotkeyBind a slash command to an F-key.

Files & Git

CommandDescription
/initCo-author a .grape.md project file (add "quick" for a template).
/repoCreate a git repo here to enable subagents and Delegator mode.
/diffShow uncommitted git changes.
/commitStage all changes and commit with an AI-generated message.
/logShow recent git log (/tree shows the directory tree).
/cd <path>Change the working directory.
/edit <file>Open a file in your default text editor.
/testRun tests / /build build (from scribe-exec.yaml).
/exportExport to Markdown/HTML (/copy copies the last reply).

History & Undo

CommandDescription
/historyView and resume past conversations.
/resumeLoad a saved session (also /load, /sessions; add all to browse every one).
/saveSave a checkpoint (also /checkpoint).
/forkBranch the conversation into a new independent session.
/searchSearch the transcript (/search all <query> across all conversations).
/undoUndo the AI's file changes this session (/redo to redo).
/retryResend the last message.
/forget <n>Remove the last N messages from context.

UI, Themes & Reporting

CommandDescription
/themeChange persona & color scheme (/scheme creates a custom one).
/keybindsShow all keybindings (also /keys).
/suggestToggle follow-up prompt suggestions (Tab to accept).
/redrawForce a full screen repaint if the display gets corrupted.
/aliasCreate, list, or delete prompt aliases.
/loginSign in (/login codex for ChatGPT); /logout signs out.
/bugReport a bug straight to SLAI (also /report, /feedback).
/helpList every available command.

Built-in Tools

Scribe ships with a set of built-in tools the model can invoke automatically. You can toggle individual tools with /tools or via the enabled_tools section of config.toml.

ToolKeyDescription
BashbashRun shell commands in a persistent shell (state persists across calls); supports timeouts and background jobs. Governed by the command-policy engine and optional sandbox.
Set Envset_envSet session environment variables injected into every bash command.
Read Fileread_fileRead a file from disk.
Write Filewrite_fileAtomically create or overwrite a file, with a live line-count preview. Tracked for undo.
Apply Patchapply_patchApply changes — auto-detects both the *** Begin Patch envelope and plain unified diffs.
List Directorylist_directoryList directory contents, respecting .grapeignore.
Grep Searchgrep_searchFast content search (ripgrep → grep → pure-Go fallback); optional semantic backend.
Web Searchweb_searchSearch the web. Always enabled (hosted for signed-in users, keyless fallback otherwise).
View Imageview_imageView/analyze an image (screenshot, diagram) with vision models.
TodotodoThe agent's task list, shown in the TUI and viewable with /todo.
SkillskillList / show / install / remove agent skills (playbooks).
Ask Questionask_questionAsk you a question mid-task (interactive TUI only; disabled for subagents).
SubagentsubagentSpawn and manage parallel subagents in isolated git worktrees (requires git).
MCP toolsmcp_<server>_<tool>Any tools exposed by connected MCP servers; always require permission.

config.toml

Configuration lives at ~/.config/grape/config.toml (%APPDATA%\grape\config.toml on Windows). Everything is optional. Edit it with /config, tweak single values with/set <key> <value>, or reload with /reload. The config directory also holdshistory/, skills/, models/, connectors/,auth.json, and your global GRAPE.md memory.

toml
# ~/.config/grape/config.toml

# ── Model & backend ─────────────────────────────────────────────────────────
backend          = "grape_chat"   # grape_chat | local | codex | custom
model            = ""             # empty = auto-select first SLAI model
mode             = "code"         # code | code-review | research | chat | delegator
personality      = "grape"        # grape | crepe
thinking_mode    = "medium"       # minimal | low | medium | high | auto | xtra-hi
work_effort      = "auto"
show_thinking    = false

# ── Sampling ────────────────────────────────────────────────────────────────
temperature      = 0.6
top_k            = 20
top_p            = 0.95
min_p            = 0.0
repeat_penalty   = 1.0
max_tokens       = 64000

# ── Behavior ────────────────────────────────────────────────────────────────
permission_mode   = "lenient"     # lenient | turbo | babysitting
color_scheme      = "grape"       # grape | crepe | ocean | sunset | monochrome | forest | neon | rose
auto_save         = true
compact_threshold = 0.8           # compact when context reaches 80% full
alert_mode        = "both"        # both | sound | notify | none
fallback_mode     = ""            # "" | cheapest | fastest | <model>

# ── Local models (offline GGUF) ──────────────────────────────────────────────
local_context_size = 32768
local_server_port  = 39281
local_gpu_layers   = -1           # -1 = auto

# ── Tools (all default true; web_search is always forced on) ──────────────────
[enabled_tools]
bash = true
read_file = true
write_file = true
apply_patch = true
list_directory = true
grep_search = true
web_search = true
view_image = true
todo = true
skill = true
subagent = true
ask_question = true

# ── MCP servers (also add from the TUI with /mcp) ─────────────────────────────
# [mcp_servers]
# my-server = "http://localhost:8080"

scribe-exec.yaml

Place a scribe-exec.yaml in your project root to tell Scribe how to build and test your project. It powers /build, /test, and auto-verification after edits. (The legacy filename grape-exec.yaml is still read as a fallback.)

yaml
# scribe-exec.yaml — place in the repo root; Scribe reads it automatically.

build:
  run: npm run build
  working_dir: ./frontend

test:
  run: pytest tests/ -v
  env:
    DATABASE_URL: postgresql://localhost/test_db

lint:
  run: ruff check . && black .

When you say "run the tests" — or when auto-verify is on — Scribe runs the command defined here instead of guessing.

Agent Modes

Switch modes with /mode <name>, -mode, or the mode config key.

ModeBest ForBehavior
codeWriting, editing, and debugging codeAction-oriented. Reads before editing and verifies with builds/tests when practical. Default.
code-reviewReviewing changes (alias: review)Strict, evidence-driven review. Proposed edits are made in an isolated review worktree instead of applied directly.
researchExploring topics or unfamiliar codebasesLeans on web_search and file reads; synthesizes findings with depth.
chatQ&A, discussion, brainstormingConversational; uses tools only when needed.
delegatorLarge, multi-part jobsDelegation-first "tech lead": fans work to parallel subagents with a code-review gate. Requires a git repo.
planPlanning without touching codeRead-only Plan mode (/plan): explores and writes only plan docs, runs no edits or shell.

/goal runs Code mode continuously until a goal is met (with an automatic review pass). A secretary mode also exists but is only available through messaging connectors, not the CLI.

Permission Modes

Permission modes control how aggressively Scribe can take autonomous actions. Change with /permissions or pass --bypass on the command line.

ModeDescription
lenientAsks for confirmation before destructive operations (e.g. rm, git reset --hard, DROP TABLE). Everything else runs freely. Default.
babysittingAsks for confirmation before any potentially risky action. Provides more guidance and oversight.
turboSkips all confirmations. Everything runs immediately. Use in automated pipelines or when you trust the model fully.

Subagents & Delegator

For big jobs, Scribe can spin up parallel subagents, each in its own isolated git worktree with its own model and mode, then merge their work back. This needs a git repo — run /repo to create one (Scribe uses a private scratch repo when you're not in a project). Nesting is bounded (max depth 2, up to 4 in parallel). Disable it for a run with -no-subagents.

Delegator mode (/mode delegator) leans into this: it plans, fans work out to subagents, and gates their changes through a code review before merging. While subagents run, useShift+Tab or Ctrl+←/→ to switch focus, Esc to return to the head agent, and /attach to watch one live.

Local Models

Scribe can run fully offline against local GGUF models via llama.cpp. Start with /local setup to download the runtime and a model; /local install <build> <backend> adds more, and/local folder points at your own GGUF files.

The local server defaults to port 39281 with a minimum 32k context; set GPU offload withlocal_gpu_layers and context with local_context_size in config. Switch to local any time with /model or backend = "local".

Skills

Skills are reusable playbooks (a SKILL.md plus optional scripts) the agent can load on demand. Manage them with /skills (list / add / remove) and invoke one explicitly with/skill <name> [request]; the agent can also load them itself via the skill tool.

Install from the built-in registry, a Git URL, or a local path. Project-specific skills live in.grape/skills/ and take precedence over global ones in ~/.config/grape/skills/.

MCP & Connectors

MCP: add Model Context Protocol servers with /mcp (or the mcp_serversconfig). Scribe can import your existing Codex (~/.codex/config.toml) and Claude Code (.mcp.json) servers. Their tools appear as mcp_<server>_<tool> and always require permission.

Connectors: run Scribe from a chat app — Discord, Telegram, Slack, WhatsApp, Kith, and a GitHub PR-review bot — through a background daemon. Set one up with scribe connector setup <platform>(or /connector), then manage the daemon with scribe daemon start|stop|status or/daemon. Each connector has its own working directory and optional OS sandbox.

Themes & Personas

Scribe ships two personas — GRaPE and CRePE — and eight built-in color schemes:grape (default), crepe, ocean, sunset,monochrome, forest, neon, and rose.

Change them with /theme; build your own with /scheme (six colors plus an optional terminal background). Which persona is active also follows how you launched the binary:grape forces GRaPE, crepe forces CRePE, and scribe keeps your saved choice.

Memory

Scribe keeps an always-on universal memory file at ~/.config/grape/GRAPE.md. Manage it with/memory (on | off | add | edit | clear) — it can also remember things on its own and consolidate them over time.

For per-project context, run /init to co-author a .grape.md file in the repo root (an AGENTS.md is used as a fallback). A .grapeignore controls which files the tools may read.

Conversation History

Conversations are saved automatically (when auto_save = true) under~/.config/grape/history/ and grouped by project. Sessions are crash-safe — if Scribe exits unexpectedly, it offers to recover the live session for that directory on next launch.

bash
# Continue the most recent conversation
scribe -c

# Resume a specific conversation by ID
scribe -resume abc123

# Inside the TUI
/history        # browse & resume past conversations
/resume         # load a saved session (also /load, /sessions)
/search all foo # full-text search across every conversation

Save named checkpoints with /checkpoint (or /save), branch a conversation into an independent copy with /fork, and rename the current one with /rename. History is local only — it is not synced to GRaPE Chat.

File Attachments

Prefix a file path with @ anywhere in your message to inline the file contents into the prompt. Both absolute and relative paths work.

text
# Attach a file
Review @src/auth.py for security issues

# Attach multiple files
Compare @old/api.py and @new/api.py

# Combine with a question
Why is @logs/error.log showing database timeouts?

Scribe replaces the @path reference with the file contents before sending to the model; large files are truncated with a notice. You can also paste an image straight from the clipboard with Ctrl+V, or point view_image at an image file.

Multi-line Input

Enter sends your message. To type a literal newline, use Alt+Enter (macOS/Linux),Shift+Enter or Ctrl+Enter (Windows), or Ctrl+J on any platform. The input is a full multi-line editor — arrow keys move by visual row, and Ctrl+U clears the line.

Keybindings

See the full, live list (including any custom hotkeys) with /keybinds. Bind an F-key to a command with /hotkey save <key> </command>.

KeyAction
EnterSend message / select menu item
Alt+EnterNewline (Windows: Shift/Ctrl+Enter; universal: Ctrl+J)
EscClose menu / detach; ×2 cancel a running turn; ×3 undo the model's file changes
TabAccept follow-up suggestion, else autocomplete a slash command
Shift+TabCycle focus: head agent → subagents → head
Ctrl+← / Ctrl+→Switch between subagents
↑ / ↓Menu nav / cursor movement / input history / scroll
PgUp / PgDnHalf-page scroll; Home / End jump to top / bottom
Ctrl+CCancel a running turn; press again to quit
Ctrl+SToggle select/copy mode (drag-select the transcript)
Ctrl+LClear the screen; Ctrl+U clears the input line
Ctrl+VPaste an image from the clipboard
F1Help (F2–F12 are bindable custom hotkeys)

Authentication

On first launch, Scribe opens your browser to the GRaPE Chat OAuth page (app id scribe-cli) and listens on a local callback port; if the browser flow can't be used it falls back to email/password in the terminal. Tokens are stored in ~/.config/grape/auth.json and refreshed automatically — you won't need to sign in again unless you run /logout.

Sign in any time with /login. Use /login codex to sign in with ChatGPT (Codex), which can be held alongside your GRaPE Chat session. You can also add your own OpenAI/Anthropic-compatible endpoints (keys are kept in your OS keychain).

Scribe talks to the SLAI Internal API (X-SLAI-App-Token) rather than the public developer API, which gives it access to SLAI-exclusive models and features.

Credits & Limits

Scribe draws from your SLAI usage pool, which is separate from the GRaPE Chat web app and shared with other SLAI apps and the developer API. It has two limits, both of which must have credit for a request to run: a rolling 5-hour limit and a weekly cap.

Check them with /usage (remaining, caps, and reset times for both windows) or /status(usage + session spend + context). /credits shows your balance. To keep the TUI uncluttered, credits aren't shown in the header — you'll just get a heads-up when you're running low.

Opting in to prompt logging ("improve the model", in GRaPE Chat settings) grants +30% usage. For a higher limit, email [email protected] with your GRaPE Chat username.