mini-swe-agent 本地环境 LocalEnvironment 实战指南:在本机直接执行 Agent 命令的实现、配置与任务提交流程
人工智能大模型AI Agent代码智能体【免费下载链接】mini-swe-agentThe 100 line AI agent that solves GitHub issues or helps you in your command line. Radically simple, no huge configs, no giant monorepo—but scores 74% on SWE-bench verified!项目地址https://gitcode.com/gh_mirrors/mi/mini-swe-agent点击查看免费下载LocalEnvironment是 mini-swe-agent 中负责在本机直接执行 bash 命令的执行环境实现也是mini命令行工具的默认环境。本文以 docs/reference/environments/local.md 为骨架结合 核心实现 与 测试用例完整讲解其配置参数、执行语义、超时与进程组清理、环境变量合并、任务提交机制以及如何在 CLI 与 YAML 配置中启用它。读完本文你将能独立配置和使用本地环境运行 agent并理解其隔离边界与适用场景。一、LocalEnvironment 在 mini-swe-agent 中的定位在 mini-swe-agent 的架构中环境Environment是实际执行 LM/agent 生成的代码的载体。项目通过 环境注册表 统一管理多种后端local直接在宿主机器上以subprocess执行命令无隔离docker通过docker exec在容器内执行singularity通过 Singularity/Apptainer 容器执行适合无 Docker 的 HPC 环境swerex_docker/swerex_modal通过 SWE-ReX 在 Docker 或 Modal 云端执行bubblewrapLinux only与contree轻量级沙箱。根据 环境类概述文档当你运行miniCLI 时默认就会使用local环境。这一点在 mini CLI 源码 中得到印证env get_environment(config.get(environment, {}), default_typelocal)也就是说只要配置中没有显式指定environment_classget_environment就会回退到LocalEnvironment。这也是为什么本地环境是所有用户接触到的第一个执行后端——它开箱即用直接工作在你当前的 Python 环境中。二、配置类 LocalEnvironmentConfig三个核心参数LocalEnvironmentConfig是一个基于 pydantic 的BaseModel位于 src/minisweagent/environments/local.py#L13-L16class LocalEnvironmentConfig(BaseModel): cwd: str env: dict[str, str] {} timeout: int 30参数类型默认值含义cwdstr空字符串命令执行的工作目录为空时回退到os.getcwd()即当前进程所在目录envdict[str, str]{}附加的环境变量会与进程现有环境变量合并timeoutint30秒单条命令的执行超时时间从 测试用例 可以看到默认值的严格约定cwd 、env {}、timeout 30。这三个参数都可以直接作为LocalEnvironment(...)的关键字参数传入例如from minisweagent.environments.local import LocalEnvironment env LocalEnvironment(cwd/path/to/repo, env{MY_VAR: value}, timeout60)在 YAML 配置文件中对应写法为可参考 default.yaml 中已有的environment.env段落environment: env: PAGER: cat MANPAGER: cat LESS: -R PIP_PROGRESS_BAR: off TQDM_DISABLE: 1 cwd: /path/to/working/dir timeout: 30配置的实际语义cwd决定了每条命令在哪个目录下运行env中声明的变量会覆盖同名的主机环境变量见下文环境变量合并一节timeout是防止 agent 执行失控命令的关键防线。三、execute 接口动作字典与结构化返回LocalEnvironment对外暴露的核心方法是execute(action, cwd, *, timeoutNone)见 local.py#L24-L43。它接收一个动作字典返回一个结构化的结果字典。3.1 输入动作字典result env.execute({command: ls -la})动作字典只需一个键command值为要在本地 shell 中执行的完整命令字符串。execute内部通过action.get(command, )取出命令。这与 agent 提示词中约定的 bash 动作格式完全对应——在 默认配置的 instance_template 中agent 被要求输出mswea_bash_command代码块其内容最终会被解析为该动作字典。3.2 输出结构化结果字典正常执行时返回{ output: result.stdout, # 合并了 stdout/stderr 的文本输出 returncode: result.returncode, # 进程退出码 exception_info: , # 空字符串表示无异常 }执行异常时如命令不存在、超时返回码固定为-1并额外携带诊断信息{ output: raw_output, returncode: -1, exception_info: An error occurred while executing the command: ..., extra: {exception_type: type(e).__name__, exception: str(e)}, }例如超时场景下exception_type会是TimeoutExpiredexception_info中会包含timed out字样——这一点由 test_local_environment_timeout 直接验证。3.3 执行目录的优先级execute方法还接受独立的cwd参数优先级从高到低为execute(action, cwd...)调用时显式传入的cwd配置中的self.config.cwdos.getcwd()。对应源码local.py#L27cwd cwd or self.config.cwd or os.getcwd()test_local_environment_cwd_parameter_override 验证了调用参数能覆盖配置值test_local_environment_default_cwd 则验证了完全未指定时回退到当前进程目录。四、底层执行器 _runshell 执行、超时与进程组清理LocalEnvironment.execute最终调用模块级函数_run(command, cwd, env, timeout)local.py#L72-L91。这个函数是理解本地环境行为的关键def _run(command: str, cwd: str, env: dict[str, str], timeout: int) - subprocess.CompletedProcess[str]: process subprocess.Popen( command, shellTrue, # 通过系统 shell 执行支持管道、重定向、命令替换 textTrue, cwdcwd, envenv, encodingutf-8, errorsreplace, # 无法解码的字节用替换符处理避免崩溃 stdoutsubprocess.PIPE, stderrsubprocess.STDOUT, # stderr 合并进 stdout start_new_sessionos.name posix, # POSIX 下开启新会话新进程组 ) try: stdout, _ process.communicate(timeouttimeout) except subprocess.TimeoutExpired: os.killpg(process.pid, signal.SIGKILL) if os.name posix else process.kill() stdout, _ process.communicate() raise subprocess.TimeoutExpired(command, timeout, outputstdout) return subprocess.CompletedProcess(command, process.returncode, stdoutstdout)值得注意的实现细节shellTrue命令由系统 shell 执行因此管道|、重定向、命令替换$(...)等 shell 特性全部可用。test_local_environment_shell_features 验证了echo hello world | grep world和echo $(echo nested)都能正确工作。stderr 并入 stdoutstderrsubprocess.STDOUT所以 agent 看到的是一个统一的输出流。test_local_environment_stderr_capture 验证了echo error message 2的内容出现在output中。UTF-8 容错encodingutf-8, errorsreplace保证非 UTF-8 字节不会让整个执行崩溃而是以替换符呈现。超时杀进程组这是最核心的工程细节。POSIX 下用start_new_sessionTrue让命令在新会话新进程组中运行一旦超时用os.killpg(process.pid, signal.SIGKILL)杀死整个进程组确保 shell 派生的子进程如后台任务不会被遗留下来成为孤儿进程。test_local_environment_timeout_kills_child_process 专门验证了这一点超时后由命令派生的 Python 子进程确实已退出。该测试在 Windows 上被跳过skipif(os.name nt)因为进程组是 POSIX 专属特性——Windows 上则退化为process.kill()。五、环境变量合并覆盖语义与可移植性execute在调用_run时构造的环境变量为os.environ | self.config.env # 见 local.py#L29这是 Python 3.9 的字典合并语法语义清晰以进程现有环境变量os.environ为基础用配置中的env覆盖同名键。测试从三个角度验证了这一行为注入新变量LocalEnvironment(env{TEST_VAR: test_value})后命令echo $TEST_VAR能读到该值test_local_environment_set_env_variables保留现有变量宿主已有的EXISTING_VAR依然可见与新变量共存test_local_environment_existing_env_variables配置值优先当宿主存在同名CONFLICT_VAR时配置值override_value胜出test_local_environment_env_variable_override。这是 mini-swe-agent 在 default.yaml 中设置PAGER: cat、TQDM_DISABLE: 1等变量的基础——通过覆盖环境变量可以让 agent 在本地执行时避免分页器挂起、关闭进度条噪音等干扰。六、任务提交机制COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT本地环境内置了一个完成即提交的约定实现于_check_finishedlocal.py#L45-L56def _check_finished(self, output: dict): lines output.get(output, ).lstrip().splitlines(keependsTrue) if lines and lines[0].strip() COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT and output[returncode] 0: submission .join(lines[1:]) raise Submitted({...})当命令输出首行恰为COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT且退出码为 0 时LocalEnvironment会抛出Submitted异常定义于 exceptions.py继承自InterruptAgentFlow并把首行之后的全部内容作为最终提交结果。这正是 agent 提示词中用echo COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT结束任务这一约定的底层实现——见 mini.yaml 和 default.yaml 中的提示词说明。该机制让 agent 可以自我了结一旦给出该命令运行框架捕获Submitted异常即结束本轮交互。七、模板变量与序列化get_template_vars 与 serialize除了执行命令LocalEnvironment还实现了环境协议要求的两个辅助方法def get_template_vars(self, **kwargs) - dict[str, Any]: return recursive_merge(self.config.model_dump(), platform.uname()._asdict(), os.environ, kwargs) def serialize(self) - dict: return { info: { config: { environment: self.config.model_dump(modejson), environment_type: f{self.__class__.__module__}.{self.__class__.__name__}, } } }get_template_varslocal.py#L58-L59把配置、平台信息platform.uname()提供 system/release/version/machine 等、宿主环境变量和调用方 kwargs 递归合并供提示词模板渲染。这就是为什么提示词中能出现system_information{{system}} {{release}} {{version}} {{machine}}/system_information见 mini.yaml——这些字段正是来自platform.uname()。合并逻辑由 serialize.py 的 recursive_merge 实现后面的字典优先嵌套字典递归合并。serializelocal.py#L61-L69把环境配置JSON 可序列化形式与完整类路径minisweagent.environments.local.LocalEnvironment写入轨迹信息用于保存运行记录。八、如何在 CLI 与 YAML 中启用本地环境8.1 通过 mini CLImini命令默认就是本地环境因此最简用法无需任何环境参数mini -t 请修复当前仓库中的某个 bug若想显式指定例如在多个环境间切换使用--environment-class选项见 mini.py#L59# 通过注册表别名指定 mini --environment-class local -t 任务描述 # 或通过完整类路径指定 mini --environment-class minisweagent.environments.local.LocalEnvironment -t 任务描述get_environment_classenvironments/init.py#L19-L27会先查注册表别名查不到则把字符串当作module.ClassName动态导入。8.2 通过 YAML 配置在 agent 配置文件可参考 yaml 配置文档中设置environment: environment_class: local cwd: /path/to/repo env: MY_FLAG: 1 timeout: 60运行时通过-c指定配置并叠加命令行参数覆盖默认配置mini -c mini.yaml -c environment.timeout120 -t 任务描述注意 mini.py 的提示一旦使用-c指定配置默认配置不再生效需要显式带上mini.yaml等基础配置。九、测试验证行为即契约本地环境测试 几乎逐条锁定了本文描述的行为可作为使用时的行为契约参考测试用例验证的行为test_local_environment_config_defaults三个配置参数的默认值test_local_environment_basic_executionecho命令正常执行、输出捕获test_local_environment_set_env_variables/existing_env_variables/override环境变量注入、保留、覆盖test_local_environment_custom_cwd/cwd_parameter_override/default_cwd目录优先级test_local_environment_command_failure/return_codes非零退出码被如实记录exit 1→1、exit 42→42test_local_environment_nonexistent_command命令不存在时输出中带诊断信息test_local_environment_stderr_capturestderr 并入 outputtest_local_environment_timeout/timeout_kills_child_process超时返回returncode-1且子进程被清理test_local_environment_multiline_output/file_operations/shell_features多行输出、文件操作、管道与命令替换十、适用场景与注意事项适用场景在开发者本机快速调试 agent 行为、交互式使用mini、在自有仓库上跑自定义任务、以及在 Python 代码中直接调用LocalEnvironment做轻量验证。它直接工作在当前 Python 环境无需 Docker 等基础设施。无隔离重要限制本地环境直接在宿主机执行命令没有隔离机制。agent 的任何命令都以你的用户权限运行可能修改真实文件、真实环境。文档 环境类概述 明确建议进行 SWE-bench 等评估时应使用隔离环境如 docker、singularity以保障宿主安全与结果可复现。状态不持久由于每条命令都在新的subprocess.Popen中执行目录切换和临时环境变量不会跨命令保留。为此 agent 提示词mini.yaml明确要求用MY_ENV_VARMY_VALUE cd /path ...前缀或把状态写入文件再加载。超时保护默认 30 秒超时是防失控的第一道闸门配合进程组 SIGKILL 确保不会遗留子进程但对需要长时间运行的命令应显式调高timeout。总而言之LocalEnvironment用不到百行代码实现了本机直连 shell的执行后端兼顾了 shell 特性、结构化输出、超时清理与任务提交约定是理解 mini-swe-agent 全部环境类docker、singularity、SWE-ReX 等的最佳起点——其余环境类都遵循同一套execute / get_template_vars / serialize协议只是把执行从宿主机搬到了各自的后端。赞分享人工智能大模型AI Agent代码智能体【免费下载链接】mini-swe-agentThe 100 line AI agent that solves GitHub issues or helps you in your command line. Radically simple, no huge configs, no giant monorepo—but scores 74% on SWE-bench verified!项目地址https://gitcode.com/gh_mirrors/mi/mini-swe-agent点击查看免费下载相关推荐LifeOS 中的 Remotion 技能用 React 代码驱动可复现的程序化视频创作LifeOS 中的 Remotion 技能用 React 代码驱动可复现的程序化视频创作 本指南以 LifeOS 开源仓库中的 Remotion 技能定义 h人工智能大模型AI Agent代码智能体3个关键策略让您的媒体处理效率提升300%Waifu2x-Extension-GUI批量处理全攻略3个关键策略让您的媒体处理效率提升300%Waifu2x Extension GUI批量处理全攻略 作为一名视频创作者或设计师您是否曾为处理数百张图片或数十人工智能大模型AI Agent代码智能体OpCore-Simplify 指南一条菜单走通的 OpenCore EFI 自动生成工具OpCore Simplify 指南一条菜单走通的 OpenCore EFI 自动生成工具 OpCore Simplify 是一个黑苹果的 OpenCore开发工具CLI上一篇anarlog 桌面端 SQLite 响应式 UI 实战useDrizzleLiveQuery 六大稳定模式与反模式清单下一篇Apache Hadoop分布式锁性能优化减少Zookeeper交互次数创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

使用 metrics-servlet 的 InstrumentedFilter 为 Web 应用注入请求级指标监控

使用 metrics-servlet 的 InstrumentedFilter 为 Web 应用注入请求级指标监控

可观测性后端 【免费下载链接】metrics :chart_with_upwards_trend: Capturing JVM- and application-level metrics. So you know whats going on. 项目地址: https://gitcode.com/gh_mirrors/met/metrics 点击查看 免费下载 本文以 Dropwizard Metrics 项目中的 …

2026/9/27 7:48:09 阅读更多 →
微创医疗房租风波:用PSS⁵关系力看清大客户背后的关键人物

微创医疗房租风波:用PSS⁵关系力看清大客户背后的关键人物

公告里那句话值得每个大客户销售抄下来:需要更多时间审阅本集团与物业的业主及其联系人之间的关系。连上市公司自己都要花时间搞清楚关键人物关系,何况隔着层层组织的销售。 一、事件本身:一份把关系写进公告的调查 东方财富报道,…

2026/9/27 7:47:08 阅读更多 →
SQL批量删除用户表:先清外键约束再删表的完整脚本与验证

SQL批量删除用户表:先清外键约束再删表的完整脚本与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 7:47:08 阅读更多 →

最新新闻

从CANoe到TSMaster:车载总线测试工具链迁移实战指南

从CANoe到TSMaster:车载总线测试工具链迁移实战指南

搞车载总线测试的工程师,电脑里大概率都装着一套CANoe。我最早接触CANoe是刚入行那会儿,跟着前辈在项目里做网络测试,从报文发送、DBC解析到UDS诊断,基本全是靠Vector这套工具撑起来的。说实话,CANoe确实是这个行业的标…

2026/9/28 9:43:09 阅读更多 →
从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地

从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地

1. 日榜的"热度"到底是怎么算出来的先别急着收藏仓库。每天打开 GitHub 的 Trending 页面,你看到的是过去 24 小时内 Star 增量最高的仓库,周榜和月榜则分别看一周、一个月内的增量。官方没有公开完整排序算法,但用久了会发现&…

2026/9/28 9:43:09 阅读更多 →
【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架

【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/28 9:43:09 阅读更多 →
OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

模型评测人工智能大模型AI 评测 【免费下载链接】opencompass OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, scie…

2026/9/28 9:43:09 阅读更多 →
快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 网站做好了没人访问,这是很多老板最头疼的事。你花大价钱做的官网,设计精美、功能齐全,但打开一看,流量为零,咨询为零。这时候你才意识到,问题不在“做没做”,而在“怎么快速做出来并推向市场”。面…

2026/9/28 9:43:09 阅读更多 →
YOLOv5车辆检测实战:从car_dataset-1到树莓派部署

YOLOv5车辆检测实战:从car_dataset-1到树莓派部署

简介:本资源是一个专为车辆目标检测任务构建的高质量标注数据集,适用于YOLOv5、YOLOv3及SSD等主流检测模型的训练与验证,面向计算机视觉初学者、算法工程师及智能交通项目开发者,有效解决夜间、白天及俯视视角下车辆识别的数据匮乏…

2026/9/28 9:42:00 阅读更多 →

日新闻

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?…

2026/9/28 0:00:34 阅读更多 →
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例…

2026/9/28 0:00:34 阅读更多 →
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。…

2026/9/28 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/28 5:40:26 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/28 9:47:26 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/28 8:07:01 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/27 9:12:14 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/28 3:51:11 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →