Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 12 additions & 12 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ members = [
resolver = "3"

[workspace.package]
version = "0.6.2"
version = "0.7.1"
edition = "2024"
rust-version = "1.94"
license = "Apache-2.0"
Expand Down Expand Up @@ -143,20 +143,20 @@ landlock = "0.4"
seccompiler = "0.4"

# Workspace crates (published)
clash-brush-builtins = { path = "clash-brush-builtins", version = "0.6.2" }
clash-brush-parser = { path = "clash-brush-parser", version = "0.6.2" }
clash-brush-core = { path = "clash-brush-core", version = "0.6.2" }
clash-brush-interactive = { path = "clash-brush-interactive", version = "0.6.2", features = [
clash-brush-builtins = { path = "clash-brush-builtins", version = "0.7.1" }
clash-brush-parser = { path = "clash-brush-parser", version = "0.7.1" }
clash-brush-core = { path = "clash-brush-core", version = "0.7.1" }
clash-brush-interactive = { path = "clash-brush-interactive", version = "0.7.1", features = [
"basic",
] }

# Workspace crate aliases (used by brush crates internally under original brush-* names)
brush-parser = { path = "clash-brush-parser", version = "0.6.2", package = "clash-brush-parser" }
brush-core = { path = "clash-brush-core", version = "0.6.2", package = "clash-brush-core" }
brush-parser = { path = "clash-brush-parser", version = "0.7.1", package = "clash-brush-parser" }
brush-core = { path = "clash-brush-core", version = "0.7.1", package = "clash-brush-core" }

# Workspace crates (internal only)
clash-lsp = { path = "clash-lsp", version = "0.6.2" }
clash-policy = { path = "clash-policy", version = "0.6.2" }
clash_notify = { path = "clash_notify", version = "0.6.2" }
clash_starlark = { path = "clash_starlark", version = "0.6.2" }
claude_settings = { path = "claude_settings", version = "0.6.2" }
clash-lsp = { path = "clash-lsp", version = "0.7.1" }
clash-policy = { path = "clash-policy", version = "0.7.1" }
clash_notify = { path = "clash_notify", version = "0.7.1" }
clash_starlark = { path = "clash_starlark", version = "0.7.1" }
claude_settings = { path = "claude_settings", version = "0.7.1" }
4 changes: 3 additions & 1 deletion clash-lsp/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ name = "clash-lsp"
version.workspace = true
edition.workspace = true
license.workspace = true
publish = false
homepage.workspace = true
description = "lsp for clash policy files"


[dependencies]
anyhow.workspace = true
Expand Down
8 changes: 4 additions & 4 deletions clash-npm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@empathic/clash",
"version": "0.6.2",
"version": "0.7.1",
"description": "Command Line Agent Safety Harness — policy enforcement for AI coding agents",
"license": "Apache-2.0",
"repository": {
Expand All @@ -19,8 +19,8 @@
"README.md"
],
"optionalDependencies": {
"@empathic/clash-darwin-arm64": "0.6.2",
"@empathic/clash-linux-x64": "0.6.2",
"@empathic/clash-linux-arm64": "0.6.2"
"@empathic/clash-darwin-arm64": "0.7.1",
"@empathic/clash-linux-x64": "0.7.1",
"@empathic/clash-linux-arm64": "0.7.1"
}
}
14 changes: 10 additions & 4 deletions clash-npm/platforms/darwin-arm64/package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
{
"name": "@empathic/clash-darwin-arm64",
"version": "0.6.2",
"version": "0.7.1",
"description": "Clash binary for macOS ARM64 (Apple Silicon)",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/empathic/clash"
},
"os": ["darwin"],
"cpu": ["arm64"],
"files": ["clash"]
"os": [
"darwin"
],
"cpu": [
"arm64"
],
"files": [
"clash"
]
}
14 changes: 10 additions & 4 deletions clash-npm/platforms/linux-arm64/package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
{
"name": "@empathic/clash-linux-arm64",
"version": "0.6.2",
"version": "0.7.1",
"description": "Clash binary for Linux ARM64",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/empathic/clash"
},
"os": ["linux"],
"cpu": ["arm64"],
"files": ["clash"]
"os": [
"linux"
],
"cpu": [
"arm64"
],
"files": [
"clash"
]
}
14 changes: 10 additions & 4 deletions clash-npm/platforms/linux-x64/package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
{
"name": "@empathic/clash-linux-x64",
"version": "0.6.2",
"version": "0.7.1",
"description": "Clash binary for Linux x86_64",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/empathic/clash"
},
"os": ["linux"],
"cpu": ["x64"],
"files": ["clash"]
"os": [
"linux"
],
"cpu": [
"x64"
],
"files": [
"clash"
]
}
8 changes: 5 additions & 3 deletions clash-pi/package.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
{
"name": "@empathic/clash-pi",
"version": "0.6.2",
"version": "0.7.1",
"description": "Clash policy enforcement extension for the Pi agent framework",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/empathic/clash"
},
"dependencies": {
"@empathic/clash": "0.6.2"
"@empathic/clash": "0.7.1"
},
"pi": {
"extensions": ["extensions/clash.ts"]
"extensions": [
"extensions/clash.ts"
]
},
"files": [
"extensions/"
Expand Down
88 changes: 88 additions & 0 deletions site/versions/v0.7.1/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
layout: base.njk
title: Clash
description: Write rules for your AI agent. Clash enforces them.
---

<div class="hero">
<h1 class="hero-title">clash</h1>
<p class="hero-tagline">Be an agentic engineer, not an agent babysitter.</p>
<p class="hero-subtitle">You define the capabilities. Clash enforces them. Your agent never sees a choice.</p>
</div>

<div class="divider"><span>Clash for Claude</span></div>

<div class="section">

Claude interrupts us constantly asking whether it's okay to run some command.
This is why `--dangerously-skip-permissions` is so powerful: we can achieve so
much more per unit prompt.

Every tool call your agent makes requires a decision. Right now, that decision
is yours - *every single time* or **not at all**.

Think of Clash as a new `--safely-skip-permissions` flag. A way to choose _how_
to run anything safely, not just whether Claude can run it **as *you***.

Clash intercepts every tool call Claude makes and runs it through your policy — before anything executes.

<div class="cards">
<div class="card card--green">
<h3>Match</h3>
<p>Every tool call is pattern-matched against your policy — commands, arguments, file paths, network targets. No AI judgment. Same input, same result, every time.</p>
</div>
<div class="card card--amber">
<h3>Decide</h3>
<p>The most specific matching rule determines the effect. <strong>Allow</strong> runs silently. <strong>Ask</strong> prompts you. <strong>Deny</strong> blocks invisibly — Claude never knows the capability existed.</p>
</div>
<div class="card card--red">
<h3>Sandbox</h3>
<p>The action executes inside an OS-level sandbox. File access, network scope, and process boundaries are enforced by the kernel, not by convention.</p>
</div>
</div>

</div>

<div class="divider"><span>Get Started</span></div>

<div class="section">

## Get started with Clash for Claude

Install:
```bash
curl -fsSL https://raw.githubusercontent.com/empathic/clash/main/install.sh | bash
```

Initialize:
```
clash init
```

Run w/ Claude:
```
claude
```

Three commands. One binary, one policy file, full enforcement. See the [Quick Start](/quick-start/) for details.

</div>

<div class="divider"><span>Agent Support</span></div>

<div class="section">

## Agent support

| Agent | Status |
|---|---|
| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | **Supported** |
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | **Protocol ready** |
| [Codex CLI](https://github.com/openai/codex) | **Protocol ready** |
| [Amazon Q CLI](https://github.com/aws/amazon-q-developer-cli) | **Protocol ready** |
| [OpenCode](https://github.com/opencode-ai/opencode) | **Protocol ready** |
| [Copilot CLI](https://github.com/github/copilot-cli) | **Protocol ready** |

Use `clash init --agent <name>` to set up any supported agent. [Contributions welcome](https://github.com/empathic/clash).

</div>
Loading
Loading