ipsupport-code:AI Agent 工具实践指南
在项目中评估ipsupport-code,可以先看清用途边界:网站:ipsupport。这类日常自动化工具真正难在输入边界、依赖和失败处理如果不清楚就很难稳定复用,仓库说明只能作为第一层证据。短测时我会用一项范围明确的真实任务完成最小试跑,并保留配置时间、输出质量、异常信息和维护痕迹的结果,方便团队复盘。它对愿意先做小范围验证并复查原始文档的团队更有价值,但正式采用前仍要复查许可证、近期提交和问题区回应。

ip支持代码
网站:ipsupport-llc.github.io/ipsupport-code
适用于您自己的模型的小型自学习编码代理 - 任何 OpenAI-compatible
服务器,本地或云 - 在单个静态二进制文件中。它通过一个驱动该模型
原因 → 行动 → 观察少数胖工具的循环(file、run、git、web、calc),
利用过去运行中学到的经验教训从工具错误中恢复,并且 - 每次之后
任务——反映新的教训并将其写入磁盘,以便它实际上变得更好
时间。
默认情况下是本地的,但相同的循环运行任何 OpenAI-compatible 提供程序 (OpenAI、Anthropic、Grok、Groq、OpenRouter、Z.ai) — 在一个命令中切换 — 它可以 将任务委托给不同模型上的子代理,以便本地代理可以处理 对前沿的回顾和比较。查看 提供商 和 子代理。
交互式 UI 是克劳德代码风格的 TUI(珍珠奶茶):直播 工具调用和观察、降价答案、语法突出显示的差异、 计划/自动模式切换、非窃取批准提示和状态栏 显示模型、上下文使用和标记。 Piped/non-interactive 运行秋季 回到简单的一行 REPL。
它与前沿模型不匹配。它专为您自己的微任务而构建 机器,具有您自己的模型,在您控制的权限策略下。
不隶属于 Anthropic 的克劳德代码;这个名字反映了类似的 终端代理 UX。
一目了然
- 胖工具 —
file·run·git·web·calc,背后是权限策略+工作区监狱 - 自学——从每次运行中汲取教训并从重复的错误中恢复
- 目标 —
/goal追求多回合目标;法官重新喂它直到它真正满足 - 任何模型 - 本地优先(Mac 上的 LLMTray、LM Studio、Ollama、vLLM - 包括无密钥本地服务器)或任何 OpenAI-compatible 提供商
- 子代理——跨其他模型的 delegate/fan-out 或本地 CLI 代理 (codex/claude/...) 并合并结果
- 实时转向 —
/steer <note>在飞行中轻推正在运行的任务(并且/btw <question>询问一个快速的附带问题),而不停止它(ESC 仍然取消) - Guardrails —
/budget每次运行的支出上限 ·/diff查看代理更改的内容 - Plan/auto 模式 · ⏪
/rewind· MCP · 技能 · ♻ 自我更新
这里有新功能? 下面安装,然后跳转到 快速入门。
安装
单行 (macOS/Linux) — 自动检测您的平台,验证 SHA-256,
安装到 ~/.local/bin,并打印如何运行它(以及如何将其添加到 PATH
如果需要):
curl -fsSL https://raw.githubusercontent.com/ipsupport-llc/ipsupport-code/main/scripts/install.sh | sh
这会安装最新的每晚;附加 -s -- latest 以获得最新的稳定版本
发布,-s -- v0.22.0 用于特定标签,或第二个参数用于自定义路径。
Windows (PowerShell) — 安装到 %LOCALAPPDATA%Programsipsupport-code,
验证 SHA-256,并将其添加到您的用户 PATH:
iex (irm https://ipsupport-llc.github.io/ipsupport-code/install.ps1)
那是每晚;对于 channel/tag 使用脚本块形式(因此它可以采用
arg):& ([scriptblock]::Create((irm https://ipsupport-llc.github.io/ipsupport-code/install.ps1))) latest。
或从以下位置下载适合您平台的存档
最新发布
(或滚动nightly):
darwin-arm64(苹果芯片)、darwin-amd64(英特尔Mac)、linux-amd64、
linux-arm64,windows-amd64。每个版本还附带 checksums.txt (SHA-256)。
tar -xzf ipsupport-code_*_darwin-arm64.tar.gz # .zip on Windows
chmod +x ipsupport-code
# macOS may quarantine a downloaded binary:
xattr -d com.apple.quarantine ./ipsupport-code
./ipsupport-code -version
或从源代码构建(纯Go,CGO_ENABLED=0,从任何主机交叉编译):
make build # host binary at dist/ipsupport-code
make release # every target into dist/
go install github.com/ipsupport-llc/ipsupport-code/cmd/agent@latest # installs as `agent`
提供商——本地或外部
代理和工具与模型无关,因此您可以将它们指向任何 OpenAI-compatible API 并在一个命令中进行切换 — 运行强大的云模型 一项艰巨的任务,然后回到本地:
/ai list providers (local + openai, anthropic, grok, groq, openrouter, zai)
/ai key openai sk-… add an API key for a built-in provider (one command)
/ai add mylab https://api.lab.co/v1 llama-3.1 key=sk-… add a CUSTOM provider + key in one step
/ai openai switch to it · /ai local back to your local server
/model list models · /model gpt-4o pick · /model sonnet filter (great for OpenRouter)
在 Linux 上粘贴密钥?中键单击粘贴被鼠标滚轮吞没 滚动跟踪 - 使用 Ctrl+Shift+V (括号内的粘贴),它始终有效。
手动添加提供程序。 任何 OpenAI-compatible 端点都可以作为一流端点
直接从配置提供程序 - 不需要命令,并且不需要 API 密钥
用于无密钥本地服务器(Ollama、vLLM、第二个 LM Studio)。添加到下面
providers 并将 provider 指向它:
{ "provider": "ollama",
"providers": { "ollama": { "base_url": "http://localhost:11434/v1", "model": "qwen2.5-coder:7b" } } }
然后它在启动时处于活动状态,并可通过 /ai ollama 和 /config 进行切换。
切换会保留您的会话、令牌和模式。钥匙住在
~/.config/ipsupport-code/config.json(写作chmod 600)或回退到
环境变量(OPENAI_API_KEY、ANTHROPIC_API_KEY、XAI_API_KEY、GROQ_API_KEY、
OPENROUTER_API_KEY, ZAI_API_KEY).
/config 打开交互式设置面板:↑↓ 移动,输入 到
就地循环一个值(提供者、模式、权限、运行超时、内存、
紧凑的阈值、颜色、通道)或跳转到正确的流程(模型、键、
重命名),esc 关闭 — 更改会在您进行更改时应用并保存,否
手工编辑JSON。
分代理
定义一个配置文件——一个命名模型——代理获得一个 agent 工具:它可以
将独立任务委托给该模型上的子代理并使用答案。
第二个意见、另一个模型的优势或跨 2-3 次审查的相同代码
立即模型。在本地模型上运行主循环,然后让它展开审查
到几个前沿模型并合并研究结果。
个人资料是委派的唯一方式(因此精心策划的列表
助理可能会出现)。交互式构建一个 — 提供商 → 型号列表 → 名称 —
从 /config 或在命令行上:
/agents add grok openrouter x-ai/grok-4.3 # omit the model to list them
/agents add architect openai gpt-4o
/agents # list profiles
/agents rm grok # remove one
然后就问——e.g。 “跨 grok 和架构师审查 internal/tool,然后合并。”
助理呼叫agent(profile, task, dir):dir(可选,~扩展)
将子代理指向另一个项目——它在那里有自己的监狱,所以它可以
在 ~/other-repo 上工作,而不会暴露磁盘的其余部分。一个纯粹的
多个配置文件的扇出并行运行,每个配置文件都有自己的实时状态行;
然后主模型将结果合并为一个答案。
安全:每个产卵都需要批准(即使是本地产卵也会花费计算),直到您
用 /permissions agents on 放松一下。子代理 read/write 文件并使用 git 但
仅在使用 /agents exec on 启用时才运行 shell 命令。他们继承
当前的 plan/auto 模式,无法生成自己的子代理(深度 1),并且其
令牌与其他令牌一样记录在 /usage 中。
外部CLI代理
本地安装的CLI编码代理(Codex、Claude Code、Muse、aider…)可以是子代理 也注册为外部配置文件:
/agents add-tool # scan PATH: which known CLI agents are installed
/agents add-tool codex # one word — codex/claude/gemini/qwen/aider/goose/opencode/muse
/agents add-tool mytool mytool --headless {task} # any other tool ({task} = where the task goes)
助理代表通过相同的agent工具; CLI 在目标中运行
dir,助手取回其输出的尾部以及git diff --stat summary (review the full patch with /diff)。使用 CLI 的
非交互模式 (exec / -p / --message) — 交互式启动
挂起直到超时(默认为 15 分钟,config.json 中每个配置文件为 timeout)。
Muse(Meta 的 Muse 代码)以 muse exec {task} 运行并保留自己的批准
并在该模式下启用沙箱;要与其他标志一起启动它,请使用完整形式
(/agents add-tool muse muse exec <flags> {task}).
⚠ 外部代理在沙箱外运行:他们自己的工具,他们自己的
权限,没有策略监狱,并且 /rewind 无法看到他们的编辑。这就是为什么每个
发布需要自己的批准(external CLI agents 类别)——即使
普通生成点设置为允许;提示上的 a 会放松会话。
后台作业(即发即忘)
任何子代理 - LLM 或外部 CLI - 都可以作为独立的后台作业运行:
助理添加background=true,呼叫立即返回,并保持
在作业运行时工作。作业完成后,您会看到 ✓ job #N 通知,
结果被折叠到助手的下一步中——甚至是任务中期,通过
与 /steer 相同的台阶间接缝,
因此,在助理工作时落地的工作不会等待下一个任务
被注意到。 /jobs 列出它们(每个运行的都显示 ⚙ running <elapsed> 加上
↳ <its latest output line> (<age> ago) 对于外部代理 — 差距很大
提示它被卡住了,无法工作),/jobs 结果 <id> prints one in full, /jobs 杀死 <id> 取消。工作岗位能够存活下来
父任务(和 esc)——非常适合在您运行时进行长时间的法典审查
继续在主循环中。
引导正在运行的任务( /steer )并侧面询问( /btw )
esc 取消任务。两次轻微的接触并不能阻止它:
/steer <note>将一条注释折叠到正在运行的任务中 — 它落在最上面 下一步重定向工作(“/steer 加载程序位于 internal/config,而不是 cmd"),无需等待任务完成或作为后续任务排队。的 在其余的运行中,注释固定在输入上方。空闲时输入,它 引导您开始的下一个任务。/btw <question>在任务继续进行时提出了一个简短的附带问题 - 一轮,无需工具,从现场对话中得到答案,然后工作 恢复(“/btw what test framework is this repo using?”)。答案是没有 引导任务;这只是为了你。
提示模板( /snip )
保存您重复使用的提示,并在需要时将其拉回。 /snip save <name>
将您的最后一个提示存储在名称下(或 /snip save <name> <text> 来存储
直接发短信); /snip <name> 将该模板放入输入框,以便您
可以对其进行调整并按 Enter 键——而不是自动发送。 /snip list 显示它们,/snip rm <name>删除。模板全局存储
(~/.config/ipsupport-code/snippets.json),所以他们会跟随你跨项目,
Tab 完成子命令和代码片段名称。
更新中
该二进制文件从 GitHub 版本中进行自我更新:
ipsupport-code update # update on the current channel
ipsupport-code update nightly # switch to the nightly channel (saved) and update
ipsupport-code update stable # switch back to stable
/update 在 REPL 内部执行相同的操作。启动时它会快速执行,
如果您的计算机上有更新的版本,则尽力检查并打印一行通知
通道(默认为 stable — 设置 "channel": "nightly"
~/.config/ipsupport-code/config.json,或用update nightly切换)。本地
开发构建永远不会被困扰。要使固定或固定的启动检查静音
包管理安装,无需完全离线,设置
ipsupport-code config set update_check false.
工作目录。 从父目录(或 ~)启动? /cd <subdir> 积分
您项目中的会话 - 相对 file/run/git 路径在那里解析,并且
子代理继承它作为默认值 dir,因此您只需设置一次路径即可
重复它。它留在工作区监狱内。
离线? /offline on 切断代理的 OWN 互联网使用 — 网络工具
拒绝并显示明确的“无互联网”消息,并且启动更新检查是
跳过了。无论哪种方式,您配置的模型连接都不会受到影响 - 如果是的话
本地主机上的本地服务器无论如何都不需要网络;如果你把它指向一个
远程端点,该流量仍然会出去。 /offline off 重新启用它。
快速启动
-
启动本地服务器并加载工具调用模型(e.g.
qwen2.5-7b-instruct)。在 Mac 上我们推荐 LLMTray — 正在运行的菜单栏应用程序 mlx-lm 原生于 Apple Silicon; LM Studio、Ollama 和 vLLM 在任何地方都可以完成相同的工作。 没有本地模型? 跳过此步骤 - 下一步会询问。 -
第一次交互式运行会询问您是否正在运行本地模型服务器。如果 是的,它会查找正在运行的 LLMTray (
:8765) 或 LM Studio (:1234) 并提供 它找到的服务器 URL,然后请求 API 密钥(对于本地服务器为空) 服务器)和型号,并确认连接。如果不是,它会询问提供者名称 - a 内置(openai、anthropic、grok、groq、openrouter、zai)使用 只需一个密钥即可获得供应商的真实端点; 任何其他名称均视为您的 自己的 OpenAI-compatible 端点(自托管网关,LiteLLM,代理......)和 另外还要求其 Base URL - 因此自定义端点永远不会默默地 固定到错误的供应商的 URL。无论哪种方式,它都会保存到~/.config/ipsupport-code/config.json(使用-init重新运行)。 -
运行一次性任务,或打开 REPL:
./ipsupport-code "use calc to compute (1234*9)+sqrt(2)" ./ipsupport-code # interactive TUI ./ipsupport-code -C ~/proj "summarize what main.go does"
哪个会话? 每个工作空间保存内存(-C 目录,默认为
当前的)和每个 代理名称 (默认 ipsupport-code)。一击或
管道静默运行继续保存的线程;交互式 TUI 打开一个
可导航选择器(↑↓ 选择保存的会话,输入 打开,d
删除,esc 表示最新)(如果存在)。开始清理或拾取线程
来自 CLI:
标志位于任务文本之前 - 其后的任何内容都是任务的一部分,而不是任务的一部分 标记,代理这样说,而不是悄悄地将其发送给模型:
$ ipsupport-code "do the thing" -override provider=openai
error: -override provider=openai must come BEFORE the task text — written there it was read as part of the task, not as a flag
在不接触的情况下将单次运行指向不同的提供商或模型
config.json(必须已配置提供程序):
./ipsupport-code -override provider=openai "task" # this run only
./ipsupport-code -override provider=openai
-override providers.openai.model=gpt-5 "task" # …and its model
./ipsupport-code -new "fresh task" # ignore the saved session
./ipsupport-code -session review "look at X" # start a named thread
./ipsupport-code -session review -resume # continue it
./ipsupport-code -session review -new # start it over (overwrites)
命名会话是一种明确的选择,因此无需说明即可重新启动会话 你的意思是一个错误而不是一个无声的猜测:
$ ./ipsupport-code -session review
error: session "review" already exists — -resume to continue it, or -new to start over (overwrites it)
每个命名会话都保留自己保存的线程、自己的固定目标及其 自己的输入历史记录,因此其中两个可以同时进行相同的结帐操作 - 本地 一个终端中的模型,另一个终端中的云模型 - 不会窃取彼此的模型 目标。学到的事实和教训保持共享:这些描述了项目,并且 两场会议都受益于其中一场所学到的知识。
日志按 工作空间 和每个会话记录:
~/.config/ipsupport-code/agent-test.log # -C test
~/.config/ipsupport-code/agent-test-remote.log # -C test-remote
~/.config/ipsupport-code/agent-test-cloud.log # -C test -session cloud
由目录的基本名称命名,因此您无需查找即可尾随目录 哈希。 (具有相同基本名称的两个签出共享一个日志 - 与状态不同 目录,其中冲突会混合两个项目的内存,而不是两个 日志。)
每个共享状态文件都是在跨进程锁下写入的,并且两者都 运行添加到——学到的事实、教训、使用分类账、输入历史记录——是 合并在它下面而不是覆盖,所以第二次运行永远不会删除什么 第一个学会了。
在TUI、/sessions、lists/switches/deletes线程中,/new <name>启动了一个
新的命名线程(旧的保留在 /sessions 中),并且 /new 清除
活跃的一位。
模式:自动与计划
使用shift+tab(或/plan / /auto)进行切换;当前模式显示在
屏幕底部。
- 自动(默认)— 代理使用工具执行任务。
- 计划 - 只读:它调查并提出一个编号计划,并且每个 状态更改工具调用被阻止在引擎,因此它无法触及 任何事情直到你接受为止。
当计划模式任务按计划完成时,您将获得一键握手: 输入接受 — 切换到自动并立即执行计划 — 或 esc 继续计划(保持计划模式;键入进行细化)。切换模式 中任务适用于下一个回合,而不是中运行(正在运行的代理读取 直播模式)。
权限
默认情况下,突变操作需要获得批准。提示符变为模态:
y 批准,n 拒绝,a 允许整个会话(见下文),
↑/↓ 切换显式 Yes/No,并且所有其他键都被完全忽略 —
在等待时,没有任何内容会泄漏到聊天中。 esc 回退
打字(先引导或排队其他事情);批准保留
无论哪种方式,回答它总是会让你回到原来的地方。一个
不可覆盖的拒绝层(rm -rf,sudo,秘密,.git,.env,...)是
始终强制执行。
为会话授予它。 在出现任何提示时按 a 以停止询问
整个“种类”的操作(文件更改、shell、git、子代理生成、MCP)
会话的其余部分 - 仅在内存中,从未写入配置,由
/new 和 /clear。这就是你所追求的“是的,现在不要再问了”
任务中期,不会永久松动任何东西。
为了永久放松,/permissions files on 自动允许
工作区中的非破坏性文件操作(拒绝层仍然适用);同样对于
/permissions run on。该选择保存到工作区配置中。
OS 沙箱(选择加入)。 权限引擎决定命令是否运行;
OS-level 沙箱还可以限制它可以触及的内容一旦它这样做 - 所以
即使允许的命令也不能在工作区之外写入。打开它
config set sandbox auto(选择平台的机制:macOS上的安全带,
Linux 上的 Landlock — 内核 5.13+),或明确命名一个 (seatbelt /
landlock)。然后在内核沙箱内执行 Shell (run) 命令:
写入仅限于工作区(加上临时目录和用户缓存,因此
构建工具继续工作),网络遵循/offline(Landlock需要内核
6.7+ 对于该部分),读取和其他一切都没有改变。已关闭
默认,并且在没有受支持的沙箱命令的 platform/kernel 上运行
像以前一样不受约束。外部 CLI 代理 未 沙盒化(它们运行
在它之外,如上所述)。
风险评分(影子模式)
一个小型本地分类器对每个工具调用的危险程度进行评分,并且 记录它的想法以及权限策略实际执行的操作。它 不阻止任何内容。第一种模式的重点是查明信号是否有效 任何事物在变得重要之前都具有价值:
msg="risk shadow" tool=run action=shell risk=1.00 top=credential_access
labels="credential_access=1.00 sandbox_escape=1.00" policy=allow
disagreement=allowed-but-flagged call="run shell command=cat ~/.ssh/id_rsa"
msg="risk shadow: scored 1 call(s), 1 over 0.50, 1 disagreed with the policy"
您可以在重要的地方看到它,而不仅仅是在日志中。记分员不高兴的判罚 about 自行做出裁决,并在批准提示时再次做出裁决 — 这就是它有价值的时刻,因为你的答案就是标签 它从中学习:
⚙ run shell cat ~/.ssh/id_rsa ⚠ 0.98 credential_access
⚠ approve run: cat ~/.ssh/id_rsa ⚠ 0.98 credential_access
y approve · n deny · a allow all shell commands this session
对于没有什么可说的呼叫,没有任何内容显示 - 每个电话号码 常规路线是风险信号被排除的方式。
disagreement 柱是整个产品。 允许但标记是什么
可以添加风险门; 门禁但不起眼是它所带来的摩擦。
用 IPS_LOG=debug 尾随它们,并用 IPS_RISK=off 关闭整个系统。
它是一个散列特征线性模型 - sigmoid(Wx+b) 在单词和字符上
n-gram,六个标签(destructive、sandbox_escape、credential_access、
network、external_side_effect、safe)。推理是纯粹的 Go,没有
任何类型的依赖项:嵌入在二进制文件中的 768KB float32,每个约 28μs
打电话。训练是离线且单独的(scripts/train_risk.py,仅限 stdlib);
它唯一的输出是权重文件。
交换模型而不重建:IPS_RISK_MODEL=/path/to/model.bin。该文件
带有自己的功能配置和标签名称,因此具有不同的模型
特征空间或不同的标签集加载不变。
在保留的 路径 上 - 每个路径类别的五分之一,从未在任何动词下见过:
| 标签 | 精度 | 回忆 |
|---|---|---|
| 破坏性的 | 0.91 | 0.97 |
| 沙箱逃逸 | 1.00 | 0.90 |
| 凭证访问 | 0.96 | 0.98 |
| 网络 | 0.99 | 0.95 |
| 外部副作用 | 1.00 | 0.94 |
| 安全 | 0.96 | 0.88 |
在标题分数上——日志显示的内容和门将使用的——是 7.0% 普通呼叫误报和漏报风险呼叫的比例为 3.4%。训练师打印 两者兼而有之,并指出了每一个误报。
特征向量是 L2 归一化,这使得分数意味着
长通话和短通话是一样的。没有它重复的功能
累积:具有 380 个字符路径的相同命令有 Sum(v²) = 426490
104 的 logit 为 1523,14.5 的 logit 超出了
局部修正的上限,因此根本无法修正。
词汇表是从上游提供的,而不是发明的:构建输出名称
来自github/gitignore的309
模板 (CC0),以及标记秘密的单词 — token、api、key、
secret,加上约 130 个供应商名称 - 来自 gitleaks'
222 条规则(MIT)。 scripts/fetch_risk_vocab.py 是唯一触及的脚本
网络;它的输出已提交,因此生成数据集、训练和
make build 均保持离线且确定。
上游需要进行判断,判断记录在
scripts/risk_vocab.json 而不是隐藏:“不要犯这个”并不“安全”
删除”,所以 Makefile、README.txt 和 app/config/parameters.yml 是
被否决出安全一半,以及在其中生成的名称
生态系统并在另一个中手写(docs、public、lib)。两次失败
模式不是对称的 - 缺少构建目录会花费一分,读取
高;调用 docs 构建输出会教导模型 rm -rf docs 是
例行公事。
该数据集是按组合方式构建的 - 每个动词都与每个类别交叉
论证——所以动词几乎不携带任何信息,而论证则携带所有信息
它的。 cat README.md 得分 0.00,cat ~/.ssh/id_ecdsa 得分 1.00;也是如此
less、wc -l、xxd 和 od -c 位于相同的两个文件上。那花了三个
尝试正确(请参阅顶部的评论
scripts/gen_risk_dataset.py),这是风险之间的全部区别
信号和一系列可怕的单词。
network 是信息:访问互联网是一种财产,而不是
危险,因此被报道但不包括在标题数字中 - 否则
获取文档页面得分 1.00。哪些标签是信息性的
在模型文件中声明,因此替换模型自行决定。
它会从您的批准中学习
基本权重是根据合成数据进行训练的,并且永远不会改变。跑得怎么样 每个工作区的学习都在他们旁边——并且它从唯一的基础上学习 代理免费获得的真相:您回答批准提示。两个答案 携带信息,并且它们正是影子日志已经算作的两个 分歧:
| 它标记了该通话,并且您批准了 | 一个你不需要的警告——像这样的调用不再在这里被标记 |
| 它保持安静,而你拒绝 | 未命中 — 呼叫就像开始在这里被标记一样 |
你的答案改变的是呼叫是否会收到警告
工作空间,而不是模型所说的调用的作用。经批准的 git push
仍然在日志和 /risk 中读取 external_side_effect 0.95 — 它确实推送
某处——但经过几次批准后,它就不再打扰你了。日志
显示两个数字:此工作区更正后的 risk,之前的 base。
对它认为好的事情的认可没有任何意义;那将是 从自己的输出中学习。任何不是答案的东西都不会 - esc, 被杀死的后台作业、关闭的标准输入都拒绝调用,并且它们都不是 判断它的人。
每个代理都会根据自己的策略对自己的呼叫进行评分,包括子代理。一个
没有自己的记分器的代表会继承上下文中的任何评估
它被交给了——父母的agent.spawn——然后拒绝了
委托自己的文件写入会针对生成进行记录。
拒绝可能意味着“现在不行”或“我自己做”,就像“那就是”一样简单
危险”,所以一个答案永远不会翻转模型。临界分数已定
第一次更正时;一个自信的错误需要五六次一致
答案。停止重复的修正逐渐消失,并且 /risk reset
将它们全部丢弃。
/risk 显示发生了什么以及学到了什么。每个答案也是
附加到工作区状态目录中的 risk-feedback.jsonl 中,
形状 scripts/risk_dataset.jsonl 使用 — 作为 verdict ("verdict": “批准”, with the labels the model scored),不作为标签。批准
说该调用是可以接受的,而不是它的作用,因此训练器跳过这些行。
要教基本模型一些东西,请自己标记一行 - 写下它的 labels
并设置 "source": "manual" — 并根据现有权重进行微调:
python3 scripts/train_risk.py --from internal/risk/model.bin ~/.config/ipsupport-code/state/<workspace>/risk-feedback.jsonl
在 v0.61 之前写入的行(记录批准为 ["safe"])是
同样的方式跳过。
训练器在提交的数据集上运行两次会产生字节相同的数据
model.bin,因此可以从此存储库中的文件重现交付的模型。
它不是什么。 它不会取代权限策略或沙箱。
该正策在极端情况下仍然更好 - 它完全否认 rm -rf /,
无论允许名单上有什么规定。学习需要提示:与
-skip-permissions 没有人询问,所以什么也没有回答,什么也没有
学到了。
技能
按需指令包 — 按需指南的用户可扩展版本。
只有启用技能才会在系统提示中添加一行;模型
按需加载技能的完整说明,因此基本提示保持精简 否
无论您安装多少个。二进制文件中包含八项精选技能
(test-first, debug-systematically, git-flow, research-first,
minimal-code、review — 通过子代理进行多模型审核 — subagents,如何
代表和粉丝锻炼,以及 plan,.agent/plan.md 清单如此多步骤
工作自行恢复),播种禁用,因此您可以选择加入。内置技能刷新
升级时除非您已经编辑过它们。
/skills list installed skills (on/off)
/skills on git-flow enable one
/skills install <url|git> add a .md by URL, or every skill in a git repo
/skills remove <name>
MCP 服务器
连接 模型上下文协议 服务器和
代理获得他们的工具 - 但通过一个代理工具,而不是通过转储每个
服务器的模式进入提示(这会淹没小模型的上下文)。添加
他们到~/.config/ipsupport-code/config.json:
"mcp_servers": {
"fs": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/some/dir"] },
"gh": { "command": "github-mcp-server", "env": { "GITHUB_TOKEN": "…" } },
"remote": { "url": "https://mcp.example.com/mcp", "headers": { "Authorization": "Bearer …" } }
}
两种传输:stdio(通过 command 的本地子进程)和 HTTP(a
远程 url,使用 headers 进行身份验证 — e.g。 Authorization: Bearer)。 /mcp
列出服务器及其工具。该模型使用mcp工具list来
发现,schema 查看工具的输入,call 运行一个。服务器连接
第一次使用时很懒; 每个 mcp call 都请求批准(它是外部代码)。
子代理不会获得 MCP。
当本地模型行为不当时
小/“思考”本地模型可能会循环自己的推理或过度思考。的 ,按顺序:
/reasoning low(或minimal/off)— 修剪模型的推理。有 没有通用的 API,因此它是每个模型并存储在其提供商自己的中 形状(reasoning_effort为OpenAI,reasoning:{effort}为OpenRouter,ch@t_template_kwargs:{enable_thinking}适用于 Qwen/LM Studio)。/reasoning low开启 当前模型为已知提供商编写了正确的形状;为其他人设置它config.json下的reasoning中的原始数据(由<provider>或<provider>/<model>).- 失控转弯会自动停止。 远远超出上下文的单个转弯 窗口(循环)会中止并发出明确的消息,而不是流传输几分钟。 按 esc 可以更快地取消任何操作。
/reflect off— 如果模型较弱,则跳过任务后学习过程 循环(状态显示“任务完成 - 提炼课程”,这样您就可以告诉 任务本身已经完成)。或者/reflect <profile>在 更强的模型,以及/reasoning reflect low给予学习通过 自己的(更精简的)推理设置。/skills on plan- 对于长时间的多步骤工作,模型会保留一个清单,以便 它会恢复而不是漂移。- 在工具架构上进行微调。如果特定本地模型一直出现乱码
{"action":...,"params":...}形状(注册表恢复了几种常见的 自动,但不是全部),请参阅 FINETUNING.md 从头开始指南,包括在哪里挖掘您的真实训练示例 磁盘上已经有。
倒带
/rewind 打开会话步骤列表 — 选择一个(↑↓,输入)进行回滚
到它运行之前:恢复该步骤(或其子代理)更改的每个文件
恢复到其先前的内容,它创建的文件将被删除,并且对话将被修剪
回来。每回合开始时都会设置检查点,因此无论什么情况都可以倒带
回合如何结束(完成、ESC、循环、错误)。 shell 命令、git 和
网络调用无法撤消——只能撤消文件和聊天。 (REPL:/rewind
列表,/rewind <n> 适用。)会话的快照。
目标
目标是一个多回合目标——而不是单回合。 /goal <text> 一套
并开始追求它:代理工作,当它认为它完成了
判断(单独的模型调用)决定目标是否“实际上”得到满足。如果
事实并非如此,目标被“重新反馈”给代理——保持焦点,差距
法官点名了——而且这种情况还在继续。重复执行TTL(/goal ttl <n>,
默认 6 次重新馈送)在放弃之前,在通常的 esc/卡住/失控之上
防护装置和硬质台阶帽。
目标是一流的持久对象:它位于工作区的状态目录(goal.json)中,因此它
重新启动后仍然存在 - 未完成的任务提议在下一次重新启动一次
开始(不是每次),完成的目标就会自行清除。 /goal 显示
长期目标及其状态; /goal go
恢复它; /goal clear 丢弃它; /goal off 禁用循环(目标然后运行
作为单次传递)。普通任务(您键入的任何不是目标的任务)作为一个任务运行
没有判断开销就通过——只有明确的目标才能进入循环。
判断默认对任何不可解析的回复完成,因此混乱的模型无法陷入困境
循环中的代理。整个事情都取决于真正的进展:一个召唤的转折
没有任何工具是不会被评判或重新喂养的。如果重新喂食的模型然后完成而没有做
任何工作,它都会在循环放弃之前得到 一次 推动来执行(使用
config set goal_nudge false)。当循环在没有法官的情况下停止时
确认成功,它说得这么清楚——“目标未确认完成,/goal go
继续推动”——而不是暗示已经完成。
上下文和自动压缩
状态栏显示 ctx 4.1k/8k — 最后一个提示的大小与模型的大小
上下文窗口。该窗口是从 LM Studio 自动检测的
/api/v0/models;将 llm.context_window 设置为覆盖(0 禁用自动压缩)。
当提示经过约 75% 的窗口时,会话将被 自动压缩 到
释放空间的简短摘要(随时使用 /compact 运行它;阈值和
是否总结都是可配置的 - 请参阅 memory/compact_threshold
如下)。每项任务的目标和结果也都完整存档,永远不会
总结一下,到工作区状态目录中的 sessions/<name>.archive.jsonl — 一旦有东西
其中,模型获得了一个 history 工具来回忆或搜索过去的任务
此后压缩摘要已缩短。
REPL 命令
任何不以 / 开头的内容都作为任务运行。 Tab 完成命令。
| 命令 | 什么 |
|---|---|
/plan, /auto |
计划模式(仅建议)与自动模式(执行)——还有 shift+tab |
/goal <text> |
设定并追求多回合目标(法官重新反馈直至达到); go · clear · ttl <n> · off |
/skills |
列出/切换/安装按需指令包 |
/permissions |
放宽对非破坏性file/shell行动的批准 |
/status |
配置、知识库和跟踪路径 |
/budget [usd] |
限制每次运行的估计支出——一旦命中就拒绝新任务; off 禁用 |
/diff |
显示未提交的工作区更改(代理更改的内容),彩色 |
/steer <note> |
将注释折叠到 正在运行 的任务中而不停止它 — 进入下一步(esc 取消) |
/btw <question> |
在任务中提出一个快速的附带问题 - 一轮回答,没有工具,任务继续进行 |
/snip [name] |
提示模板 — /snip <name> 将保存的模板拉入输入中进行编辑和发送; save <name> [text](省略文本→您的最后一个提示)·list·rm <name> |
/usage |
代币支出 + 估计 $ (今天/7 天/30 天/全部、按天、按型号); clear · purge <days> · retain <days> |
/login |
(重新)配置服务器 URL / model / key,然后重新加载 |
/new [name] |
启动 NEW 会话(旧会话保留在 /sessions 中) |
/clear |
擦除此会话的上下文+屏幕(同一会话) |
/compact |
总结到目前为止的会议以释放上下文 |
/color [name] |
更改TUI框架颜色(如果没有名称则循环) |
/rename <name> |
重命名代理(保存在设置中) |
/sessions |
列出/切换/删除已保存的会话(每个代理名称) |
/agents |
子代理配置文件:add(LLM)/add-tool(外部CLI)/rm/exec |
/loop <interval> [xN] <task> |
按一定时间间隔重新运行任务(e.g./loop 5m <task>、/loop 30s x10 <task>); esc 停止它 |
/help |
命令列表 |
/exit, /quit |
离开 |
输入是多行的:粘贴整个块(e.g。YAML片段)并且它保留 它的换行符,盒子变大并自动换行,而不是滚动一行, 和 alt+enter (或 ctrl+j) 手动插入换行符。 输入提交。
历史记录。 如果输入为空,↑ / ↓ 调用之前的消息以重新运行或
修复拼写错误 - 第一个 ↑ 跳转到最后一个提示。历史是持续的
工作区(history 在其状态目录中),因此召回跨越过去的运行; /history 列出最近的
提示并 /history <text> 过滤它们,ctrl+r 打开增量
反向搜索(输入缩小·ctrl+r 较旧·输入使用)。 选项卡完成
针对工作区的 /commands 和 @file 路径。 (PgUp/PgDn 和轮子
滚动日志。)
您输入的所有内容都是一个消息队列。当任务运行时,输入保持不变
实时:输入队列下一条消息 - 任务或 /command - 固定在上面
任务完成后按顺序输入和排出(延迟命令没有
更长的时间下降)。 ↑ 在空输入上将最后排队的消息拉回到
编辑或删除,然后 esc 取消。
批准。 当代理请求批准文件写入或 shell 命令时,它
接管按键:按 y(批准)、n(拒绝)或 a — 允许每个
此类操作 (file/shell/git/spawn/external) 的其余部分
会议; /permissions 显示您允许的内容和 /permissions reset 撤销的内容
它。 ↑/↓ 切换显式 Yes/No 提示; esc 退出以继续输入
(先排队一条消息)不回复——批准只是一直等待。
Shell. /shell(或 !)会将您带入一个
工作区中的交互式 shell — 手动执行操作,退出返回。 !cmd
运行单个命令并显示其输出。这些是你的命令,而不是
代理的,因此他们不受权限策略的限制。
自定义系统提示。 内置引擎提示故意很小;你
可以将其替换为 .agent/system.md (每个项目)或
~/.config/ipsupport-code/system.md(全球)。 ipsupport-code -dump-prompt
打印默认从 (> .agent/system.md) 开始。您的CLAUDE.md,
环境,技能仍然附加在它后面。 /status 显示的是
提示已生效。 (臃肿的提示让小模型调用工具变得更糟——
编辑的风险由您自行承担。)
它是如何运作的
- 本机工具调用。 与任何 OpenAI-compatible 服务器通信 — LLMTray、LM
Studio、Ollama、vLLM、LiteLLM 代理或云提供商 — 并让模型
原生调用工具。一个客户可满足所有人的需求;
llm.base_url/llm.api_key或者providers条目选择端点。 - 胖工具。 每个域一个工具,每个
{"action": ..., "params": {...}}。的 目录保持很小(~1k 代币),因此小模型可以快速预填充并且路由良好;一个 声明性Domain生成每个工具的架构、帮助和验证。 - 主动帮助。 当工具失败时,可以从过去的运行中吸取教训 直接注入到模型看到的错误中——它不必询问。
- 反思。 任务完成后,第二次模型通过将持久的经验教训提炼成
~/.config/ipsupport-code/knowledge.json(环境通用工具陷阱)耐用 关于当前项目的事实(build/test/run 命令,事物所在的位置, 约定)到工作区状态目录中的facts.json- 折叠到下次运行的提示符中。 每节课都会跟踪上次观看的时间(重复出现时会受到影响);/knowledge报告商店和clear/purge <days>/retain <days>修剪陈旧的 (retain在启动时自动清除)因此内存不会永远积累垃圾。 - 代码搜索。
file工具的search操作通过正则表达式 grep 工作区 (file:line: match),跳过 VCS/dep/build 目录和二进制文件 — 无外部grep。 - 会话记忆。 记住您的目标及其答案
重新启动,按工作区和每个代理名称保存(
sessions/<name>.json在 工作区的状态目录)。 启动时,TUI 显示已保存会话的 可导航选择器 (↑↓ / 输入 / d) — 在恢复时,它会重播最近的交流,这样你就可以从你想要的地方开始 离开了。/new <name>启动一个新的命名线程;/new擦除活动的一个。 - 缓存友好的提示。 本地服务器仅在每个提示时重用其提示缓存。
请求以与上一个请求完全相同的方式开始,因此在会话中会出现提示
只在最后生长。会议开始时系统提示保持不变:事实已获悉
完成任务和计划模式指令后,在下一个任务中以
<agent-note>形式到达 任务的消息而不是重写它。在本地提供商上,目标裁判和 反射传递作为任务本身的下一条消息发出 - 相同的提示,相同 工具 - 因此它们是从缓存中得到答复,而不是预填充整个记录 再次(当没有得到答案时,他们会回到自己的提示)。 - 项目之外的陈述。 代理为自己编写的内容 - 目标、事实、
课程、即时历史记录、会议 — 住在
~/.config/ipsupport-code/state/<workspace>-<hash>/, 从未在工作区中,因此列出该项目的模型无法找到并重播其 自己的状态。 您写入的文件(.agent/config.json、system.md、judge.md、compact.md、instructions.md)留在项目中。较旧的安装已移动 首次启动时,超出.agent/一次。 - 弹性。 对瞬态 5xx/network 错误进行指数回退重试, 中止静默停滞流的空闲看门狗和卡环防护。
- 项目说明。 读取
CLAUDE.md/AGENTS.md/.agent/instructions.md从工作区进入系统提示符。 - Trace = dataset. 每一步(目标、工具调用、观察、最终、课程)都是
作为 JSONL 附加到
~/.config/ipsupport-code/traces.jsonl。 - 使用分类账。 代币支出每天按 provider/model 记录
~/.config/ipsupport-code/usage.json并在运行中累积;/usage显示今天/7天/30天/所有时间的汇总,包括clear、purge <days>、 和retain <days>保留窗口。
配置
设置合并来自两个 JSON 文件的安全默认值:
~/.config/ipsupport-code/config.json— 机器级:llm连接 (服务器 URL、型号、密钥、context_window)。由首次运行设置编写。<workspace>/.agent/config.json— 每个项目:权限策略(请参阅.agent/config.example.json)。赢得用户 EXCEPT、llm连接和providers的所有内容的文件 — 工作区 是一个您可能不完全信任的结帐,因此它可以收紧或放松 代理可以,但它无法重定向您的模型端点或添加提供程序 预设,而您真正的 API 密钥仍然会发送到它指向的任何地方。
使用 config 子命令从脚本编辑任一文件 — 无交互
所需会话:
ipsupport-code config set update_check false # any key, dotted paths for nested
ipsupport-code config set goal_max_returns 8 # JSON values keep their type
ipsupport-code config get llm.model # print the effective value
ipsupport-code config unset channel # back to the default
ipsupport-code config list # effective config, one key per line
ipsupport-code config --local set run.default allow # write the workspace file
解析为 JSON 的值保持其类型(false、8、["x"]);还有什么
是一个文字字符串。 set 默认写入全局用户文件(--local
目标为 <workspace>/.agent/config.json);错误的类型或拼写错误的键是
被拒绝而不是被拯救。 get/list 显示有效的合并值 — 一个键
处于零默认值(e.g。offline 关闭时)不会打印任何内容,例如
git config --get。工作区文件总是胜过全局文件——e.g。
交互式 /config 面板的 file/run 权限行保留到
workspace 文件(它们是每个项目的关注点),因此设置相同的密钥
之后在全球范围内没有明显的影响; set/unset 在 stderr 上发出警告
那会咬你的。
run.timeout_seconds 限制 shell 命令可以运行的时间(默认 60 秒);提高
它适用于缓慢的 builds/test 套件,或者让模型传递更大的每次调用 timeout。
跨任务内存:一旦上下文窗口填满 compact_threshold
(默认0.75),会议被折叠成LLM-书面回顾以释放
净空 — memory raw 完全关闭该功能,逐字保持轮流,
一旦有太多,就直接删除最旧的(没有释义)
(500 条消息 — 足够高,这是一个罕见的支持,而不是例行公事):ipsupport-code 配置设置内存raw / config设置compact_threshold 0.85,或toggle/cycle
两者均来自 /config 面板。无论哪种方式——LLM 回顾或
plain drop — 更改提示符的前面,这会破坏本地服务器的
KV-cache 的重用(仅匹配相同的前缀)就像
另一个; raw 存在高上限,因此成本保持稀有而不是触及
一旦会话运行时间较长,每轮都会发生。
run 和 file 的权限解析每个操作:拒绝 glob 块、
允许 glob 运行而不询问,否则默认 (ask/allow/deny)
适用。运行命令拒绝命令中 任何地方 的 glob 匹配(因此 rm -rf*
捕获 cd x && rm -rf /);文件 glob 具有路径感知能力(**、*.go)并且受到限制
至 jail。保护拒绝层始终联合在一起 - 您的配置添加到
它,它无法删除它。
记录:IPS_LOG=调试|信息|警告|error (default warn)。在 TUI 中,它写入
~/.config/ipsupport-code/agent.log(因此原始日志行不会溢出
屏幕) — tail -f 观看 retries/warnings 直播;一条 piped/one-shot 运行日志
到标准错误。
布局
cmd/agent CLI, plain REPL, the Bubble Tea TUI, external CLI-agent runner
internal/llm OpenAI-compatible client (streaming, retry, context detection)
internal/agent the reason → act → observe loop (+ plan mode, goal judge)
internal/tool fat tools: file, run, git, web, calc, agent, mcp, skill, help, history
internal/skill downloadable, toggleable instruction packs
internal/policy workspace permission engine (+ jail, deny floor)
internal/knowledge persistent pitfall store
internal/reflect post-task lesson + project-fact distillation
internal/trace JSONL decision trace (the dataset)
internal/config config load/merge
internal/mcp MCP client (stdio + HTTP)
internal/usage token/cost ledger (powers /usage and /budget)
internal/selfupdate checksum-verified in-place self-update
internal/risk shadow-mode risk scorer (pure-Go inference, embedded weights)
internal/sandbox opt-in OS sandbox for `run` (Seatbelt on macOS, Landlock on Linux)
internal/procgroup kill a command's whole process tree on cancel/timeout
internal/filelock cross-process lock for files shared between running sessions
internal/e2e end-to-end tests: real loop, tools and policy against a fake server
internal/textutil · internal/atomicfile shared helpers (clipping, atomic writes)
-
10.03
ipsupport-code:AI Agent 工具实践指南
-
10.03
project-docs-protocol:AI Agent 工具实践指南
-
10.03
lite-research-agents:AI Agent 工具实践指南
-
10.03
jenkins+gitlab+nginx部署前端应用实现方式实用指南
-
10.03
ai-flavor-less:实践指南
-
10.03
chrona:实践指南
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏