经 AI Skill Hub 精选评估,开源AI工作流 获评「强烈推荐」。这款Agent工作流在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 8.0 分,适合有一定技术背景的用户使用。
开源AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
开源AI工作流 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 方式一:cargo install(推荐) cargo install opencrabs # 方式二:从源码编译 git clone https://github.com/adolfousier/opencrabs cd opencrabs cargo build --release # 二进制在 ./target/release/opencrabs
# 查看帮助 opencrabs --help # 基本运行 opencrabs [options] <input> # 详细使用说明请查阅文档 # https://github.com/adolfousier/opencrabs
# opencrabs 配置说明 # 查看配置选项 opencrabs --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export OPENCRABS_CONFIG="/path/to/config.yml"
<a href="https://trendshift.io/repositories/22468?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-22468" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/22468/daily?language=Rust" alt="adolfousier/opencrabs — Trendshift #3 Repository Of The Day, Rust" width="250" height="55"/></a> <a href="https://trendshift.io/repositories/22468?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-22468" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/22468/weekly?language=Rust" alt="adolfousier/opencrabs — Trendshift #20 Repository Of The Week, Rust" width="250" height="55"/></a>
| Feature | Description |
|---|
cargo bench --bench memory, in-memory SQLite: FTS search 2.57 ms at 50 docs, vector search 1.02 ms, hybrid RRF fusion 3.49 ms, indexing 214 µs per file. Full tables in the Development section.
---
https://github.com/user-attachments/assets/7f45c5f8-acdf-48d5-b6a4-0e4811a9ee23
[image.vision] enabled = true model = "gemini-3.1-flash-image-preview" provider = "openrouter" # Optional: force vision to use a specific provider (bypasses enabled gate)
toml
[image] api_key = "YOUR_GEMINI_KEY"
> **Gotcha:** `[image.vision] api_key = "..."` in `config.toml` is silently ignored — the field carries `#[serde(skip)]` for security. Use `keys.toml` `[image]` section, or `[providers.image.gemini]` in config.toml + the key in keys.toml.
> **Pinning vision to a provider:** set `[providers.fallback] vision = ["name"]` to try that provider first for `analyze_image` and `analyze_video`, regardless of its `enabled` flag (vision needs only `vision_model` plus a key). Names follow the same rule as every other provider key: the bare section name, so `[providers.custom.myprovider]` is `"myprovider"`. An entry that does not resolve is skipped with a warning and resolution falls through to the normal provider scan. There is no `[image.vision] provider` key; that section configures the Gemini backend only.
**Diagnostic:** when vision is unavailable for any reason, `is_vision_available` logs the exact cause at INFO level in `~/.opencrabs/logs/opencrabs.YYYY-MM-DD` — search for `target=vision`.
#### Context window & auto-compaction (effectively unlimited memory)
OpenCrabs never makes you start a fresh session to "clear context." Instead it auto-compacts: as a session's history approaches the model's context window, it summarizes the older turns in place and keeps going. Two tiers:
- **65% — soft trigger:** spawns a background LLM compaction that summarizes history back down to ~65% of the budget. Non-blocking — the conversation keeps streaming.
- **90% — hard trigger:** synchronous compaction before the next request, so a single turn can never overflow the window.
The triggers are **percentages of the effective window**, so they scale to whatever you set: at the 200k default compaction kicks in around 130k; at a 1M window, around 650k.
It's **transparent** — most of the time you won't notice it happen at all. Occasionally you'll catch a brief inline notice while it summarizes (the agent tends to mention it dynamically, in its own voice), then the conversation carries on with the older turns condensed. You never have to start over or manually clear anything.
**The budget defaults to 200,000 tokens** — the battle-tested sweet spot: large enough for long sessions, small enough to keep each request fast and cheap. Override it **per provider** in `config.toml`:
toml [providers.xiaomi] context_window = 1000000 # raise the budget; compaction still triggers at 65% / 90% of it
[providers.anthropic] context_window = 1000000 # native providers too — Anthropic, Gemini, and the CLI providers
This override works for **every provider** — OpenAI-compatible (custom, xiaomi, qwen, openrouter, minimax, …) and the native Anthropic, Gemini, and CLI providers. A provider with no override inherits the 200k default.
> **Sizing guidance.** 200k is the battle-tested sweet spot for essentially **every cloud model**. Going bigger has two real downsides — **cost** and **context loss**:
>
> - **Cost** is the lesser one, and it's softened by caching: OpenCrabs uses prompt caching across every caching-capable provider (currently averaging ~87% efficiency), and a long context is mostly an unchanged prefix served from cache — so a bigger window costs far less than the raw token count suggests.
> - **Context loss** is the one to watch: most models degrade as the window fills — they lose track of the middle and recall less reliably. Only the latest SOTA models hold large context robustly: closed (Opus 4.7 / 4.8, Fable 5, GPT-5.5, Gemini 3.1, …) or open (Qwen 3.7, Kimi K2.7, MiMo V2.5, GLM 5.2, DeepSeek V4, and the newer releases that keep coming from these and other labs). So raise `context_window` mainly on those frontier models; on anything older or smaller, staying near 200k keeps answers sharper.
>
> **Local models want less:** 128k is a good sweet spot — go **lower** if your machine is tight on resources or you start noticing hallucinations/fabrications, and **higher** only if you have more than 32GB of RAM and have tested your model at a larger window. Not sure what fits your setup? Reach out to Adolfo for suggestions/support, or open a [GitHub discussion](https://github.com/adolfousier/opencrabs/discussions).
>
> **Leave auto-compaction on** — it's been battle-tested over months and needs no babysitting. Only run a *manual* compaction (the `/compact` command) if you have a specific, strong reason to summarize early; otherwise let it manage itself.
#### Prompt caching (every caching-capable provider)
A long context is mostly a **stable prefix** — system prompt, brain files, earlier turns rarely change between requests. OpenCrabs caches that prefix wherever the provider supports it, so you pay full price for it once and a fraction on every reuse. Across real usage it's currently averaging **~87% cache efficiency**, which you can watch live in the **Cache Efficiency** card of `/usage`. This is the main reason a larger `context_window` costs far less than its raw token count suggests.
How it turns on depends on the provider:
- **Anthropic** — native prompt caching, on by default: the `cache_control: ephemeral` markers and the caching beta header are added automatically to the system prompt and tools.
- **OpenAI / OpenAI-compatible** — OpenAI caches automatically server-side. **OpenRouter caches by default too** — OpenCrabs enables it automatically, so there's no flag to discover; set `cache_enabled = false` only if you specifically want to opt out.
- **Qwen / Alibaba** — auto-enabled, zero-config (detected by endpoint or a `qwen-` model name; unlocks Alibaba's explicit context cache, ~90% off on hits). See the Qwen note further below.
- **Xiaomi (MiMo)** — caches automatically server-side; nothing to configure.
toml [providers.openrouter] enabled = true
| Feature | Description |
|---|---|
| **Telegram Bot** | Full-featured Telegram bot — owner DMs share TUI session, groups get isolated per-group sessions (keyed by chat ID). Photo/voice support (STT transcribes incoming voice notes; TTS replies as OGG/Opus voice notes via send_voice when input was audio). Allowed user IDs, allowed chat/group IDs, per-group allow lists ([channels.telegram.groups.<id>]), respond_to filter (all/dm_only/mention/auto, global or per-group). Passive group message capture — all messages stored for context even when bot isn't mentioned |
| **Telegram Userbot (experimental)** | Feature-gated, opt-in, receive-only MTProto companion. Experimental: merged from #1209 without a maintainer-side live login yet; expect rough edges. Local QR/code/2FA login; allowlisted text is passively stored under telegram-userbot for explicit retrieval through channel_search. Empty allowed_chats is dry mode. It does not invoke the agent or send/edit/react as the user. |
| **WhatsApp** | Pair by scanning a QR code from the TUI: first-run onboarding, or /onboard:channels then select WhatsApp. The QR is shown in the terminal. You run the bot AS whatever account you scan — your own number (talk via "Message Yourself") or any other number you own, including a WhatsApp Business account, to serve that account's incoming DMs. response_policy (auto/owner_only/allowlist/open) decides who it answers; the paired account's self-chat and bot_owner operator are always allowed. Text + image + voice (STT transcribes incoming voice notes; TTS replies as voice notes when input was audio and tts_enabled=true). Per-phone sessions, session persists across restarts |
| **Discord** | Full Discord bot — text + image + voice. Owner DMs share TUI session, guild channels get isolated per-channel sessions. Allowed user IDs, allowed channel IDs, respond_to filter. Tool calls render as ONE grouped message per turn, collapsed to a summary with an Expand/Collapse button, edited in place as tools run — Slack parity. Reacting to a bot message becomes an agent turn (approval emoji = keep going with a silent react-back, stop emoji = pause and ask), and the agent reacts back via its <<react:EMOJI>> marker. Multiple generated files batch into one gallery-style message. Interactive components: select menus (discord_send with action=select_menu), modal forms (action=modal), component TTL with auto-cleanup, role-based access control, forum thread creation. Full proactive control via discord_send (17 actions): send, reply, react, unreact, edit, delete, pin, unpin, create_thread, send_embed, get_messages, list_channels, add_role, remove_role, kick, ban, send_file. Generated images sent as native Discord file attachments |
| **Slack** | Full Slack bot via Socket Mode — owner DMs share TUI session, channels get isolated per-channel sessions. Text + image + voice (STT transcribes incoming audio attachments; TTS replies upload an OGG/Opus audio file via Slack's external upload flow — renders inline with waveform UI — when input was audio and tts_enabled=true). Allowed user IDs, allowed channel IDs, respond_to filter. Tool calls render as ONE grouped message per turn, collapsed to a summary with an Expand/Collapse button (Block Kit), edited in place as tools run — Telegram parity. Reacting to a bot message becomes an agent turn (approval emoji = keep going with a silent react-back, stop emoji = pause and ask), and the agent reacts back via its <<react:EMOJI>> marker. All file uploads (generated docs/images, TTS audio) use Slack's supported external upload flow (files.getUploadURLExternal + completeUploadExternal) with real MIME types. Full proactive control via slack_send (17 actions): send, reply, react, unreact, edit, delete, pin, unpin, get_messages, get_channel, list_channels, get_user, list_members, kick_user, set_topic, send_blocks, send_file. Generated images sent as native Slack file uploads. Bot token + app token from api.slack.com/apps (Socket Mode required). **Required Bot Token Scopes:** chat:write, channels:history, groups:history, im:history, mpim:history, users:read, files:read, files:write, reactions:write, app_mentions:read |
| **Trello** | Tool-only by default — the AI acts on Trello only when explicitly asked via trello_send. Opt-in polling via poll_interval_secs in config; when enabled, only @bot_username mentions from allowed users trigger a response. Full card management via trello_send (22 actions): add_comment, create_card, move_card, find_cards, list_boards, get_card, get_card_comments, update_card, archive_card, add_member_to_card, remove_member_from_card, add_label_to_card, remove_label_from_card, add_checklist, add_checklist_item, complete_checklist_item, list_lists, get_board_members, search, get_notifications, mark_notifications_read, add_attachment. API Key + Token from trello.com/power-ups/admin, board IDs and member-ID allowlist configurable |
When users send files, images, or documents across any channel, the agent receives the content automatically — no manual forwarding needed. Example: a user uploads a dashboard screenshot to a Trello card with the comment "I'm seeing this error" — the agent fetches the attachment, passes it through the vision pipeline, and responds with full context.
| Channel | Images (in) | Text files (in) | Documents (in) | Audio (in) | Audio reply (out) | Image gen (out) |
|---|---|---|---|---|---|---|
| **Telegram** | ✅ vision pipeline | ✅ extracted inline | ✅ / PDF note | ✅ STT | ✅ TTS via send_voice (OGG/Opus) | ✅ native photo |
| **WhatsApp** | ✅ vision pipeline | ✅ extracted inline | ✅ / PDF note | ✅ STT | ✅ TTS via upload + audio_message (OGG/Opus, ptt=true) | ✅ native image |
| **Discord** | ✅ vision pipeline | ✅ extracted inline | ✅ / PDF note | ✅ STT | ✅ TTS as response.ogg attachment | ✅ file attachment |
| **Slack** | ✅ vision pipeline | ✅ extracted inline | ✅ / PDF note | ✅ STT | ✅ TTS via external upload flow (OGG/Opus, inline waveform) | ✅ file upload |
| **Trello** | ✅ card attachments → vision | ✅ extracted inline | — | — | — | ✅ card attachment + embed |
| **TUI** | ✅ paste path → vision | ✅ paste path → inline | — | ✅ STT | — (terminal has no native audio) | ✅ [IMG: name] display |
Images are passed to the active model's vision pipeline if it supports multimodal input, or routed to the analyze_image tool (Google Gemini vision) otherwise. Text files (.txt, .md, .json, .csv, source code, etc.) are extracted as UTF-8 and included inline up to 8 000 characters — in the TUI simply paste or type the file path.
Videos uploaded on any channel (mp4, m4v, mov, webm, mkv, avi, 3gp, flv) auto-route to analyze_video when image.vision.enabled = true with a Gemini API key. The TUI also detects pasted video paths and labels them Video #N in the attachment indicator. Provider-side limits to keep in mind: Gemini's inline-bytes mode caps at ~20 MB (we use ≤18 MB), and the resumable Files API supports up to 2 GB / ~1 hour videos. Channel-side limits are tighter — Telegram's Bot API hard-caps getFile downloads at 20 MB even though chats accept larger uploads, so videos over that size will get a friendly "compress to under 20 MB and resend" reply. Slack file downloads use the bot token (files:read scope) and inherit the workspace's per-file upload cap. Frame-extraction fallback for non-Gemini providers is not yet wired — without a Gemini key, video uploads return an "unsupported" notice.
When a Telegram reply carries structured Markdown (tables, headings, lists, - [ ] task lists, fenced code, or math), OpenCrabs can render it natively using Telegram's rich messages (Bot API 10.1) — real tables, real section headings, real checkboxes — instead of plain text or basic HTML.
This is on by default via channels.telegram.rich_messages. The one caveat: native rich messages are unreadable on Telegram Web and older clients — those show a "this message is not supported, update Telegram" placeholder, and the rich API has no text fallback. If your audience runs outdated clients, disable it in the onboarding dialog (the "Rich text experience" checkbox) or ask the agent: /onboard:channels telegram richtext off. With the flag off, the universal HTML rendering is used — tables come out as aligned monospace grids, task items as ☐/☑, with proper paragraph spacing, so structured replies look decent on every client.
When enabled, native rich applies to the agent's reply (sent as a fresh rich message so it renders cleanly) and to proactive telegram_send messages. Plain-prose replies are left untouched, so incidental characters like a stray * or # are never reinterpreted. If the rich send fails for any reason, OpenCrabs falls back silently to HTML, so a message is never dropped.
Flow logs (processing-log messages showing tool calls and intermediate text) also use the rich API when enabled, supporting 32K characters instead of HTML's 4K limit. Long tool chains fit in a single message without splitting. If the rich send fails, flow logs fall back to HTML rendering. The block auto-freezes at 30K characters to stay within limits.
The /cowork command creates a team workspace directly from Telegram. It is Telegram-only because it relies on Telegram-specific primitives: group creation via ?startgroup deep links, invite links, QR codes from t.me URLs, and new_chat_members service messages for auto-registration. None of these exist in Discord, Slack, or WhatsApp.
Prerequisite: Telegram must be configured (bot token set via /onboard:channels telegram or manual config.toml setup).
Flow: 1. Owner sends /cowork in DM (owner-only command) → bot replies with an Add to Group inline button 2. Owner taps it → Telegram's native group picker opens. The deep link requests admin rights inline (?startgroup=cowork_<id>&admin=invite_users+delete_messages+pin_messages+manage_chat), so the bot is added already promoted to admin — no manual promotion step. Always keep the bot as admin: an admin bot reads every message regardless of privacy mode and can create invite links. 3. On joining via cowork, the bot sets that group's open = true (persisted) so every member is allowed — existing and new, no per-user step — and posts a short welcome. If it somehow landed without admin, the welcome also nudges the owner to promote it. 4. Members are auto-registered in an open group: joining members are added to the group's own allowlist ([channels.telegram.groups.<chat_id>].allowed_users) on join, and anyone who was already in the group before the bot can send /start to be tracked. This is group-scoped only — members can chat in that group (@mention the bot) but cannot DM it privately unless also on the global allowed_users or bot_owner. Already in the group and want to open it without re-adding the bot? Send /cowork inside the group (owner-only). 5. /start in a DM never auto-registers (DMs are invite-only): the bot just returns the sender's Telegram ID so they can share it with the owner to be added (or add it to config.toml when self-hosting). /start in a non-open group likewise returns the ID and points the user to ask the owner to run /cowork. The owner's own /start in a group is silent — they are already allowed everywhere.
Cross-channel behavior: /cowork works from any surface. In Telegram DMs, the native flow activates directly. From the TUI, Discord, Slack, or WhatsApp, the agent calls the cowork_connect tool which mints a session, registers it with the bot, and returns the t.me deep link plus a scannable QR code PNG. The TUI shows the clickable link; channels deliver the QR as a photo.
When allowed_users is configured, the bot enforces a strict allowlist on all incoming messages. The behavior differs between DMs and groups:
In DMs: - Non-allowed users always get a reply: "You are not authorized. Send /start to get your user ID." — so they know what to do.
In groups: - Non-allowed users get silently dropped (no reply, no processing) for normal messages. - If the user explicitly @mentions or replies to the bot, they get the "not authorized" reply — so they know they need to be added. - /start in an open group (open = true, see Per-group access control) registers the sender into that group's allowlist and confirms. In a non-open group it returns the sender's ID and tells them to ask the owner to run /cowork or add them — it never silently self-adds. The owner's /start (which Telegram auto-fires when the bot is added) is silent.
This prevents the bot from spamming "not authorized" in active groups where most members aren't on the allowlist. The bot only engages with non-allowed users when they explicitly reach out.
Config:
[channels.telegram]
allowed_users = ["123456789"] # Only these users can interact
respond_to = "mention" # Bot only responds to @mentions in groups
silence_group_start = true # Silently ignore /start from non-allowed users in groups
Every channel has a bot_owner field ([channels.telegram], [channels.discord], [channels.slack], [channels.whatsapp], [channels.trello]). It names the user ID(s) (phone for WhatsApp) treated as the bot owner. On first-run setup the owner is seeded automatically from the first entry in your allow list (allowed_users, or allowed_phones for WhatsApp), and existing configs are migrated on load. Set bot_owner explicitly to pin the owner instead of relying on list order.
The owner gets access that other allowlisted users do not. All channel commands except /new are owner-only: /compact, /doctor, /evolve, /help, /models, /rtk, /sessions, /stop, /usage, /profiles, /goal, /mission-control, /rename, /cd, /respond_to, /redact, /restart, /exit. /new stays open for session recovery (bugged/hallucinated sessions). Non-owners who try get a short "owner only" notice.
Deny-by-default access model: if neither allowed_users nor bot_owner is configured, the bot refuses all interactions — unconfigured installs are locked down by default. Set at least one to unlock access. This prevents open-mode footguns on fresh deployments.
```toml [channels.telegram] allowed_users = ["123456789"] # who may interact
| **OpenCrabs** (Rust) | **Node.js Frameworks** (e.g. Open Claw) | |
|---|---|---|
| **Binary size** | **34–36 MB** single binary, zero dependencies | **1 GB+** node_modules with hundreds of transitive packages |
| **Runtime** | None — runs natively | Requires Node.js runtime + npm install |
| **Attack surface** | Zero network listeners. Outbound HTTPS only | Server infrastructure: open ports, auth layers, middleware |
| **API key security** | Keys on your machine only. zeroize clears them from RAM on drop, [REDACTED] in all debug output | Keys in env vars or config. GC doesn't guarantee memory clearing. Heap dumps can leak secrets |
| **Data residency** | 100% local — SQLite DB, embeddings, brain files, all in ~/.opencrabs/ | Server-side storage, potential multi-tenant data, network transit |
| **Supply chain** | Single compiled binary. Rust's type system prevents buffer overflows, use-after-free, data races at compile time | npm ecosystem: typosquatting, dependency confusion, prototype pollution |
| **Memory safety** | Compile-time guarantees — no GC, no null pointers, no data races | GC-managed, prototype pollution, type coercion bugs |
| **Concurrency** | tokio async + Rust ownership = zero data races guaranteed | Single-threaded event loop, worker threads share memory unsafely |
| **Native TTS/STT** | Built-in local speech-to-text (whisper.cpp) and text-to-speech — ~130 MB total stack, fully offline | No native voice. Requires external APIs (Google, AWS, Azure) or heavy Python dependencies (PyTorch, ~5 GB+) |
| **Telemetry** | Zero. No analytics, no tracking, no remote logging | Server infra typically includes monitoring, logging pipelines, APM |
opencrabs 是一个基于 Rust 开发的高性能 AI Agent 项目,利用 Ratatui 构建了极具交互性的终端用户界面(TUI)。它旨在为开发者提供一个强大的自动化助手,能够深度集成到开发工作流中,通过高效的命令行交互实现复杂的任务自动化。
opencrabs 具备强大的 Agent 能力,不仅内置了超过 30 种工具(如文件 I/O、grep、Web Search、代码执行及图像分析),还能通过 bash 直接调用系统中的任何 CLI 工具,包括 Docker、GitHub CLI、SSH、Python 和 Node 等。此外,它还具备 RTK Token 优化功能,通过自动优化 bash 输出,显著降低 API 调用成本。
opencrabs 支持作为系统服务进行安装与管理。在 macOS 上可以使用 launchd,在 Linux 上可以使用 systemd。用户可以通过执行 `opencrabs -p hermes service install` 进行服务安装,并使用 `service start` 命令启动服务,确保 Agent 在后台稳定运行。
项目提供了快速启动示例。初次使用时,建议通过 `/onboard:image` 命令或进入 Advanced mode 进行初始化配置。用户可以通过交互式指令快速上手,体验 Agent 在终端环境下的自动化操作能力。
用户可以通过修改 `keys.toml` 和 `config.toml` 进行深度定制。支持配置 Google AI Studio 的 API key 以启用 Gemini 模型进行图像生成与视觉识别。对于本地模型(如 Ollama、LM Studio),只需设置 `base_url` 即可免 Key 使用;对于 Grox 或 Together 等远程 API,也可在 `keys.toml` 中添加对应的 provider 配置。此外,用户可以在配置中列出可用模型,通过 `/models` 命令实现无缝切换。
opencrabs 提供了标准化的 API 接口。通过 `/.well-known/agent.json` 端点,客户端可以发现 Agent 的技能、能力及支持的内容类型;`/a2a/v1` 端点基于 JSON-RPC 2.0 协议,支持 `message/send`、`message/stream` (SSE) 以及任务管理(`tasks/get`、`tasks/cancel`)等核心功能;`/a2a/health` 用于监控服务健康状态。
opencrabs 支持多种消息集成工作流,例如 Telegram Bot 模式。它提供了功能完备的 Telegram 机器人支持:所有者可以通过私聊共享 TUI 会话,而群组则会根据 chat ID 实现隔离的独立会话。此外,它还支持多模态交互,能够通过 STT 将语音笔记转为文本,并利用 TTS 将回复转换为 OGG/Opus 格式的语音消息。
高质量的AI工作流项目,值得关注
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:开源AI工作流 的核心功能完整,质量优秀。对于自动化工程师和运维人员来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | opencrabs |
| 原始描述 | 开源AI工作流:The self-improving all channels AI agent. Self-healing. Fully autonomous. Single。⭐770 · Rust |
| Topics | agent-orchestrationagentic-aiautonomous-agents |
| GitHub | https://github.com/adolfousier/opencrabs |
| License | MIT |
| 语言 | Rust |
收录时间:2026-05-30 · 更新时间:2026-05-30 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端