schmitthub/clawker

GitHub: schmitthub/clawker

Clawker 是一个免费自托管的 AI 编程 Agent 沙箱 CLI 工具,通过在隔离的 Docker 容器中运行 Claude Code 并配合默认拒绝的出口防火墙,为开发者提供安全的本地 AI 编程环境。

Stars: 31 | Forks: 5

# Clawker — 自托管的 AI 编程 agent 沙箱(在 Docker 中运行 Claude Code)

Go License Ask DeepWiki macOS Linux Claude Vibe coded with love

clawker 是一个免费、开源、自托管的 AI 编程 agent 沙箱 — 一个可以在你自己的机器上隔离的 Docker 容器中运行 Claude Code(以及其他 AI agent)的 cli,无需云服务也无需订阅。它将默认拒绝(deny-by-default)的出口防火墙(Envoy + 自定义 CoreDNS + eBPF)与您实际需要的便捷功能相结合,提供针对 prompt 注入和数据泄露的防护:镜像构建、监控、并行 git-worktree agent 以及凭据转发 — 这是一种本地、免费具有深度安全性的 devcontainer 替代方案,适用于 Anthropic 的模型,包括最新的 mythos-class Fable 5。它可以在任何安装了 docker 的 MacOS/Linux 主机上运行。我写这个工具是因为我不想为了运行带有 --dangerously-skip-permissions 的 claude code agent 而付钱给别人,毕竟容器技术已经存在十年了,而且 claude code 的沙箱模式只是容器的“廉价平替”(temu 版本)。除了使用 Dockerfile 在容器中构建和运行 claude code 外,clawker 还提供了许多便捷功能(你甚至不需要编写 Dockerfile,它都为你考虑好了)。

Threat Model: Bare Metal vs Sandbox vs Clawker Container
## 目录 - [Clawker — 自托管的 AI 编程 agent 沙箱(在 Docker 中运行 Claude Code)](#clawker--self-hosted-ai-coding-agent-sandbox-run-claude-code-in-docker) - [目录](#table-of-contents) - [高层功能概览](#high-level-feature-overview) - [安装](#installation) - [快速开始](#quick-start) - [操作演练](#walkthrough) - [初始化项目](#initialize-a-project) - [运行容器](#run-a-container) - [创建和使用容器](#creating-and-using-containers) - [`@` 镜像快捷方式](#the--image-shortcut) - [命令别名](#command-aliases) - [使用 Worktree](#working-with-worktrees) - [资源管理](#managing-resources) - [监控](#monitoring) - [路线图 / 已知问题](#roadmap--known-issues) - [贡献](#contributing) - [许可证](#license)
无聊的 TLDR 背景故事 Agentic AI 的崛起犹如流星般迅猛,但在急于推出模型配套框架的过程中,整个行业正在忽视随之而来的风险与责任。他们通过发布裸机软件来避免依赖带来的痛苦,然而这些框架本身也需要一个框架。LLM 非常强大,但它们也具有不可预测性、天真且容易被胁迫 —— 将不受限制的代码执行权限、网络访问权、软件安装权、互联网连接和完整的文件系统访问权交给毫无防备的用户是极其鲁莽的。作为一名安全工程师,我的第一直觉是通过为框架构建框架:“容器内 agent”(agent-in-container)解决方案来保护我自己的机器。Clawker 最初是我学习 Claude Code 的一种方式,后来证明它足够实用,可以作为 agentic 软件安全默认防护的开源示例。我希望这个项目能启发整个行业,在其 agentic 软件产品中优先考虑原生容器化,并构建更多工具,让用户能够轻松、无缝地在具有强大默认安全性的容器中运行 agent。 当我开始尝试使用 Claude Code 以跟上 Agentic AI 趋势时,我惊讶地发现,完全缺乏供其使用的本地开发容器产品。Claude Code 的沙箱模式差强人意;其他用于隔离和编排的选择都涉及付费的远程服务,这在我看来非常愚蠢 —— 容器技术我们已经用了十多年了。Claude Code 文档推荐使用容器,但他们只提供了一个 devcontainer 示例,这虽然是朝着正确方向迈出的一步,但却让你受限于 IDE。DIY 的方法会导致为每种语言栈/项目管理多个 Claude Code Dockerfile,可能还需要一个容器镜像仓库,这同样很糟糕,而且 devcontainers 提供的许多内部功能是普通容器所没有的。因此,我决定构建一个工具,来抽象化使用 Docker 在容器中创建、管理、自动化和运行 Claude Code 的所有复杂性。这也是一个很好的项目,让我学习了“Agentic 工程”和“凭直觉编程”(顺便说一句,这非常耗费精力,当心我在这个代码库中一直在清理的一些滑稽的代码垃圾),但 Clawker 对我来说已经变得非常有用,所以我决定将其开源,献给所有渴望更好本地开发容器体验的人。
## 高层功能概览 - **内置参数化 Dockerfile 模板**,灵感来自官方 devcontainer 镜像,支持预装了常用工具(如 git, curl, vim, zsh, ripgrep 等)的 Alpine 或 Debian 基础镜像。每个容器的 `clawkerd` 守护进程以 PID 1 运行,负责信号转发,在内核侧将权限降级为非特权用户 `claude`,并在容器的整个生命周期内监管用户 CMD - **每个主机的 clawker 控制平面**(`clawker-controlplane` 容器)作为长驻监管程序运行 — 它负责防火墙生命周期、eBPF 程序生命周期、agent 身份注册表、mTLS 身份验证,以及与每个 agent 的 `clawkerd` 通信的命令通道。CLI 通过 mTLS gRPC + OAuth2 与其通信;参见 `clawker controlplane status`,`clawker controlplane agents` - **静态 Dockerfile 生成**,如果你需要一个具体的 Dockerfile 来自行构建和自定义(这个仓库最初只是为了我的私有 dockerhub 打包镜像的仓库,哈哈,所以我保留了这个功能) - **可注入的构建时指令**,用于按项目自定义镜像:软件包、环境变量、root 运行命令、用户运行命令等 - **绑定或快照工作区模式**:将你的代码仓库挂载到容器中进行实时编辑,或者在运行时复制它以实现完全隔离 - **全新或复制 agent 模式**:以全新的 Claude Code 安装启动,或者在运行时将你所有的 Claude Code 设置、插件、身份验证、技能等复制到容器中,从而实现从主机实例到容器工作的无缝过渡 - **无缝 Git 凭据转发**:可通过 muxrpc 从主机切换 SSH agent 和 GPG agent 转发(就像 devcontainers 一样),实现对私有仓库和提交签名的零配置访问 - **主机代理服务**将 git ssh 密钥复制到容器中,并将“打开浏览器”等事件从容器发送到你的主机进行浏览器身份验证,然后将回调代理回容器。非常适合需要使用 `claude` 或 `gh` 进行身份验证的时候 - **可配置的环境变量**:在运行时从主机设置或复制环境变量和环境变量文件到容器中 - **可注入的初始化后 bash 脚本**,在容器启动后但 Claude Code 启动前运行,允许你设置 MCPs 等 - **默认启用的 Envoy + 自定义 CoreDNS + eBPF 网络防火墙** — Envoy 和自定义 CoreDNS 构建作为受管理的 Docker 容器在共享的 `clawker-net` 网络上运行,而 eBPF cgroup 程序(由控制平面在 agent 容器外部加载和附加)将 TCP 重定向到 Envoy,将 DNS 重定向到 CoreDNS。提供默认拒绝的 DNS 级别访问控制(未列出的域名返回 NXDOMAIN),通过实时 BPF DNS 缓存进行基于域名的 TCP 路由,以及使用基于域名的 MITM 证书进行 TLS 检查,以实现路径级别的过滤。Agent 容器本身**没有任何 Linux capabilities** — 所有强制执行都在内核侧进行,超出了容器的权限范围。系统必需的规则(Claude API, Docker registry)始终存在;项目规则以累加方式合并。使用 `clawker firewall add/remove/list/status` 动态管理规则(或使用 `clawker firewall refresh` 实时应用项目配置的出口编辑),使用 `clawker firewall bypass 5m --agent ` 临时绕过,或完全禁用。这是一个极佳的安全层,可以在为 agent 提供其所需的网络访问权限的同时,减轻失控 agent 或 prompt 注入的风险。 - **可切换的只读全局共享**:从主机进行卷挂载,让所有容器都能实时访问你放置在其中的文件 - **基于项目的 namespace 隔离**容器资源。Clawker 会检测其是否在项目目录中,并通过 docker 标签前缀自动让你过滤具有可重用名称(如 "dev" 或 "main")且范围限定于该项目的资源。因此,你可以在多个项目中拥有一个 "dev" 容器而不会发生冲突,并且你可以轻松地过滤 `clawker ps --filter agent=dev` 来查看你跨项目的所有 dev 容器,或者使用 `clawker ps --project myapp` 来查看特定项目的所有容器。 - **专用的 Docker 网络**,所有容器都在其中运行 - **通过 `pkg/whail`(whale jail)与主机 Docker 资源隔离**,这是一个独立的 package,装饰了 moby SDK 以防止调用者查看没有自动应用管理标签的资源。我可能会在其他“容器内 agent”解决方案中使用这个 package。这样我就不必担心意外删除非 clawker 管理的容器/卷/镜像等。 - **命令别名** — 扩展为完整 clawker 调用的单词快捷方式,带有 `$1..$N` 位置占位符。默认提供了 `go`(一次性 agent:`clawker go dev`)和 `wt`(在全新 worktree 上的 agent:`clawker wt auth feature/auth:main`);你可以使用 `clawker alias set` 自定义,并通过 `clawker alias export` 将它们提交到项目配置中,让整个团队都能使用 - **类似于 Docker CLI 的命令**,用于管理容器,Clawker 不是 Docker CLI 的直接透传;它使用 moby SDK(通过 `pkg/whail`)。这允许我在 docker cli 提供的功能之上添加更多标志,修改行为等 - **Git worktree 管理和命令**:在容器运行或创建命令中传递 worktree 标志,即可自动在 Clawker 主项目目录中创建一个 git worktree 并将其绑定挂载到容器工作目录。还有 cli 命令和标志来列出和管理由 clawker 创建的 worktree,在底层使用 `go-git` 以避免依赖主机 git 二进制文件。Worktree 容器为无人值守的会话提供了额外的安全锁定 — 参见 [worktree 注意事项](https://docs.clawker.dev/worktrees#worktree-caveats) - **可选的监控技术栈** — `clawker-net` 上的 OTel Collector + OpenSearch(日志)+ OpenSearch Dashboards + Prometheus(指标)。每个容器都内置了环境变量,以便在技术栈运行时推送 OTLP 遥测数据,并在未运行时保持静默 - **交互式配置编辑**:用于项目配置(`clawker project edit`)和用户设置(`clawker settings edit`)的基于 TUI 的编辑器,具有选项卡式字段浏览、按字段类型适配的编辑器(文本、布尔值、列表、多行)、具备层级感知的来源显示(展示每个值的来源文件),以及按字段的保存目标选择功能,以决定写入到哪个配置层 ## 安装 **前提条件:** 你的机器上必须安装并运行 Docker。我已经在 macOS 上测试了所有功能。我确认它可以在 Linux 上运行,但没有进行广泛的测试。目前不支持 Windows,但我未来可能会支持(真恶心)。 **Homebrew** (macOS): ``` brew install schmitthub/tap/clawker ``` **安装脚本** (macOS / Linux): ``` curl -fsSL https://raw.githubusercontent.com/schmitthub/clawker/main/scripts/install.sh | bash ```
更多选项 **特定版本:** ``` curl -fsSL https://raw.githubusercontent.com/schmitthub/clawker/main/scripts/install.sh | CLAWKER_VERSION=v0.1.3 bash ``` **自定义目录:** ``` curl -fsSL https://raw.githubusercontent.com/schmitthub/clawker/main/scripts/install.sh | CLAWKER_INSTALL_DIR=$HOME/.local/bin bash ``` **从源码构建** (需要 Go 1.25+): ``` git clone https://github.com/schmitthub/clawker.git cd clawker && make clawker export PATH="$PWD/bin:$PATH" ```
## 快速开始 实现无缝容器化 Claude Code 实例的最快途径,它会复制你所有的主机设置、插件和凭据,让你可以立即开始工作。 ``` cd your-project # 可选但推荐:设置监控以从您的容器获取日志和指标 clawker monitor init && clawker monitor up clawker init clawker build clawker go dev ``` 如果你想了解更多关于镜像自定义、worktree 支持、监控以及其他花哨功能的信息,请继续阅读下面的操作演练。 你可以使用支持技能 `clawker skill install`(推荐)或以下 prompt,让 claude code 帮助你为项目编写更合适的配置文件: ``` create a `./.clawker.yaml` file appropriate for this repos stack. Clawker configuration can be understood here: https://docs.clawker.dev/configuration.md ``` ## 操作演练 以下是我目前使用 `clawker` 的一些方式,以及我发现它有用的地方。 ### 初始化项目 ``` cd your-project clawker init # Guided setup: pick a language preset → creates .clawker.yaml, .clawkerignore, registers project ``` `clawker init` 会引导你完成基于语言的预设向导设置。选择一个预设或“从零构建”以自定义每个字段。用户设置 (`~/.config/clawker/settings.yaml`) 和 XDG 目录会在首次运行时自动引导创建。 ``` clawker build # Builds your project's image (referenced as "@" when within a project directory) ``` #### 运行容器 我的工作流是一种混合方式。我喜欢在主机上运行一个 claude code 实例,进行真正高强度的交互式工作,同时使用 `--dangerously-skip-permissions` 在单独的标签页和 worktree 中启动几个由 clawker 管理的容器。 为了做到这一点,假设你正在使用主机的 claude code 在一个 feature 分支上工作,突然灵光一闪,或者你注意到了一个问题/bug 并心想“靠,我应该处理一下这个”。或者你已经完成了几个 PRD,想要并行把它们搞定。我只需快速打开一个标签页,让另一个 claude agent 通过 clawker 在一旁着手处理,而我不必一遍又一遍地批准任何操作,所以... ``` clawker run -it --rm --agent dev --worktree hotfix/example:main @ --dangerously-skip-permissions # 或者使用为此提供的 alias: clawker wt dev hotfix/example:main ``` 这会创建一个新的 claude 实例并将我的终端附加到它,该实例被隔离在一个容器环境中,并在我的 main 分支下创建了一个位于 `~/.local/share/clawker/worktrees/` 的 git worktree 目录(或者遵循覆盖变量 `$CLAWKER_DATA_DIR`)。由于它拥有我所有的插件、技能、auth token、git 凭据、mcps,并能立即安装构建依赖项,我只需要告诉这个小家伙该做什么,让它尽情发挥并为此创建一个 PR 即可。我会定期在另一个标签页中查看它的进展。或者你可以分离 `ctrl p+q` 并返回你的终端;要重新附加到同一个会话,请使用 `clawker attach --agent dev`。就这么简单,没有 ssh/tmux 的破事,没有 vscode devcontainer 窗口,没有具有沉重 IO 延迟的 VPS,也不需要设置专用服务器,或者花钱请人帮你做。 我可以看到我的 worktree 路径,如果我想做一些手动工作或审查代码,可以在 IDE 中打开它们……或者根本不在乎它们在哪里,`clawker` 会记住并使用分支名称作为标识符自动挂载它们。你可以使用 `clawker worktree` 命令来管理它们,或者使用 `git worktree`。 ``` $ clawker worktree list BRANCH PATH HEAD MODIFIED STATUS a/example /Users/schmitthub/.local/share/clawker/worktrees/repo-project-uuidsha256 f20aa37 1 hour ago healthy ``` 当我完成后,我可以轻松删除 worktree ``` clawker worktree remove a/example --delete-branch # this deletes the worktree and the branch since it was only for this worktree, if you want to keep the branch just omit the flag. Delete won't work if the branch isn't fully merged ``` 如果我打算进行长时间的会话,让许多 agent 快速处理各种功能和修复,并且想要对我的编程舰队有一个全局概览,我就会启动监控技术栈(需要在启动容器之前执行此操作,如果 claude code 无法建立连接,它是不会重试的) ``` clawker monitor init clawker monitor up clawker monitor status # 稍后停止它 clawker monitor down ``` 现在我可以访问 http://localhost:5601 上的 OpenSearch Dashboards,检查每个 agent 的日志 — 成本、token、工具执行、决策、prompt、api 调用 — 并从 http://localhost:9090 的 Prometheus 提取指标。(你也可以在主机 shell 中设置环境变量,它会将数据报告给这个技术栈) ``` # Host ENV var 示例 # 将这些添加到您的 shell profile / .env 等文件中 OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 OTEL_METRICS_EXPORTER=otlp OTEL_LOGS_EXPORTER=otlp OTEL_TRACES_EXPORTER=otlp OTEL_LOGS_EXPORT_INTERVAL=5000 OTEL_METRIC_EXPORT_INTERVAL=10000 OTEL_METRICS_INCLUDE_ACCOUNT_UUID=true OTEL_METRICS_INCLUDE_SESSION_ID=true CLAUDE_CODE_ENABLE_TELEMETRY=1 CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 OTEL_LOG_TOOL_DETAILS=1 OTEL_LOG_USER_PROMPTS=1 # 将此添加到项目级别的 .env PROJECT_NAME=MyGroundbreakingTodoApp OTEL_RESOURCE_ATTRIBUTES=service.name=claude-code,project=$PROJECT_NAME,agent=host ``` 完成后,我可以在容器终端中直接提交/推送/开启一个 PR,所有的凭据和 git 访问权限都已设置好,或者我也可以在 IDE 中打开 worktree 并从那里进行操作。我可以输入 `/exit` 退出,容器就会停止(或者在终端中按 `ctrl c`)。我可以像使用 docker cli 一样使用 `--rm` 标志,在容器停止时自动移除它们,或者我也可以使用 `clawker start -a -i --agent example` 重新启动同一个容器,从我离开的地方继续。 所有容器都为其 claude 配置目录和命令历史记录获得了命名卷挂载,以实现持久化。 ``` $ clawker volume ls VOLUME NAME DRIVER MOUNTPOINT clawker.clawker.example-config local ...er/volumes/clawker.clawker.example-config/_data clawker.clawker.example-history local ...r/volumes/clawker.clawker.example-history/_data # 您可以在此处查看资源命名约定(clawker.{project}.{agent})。Labeling 的工作方式类似 ``` 你也可以看到 clawker 是如何与其他 docker 资源访问进行隔离的... ``` $ docker create alpine:latest 6c6896073eb1a2baa91450d0b5b795808f0ea4a052f729383a2d166d87fa0c17 $ clawker ps -a NAME STATUS PROJECT AGENT IMAGE CREATED clawker.clawker.example exited clawker example clawker-clawker:latest 9 hours ago $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6c6896073eb1 alpine:latest "/bin/sh" 7 seconds ago Created great_dubinsky 73b4ac14c2b3 clawker-clawker:latest "/usr/local/bin/clawk…" 10 hours ago Exited (0) 10 hours ago clawker.clawker.example ``` ## 创建和使用容器 ``` # 创建一个新容器并交互式连接 # @ 符号会自动解析您的项目镜像(clawker-:latest) clawker run -it --agent main @ # 分离但不停止:Ctrl+P, Ctrl+Q # 重新连接到 agent clawker attach --agent main # 停止 agent(Ctrl+C 退出 Claude Code 并停止容器) # 或者从另一个终端: clawker stop --agent main # 启动一个已停止的 agent 并连接 clawker start -a -i --agent main ``` ## `@` 镜像快捷方式 在需要传入镜像参数的任何地方使用 `@`,即可自动解析你项目的镜像: ``` clawker run -it @ # Uses clawker-:latest clawker run -it --agent dev @ # Same, with agent name clawker container create --agent test @ ``` ## 命令别名 别名是在执行前展开的快捷方式 — 别名值会代替别名名称附加到 `clawker` 后面,并带有 `$1`..`$N` 位置占位符以及追加的额外参数。默认提供了两个别名: ``` clawker go dev # → clawker run --rm -it --agent dev @ --dangerously-skip-permissions clawker wt auth feature/auth:main # → clawker run --rm -it --agent auth --worktree feature/auth:main @ --dangerously-skip-permissions ``` 通过项目配置定义你自己的别名,并与你的团队分享: ``` clawker alias set lg "logs \$1 --tail \$2" # personal alias (user-level clawker.yaml) clawker lg web 50 # → clawker logs web --tail 50 clawker alias list # NAME / EXPANSION / SOURCE clawker alias export # publish active aliases into the project's .clawker.yaml clawker alias delete lg # remove from every config file that defines it ``` 在代码仓库的项目配置中定义的别名会自动应用于在该项目中工作的每个人。完整指南:[docs.clawker.dev/aliases](https://docs.clawker.dev/aliases) ## 使用 Worktree 为每个 git worktree 运行单独的 agent 以进行并行开发。Worktree 容器应用了额外的安全锁定(只读的 `.git/hooks` + `.git/config` 掩码),使无人值守的会话更安全 — 有关行为差异,请参见 [worktree 注意事项](https://docs.clawker.dev/worktrees#worktree-caveats): ``` # 使用 --worktree flag 在容器中自动创建并挂载 worktree clawker run --worktree feature/todo-apps-are-dope:main -it --agent todo-apps @ --dangerously-skip-permissions # 手动创建 worktree clawker worktree add feature/todo-apps-are-dope clawker worktree add feat-feet --base main # 列出您的 worktree clawker worktree list ``` ## 资源管理 尽我所能使其尽可能接近 docker CLI 及其标志,但请记住它们在底层的运作方式不同。添加所有功能也仍在进行中 (WIP) ``` clawker ps # List all clawker containers clawker container ls # Same thing clawker container stop --agent NAME clawker image ls # List clawker images clawker volume ls # List clawker volumes # Firewall 管理 clawker firewall status # Health, rule count, running containers clawker firewall list # List active egress rules clawker firewall add docs.clawker.dev # Allow a domain clawker firewall remove docs.clawker.dev clawker firewall refresh # Live-apply project config egress edits (no restart) clawker firewall disable --agent dev # Unrestricted egress for one agent clawker firewall enable --agent dev # Re-apply firewall rules clawker firewall bypass 5m --agent dev # Temporary unrestricted egress with auto-re-enable clawker firewall bypass --stop --agent dev # End bypass early, re-enable firewall # Control plane(break-glass —— 通常会自动 bootstrap) clawker controlplane status # Show CP health + firewall subsystem state clawker controlplane up # Bring CP up (idempotent) clawker controlplane down # Stop CP cleanly (drains eBPF + Envoy/CoreDNS) clawker controlplane agents # List agents registered with the CP # Auth material clawker auth rotate # Rotate CA, server certs, and OAuth2 signing key # Configuration 编辑 clawker project edit # Interactive TUI editor for .clawker.yaml clawker settings edit # Interactive TUI editor for settings.yaml # Skill plugin 管理 clawker skill install # Install the clawker-support Claude Code plugin clawker skill install --scope project # Install with project scope clawker skill show # Show manual install commands clawker skill remove # Remove the clawker-support plugin ``` ## 监控 所有容器默认都具备将日志和指标推送到 OpenTelemetry collector 的环境变量。可选的监控技术栈在 `clawker-net` 上运行四个 Docker Compose 服务:**OTEL Collector**(接收器 + 路由)、**OpenSearch**(日志)、**OpenSearch Dashboards**(基于 OpenSearch 的 UI)和 **Prometheus**(指标 + UI)。Claude Code agent 通过 OTLP/HTTP 推送到 collector,后者将日志写入 OpenSearch 并暴露一个 Prometheus 抓取 endpoint。有关完整的 pipeline 参考,请参见 [`docs/monitoring.mdx`](docs/monitoring.mdx)。 ``` clawker monitor init clawker monitor up clawker monitor status # 稍后停止它 clawker monitor down ``` 一旦技术栈启动: - **OpenSearch Dashboards** — http://localhost:5601 — 用于日志探索的 Discover 视图 - **Prometheus UI** — http://localhost:9090 — 指标 + 临时 PromQL - **OpenSearch API** — http://localhost:9200 — 对 `claude-code`(Claude Code 日志)、`clawker-cli`(主机 CLI 日志)、`clawker-cp`(控制平面日志)、`clawker-envoy`(防火墙出口访问日志)、`clawker-coredns`(防火墙 DNS 查询日志)和 `clawker-ebpf-egress`(eBPF 出口决策)索引的 REST 访问 ## 路线图 / 已知问题 - Linux 可能存在一个涉及访问凭据 keychain 的 bug,我还没有将重点放在 Linux 上 有关当前已知问题和限制,请参见 [GitHub Issues](https://github.com/schmitthub/clawker/issues?q=is%3Aissue+is%3Aopen)。 ## 许可证 Clawker 是免费软件:GNU Affero General Public License v3.0 或更高版本 (AGPL-3.0-or-later) — 参见 [LICENSE](LICENSE)。 有一个子项目是例外:`claude-plugin/clawker-support/` 插件单独在 MIT 许可证下授权 — 参见[其 LICENSE](claude-plugin/clawker-support/LICENSE)。本仓库中的所有其他内容均如下所述采用 AGPL-3.0-or-later 许可。 AGPL 的网络使用条款(第 13 条)是深思熟虑后的选择:如果你将修改后的 Clawker 作为网络服务运行,你必须向该服务的用户提供其源代码。这保证了 Clawker 保持自由和开放 — 供学习和构建之用,而不是用于封闭的 SaaS 包装器。 **商业许可。** 不想受 AGPL 的 copyleft 和网络使用义务的约束 — 例如,想将 Clawker 嵌入到闭源产品或服务中?我们提供商业许可证。请联系 andrew@ajschmitt.io。 **贡献。** 接受贡献的前提是接受贡献者许可协议([CLA.md](CLA.md)):你保留你的版权,你的作品在 AGPL 下发布,并且你授予维护者同样在商业许可下提供它的权利。这正是使双重许可成为可能的基础。
标签:AI编程, Docker, Docker镜像, EVTX分析, Go语言, Python工具, 安全防御评估, 日志审计, 沙箱环境, 用户代理, 程序破解, 网络隔离, 自定义请求头, 请求拦截