展示HN:Modo – 我构建了一个开源的Kiro、Cursor和Windsurf的替代品。
Show HN: Modo – I built an open-source alternative to Kiro, Cursor, and Windsurf

原始链接: https://github.com/mohshomis/modo

## Modo:一个开源、规划优先的AI IDE Modo是一个基于VS Code的Void编辑器构建的桌面IDE,旨在通过优先考虑*规划*而非直接执行来增强AI辅助编码。与典型的“提示-生成代码”工具不同,Modo通过明确的工作流程来构建开发过程:**提示 → 需求 → 设计 → 任务 → 代码。** 用户在`.modo/specs`中定义功能或错误修复,为需求、设计和实现任务创建markdown文件。然后,AI代理填充这些内容,允许审查和迭代完善。任务是持久的,并且可以从IDE中一键执行。 主要功能包括通过markdown规则进行项目指导,通过JSON钩子实现自动化操作,以及为复杂任务并行生成代理。它支持多种LLM,并与OpenAPI规范等工具集成。一个切换开关允许在自主“自动驾驶”模式和监督模式之间切换。 Modo是完全开源的(MIT许可证),并且高度可定制,提供专用主题、自定义命令以及通过可安装的“能力”进行扩展。虽然目前由社区维护,但它为寻求更结构化的AI驱动编码方式的开发者提供了强大的基础。 [https://github.com/modoeditor/modo](https://github.com/modoeditor/modo)

Hacker News 新闻 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Show HN: Modo – 我构建了一个开源的 Kiro、Cursor 和 Windsurf 的替代品 (github.com/mohshomis) 8 分,由 mohshomis 2 小时前发布 | 隐藏 | 过去 | 收藏 | 1 条评论 帮助 esafak 18 分钟前 [–] 你学到了什么?回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文

Modo

The open-source AI IDE that plans before it codes.

MIT License · Quick Start · What Modo Adds · Contributing

Modo in action


I wanted a small feature in an AI coding tool. Couldn't find a way to suggest it. So I asked myself: how hard is it to actually build something like Kiro, Cursor, or Windsurf?

Turns out — not as hard as you'd think. Starting from the Void editor (itself a fork of VS Code), I got to roughly 60–70% of what those tools offer in a short stretch of building. It was genuinely fun.

This is Modo. A standalone desktop IDE where prompts become structured plans before they become code. Open source, MIT licensed, yours to hack on.

Everything below was built on top of Void's existing AI chat, inline edit (Cmd+K), autocomplete, multi-provider LLM support, tool use, and MCP integration. Here's what's new:

Most AI tools go prompt → code. Modo goes prompt → requirements → design → tasks → code.

A spec lives in .modo/specs/<name>/ as three markdown files:

.modo/specs/auth-flow/
├── requirements.md     # user stories, acceptance criteria
├── design.md           # architecture, components, data models
└── tasks.md            # checklist of implementation steps

Create one with Cmd+Shift+S or by picking Spec mode in the session picker. Choose feature or bugfix, then requirements-first or design-first workflow. The agent fills each document, you review, then it executes tasks one by one — marking them done as it goes.

Tasks persist to disk. Close the IDE, come back, pick up where you left off.

Open any tasks.md and each pending task gets a clickable "▶ Run Task" button inline. A "Run All Pending Tasks" button appears at the top. Running tasks show a spinner, completed ones show a checkmark. The agent marks - [ ]- [~]- [x] as it works.

Markdown documents in .modo/steering/ that inject project rules into every AI interaction — no need to repeat yourself.

---
inclusion: always
---
# Project Rules
- Use TypeScript strict mode
- All endpoints need input validation

Three inclusion modes:

  • always — every interaction
  • fileMatch — when the active file matches a glob pattern
  • manual — referenced via / commands in chat

Supports #[[file:path]] references to link OpenAPI specs, GraphQL schemas, or any project doc.

JSON configs in .modo/hooks/ that automate actions around the agent lifecycle.

{
  "name": "Lint on Save",
  "version": "1.0.0",
  "when": { "type": "fileEdited", "patterns": ["**/*.ts"] },
  "then": { "type": "runCommand", "command": "npx eslint --fix ${filePath}" }
}

10 event types: fileEdited, fileCreated, fileDeleted, promptSubmit, agentStop, preToolUse, postToolUse, preTaskExecution, postTaskExecution, userTriggered. Two action types: askAgent or runCommand. Pre-tool hooks can deny execution. Circular dependency detection built in.

Autopilot / Supervised Toggle

A status bar pill that switches between Autopilot (agent acts autonomously) and Supervised (agent pauses for approval). Wired directly to auto-approve settings for edits, terminal commands, and MCP tools.

Multiple chat sessions as tabs. Each has its own thread, context, and history. Open new ones, close old ones, or run them all at once. A searchable history panel lets you find past conversations.

Start a session in Vibe mode for free-form exploration, or Spec mode for structured development. In Spec mode, your prompt triggers the full requirements → design → tasks workflow. The active spec's content is automatically injected into the LLM system prompt.

Spawn parallel agents for independent subtasks. Each gets its own thread and tool access. Track status, cancel running tasks, or clear completed ones.

Installable knowledge packages that bundle documentation, steering files, and MCP configs. Built-in powers for TypeScript, React, Testing, API Design, and Docker. Activate based on keywords in your prompts. Install custom powers from URLs.

A sidebar with collapsible sections for Specs (with progress bars and task counts), Agent Hooks (showing event → action flow), Steering (showing inclusion mode), and Powers.

Type / in chat to access manual hooks, steering files, and built-in commands: create spec, run tasks, export conversation, initialize workspace.

Steering files and the active spec are automatically prepended to every LLM interaction. The agent follows your project rules and knows what it's building without being told each time.

A purpose-built "Modo Dark" theme with teal accents, tuned syntax highlighting, and terminal colors.

A Modo avatar appears before each response with randomized expressions during streaming and a calm default after completion.

Custom app icon, window title, watermark logo, product identity, URL protocol (modo://), and data directories (.modo-editor/). All Void references in the UI replaced with Modo equivalents.

Modo: Initialize Workspace creates the full .modo/ directory structure with default steering files and config templates.

Export any conversation as Markdown to clipboard from the command palette.

Modo wouldn't exist without these projects:

Project What it provides License
Void AI chat, inline edit, autocomplete, multi-provider LLM, tool use, MCP, apply engine MIT
VS Code Editor core, extension system, terminal, file system, everything underneath MIT
Roo Code Some patterns referenced during development Apache 2.0

Void itself provides: multi-provider support (Anthropic, OpenAI, Gemini, Ollama, Mistral, Groq, OpenRouter), chat sidebar, Cmd+K inline editing, autocomplete, fast/slow apply, tool calling, MCP integration, SCM integration, and the settings system.

Modo adds everything in the What Modo Adds section on top of that foundation.

git clone https://github.com/modoeditor/modo.git
cd modo
npm install          # requires Node 20
npm run buildreact   # compile React UI
npm run watch        # compile TypeScript (keep running in a terminal)
./scripts/code.sh    # launch Modo

On first launch, onboarding walks you through connecting a model provider. Gemini free tier is the fastest way to start.

.modo/                          # per-project config (created by "Initialize Workspace")
├── steering/                   # markdown rules injected into AI context
├── specs/                      # structured feature/bugfix workflows
├── hooks/                      # JSON event → action automation
└── settings/                   # MCP and other configs

src/vs/workbench/contrib/void/
├── common/
│   ├── modoSpecService.ts      # spec CRUD, task parsing, context building
│   ├── modoSteeringService.ts  # steering file loading, front-matter parsing, context assembly
│   ├── modoHookService.ts      # hook loading, validation, event matching, firing
│   ├── modoPowersService.ts    # powers registry, activation, keyword matching
│   └── modoSubagentService.ts  # parallel agent spawning and lifecycle
├── browser/
│   ├── modoExplorerPane.ts     # sidebar views for specs, hooks, steering, powers
│   ├── modoSpecActions.ts      # create spec, run tasks, open files commands
│   ├── modoTaskCodeLens.ts     # inline Run Task / Done buttons in tasks.md
│   ├── modoSlashCommands.ts    # / command picker, export, session management
│   ├── modoStatusBar.ts        # autopilot toggle, active spec indicator
│   ├── modoHookWiring.ts       # file change events → hook system
│   └── react/src/
│       ├── sidebar-tsx/         # session tabs, history, vibe/spec mode, autopilot switch
│       ├── modo-spec-panel/     # spec management React UI
│       └── modo-hooks-panel/    # hook management React UI
└── extensions/
    └── modo-theme/              # custom dark theme with teal accents
Command Shortcut Description
Create Spec Cmd+Shift+S New spec (feature/bugfix, req-first/design-first)
Run Next Task Execute next pending spec task
Run All Tasks Execute all remaining tasks
Open Spec Files Open requirements, design, tasks in editor
Inject Spec Context Load spec context into chat
Reload Spec Re-read spec files from disk
Initialize Workspace Create .modo/ directory structure
Slash Commands Open / command picker
Export Conversation Copy chat as Markdown
Toggle Autopilot Switch Autopilot / Supervised
Open Chat Cmd+L Focus chat panel
Inline Edit Cmd+K Edit code inline with AI

This project is community-maintained. I built it as a learning experiment — I'm not actively maintaining it on a schedule. If you want something fixed or added, the best path is to fork it and submit a PR.

npm run watch        # TypeScript compilation (keep running)
npm run buildreact   # React UI (run after changing .tsx files)
./scripts/code.sh    # Launch the IDE

Core services: src/vs/workbench/contrib/void/common/. Browser-side logic: browser/. React components: browser/react/src/.

Serious contributors who want commit access — open an issue. See CONTRIBUTING.md for details.

PRs welcome. MIT licensed.

MIT

联系我们 contact @ memedata.com