使用说明
代理REPL.jl
通过MCP(模型上下文协议)为AI代理持久化Julia REPL。支持多个独立会话和Revise.jl热重载。
问题: Julia的“Time to First X”(TTFX)问题严重影响了AI代理的工作流程。每 julia -e "..." 调用需要1-2s的启动+包加载+JIT编译。像Claude Code这样的AI代理每个命令都会生成新的Julia进程,浪费了几分钟的计算时间。
解决方案: AgentREPL通过MCP STDIO传输提供持久的Julia会话。Julia进程仍然有效,因此您只需支付一次TTFX成本。
为什么选择AgentREPL?
AgentREPL是为Claude Code提供持久Julia会话的最简单方法。有三件事使它与众不同:
-
零摩擦设置。 STDIO传输意味着Claude Code会自动生成和管理Julia进程。无需启动服务器,无需配置端口,无需监控进程。安装插件并开始编码。
-
工作流原生Revise.jl。 每个worker都会自动加载Revise.jl,并且一个非阻塞的PostToolUse钩子会提醒模型调用
revise编辑后.jl文件,因此您很少手动重新加载代码。 -
真正的进程隔离。 每个会话都是一个单独的Malt.jl工作进程。您可以重新定义结构,终止崩溃的会话,并在没有交叉污染的情况下运行并行工作负载。
reset按照它所说的去做——包括类型定义在内的完全状态擦除。
AgentREPL不是Julia IDE的替代品。它有8个工具,而不是35个。它没有调试、语义搜索或仪表板。如果你需要这些,请查看 比较部分 在......下面AgentREPL的方法是 eval 加上Julia现有的自省功能(您可以直接通过以下方式调用 eval)以最小的复杂性覆盖大多数代理工作流。
安装
using Pkg
Pkg.add(url="https://github.com/samtalki/AgentREPL.jl")
或用于开发:
Pkg.dev("https://github.com/samtalki/AgentREPL.jl")
快速开始
选项A:使用插件(推荐)
使用AgentREPL最简单的方法是通过附带的Claude Code插件:
claude /plugin add samtalki/AgentREPL.jl
这提供了:
- 自动配置MCP服务器(无需手动设置)
- 8项技能:
/julia-reset,/julia-info,/julia-pkg,/julia-activate,/julia-log,/julia-session,/julia-revise,/julia-develop - Julia评估最佳实践和绘图的自动触发技能
- 一个非阻塞的钩子,提醒模型
revise之后.jl文件编辑
选项B:手动MCP配置
claude mcp add julia-repl -- julia --project=/path/to/AgentREPL.jl /path/to/AgentREPL.jl/bin/julia-repl-server
使用代理REPL
启动新的Claude Code会话。当Claude需要时,Julia MCP服务器将自动启动。
让Claude运行Julia代码:
“计算Julia中的前10个斐波那契数”
克劳德将使用 eval 工具和显示REPL样式输出:
julia> [fibonacci(i) for i in 1:10]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
JIT编译的第一次调用可能需要几秒钟;后续呼叫是即时的。
建筑
AgentREPL使用 多会话工作者子流程模型 通过 Malt.jl:
┌─────────────────────────────────────────────────────────┐
│ Claude Code │
│ ↕ STDIO (MCP) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AgentREPL MCP Server (Main Process) │ │
│ │ ↕ Malt.jl │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ │ │
│ │ │ Session "default" │ │ Session "testing" │ ... │ │
│ │ │ (worker process) │ │ (worker process) │ │ │
│ │ └──────────────────┘ └──────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
Malt(Pluto.jl后面的worker库)将每个worker的stdout/stderr保存在 私有管道而不是主机的流,因此工作输出永远不会损坏 MCP JSON-RPC传输,共享主进程的stdout。
为什么是worker子流程?
reset可以杀死并重生工人 真正的硬重置- 类型/结构重新定义工作(进程内重置不可能)
- 每个会话都有独立的变量、包和项目环境
- 激活的环境在重置后仍然存在
- 第一次使用时,工人会懒散地出生,以避免STDIO冲突
提供的工具
eval
在持久会话中评估Julia代码。输出采用熟悉的REPL格式:
julia> x = 1 + 1
2
julia> x + 10
12
变量持续存在!多行代码也适用:
julia> function fib(n)
n <= 1 && return n
fib(n-1) + fib(n-2)
end
[fib(i) for i in 1:10]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
打印输出出现在结果之前:
julia> println("Computing..."); 42
Computing...
42
截断堆栈跟踪会捕获错误:
julia> undefined_var
UndefVarError: `undefined_var` not defined
Stacktrace:
[1] top-level scope
... (truncated)
特征:
- 变量和函数在调用中保持不变
- 一旦装载,包裹就会保持装载状态
- 返回值和打印输出都被捕获
- 错误被捕获并通过回溯报告
reset
硬重置:杀死工人进程并产生一个新的进程。
Session reset complete.
- Old worker (ID: 2) terminated
- New worker (ID: 3) spawned
- All variables, functions, and types cleared
- Packages will need to be reloaded with `using`
这使得:
- 清除所有变量
- 卸载所有包裹
- 重新定义类型/结构 (软重置不可能)
- 从全新的朱莉娅州开始
激活的环境在重置后仍然存在。
info
获取会话信息,包括工作进程ID。
Julia Version: 1.12.2
Active Project: /home/user/MyProject
User Variables: x, fib, data
Loaded Modules: 42
Worker ID: 3
Session: default
Revise.jl: loaded
activate
切换活动的Julia项目/环境。
activate(path=".")
# Activated project: /home/user/MyProject
# Use `pkg(action="instantiate")` to install dependencies if needed.
activate(path="/path/to/OtherProject")
# Activated project: /path/to/OtherProject
activate(path="@v1.10")
# Activated shared environment: @v1.10
激活后,安装依赖项:
pkg(action="instantiate")
pkg
在当前环境中管理Julia包。
pkg(action="status")
# Package Status:
# Project MyProject v0.1.0
# Status `~/MyProject/Project.toml`
# [682c06a0] JSON3 v1.14.0
# [a93c6f00] DataFrames v1.6.1
pkg(action="add", packages="CSV, HTTP")
# Package add complete.
pkg(action="test")
# Test Summary: | Pass Total
# MyProject | 42 42
pkg(action="develop", packages="./MyLocalPackage")
# Development mode: MyLocalPackage -> ~/MyLocalPackage
pkg(action="free", packages="MyLocalPackage")
# Freed MyLocalPackage from development mode
行动:
| 操作 | 描述 | 所需包 |
|---|---|---|
add |
安装软件包 | 是 |
rm |
删除包 | 是 |
status |
显示已安装的软件包 | 否 |
update |
更新包(如果未指定,则全部更新) | 否 |
instantiate |
从Project.toml/Manifest.toml安装 | 否 |
resolve |
解析依赖关系图 | 否 |
test |
运行测试(如果未指定,则为当前项目) | 否 |
develop |
使用本地代码而不是注册表 | 是 |
free |
返回注册表版本 | 是 |
这 packages 参数接受空格或逗号分隔的名称。
log_viewer
打开一个实时显示Julia输出的终端。
log_viewer(mode="auto")
# Log viewer enabled.
# Log file: ~/.julia/logs/repl.log
# A terminal window should have opened.
log_viewer(mode="tmux")
# tmux session 'julia-repl' created. Attach with: tmux attach -t julia-repl
log_viewer(mode="file")
# Log file: ~/.julia/logs/repl.log
# Run manually: tail -f ~/.julia/logs/repl.log
log_viewer(mode="off")
# Log viewer disabled.
对于实时查看打印输出很有用,特别是对于长时间运行的计算。
session
管理多个命名的Julia REPL会话。每个会话都有自己的具有隔离状态的工作进程。
session(action="create", name="analysis")
# Session 'analysis' created and set as current.
# Worker will spawn on first eval.
session(action="list")
# Sessions:
# * default — worker 2, /home/user/MyProject, Revise (5.2min)
# analysis — not spawned, default env, no Revise (0.1min)
session(action="switch", name="analysis")
# Switched to session 'analysis'.
session(action="destroy", name="analysis")
# Session 'analysis' destroyed.
行动:
| 操作 | 描述 | 名称必填 |
|---|---|---|
create |
创建新的命名会话 | 是 |
switch |
切换活动会话 | 是 |
list |
显示所有状态为 | 否的会话 |
destroy |
杀死会话的worker并将其删除 | 是 |
revise
使用Revise.jl热重新加载Julia代码更改--不需要重新启动会话。
revise(action="revise")
# Revise completed — all tracked changes reloaded.
revise(action="track", path="src/myfile.jl")
# Now tracking src/myfile.jl — changes will auto-reload on next revise().
revise(action="includet", path="scripts/analysis.jl")
# Included scripts/analysis.jl with Revise tracking.
revise(action="status")
# Revise.jl Status (session: default):
# Watched packages: MyPackage
# Tracked files: 3 files
# - src/core.jl
# - src/utils.jl
# - scripts/analysis.jl
行动:
| 操作 | 描述 | 需要路径 |
|---|---|---|
revise |
触发Revise.review()以获取所有文件更改 | 否 |
track |
开始跟踪文件(自动检测到更改) | 是 |
includet |
包含带有修订跟踪的文件 | 是 |
status |
显示Revise当前正在跟踪的内容 | 否 |
使用 revise 编辑后 .jl 文件夹。使用 reset 仅适用于结构布局更改(Julia<1.12)或损坏状态。
除以下工具外的所有工具 log_viewer 和 session 接受可选 session 参数以针对特定会话。
资源
除了工具之外,AgentREPL还将当前会话的状态作为MCP资源公开,客户端可以将其拉入上下文(Claude Code将其显示为@-提及),而无需花费 eval 或 info 电话。每个都返回JSON:
| URI | 内容 |
|---|---|
agentrepl://sessions |
与工人pid、项目、修订状态、年龄的所有会话 |
agentrepl://session/variables |
当前会话中的用户定义变量(名称、类型、大小) |
agentrepl://session/info |
Julia版本、项目、模块计数、修订状态、工作pid、设置注释 |
agentrepl://session/project |
活跃的 Project.toml 以及是否a Manifest.toml 存在 |
agentrepl://session/log |
最近的带外工作程序输出(生成时预编译、异步打印),以及在以下情况下的审核日志条目 JULIA_REPL_AUDIT_DIR 已设置 |
提示
AgentREPL附带了一些MCP提示——可重用的Julia工作流,Claude Code将其作为斜线命令显示。与插件技能不同,它们与MCP服务器本身一起提供,因此它们可以在没有插件的情况下工作:
| 提示 | 论点 | 它的作用 |
|---|---|---|
julia-dev-setup |
path 激活→ 实例化→ 添加修订→ 热重载开发循环 |
|
julia-benchmark |
code |
预热评估,然后定时/隔离测量(BenchmarkTools,如果可用) |
julia-debug-error |
code, error? |
在隔离的eval中复制,读取stacktrace,检查类型,提出修复方案 |
配置
环境/项目管理
设置Julia环境有三种方法:
1.运行时(推荐):使用 activate 动态切换环境:
activate(path="/path/to/your/project")
pkg(action="instantiate")
2.通过环境变量:设置 JULIA_REPL_PROJECT 开始前:
JULIA_REPL_PROJECT=/path/to/your/project claude mcp add julia-repl -- julia --project=/path/to/AgentREPL.jl -e "using AgentREPL; AgentREPL.start_server()"
3.代码中:直接传递到服务器:
AgentREPL.start_server(project_dir="/path/to/your/project")
激活的环境持续存在 reset 电话。
选择Julia MCP服务器
| AgentREPL | Kaimon.jl | MCPRepl.jl | |
|---|---|---|---|
| 传输 | STDIO | HTTP(+ZMQ) | HTTP |
| 网络端口 | 无 | 2828 | 3000 |
| 从克劳德代码自动启动 | 是 | 否 | 否 |
| 依赖关系 | 6(3个标准库) | 30+ | 很少 |
| 会话隔离 | 进程级(Malt.jl) | 通过门 | 共享REPL |
| Revise.jl集成 | 自动加载+修改微调(挂钩+技能) | 手动 | 否 |
| 真正的硬重置(类型redef) | 是 | 不适用 | 否 |
| 调试(断点、步进) | 否 | 是(VS代码) | 否 |
| 语义代码搜索 | 否 | 是(Qdrant) | 否 |
| 内省工具 | 否(使用 eval) |
是(专用) | 否 |
| TUI仪表板 | 否 | 是 | 否 |
| 自定义工具注册 | 否 | 是(GateTool) | 否 |
| 插件生态系统(技能/挂钩) | 是 | 否 | 否 |
| 注册表符合条件 | 是 | 否 | 否 |
如果满足以下条件,请选择代理REPL 你想要一个零配置的Julia REPL,当Claude Code需要时自动启动。没有端口,自动Revise.jl热重载,多会话隔离。您重视简单性和安全性,而不是功能广度。
选择 Kaimon.jl 如果 您需要一个包含35多种工具的全面Julia开发环境:调试、语义代码搜索、宏扩展、代码IR检查和终端仪表板。您可以轻松管理HTTP服务器启动和更大的依赖树。
选择 MCPRepl.jl 如果 你想要一个共享的REPL,在那里你和AI代理可以实时看到彼此的命令。
AgentREPL故意不包括调试、语义搜索、自省工具、TUI或自定义工具注册。如果你需要这些,Kaimon.jl可以提供。代理商REPL的权衡是 eval 加上Julia的内在内省(例如。, @code_typed, methodswith, supertypes --所有可通过以下方式调用 eval)使用较少的移动部件覆盖大多数代理工作流。
相关工具
- Auton.jl --LLM增强了REPL模式,用于Julia的人在循环开发
- ClaudeCodeSDK.jl --从Julia呼叫Claude Code(相反方向)
- 模型上下文协议.jl --MCP框架AgentREPL建立在
- 条款代码JuliaLSP --Claude Code的代码智能(诊断,转到定义)
- 朱丽亚多克·麦克普 --通过MCP查找Julia文档
- REPLicant.jl --基于TCP的Julia REPL,具有自定义协议
Claude代码插件
这 claude-plugin/ 目录中包含一个即用型Claude Code插件。
自动配置MCP服务器
无需手动运行 claude mcp add该插件自动配置Julia MCP服务器。
技能
用户调用:
| 技能 | 描述 |
|---|---|
/julia:julia-reset |
杀死并重生Julia worker(硬重置) |
/julia:julia-info |
显示会话信息 |
/julia:julia-pkg <action> [packages] |
包管理 |
/julia:julia-activate <path> |
激活项目/环境 |
/julia:julia-log <mode> |
控制日志查看器 |
/julia:julia-session <action> [name] |
管理多个会话 |
/julia:julia-revise [action] [path] |
热重载代码更改 |
/julia:julia-develop [path] |
设置开发工作流程 |
自动触发: julia-evaluation (REPL使用的最佳实践)和 julia-plot (UnicodePlots绘图指南)。
钩子
- PostTool使用(写入/编辑):无阻塞
type: command提醒模特打电话的钩子revise编辑后.jl文件,因此会话热重新加载而不会丢失状态。eval和绘图扩展指南之前的显示代码存在于julia-evaluation和julia-plot技能。
安装
claude /plugin add samtalki/AgentREPL.jl
或者为了当地发展:
claude --plugin-dir /path/to/AgentREPL.jl/claude-plugin
看 claude插件/README.md 了解详情。
安全
看 安全.md 出于详细的安全考虑。
太长,读不下去了:
- STDIO传输=无网络攻击面
- 代码以用户权限运行
- 当Claude会话结束时,进程终止
- 没有针对恶意代码的保护(AI决定运行什么)
发展
运行测试
julia --project=. -e "using Pkg; Pkg.test()"
本地测试
using AgentREPL
AgentREPL.start_server() # Blocks, waiting for MCP messages on stdin
看 贡献.md 详细的贡献指南。
api参考
导出的函数
start_server(; project_dir=nothing)
使用STDIO传输启动AgentREPL MCP服务器。
论据:
project_dir::Union{String,Nothing}:要在worker上激活的Julia项目的可选路径
例子:
using AgentREPL
AgentREPL.start_server(project_dir="/path/to/myproject")
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
JULIA_REPL_PROJECT |
启动时激活Julia项目的路径 | 无 |
JULIA_REPL_VIEWER |
日志查看器模式: auto, tmux, file, none |
none |
JULIA_REPL_LOG |
日志文件的路径 | ~/.julia/logs/repl.log |
JULIA_REPL_HIGHLIGHT |
启用/禁用语法突出显示 | true |
JULIA_REPL_OUTPUT_FORMAT |
输出格式: ansi, markdown, plain |
ansi |
内部架构
对于扩展AgentREPL的开发人员:
文件结构:
src/
AgentREPL.jl # Main module (imports, includes, exports)
types.jl # State structs (SessionState, SessionRegistry, LogViewerState, HighlightConfig)
highlighting.jl # Julia syntax highlighting (JuliaSyntaxHighlighting.jl)
formatting.jl # Result formatting, stacktrace truncation
sessions.jl # Multi-session lifecycle (create, switch, list, destroy)
worker.jl # Malt worker lifecycle
revise.jl # Revise.jl integration (revise, track, includet, status)
packages.jl # Pkg actions, project activation
logging.jl # Log viewer + persistent audit logging
attach.jl # Interactive shared REPL (Unix socket + tmux client)
tools.jl # MCP tool definitions (8 tools)
resources.jl # MCP resources (session variables, info, project, log)
server.jl # start_server function
关键部件:
| 组件 | 文件 | 描述 |
|---|---|---|
SessionState |
types.jl | 每个会话状态:工作句柄、项目路径、修订状态 |
SessionRegistry |
types.jl | 包含当前会话跟踪的所有会话的注册表 |
LogViewerState |
types.jl | 可选日志查看器终端状态 |
HighlightConfig |
types.jl | 语法高亮显示配置 |
ensure_worker!(session) |
worker.jl | 确保会话中存在worker |
capture_eval_on_worker(code; session_name) |
worker.jl | 使用输出捕获来评估代码 |
reset_worker!(session) |
worker.jl | 杀死并重新分配会话的worker |
resolve_session(name) |
sessions.jl | 将可选会话名称解析为SessionState |
revise_on_worker!(session) |
revise.jl | 在worker上触发revise.review() |
activate_project_on_worker!(path; session_name) |
packages.jl | 切换工作环境 |
所有函数都可以通过以下方式访问文档字符串 ?function_name Julia REPL。
更新日志
看 更改日志.md 查看版本历史和发行说明。
许可证
Apache许可证2.0-请参阅 许可证 了解详情。
贡献
欢迎投稿!看 贡献.md 关于以下方面的指导方针:
- 建立开发环境
- 代码风格和文档标准
- 拉取请求流程
- 添加新功能
致谢
- 模型上下文协议.jl -MCP框架
- MCPRepl.jl -灵感和现有技术
- Kaimon.jl -全面的Julia代理工具包
- REPLicant.jl -替代方法
- 现代Julia工作流 -最佳实践指南