# loopra
**Repository Path**: ezdemo/loopra
## Basic Information
- **Project Name**: loopra
- **Description**: loopra是一个纯 Java 生态的 AI 编码代理框架,它将大语言模型(LLM)与丰富的可扩展工具系统相结合,打造出一个能自主理解代码、编写代码、调试代码的编程助手。灵感源自 Claude Code、Devin 等 AI 编码代理,但完全基于 Java 17 构建,兼容SolonSkill SolonTool等。
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://loopra.cn
- **GVP Project**: No
## Statistics
- **Stars**: 33
- **Forks**: 18
- **Created**: 2026-05-25
- **Last Updated**: 2026-08-05
## Categories & Tags
**Categories**: ai
**Tags**: None
## README
Loopra
纯 Java 的 AI 编码代理
面向本地代码库的推理循环、工具调用、会话协作与桌面工作台。
官网 ·
快速开始 ·
核心能力 ·
配置参考 ·
从源码开发
> 当前版本:`26.8.40`。完整变更记录见 [CHANGELOG.md](CHANGELOG.md)。
## 技术交流群
想交流 AI 编码代理的玩法、反馈问题或提建议?扫码添加我的个人微信,备注 **loopra**,我会拉你进技术交流群:
## 概览
Loopra 将用户任务、模型推理与受控工具调用组织成持续执行循环:它读取项目上下文,搜索、编辑或构建代码,消费执行结果后继续推理,直至完成任务或需要用户决策。
提供 Web 与 Electron Desktop 工作台,适合在本地代码库中完成开发、排障、测试、文档整理和多步骤协作。
```text
任务 -> 模型推理 -> 工具调用 -> 结果反馈 -> 模型推理 -> ... -> 完成
```
| 面向的工作 | Loopra 提供的能力 |
|---|---|
| 处理代码库任务 | 工作区内文件读写、代码检索、命令执行与 API 调用 |
| 保持任务连续性 | JSONL 会话、上下文折叠、Goal、Checklist 与项目记忆 |
| 安全地协作 | 工具权限分类、HITL 审批、路径边界与独立校验模型 |
| 使用合适的界面 | Web 管理界面与包含本地进程、文件、Git、浏览器的 Desktop 工作台 |
## 快速开始
> 建议手动运行下面命令再安装桌面端
桌面端下载地址:[Releases](https://github.com/ezdemo/loopra/releases/latest)。
Desktop 首次启动会安装独立运行时到 `~/.loopra-gui`;CLI 仍安装在 `~/.loopra`,两者共用配置目录但不会复用或终止对方的服务进程。Desktop 启动时优先复用本机 `4567` 端口上的健康 Loopra Web 服务,并展示启动窗口;独立运行时版本不一致时,可在更新窗口选择下载源(GitHub 直连或镜像加速)更新核心服务与桌面端,也可以暂不更新继续使用。
### 1. 安装
Windows PowerShell:
```powershell
irm https://raw.giteeusercontent.com/ezdemo/loopra/raw/main/.release/setup.ps1 | iex
```
macOS / Linux:
```bash
curl -fsSL https://raw.giteeusercontent.com/ezdemo/loopra/raw/main/.release/setup.sh | bash
```
国内网络可选用 Github 镜像脚本(脚本与安装包仍从 Github 下载,速度更快):
Windows PowerShell:
```powershell
irm https://raw.giteeusercontent.com/ezdemo/loopra/raw/main/.release/setup-mirror.ps1 | iex
```
macOS / Linux:
```bash
curl -fsSL https://raw.giteeusercontent.com/ezdemo/loopra/raw/main/.release/setup-mirror.sh | bash
```
### 2. 启动服务
使用 `0` 让服务自动选择可用端口:
```bash
loopra web 0
```
控制台会输出本地访问地址。首次启动会在 `~/.loopra/config.json` 创建默认配置。
### 3. 配置模型渠道
在 Web 设置页维护模型渠道,或直接编辑 `~/.loopra/config.json`。配置 API Key 后重启服务。每个渠道独立维护 API 地址、密钥、协议与模型能力;`apiProtocol` 支持 `chat_completions` 和 `responses`。首次使用且尚未配置模型渠道时,界面会显示引导提示,帮助完成 API 地址、密钥和模型配置。
```json
{
"model": "deepseek-v4-flash",
"modelChannelId": "default",
"modelChannels": [
{
"id": "default",
"name": "Default",
"baseUrl": "https://api.deepseek.com/v1",
"apiKey": "sk-your-api-key",
"apiProtocol": "chat_completions",
"models": [
{
"name": "deepseek-v4-flash",
"contextTokens": -1,
"imageInput": false
}
]
}
],
"workspaceDir": "/path/to/your/project"
}
```
`models` 兼容旧版字符串数组。每个模型条目还可配置 `contextTokens`、`imageInput` 和 `price`;未配置时由系统使用默认或可用的模型元数据。
## 核心能力
| 能力 | 说明 |
|---|---|
| 自主推理循环 | 流式输出推理、工具调用和结果,持续处理多轮任务。 |
| 上下文管理 | JSONL 会话持久化、自动摘要折叠、消息自愈和 token 用量统计。 |
| 多模型渠道 | 支持多渠道、Chat Completions API、OpenAI Responses API、推理强度和模型能力配置。 |
| 可扩展工具系统 | 通过 Solon `@ToolMapping` 声明式注册,支持内置工具、MCP、OpenAPI、技能和 REST API。 |
| 代码库操作 | 在工作区边界内读取、搜索、编辑文件,运行一次性或交互式命令。 |
| 子代理协作 | 内置 `explore`、`implement`、`test`、`review`、`plan` 五种角色,支持隔离上下文、权限约束和超时控制;配置可在桌面端编辑并持久化,支持选择渠道模型。 |
| 计划模式 | 输入框一键进入只读探索,探索完成后提交计划供用户审查,批准后按计划执行。 |
| 持久协作状态 | Checklist、会话级 Goal、项目记忆和共享工作区支持长任务及父子代理协作。 |
| 审批与边界 | 三态 HITL、工具白名单、路径边界保护,以及可选的独立校验模型。 |
| 桌面工作台 | Electron Desktop 提供多聊天标签、Git/文件面板、元素检查、服务进程管理和 AI 浏览器。 |
### 工具与扩展
工具由 Solon 自动发现,可在工具管理界面启用、禁用,并为自定义工具指定只读或写入分类。
| 分类 | 覆盖场景 |
|---|---|
| 文件与代码检索 | `read`、`write`、`edit`、`glob`、`grep`、`ls`、`java_source`、`codesearch` |
| 命令与网络 | `bash`、交互式命令会话、`webfetch`、`call_api` |
| 任务协作 | `sub_agent`、`checklist_*`、`goal_*`、`workspace_*` |
| 项目状态 | `memory` 将跨会话事实保存到 `.loopra/loopra-memory.md`;共享工作区保存到 `.loopra/workspace/` |
| 多模态与浏览器 | `read_image`,以及桌面端可见 AI 浏览器的 `browser_*` 工具 |
MCP、OpenAPI 和技能可为 Agent 注入额外工具。`read_image` 支持工作区路径、绝对路径、Base64/data URI 和 HTTP(S) URL,单张图片最大 5 MiB;当前模型未声明 `imageInput` 能力时,工具会明确提示不可用。`browser_screenshot` 会返回可见视口截图和结构化页面快照,交互操作必须使用对应的 `snapshotId`。浏览器工具只操作可见的 Desktop 浏览器;遇到登录、验证码或安全验证时,Agent 会请求用户接管,不会代填或读取敏感凭据。
### 子代理与长期协作
子代理通过 `sub_agent` 派生。`explore`、`review` 和 `plan` 为只读角色;`implement` 与 `test` 可执行经过授权的写操作。每个子代理拥有独立推理上下文,并可经由共享工作区传递结构化结果。
项目记忆只保存稳定、可复用的项目事实,例如架构约定、已知限制和用户偏好。复杂任务可使用会话级 Goal 记录步骤、证据、阻塞原因与验证结果;Checklist 用于展示有序执行进度。
### 审批与访问边界
`hitl` 支持三种执行模式:
| 模式 | 行为 |
|---|---|
| `free` | 所有工具直接执行。 |
| `approval` | 非只读工具执行前等待用户批准。 |
| `auto` | 白名单工具自动放行,其余调用等待批准。 |
可配置 `validationModel` 与 `validationModelChannelId`,让独立模型在人工审批前评估高风险工具调用。无论当前模式或校验结果如何,访问工作区边界外的路径仍需要人工确认。
## 配置参考
主要配置文件为 `~/.loopra/config.json`:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `modelChannels` | array | 默认渠道 | API 地址、密钥、协议与模型条目。 |
| `modelChannelId` | string | `default` | 当前模型所属渠道 ID。 |
| `model` | string | `deepseek-v4-flash` | 当前模型名称。 |
| `validationModel` | string | `""` | 可选的工具调用校验模型。 |
| `validationModelChannelId` | string | `""` | 校验模型所在渠道 ID。 |
| `workspaceDir` | string | 自动创建默认工作区 | 当前工作区目录。 |
| `reasoningEffort` | string | `high` | `low`、`medium`、`high` 或 `max`。 |
| `hitl` | string | `free` | `free`、`approval` 或 `auto`。 |
| `editMode` | string | `auto` | 编辑模式。 |
| `maxContextChars` | int | `200000` | 上下文字符预算。 |
| `keepTailChars` | int | `80000` | 折叠后保留的最近上下文预算。 |
| `toolTimeoutSec` | int | `360` | 单工具超时秒数。 |
| `subAgentTimeoutSec` | int | `3600` | 子代理完整任务超时秒数。 |
| `disabledTools` | string[] | `[]` | 禁用的工具名称。 |
| `blockedPaths` | string[] | `[]` | 受限路径列表。 |
首次启动未指定 `workspaceDir` 时,Loopra 会在配置目录旁创建默认工作区,避免将启动目录意外作为项目根目录。
## 使用方式
### Web 与 Desktop
`loopra web [port]` 启动 Web 服务,控制台会输出本地访问地址。Web 界面支持会话、工作区、工具、模型渠道、Git 和配置管理;Electron Desktop 在此基础上增加本地进程和浏览器能力。
### 聊天命令
在聊天输入框中使用以下命令:
| 命令 | 用途 |
|---|---|
| `/help` | 显示可用命令。 |
| `/new` | 创建会话。 |
| `/sessions` / `/load N` | 查看和加载历史会话。 |
| 计划模式按钮 | 输入框左侧按钮进入只读计划模式,探索完成后提交计划供审查,批准后自动按计划执行。 |
| `/compact` | 手动折叠历史上下文。 |
| `/goal ...` | 创建、查看、暂停、恢复、阻塞或完成会话目标。 |
| `/hitl` / `/agree` / `/deny` | 切换审批模式或处理待审批工具调用。 |
| `/retry` / `/rewind N` / `/continue` | 管理当前回复的重试、回退和继续。 |
| `/init` | 分析项目并生成项目文档。 |
### 输入框辅助功能
输入框底部的“常用要求”用于管理个人预设,数据保存到 `~/.loopra/prompt-presets.json`;点击预设会直接追加到当前输入框,首次使用时列表默认为空。生成期间发送的新消息会排队显示,可移除,也可以引导发送以停止当前生成并立即处理排队消息。
### ACP
Web 进程可通过启动参数启用 Agent Client Protocol:
```bash
# stdio 模式
loopra web 0 --loopra.acp=true
# WebSocket 模式
loopra web 0 --loopra.acp=true --loopra.acp.ws.port=8765
```
## 从源码开发
### 前置条件
- JDK 17
- Maven 3.9+
- Node.js 18+
- pnpm 8+
### 构建与测试
```bash
# 构建后端模块
mvn clean package
# 运行全部后端测试
mvn test
# 仅验证 Web 模块及其依赖模块
mvn -pl loopra-web -am test
```
### 前端与 Desktop
```bash
cd loopra-front
pnpm install
# 启动前端开发服务
pnpm dev
# 运行前端测试并构建
pnpm test -- --run
pnpm build
# 启动 Electron 开发模式
pnpm dev:electron
```
## 项目结构
```text
loopra/
├── loopra-model/ # 纯内核(可独立发包):ChatModel 客户端/协议、AgentLoop/SubAgent 推理循环、工具抽象与 SPI(AgentConfig/GoalGuard 等),不含任何编排设施
├── loopra-harness/ # 工具装备 + 编排设施(可独立发包,依赖 loopra-model):LoopraAgent 门面、内置工具、Goal/Checklist/工作区/命令/会话持久化/配置、MCP/LSP/OpenAPI/Skill 技能桥接、定时任务
├── loopra-acp/ # ACP 支持(可独立发包,依赖 loopra-harness):将 Agent 注册为 ACP Agent(stdio/WebSocket)
├── loopra-web/ # Solon Web 服务、REST/SSE 接口和打包配置(聚合上述模块)
├── loopra-front/ # Vue 前端与 Electron Desktop
├── intro/ # 官网内容
├── docs/ # 项目文档
├── .release/ # 安装与发布脚本
├── .workflow/ # 旧版 CI 流水线配置(已迁移至 GitHub Actions)
└── .github/ # GitHub Actions 构建与发布流水线
```
### 模块依赖关系
```text
loopra-model ← loopra-harness(LoopraAgent/内置工具/Goal/工作区/MCP/Skill)
↑
└────────← loopra-acp(ACP 注册,经 loopra-harness)
loopra-web ← 聚合 loopra-harness + loopra-acp(传递引入 loopra-model)
```
`loopra-model`、`loopra-harness`、`loopra-acp` 均为独立 Maven 模块,可单独发布供外部服务/工具复用:
- 只需基础 ChatModel / AgentLoop 推理内核 → 依赖 `loopra-model`(不含 Goal/工作区/会话持久化等编排设施,通过 SPI 自行装配)
- 需要开箱即用的 LoopraAgent、内置工具与 Goal/工作区/MCP/Skill → 追加依赖 `loopra-harness`
- 需要把 Agent 暴露为 ACP Agent → 追加依赖 `loopra-acp`
## 技术栈
| 层 | 技术 |
|---|---|
| 核心 | Java 17、Solon 4.0.4、Snack4、OkHttp |
| Web | Solon Web、Jetty、SSE、Knife4j |
| 前端 | Vue 3、Vite、Pinia、Ant Design Vue |
| 桌面 | Electron、electron-builder |
| 协议 | MCP、OpenAPI、ACP、Chat Completions API、Responses API |
| 持久化 | JSONL 会话、工作区本地 JSON、项目 Markdown 记忆 |
## 许可证
[MIT License](LICENSE) © 2026 Sorghum