
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
A human-in-the-loop LLM interface that embraces the command line.
Local Sage running in Zellij, alongside Helix and Yazi.
Local Sage is an open-source stateful CLI for interacting with LLMs in shell-based workflows.
Featuring live Markdown rendering with inline math conversion for a silky smooth chatting experience. Designed to hook into any OpenAI API endpoint, and tested with local LLMs hosted via llama.cpp.
Additional Features:
Standard Output Rendering: History is persistent and scrollable, even after exiting the CLI.
Standard Input Piping: Pipe stdin directly into Local Sage from the command line or a script.
Example: ps aux | localsage "What process is consuming the most memory?"
Fancy Pro*s**: Command completion, path completion, and in-memory history for a shell-native UX.
Website Scraping: Scrape a website with a simple command, and attach it's contents to the current session.
Context-aware Attachment: Attachments are replaced on re-attachment and can be purged from a session, restoring context.
Note: Entire directories can be attached at once. Attached website content can be purged from a session as well.
Automated Environment Context: Your model sees your username, your OS name, and the contents of your current working directory.
Note: When changing the working directory with the !cd command, your model is aware. Environment context mutates.
Session Management: Load, save, delete, reset, and summarize sessions.
Profile Management: Save, delete, and switch model profiles.
Context & Throughput Monitoring: Shown through a subtle status panel.
Built-in Markdown themes: Customize your output with a variety of built-in Markdown themes. Available themes are listed here.
Check out the Under the Hood section if you want to learn more!
Python 3.10 or later required.
The big three (Linux, macOS, and Windows) are all supported. Ensure your terminal emulator has relatively modern features. Alacritty works well. So does kitty and Ghostty.
You can use non-local models with Local Sage if desired. If you set an API key, the CLI will store it safely in your OS's built-in credential manager via keyring. Setting the OPENAI_API_KEY environment variable works as well, and overrides all other options.
Each release is automatically published to Docker Hub. You can view instructions for running the CLI in Docker here.
Install a Python package manager for your OS. Both https://github.com/astral-sh/uv and https://github.com/pypa/pipx are highly recommended.
For uv, open your terminal and type:
bashuv tool install localsage
Or, for pipx, type:
bashpipx install localsage
Type localsage into your terminal to launch the CLI. Type !h to view command usage.
Configuration is done entirely through interactive commands. You never have to touch a config file.
!profile add. API endpoint format: http://ipaddress:port/v1.!profile switch to switch to your new profile.!ctx to set your context length.!prompt or an API key with !key.[!TIP] If you press
tabwhile at the main pro***, you can access a command completer for easy command use.
Local Sage is designed with minimal dependencies, keeping the download light and minimizing library bloat.
Your config file, session files, and error logs are stored in your user's data directory.
| OS | Directory |
|---|---|
| Linux: | ~/.local/share/LocalSage |
| macOS: | ~/Library/Application Support/LocalSage |
| Windows: | %localappdata%/LocalSage |
All usage charts are present below. You can render them within the CLI by typing !h.
| Profile Management | Manage multiple models & API endpoints |
|---|---|
!profile add | Add a new model profile. Pro***s for alias, model name, and API endpoint. |
!profile remove | Remove an existing profile. |
!profile list | List configured profiles. |
!profile switch | Switch between profiles. |
| Configuration | Main configuration commands |
|---|---|
!config | Display your current configuration settings and default directories. |
!consume | Toggle reasoning panel consu***ion. |
!ctx | Set maximum context length (for CLI functionality). |
!key | Set an API key, if needed. Your API key is stored in your OS keychain. |
!prompt | Set a new system pro***. Takes effect on your next session. |
!rate | Set the current refresh rate (default is 30). Higher refresh rate = higher CPU usage. |
!theme | Change your Markdown theme. Built-in themes can be found at [***] |
| Session Management | Session management commands |
|---|---|
!s or !save | Save the current session. |
!l or !load | Load a saved session, including a scrollable conversation history. |
!sum or !summary | Pro*** your model for summarization and start a fresh session with the summary. |
!sessions | List all saved sessions. |
!reset | Reset for a fresh session. |
!delete | Delete a saved session. |
!clear | Clear the terminal window. |
!q or !quit | Exit Local Sage. |
Ctrl + C | Abort mid-stream, reset the turn, and return to the root pro***. Also acts as an immediate exit. |
| WARNING | Using Ctrl + C as an immediate exit does not trigger an autosave! |
| Context Management | Manage context & attachments |
|---|---|
!a or !attach | Attaches a file or directory to the current session. Child directories are not attached. |
!web | Scrapes a website, and attaches the contents to the current session. |
!attachments | List all current attachments. |
!purge | Choose a specific attachment and purge it from the session. Recovers context length. |
!purge all | Purges all attachments from the current session. |
!cd | Change the current working directory. |
!cp | Copy all code blocks from the last response. |
| FILE TYPES | All text-based file types are acceptable. No PDFS. |
| NOTE | If you ever attach a problematic file, !purge can be used to rescue the session. |
Pulling from Docker Hub and running the container:
bash# Download the image docker pull kyleg142/localsage # Run the container, '-e OPENAI_API_KEY' is optional docker run -it --rm \ -v /pick/a/data/directory:/root/.local/share/LocalSage \ -e OPENAI_API_KEY \ kyleg142/localsage
Piping is not supported when running Local Sage in a container.
You may have to add specific options to your docker run command if you are running a non-containerized backend/API on the same machine.
Local Linux
--network host to your docker run options to allow the container to reach services on localhost.Local Windows/Mac
--add-host=host.docker.internal:host-gateway to your docker run options.!profile add to create a new profile. Set the API endpoint to http://host.docker.internal:8080/v1 when pro***ed.0.0.0.0:8080.Typing into the terminal while streaming is active may cause visual artifacting. Avoid typing into the terminal until the current generation finishes.
A monospaced Nerd font is HIGHLY recommended. It ensures that Markdown, math, and icons all align well on-screen. The root pro*** uses a Nerd font chevron.
Context-Aware Attachment
When a file (or directory) is attached to a session, a wrapper is applied to the contents before being appended to the session history. This wrapper enables attachment detection via regex, for file management.
If you re-attach a file, context consu***ion is massively reduced by removing the entry containing the file contents from the session history and then appending the new copy. You can also completely remove a file from a session via the !purge command, which restores context spent.
A similar wrapper is applied to website content. That means !purge can also be used to remove scraped website content from the conversation history.
Automated Environment Awareness
Your model is provided with basic environment context that mutates depending on the current working directory.
This is what your model can see...
shell[ENVIRONMENT CONTEXT] # Header Current User: {USER_NAME} # Your username Operating System: {system_info} # Your operating system Working Directory: {wd} # Current working directory, mutates when using !cd Visible Files: {", ".join(files[:20])} # Up to 20 visible file names, mutates when using !cd Visible Directories: {", ".join(dirs[:20])} # Up to 20 visible directory names, mutates when using !cd
Rendering & Streaming
At its core, Local Sage uses the Rich library com***ed with a custom math sanitizer to render live Markdown and readable inline math. Chunk processing is frame-synchronized to the refresh rate of a rich.live display, meaning that the entire rendering process occurs at a customizable interval. Effectively a hand-rolled, lightweight, synchronized rendering engine running right in your terminal.
You can adjust the refresh rate using the !rate command (30 FPS by default).
Once the live panel group fills the terminal viewport, real-time rendering cannot continue due to terminal constraints. By default, the Response panel consumes the Reasoning panel to conserve space (toggleable with the !consume command).
This should only be noticeable on large responses that consume over an entire viewport's worth of vertical space.
Local Sage is text-only. This limitation keeps Local Sage portable, lightweight, and backend-agnostic.
The project follows basic versioning:
Local Sage is released under the https://opensource.org/license/mit.
I use AI for theory-crafting, code review, and snippet generation. For example, most of the regex seen in math_sanitizer.py was generated and tuned by iteratively pro***ing GPT 5.1 and then ran against a pytest suite to prevent regression. The architecture of Local Sage is written and tuned by hand, and all documentation you see here is written by hand as well. This is NOT a 'vibe-coded' project.
Local Sage is an open-source, single-dev project built purely for the love of the game. Please be kind!
Contributions are always welcome! See https://github.com/Kyleg142/localsage/blob/main/.github/CONTRIBUTING.md.
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务