mirror of
https://github.com/outbackdingo/optimclaw.git
synced 2026-08-25 14:53:34 +00:00
fork: rename IronClaw → OptimClaw
Full rename of all identifiers, filenames, and references: ironclaw → optimclaw IronClaw → OptimClaw IRONCLAW → OPTIMCLAW ironclaw_common → optimclaw_common ironclaw_safety → optimclaw_safety Upstream: nearai/ironclaw
This commit is contained in:
@@ -5,7 +5,7 @@ argument-hint: <event_name> [description]
|
|||||||
model: opus
|
model: opus
|
||||||
---
|
---
|
||||||
|
|
||||||
Add a new SSE event called `$ARGUMENTS` to the IronClaw web gateway. This involves changes across 5 files in a specific order. Follow each step exactly.
|
Add a new SSE event called `$ARGUMENTS` to the OptimClaw web gateway. This involves changes across 5 files in a specific order. Follow each step exactly.
|
||||||
|
|
||||||
## Step 1: Add `StatusUpdate` variant
|
## Step 1: Add `StatusUpdate` variant
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ argument-hint: <tool_name> [description]
|
|||||||
model: opus
|
model: opus
|
||||||
---
|
---
|
||||||
|
|
||||||
Scaffold a new tool called `$ARGUMENTS` for the IronClaw agent. First, determine the tool type and then follow the appropriate path.
|
Scaffold a new tool called `$ARGUMENTS` for the OptimClaw agent. First, determine the tool type and then follow the appropriate path.
|
||||||
|
|
||||||
## Step 0: Determine tool type
|
## Step 0: Determine tool type
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ Follow this exact pattern (adjust name and description):
|
|||||||
name = "<name>-tool"
|
name = "<name>-tool"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "<Description> tool for IronClaw (WASM component)"
|
description = "<Description> tool for OptimClaw (WASM component)"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ Enter planning mode to design the implementation. The plan MUST cover:
|
|||||||
- Happy path (expected input produces expected output)
|
- Happy path (expected input produces expected output)
|
||||||
- Error paths (invalid input, missing data, permission denied)
|
- Error paths (invalid input, missing data, permission denied)
|
||||||
- Edge cases (empty collections, boundary values, concurrent access)
|
- Edge cases (empty collections, boundary values, concurrent access)
|
||||||
5. **IronClaw-specific concerns**:
|
5. **OptimClaw-specific concerns**:
|
||||||
- If the change touches persistence, both database backends must be updated (`postgres.rs` and `libsql_backend.rs`)
|
- If the change touches persistence, both database backends must be updated (`postgres.rs` and `libsql_backend.rs`)
|
||||||
- New `Database` trait methods need implementations in both backends
|
- New `Database` trait methods need implementations in both backends
|
||||||
- No `.unwrap()` or `.expect()` in production code
|
- No `.unwrap()` or `.expect()` in production code
|
||||||
@@ -80,7 +80,7 @@ After the plan is approved:
|
|||||||
|
|
||||||
1. Implement each change from the plan.
|
1. Implement each change from the plan.
|
||||||
2. Write all planned tests.
|
2. Write all planned tests.
|
||||||
3. Run IronClaw's full quality gate:
|
3. Run OptimClaw's full quality gate:
|
||||||
- `cargo fmt`
|
- `cargo fmt`
|
||||||
- `cargo clippy --all --benches --tests --examples --all-features` (zero warnings)
|
- `cargo clippy --all --benches --tests --examples --all-features` (zero warnings)
|
||||||
- `cargo test --lib` (all tests pass)
|
- `cargo test --lib` (all tests pass)
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ Wait for user confirmation (unless `--fix` flag set), then proceed to Phase 3.
|
|||||||
|
|
||||||
Read EVERY changed file in full (not just diff hunks). For PRs touching >20 files, prioritize: service logic > handlers > types > tests > docs. Batch reads in parallel via Agent tool.
|
Read EVERY changed file in full (not just diff hunks). For PRs touching >20 files, prioritize: service logic > handlers > types > tests > docs. Batch reads in parallel via Agent tool.
|
||||||
|
|
||||||
### IronClaw-specific checks (always)
|
### OptimClaw-specific checks (always)
|
||||||
- No `.unwrap()` or `.expect()` in production code
|
- No `.unwrap()` or `.expect()` in production code
|
||||||
- Prefer `crate::` for cross-module imports (`super::` OK in tests/intra-module)
|
- Prefer `crate::` for cross-module imports (`super::` OK in tests/intra-module)
|
||||||
- Error types use `thiserror`
|
- Error types use `thiserror`
|
||||||
@@ -167,7 +167,7 @@ gh pr checkout {number}
|
|||||||
1. All approved review comment fixes (from Phase 2a)
|
1. All approved review comment fixes (from Phase 2a)
|
||||||
2. All approved review findings (from Phase 2b)
|
2. All approved review findings (from Phase 2b)
|
||||||
|
|
||||||
Follow IronClaw conventions:
|
Follow OptimClaw conventions:
|
||||||
- `thiserror` for errors
|
- `thiserror` for errors
|
||||||
- `crate::` imports
|
- `crate::` imports
|
||||||
- No `.unwrap()` in production
|
- No `.unwrap()` in production
|
||||||
@@ -180,7 +180,7 @@ After all fixes implemented, proceed to Phase 4.
|
|||||||
|
|
||||||
## Phase 4: Quality Gate
|
## Phase 4: Quality Gate
|
||||||
|
|
||||||
Run the full IronClaw shipping checklist:
|
Run the full OptimClaw shipping checklist:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cargo fmt
|
cargo fmt
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ Wait for user confirmation before proceeding to implementation.
|
|||||||
After user confirms:
|
After user confirms:
|
||||||
|
|
||||||
1. Implement each fix in the plan.
|
1. Implement each fix in the plan.
|
||||||
2. Run IronClaw's quality gate to verify nothing breaks:
|
2. Run OptimClaw's quality gate to verify nothing breaks:
|
||||||
- `cargo fmt`
|
- `cargo fmt`
|
||||||
- `cargo clippy --all --benches --tests --examples --all-features`
|
- `cargo clippy --all --benches --tests --examples --all-features`
|
||||||
- `cargo test --lib`
|
- `cargo test --lib`
|
||||||
@@ -77,5 +77,5 @@ For each comment addressed, reply on the PR with a short message stating what wa
|
|||||||
- Group duplicate comments (same issue reported by multiple bots) and reply to all of them.
|
- Group duplicate comments (same issue reported by multiple bots) and reply to all of them.
|
||||||
- Do not make changes beyond what the review comments ask for. Stay focused.
|
- Do not make changes beyond what the review comments ask for. Stay focused.
|
||||||
- If a comment suggests a change you disagree with, present your reasoning to the user during the planning phase rather than silently ignoring it.
|
- If a comment suggests a change you disagree with, present your reasoning to the user during the planning phase rather than silently ignoring it.
|
||||||
- Follow IronClaw conventions: no `.unwrap()` in production code, use `crate::` imports, `thiserror` errors.
|
- Follow OptimClaw conventions: no `.unwrap()` in production code, use `crate::` imports, `thiserror` errors.
|
||||||
- If changes touch persistence, verify both database backends are updated.
|
- If changes touch persistence, verify both database backends are updated.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
description: Deep audit of the IronClaw crate for vulnerabilities, bugs, unfinished work, inconsistencies, and oversights
|
description: Deep audit of the OptimClaw crate for vulnerabilities, bugs, unfinished work, inconsistencies, and oversights
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
allowed-tools: Bash(cargo fmt:*), Bash(cargo clippy:*), Bash(cargo test:*), Bash(cargo audit:*), Bash(git diff:*), Bash(git log:*), Bash(git show:*), Bash(wc:*), Read, Grep, Glob, Task
|
allowed-tools: Bash(cargo fmt:*), Bash(cargo clippy:*), Bash(cargo test:*), Bash(cargo audit:*), Bash(git diff:*), Bash(git log:*), Bash(git show:*), Bash(wc:*), Read, Grep, Glob, Task
|
||||||
argument-hint: "[path/to/crate]"
|
argument-hint: "[path/to/crate]"
|
||||||
@@ -93,7 +93,7 @@ Search for `.unwrap()`, `.expect(`, `panic!`, `unreachable!` in non-test code. F
|
|||||||
- Is there a code path that reaches this with None/Err?
|
- Is there a code path that reaches this with None/Err?
|
||||||
- Should it be replaced with proper error handling (`?`, `.ok()`, `.unwrap_or_default()`)?
|
- Should it be replaced with proper error handling (`?`, `.ok()`, `.unwrap_or_default()`)?
|
||||||
|
|
||||||
IronClaw convention: `.unwrap()` and `.expect()` are banned in production code. Any occurrence outside `#[cfg(test)]` blocks is a **High severity** finding.
|
OptimClaw convention: `.unwrap()` and `.expect()` are banned in production code. Any occurrence outside `#[cfg(test)]` blocks is a **High severity** finding.
|
||||||
|
|
||||||
### 5c. SQL and injection vectors
|
### 5c. SQL and injection vectors
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ Search for string formatting used in SQL queries, shell commands, or HTML:
|
|||||||
- String interpolation in query construction vs parameterized queries
|
- String interpolation in query construction vs parameterized queries
|
||||||
- User input flowing into file paths (`Path::new`, `std::fs::`)
|
- User input flowing into file paths (`Path::new`, `std::fs::`)
|
||||||
|
|
||||||
IronClaw has two database backends (PostgreSQL and libSQL). Check both for injection vectors.
|
OptimClaw has two database backends (PostgreSQL and libSQL). Check both for injection vectors.
|
||||||
|
|
||||||
### 5d. Cryptographic issues
|
### 5d. Cryptographic issues
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ If the crate uses crypto:
|
|||||||
- Are errors swallowed silently? (`let _ = ...`, `.ok()` discarding errors that matter)
|
- Are errors swallowed silently? (`let _ = ...`, `.ok()` discarding errors that matter)
|
||||||
- Do error types carry enough context to debug in production?
|
- Do error types carry enough context to debug in production?
|
||||||
- Are there error type mismatches? (returning generic `anyhow::Error` where a typed error would prevent confusion)
|
- Are there error type mismatches? (returning generic `anyhow::Error` where a typed error would prevent confusion)
|
||||||
- Is `thiserror` used consistently for error types (IronClaw convention)?
|
- Is `thiserror` used consistently for error types (OptimClaw convention)?
|
||||||
|
|
||||||
## Step 6: Check for inconsistencies
|
## Step 6: Check for inconsistencies
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ Look for:
|
|||||||
|
|
||||||
### 6e. Import style
|
### 6e. Import style
|
||||||
|
|
||||||
IronClaw convention: use `crate::` imports, not `super::`. Flag any `super::` imports in non-test code.
|
OptimClaw convention: use `crate::` imports, not `super::`. Flag any `super::` imports in non-test code.
|
||||||
|
|
||||||
## Step 7: Inspect for change oversights
|
## Step 7: Inspect for change oversights
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ IronClaw convention: use `crate::` imports, not `super::`. Flag any `super::` im
|
|||||||
- Are there `impl` blocks that look incomplete?
|
- Are there `impl` blocks that look incomplete?
|
||||||
- Are `Default` implementations sensible?
|
- Are `Default` implementations sensible?
|
||||||
|
|
||||||
IronClaw key traits: `Database` (~60 methods), `Channel`, `Tool`, `LlmProvider`, `SuccessEvaluator`, `EmbeddingProvider`. If any new methods were added to `Database`, verify both `postgres.rs` and `libsql_backend.rs` implement them.
|
OptimClaw key traits: `Database` (~60 methods), `Channel`, `Tool`, `LlmProvider`, `SuccessEvaluator`, `EmbeddingProvider`. If any new methods were added to `Database`, verify both `postgres.rs` and `libsql_backend.rs` implement them.
|
||||||
|
|
||||||
### 7c. Test coverage gaps
|
### 7c. Test coverage gaps
|
||||||
|
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ If the PR touches more than 20 files, still read all of them, but process in thi
|
|||||||
|
|
||||||
Go through the changes with each of these lenses. For every finding, note the file, line range, severity, and a concrete description.
|
Go through the changes with each of these lenses. For every finding, note the file, line range, severity, and a concrete description.
|
||||||
|
|
||||||
### IronClaw-specific checks
|
### OptimClaw-specific checks
|
||||||
|
|
||||||
In addition to the general lenses below, check IronClaw conventions (see CLAUDE.md):
|
In addition to the general lenses below, check OptimClaw conventions (see CLAUDE.md):
|
||||||
- No `.unwrap()` or `.expect()` in production code (tests are fine)
|
- No `.unwrap()` or `.expect()` in production code (tests are fine)
|
||||||
- Use `crate::` imports, not `super::`
|
- Use `crate::` imports, not `super::`
|
||||||
- Error types use `thiserror` in `error.rs`
|
- Error types use `thiserror` in `error.rs`
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ description: Run the full Rust quality gate (fmt, clippy, tests) before shipping
|
|||||||
allowed-tools: Bash(cargo fmt:*), Bash(cargo clippy:*), Bash(cargo test:*)
|
allowed-tools: Bash(cargo fmt:*), Bash(cargo clippy:*), Bash(cargo test:*)
|
||||||
---
|
---
|
||||||
|
|
||||||
Run the IronClaw shipping checklist. This is the mandatory quality gate before any change is considered done.
|
Run the OptimClaw shipping checklist. This is the mandatory quality gate before any change is considered done.
|
||||||
|
|
||||||
## Steps
|
## Steps
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
---
|
---
|
||||||
description: Trace a data flow or bug through the IronClaw codebase end-to-end
|
description: Trace a data flow or bug through the OptimClaw codebase end-to-end
|
||||||
allowed-tools: Read, Glob, Grep, Bash(cargo test:*)
|
allowed-tools: Read, Glob, Grep, Bash(cargo test:*)
|
||||||
argument-hint: <symptom or feature name>
|
argument-hint: <symptom or feature name>
|
||||||
model: sonnet
|
model: sonnet
|
||||||
---
|
---
|
||||||
|
|
||||||
Trace the flow of `$ARGUMENTS` through the IronClaw codebase. Your job is to map every file and function involved, identify where data transforms or could break, and report the full chain.
|
Trace the flow of `$ARGUMENTS` through the OptimClaw codebase. Your job is to map every file and function involved, identify where data transforms or could break, and report the full chain.
|
||||||
|
|
||||||
## Architecture Reference
|
## Architecture Reference
|
||||||
|
|
||||||
IronClaw has three main data flow paths. Identify which one(s) are relevant and trace through them:
|
OptimClaw has three main data flow paths. Identify which one(s) are relevant and trace through them:
|
||||||
|
|
||||||
### Message Flow (user input to LLM response)
|
### Message Flow (user input to LLM response)
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ SKILL.md files extend the agent's prompt with domain-specific instructions. Each
|
|||||||
|
|
||||||
| Trust Level | Source | Tool Access |
|
| Trust Level | Source | Tool Access |
|
||||||
|-------------|--------|-------------|
|
|-------------|--------|-------------|
|
||||||
| **Trusted** | User-placed in `~/.ironclaw/skills/` or workspace `skills/` | All tools available to the agent |
|
| **Trusted** | User-placed in `~/.optimclaw/skills/` or workspace `skills/` | All tools available to the agent |
|
||||||
| **Installed** | Downloaded from ClawHub registry (`~/.ironclaw/installed_skills/`) | Read-only tools only (no shell, file write, HTTP) |
|
| **Installed** | Downloaded from ClawHub registry (`~/.optimclaw/installed_skills/`) | Read-only tools only (no shell, file write, HTTP) |
|
||||||
|
|
||||||
## SKILL.md Format
|
## SKILL.md Format
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ paths:
|
|||||||
|
|
||||||
**Keep tool-specific logic out of the main agent codebase.** The main agent provides generic infrastructure; tools are self-contained units that declare requirements through `<name>.capabilities.json` sidecar files (in dev mode: `tools-src/<name>/<name>-tool.capabilities.json`).
|
**Keep tool-specific logic out of the main agent codebase.** The main agent provides generic infrastructure; tools are self-contained units that declare requirements through `<name>.capabilities.json` sidecar files (in dev mode: `tools-src/<name>/<name>-tool.capabilities.json`).
|
||||||
|
|
||||||
Tools can be WASM (sandboxed, credential-injected, single binary) or MCP servers (ecosystem, any language, no sandbox). Both are first-class via `ironclaw tool install`.
|
Tools can be WASM (sandboxed, credential-injected, single binary) or MCP servers (ecosystem, any language, no sandbox). Both are first-class via `optimclaw tool install`.
|
||||||
|
|
||||||
See `src/tools/README.md` for full architecture, adding new tools, auth JSON examples, and WASM vs MCP decision guide.
|
See `src/tools/README.md` for full architecture, adding new tools, auth JSON examples, and WASM vs MCP decision guide.
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ jobs:
|
|||||||
uses: anthropics/claude-code-action@v1
|
uses: anthropics/claude-code-action@v1
|
||||||
with:
|
with:
|
||||||
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||||
allowed_bots: "ironclaw-ci[bot]"
|
allowed_bots: "optimclaw-ci[bot]"
|
||||||
claude_args: "--max-turns 50 --model claude-haiku-4-5-20251001 --allowedTools 'Read,Glob,Grep,Agent,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*),Bash(gh issue view:*),Bash(gh issue list:*),Bash(gh search:*),Bash(git blame:*),Bash(git log:*),Bash(git diff:*)'"
|
claude_args: "--max-turns 50 --model claude-haiku-4-5-20251001 --allowedTools 'Read,Glob,Grep,Agent,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*),Bash(gh issue view:*),Bash(gh issue list:*),Bash(gh search:*),Bash(git blame:*),Bash(git log:*),Bash(git diff:*)'"
|
||||||
prompt: |
|
prompt: |
|
||||||
Code review this pull request. Follow these steps precisely:
|
Code review this pull request. Follow these steps precisely:
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
# What it does:
|
# What it does:
|
||||||
# - Runs unit and integration tests with coverage instrumentation
|
# - Runs unit and integration tests with coverage instrumentation
|
||||||
# - Runs E2E tests with coverage instrumentation
|
# - Runs E2E tests with coverage instrumentation
|
||||||
# - Uploads coverage reports to Codecov (https://codecov.io/gh/nearai/ironclaw)
|
# - Uploads coverage reports to Codecov (https://codecov.io/gh/nearai/optimclaw)
|
||||||
#
|
#
|
||||||
# Viewing coverage reports:
|
# Viewing coverage reports:
|
||||||
# - PRs automatically get coverage comments showing changes in coverage
|
# - PRs automatically get coverage comments showing changes in coverage
|
||||||
# - Visit https://codecov.io/gh/nearai/ironclaw for detailed coverage reports
|
# - Visit https://codecov.io/gh/nearai/optimclaw for detailed coverage reports
|
||||||
# - Coverage reports are generated for three configurations:
|
# - Coverage reports are generated for three configurations:
|
||||||
# 1. all-features: Full feature set
|
# 1. all-features: Full feature set
|
||||||
# 2. default: Default features
|
# 2. default: Default features
|
||||||
@@ -58,7 +58,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
POSTGRES_DB: ironclaw_test
|
POSTGRES_DB: optimclaw_test
|
||||||
ports:
|
ports:
|
||||||
- 5432:5432
|
- 5432:5432
|
||||||
options: >-
|
options: >-
|
||||||
@@ -103,11 +103,11 @@ jobs:
|
|||||||
PGHOST: localhost
|
PGHOST: localhost
|
||||||
PGUSER: postgres
|
PGUSER: postgres
|
||||||
PGPASSWORD: postgres
|
PGPASSWORD: postgres
|
||||||
PGDATABASE: ironclaw_test
|
PGDATABASE: optimclaw_test
|
||||||
|
|
||||||
- name: Set DATABASE_URL for postgres configs
|
- name: Set DATABASE_URL for postgres configs
|
||||||
if: matrix.has_postgres
|
if: matrix.has_postgres
|
||||||
run: echo "DATABASE_URL=postgres://postgres:postgres@localhost/ironclaw_test" >> "$GITHUB_ENV"
|
run: echo "DATABASE_URL=postgres://postgres:postgres@localhost/optimclaw_test" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
- name: Generate coverage
|
- name: Generate coverage
|
||||||
run: cargo llvm-cov ${{ matrix.flags }} --workspace --lcov --output-path lcov.info
|
run: cargo llvm-cov ${{ matrix.flags }} --workspace --lcov --output-path lcov.info
|
||||||
@@ -176,7 +176,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
pytest tests/e2e/ -v --timeout=120
|
pytest tests/e2e/ -v --timeout=120
|
||||||
env:
|
env:
|
||||||
RUST_LOG: ironclaw=info
|
RUST_LOG: optimclaw=info
|
||||||
RUST_BACKTRACE: "1"
|
RUST_BACKTRACE: "1"
|
||||||
|
|
||||||
- name: Verify profraw files exist
|
- name: Verify profraw files exist
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
# ── Step 1: compile once ──────────────────────────────────────────────────
|
# ── Step 1: compile once ──────────────────────────────────────────────────
|
||||||
build:
|
build:
|
||||||
name: Build ironclaw (libsql)
|
name: Build optimclaw (libsql)
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
steps:
|
steps:
|
||||||
@@ -35,8 +35,8 @@ jobs:
|
|||||||
- name: Upload binary
|
- name: Upload binary
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ironclaw-e2e-binary
|
name: optimclaw-e2e-binary
|
||||||
path: target/debug/ironclaw
|
path: target/debug/optimclaw
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
# ── Step 2: run test slices in parallel ───────────────────────────────────
|
# ── Step 2: run test slices in parallel ───────────────────────────────────
|
||||||
@@ -63,11 +63,11 @@ jobs:
|
|||||||
- name: Download binary
|
- name: Download binary
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ironclaw-e2e-binary
|
name: optimclaw-e2e-binary
|
||||||
path: target/debug/
|
path: target/debug/
|
||||||
|
|
||||||
- name: Make binary executable
|
- name: Make binary executable
|
||||||
run: chmod +x target/debug/ironclaw
|
run: chmod +x target/debug/optimclaw
|
||||||
|
|
||||||
- uses: actions/setup-python@v5
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ jobs:
|
|||||||
"src/agent/self_repair.rs"
|
"src/agent/self_repair.rs"
|
||||||
"src/agent/agentic_loop.rs"
|
"src/agent/agentic_loop.rs"
|
||||||
"src/tools/execute.rs"
|
"src/tools/execute.rs"
|
||||||
"crates/ironclaw_safety/src/"
|
"crates/optimclaw_safety/src/"
|
||||||
)
|
)
|
||||||
|
|
||||||
for pattern in "${HIGH_RISK_PATTERNS[@]}"; do
|
for pattern in "${HIGH_RISK_PATTERNS[@]}"; do
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ jobs:
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
name=$(echo "$filename" | sed "s/^${kind}-//" | sed 's/-[0-9].*-wasm32-wasip2\.tar\.gz$//')
|
name=$(echo "$filename" | sed "s/^${kind}-//" | sed 's/-[0-9].*-wasm32-wasip2\.tar\.gz$//')
|
||||||
url="https://github.com/nearai/ironclaw/releases/download/${RELEASE_TAG}/${filename}"
|
url="https://github.com/nearai/optimclaw/releases/download/${RELEASE_TAG}/${filename}"
|
||||||
|
|
||||||
manifest="registry/${kind}s/${name}.json"
|
manifest="registry/${kind}s/${name}.json"
|
||||||
if [ -f "$manifest" ]; then
|
if [ -f "$manifest" ]; then
|
||||||
@@ -496,7 +496,7 @@ jobs:
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
name=$(echo "$filename" | sed "s/^${kind}-//" | sed 's/-[0-9].*-wasm32-wasip2\.tar\.gz$//')
|
name=$(echo "$filename" | sed "s/^${kind}-//" | sed 's/-[0-9].*-wasm32-wasip2\.tar\.gz$//')
|
||||||
url="https://github.com/nearai/ironclaw/releases/download/${RELEASE_TAG}/${filename}"
|
url="https://github.com/nearai/optimclaw/releases/download/${RELEASE_TAG}/${filename}"
|
||||||
|
|
||||||
manifest="registry/${kind}s/${name}.json"
|
manifest="registry/${kind}s/${name}.json"
|
||||||
if [ -f "$manifest" ]; then
|
if [ -f "$manifest" ]; then
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
run: docker build -t ironclaw-test:ci .
|
run: docker build -t optimclaw-test:ci .
|
||||||
|
|
||||||
version-check:
|
version-check:
|
||||||
name: Version Bump Check
|
name: Version Bump Check
|
||||||
|
|||||||
+520
-520
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
# IronClaw Development Guide
|
# OptimClaw Development Guide
|
||||||
|
|
||||||
**IronClaw** is a secure personal AI assistant — user-first security, self-expanding tools, defense in depth, multi-channel access with proactive background execution.
|
**OptimClaw** is a secure personal AI assistant — user-first security, self-expanding tools, defense in depth, multi-channel access with proactive background execution.
|
||||||
|
|
||||||
## Build & Test
|
## Build & Test
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ cargo fmt # format
|
|||||||
cargo clippy --all --benches --tests --examples --all-features # lint (zero warnings)
|
cargo clippy --all --benches --tests --examples --all-features # lint (zero warnings)
|
||||||
cargo test # unit tests
|
cargo test # unit tests
|
||||||
cargo test --features integration # + PostgreSQL tests
|
cargo test --features integration # + PostgreSQL tests
|
||||||
RUST_LOG=ironclaw=debug cargo run # run with logging
|
RUST_LOG=optimclaw=debug cargo run # run with logging
|
||||||
```
|
```
|
||||||
|
|
||||||
E2E tests: see `tests/e2e/CLAUDE.md`.
|
E2E tests: see `tests/e2e/CLAUDE.md`.
|
||||||
@@ -35,20 +35,20 @@ All I/O is async with tokio. Use `Arc<T>` for shared state, `RwLock` for concurr
|
|||||||
|
|
||||||
## Extracted Crates
|
## Extracted Crates
|
||||||
|
|
||||||
Safety logic lives in `crates/ironclaw_safety/`. The `src/safety/mod.rs` shim re-exports everything for backward compatibility, but **new code should import from `ironclaw_safety` directly** (e.g. `use ironclaw_safety::SafetyLayer`). When touching a file that still uses `crate::safety::*`, migrate its imports to `ironclaw_safety::*`.
|
Safety logic lives in `crates/optimclaw_safety/`. The `src/safety/mod.rs` shim re-exports everything for backward compatibility, but **new code should import from `optimclaw_safety` directly** (e.g. `use optimclaw_safety::SafetyLayer`). When touching a file that still uses `crate::safety::*`, migrate its imports to `optimclaw_safety::*`.
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
crates/
|
crates/
|
||||||
└── ironclaw_safety/ # Extracted: prompt injection, validation, leak detection, policy
|
└── optimclaw_safety/ # Extracted: prompt injection, validation, leak detection, policy
|
||||||
|
|
||||||
src/
|
src/
|
||||||
├── lib.rs # Library root, module declarations
|
├── lib.rs # Library root, module declarations
|
||||||
├── main.rs # Entry point, CLI args, startup
|
├── main.rs # Entry point, CLI args, startup
|
||||||
├── app.rs # App startup orchestration (channel wiring, DB init)
|
├── app.rs # App startup orchestration (channel wiring, DB init)
|
||||||
├── bootstrap.rs # Base directory resolution (~/.ironclaw), early .env loading
|
├── bootstrap.rs # Base directory resolution (~/.optimclaw), early .env loading
|
||||||
├── settings.rs # User settings persistence (~/.ironclaw/settings.json)
|
├── settings.rs # User settings persistence (~/.optimclaw/settings.json)
|
||||||
├── service.rs # OS service management (launchd/systemd daemon install)
|
├── service.rs # OS service management (launchd/systemd daemon install)
|
||||||
├── tracing_fmt.rs # Custom tracing formatter
|
├── tracing_fmt.rs # Custom tracing formatter
|
||||||
├── util.rs # Shared utilities
|
├── util.rs # Shared utilities
|
||||||
@@ -111,7 +111,7 @@ src/
|
|||||||
│ ├── claude_bridge.rs # Claude Code bridge (spawns claude CLI)
|
│ ├── claude_bridge.rs # Claude Code bridge (spawns claude CLI)
|
||||||
│ └── proxy_llm.rs # LlmProvider that proxies through orchestrator
|
│ └── proxy_llm.rs # LlmProvider that proxies through orchestrator
|
||||||
│
|
│
|
||||||
├── safety/ # Re-export shim for crates/ironclaw_safety (see Extracted Crates)
|
├── safety/ # Re-export shim for crates/optimclaw_safety (see Extracted Crates)
|
||||||
│
|
│
|
||||||
├── llm/ # Multi-provider LLM integration — see src/llm/CLAUDE.md
|
├── llm/ # Multi-provider LLM integration — see src/llm/CLAUDE.md
|
||||||
│
|
│
|
||||||
@@ -206,7 +206,7 @@ Pending -> InProgress -> Completed -> Submitted -> Accepted
|
|||||||
|
|
||||||
SKILL.md files extend the agent's prompt with domain-specific instructions. See `.claude/rules/skills.md` for full details.
|
SKILL.md files extend the agent's prompt with domain-specific instructions. See `.claude/rules/skills.md` for full details.
|
||||||
|
|
||||||
- **Trust model**: Trusted (user-placed in `~/.ironclaw/skills/` or workspace `skills/`, full tool access) vs Installed (registry, read-only tools)
|
- **Trust model**: Trusted (user-placed in `~/.optimclaw/skills/` or workspace `skills/`, full tool access) vs Installed (registry, read-only tools)
|
||||||
- **Selection pipeline**: gating (check bin/env/config requirements) -> scoring (keywords/patterns/tags) -> budget (fit within `SKILLS_MAX_TOKENS`) -> attenuation (trust-based tool ceiling)
|
- **Selection pipeline**: gating (check bin/env/config requirements) -> scoring (keywords/patterns/tags) -> budget (fit within `SKILLS_MAX_TOKENS`) -> attenuation (trust-based tool ceiling)
|
||||||
- **Skill tools**: `skill_list`, `skill_search`, `skill_install`, `skill_remove`
|
- **Skill tools**: `skill_list`, `skill_search`, `skill_install`, `skill_remove`
|
||||||
|
|
||||||
@@ -228,9 +228,9 @@ Persistent memory with hybrid search (FTS + vector via RRF). Four tools: `memory
|
|||||||
## Debugging
|
## Debugging
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
RUST_LOG=ironclaw=trace cargo run # verbose
|
RUST_LOG=optimclaw=trace cargo run # verbose
|
||||||
RUST_LOG=ironclaw::agent=debug cargo run # agent module only
|
RUST_LOG=optimclaw::agent=debug cargo run # agent module only
|
||||||
RUST_LOG=ironclaw=debug,tower_http=debug cargo run # + HTTP request logging
|
RUST_LOG=optimclaw=debug,tower_http=debug cargo run # + HTTP request logging
|
||||||
```
|
```
|
||||||
|
|
||||||
## Current Limitations
|
## Current Limitations
|
||||||
|
|||||||
+3
-3
@@ -3,8 +3,8 @@
|
|||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/nearai/ironclaw.git
|
git clone https://github.com/nearai/optimclaw.git
|
||||||
cd ironclaw
|
cd optimclaw
|
||||||
./scripts/dev-setup.sh
|
./scripts/dev-setup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ Select the appropriate track in the PR template based on what your changes touch
|
|||||||
|
|
||||||
## Database Changes
|
## Database Changes
|
||||||
|
|
||||||
IronClaw uses dual-backend persistence (PostgreSQL + libSQL). All new persistence features must support both backends. See `src/db/CLAUDE.md`.
|
OptimClaw uses dual-backend persistence (PostgreSQL + libSQL). All new persistence features must support both backends. See `src/db/CLAUDE.md`.
|
||||||
|
|
||||||
## Adding Dependencies
|
## Adding Dependencies
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
# IronClaw Coverage Plan: 63.3% to 95%
|
# OptimClaw Coverage Plan: 63.3% to 95%
|
||||||
|
|
||||||
> Generated 2025-03-06 from [Codecov](https://app.codecov.io/gh/nearai/ironclaw/tree/main/src)
|
> Generated 2025-03-06 from [Codecov](https://app.codecov.io/gh/nearai/optimclaw/tree/main/src)
|
||||||
|
|
||||||
## Current State
|
## Current State
|
||||||
|
|
||||||
|
|||||||
+7
-7
@@ -1,5 +1,5 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
members = [".", "crates/ironclaw_common", "crates/ironclaw_safety"]
|
members = [".", "crates/optimclaw_common", "crates/optimclaw_safety"]
|
||||||
exclude = [
|
exclude = [
|
||||||
"channels-src/discord",
|
"channels-src/discord",
|
||||||
"channels-src/telegram",
|
"channels-src/telegram",
|
||||||
@@ -15,19 +15,19 @@ exclude = [
|
|||||||
"tools-src/slack",
|
"tools-src/slack",
|
||||||
"tools-src/telegram",
|
"tools-src/telegram",
|
||||||
"fuzz",
|
"fuzz",
|
||||||
"crates/ironclaw_safety/fuzz",
|
"crates/optimclaw_safety/fuzz",
|
||||||
]
|
]
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "ironclaw"
|
name = "optimclaw"
|
||||||
version = "0.22.0"
|
version = "0.22.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.92"
|
rust-version = "1.92"
|
||||||
description = "Secure personal AI assistant that protects your data and expands its capabilities on the fly"
|
description = "Secure personal AI assistant that protects your data and expands its capabilities on the fly"
|
||||||
authors = ["NEAR AI <[email protected]>"]
|
authors = ["NEAR AI <[email protected]>"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
homepage = "https://github.com/nearai/ironclaw"
|
homepage = "https://github.com/nearai/optimclaw"
|
||||||
repository = "https://github.com/nearai/ironclaw"
|
repository = "https://github.com/nearai/optimclaw"
|
||||||
|
|
||||||
[package.metadata.wix]
|
[package.metadata.wix]
|
||||||
upgrade-guid = "D0156E61-BA37-451E-8AB9-1A2ECCCFA48F"
|
upgrade-guid = "D0156E61-BA37-451E-8AB9-1A2ECCCFA48F"
|
||||||
@@ -102,10 +102,10 @@ tower-http = { version = "0.6", features = ["trace", "cors", "set-header", "catc
|
|||||||
cron = "0.13"
|
cron = "0.13"
|
||||||
|
|
||||||
# Shared types
|
# Shared types
|
||||||
ironclaw_common = { path = "crates/ironclaw_common", version = "0.1.0" }
|
optimclaw_common = { path = "crates/optimclaw_common", version = "0.1.0" }
|
||||||
|
|
||||||
# Safety/sanitization
|
# Safety/sanitization
|
||||||
ironclaw_safety = { path = "crates/ironclaw_safety", version = "0.2.0" }
|
optimclaw_safety = { path = "crates/optimclaw_safety", version = "0.2.0" }
|
||||||
regex = "1"
|
regex = "1"
|
||||||
aho-corasick = "1"
|
aho-corasick = "1"
|
||||||
|
|
||||||
|
|||||||
+37
-37
@@ -1,6 +1,6 @@
|
|||||||
# IronClaw ↔ OpenClaw Feature Parity Matrix
|
# OptimClaw ↔ OpenClaw Feature Parity Matrix
|
||||||
|
|
||||||
This document tracks feature parity between IronClaw (Rust implementation) and OpenClaw (TypeScript reference implementation). Use this to coordinate work across developers.
|
This document tracks feature parity between OptimClaw (Rust implementation) and OpenClaw (TypeScript reference implementation). Use this to coordinate work across developers.
|
||||||
|
|
||||||
**Legend:**
|
**Legend:**
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 1. Architecture
|
## 1. Architecture
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Hub-and-spoke architecture | ✅ | ✅ | Web gateway as central hub |
|
| Hub-and-spoke architecture | ✅ | ✅ | Web gateway as central hub |
|
||||||
| WebSocket control plane | ✅ | ✅ | Gateway with WebSocket + SSE |
|
| WebSocket control plane | ✅ | ✅ | Gateway with WebSocket + SSE |
|
||||||
@@ -32,7 +32,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 2. Gateway System
|
## 2. Gateway System
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Gateway control plane | ✅ | ✅ | Web gateway with 40+ API endpoints |
|
| Gateway control plane | ✅ | ✅ | Web gateway with 40+ API endpoints |
|
||||||
| HTTP endpoints for Control UI | ✅ | ✅ | Web dashboard with chat, memory, jobs, logs, extensions |
|
| HTTP endpoints for Control UI | ✅ | ✅ | Web dashboard with chat, memory, jobs, logs, extensions |
|
||||||
@@ -62,12 +62,12 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 3. Messaging Channels
|
## 3. Messaging Channels
|
||||||
|
|
||||||
| Channel | OpenClaw | IronClaw | Priority | Notes |
|
| Channel | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|---------|----------|----------|----------|-------|
|
|---------|----------|----------|----------|-------|
|
||||||
| CLI/TUI | ✅ | ✅ | - | Ratatui-based TUI |
|
| CLI/TUI | ✅ | ✅ | - | Ratatui-based TUI |
|
||||||
| HTTP webhook | ✅ | ✅ | - | axum with secret validation |
|
| HTTP webhook | ✅ | ✅ | - | axum with secret validation |
|
||||||
| REPL (simple) | ✅ | ✅ | - | For testing |
|
| REPL (simple) | ✅ | ✅ | - | For testing |
|
||||||
| WASM channels | ❌ | ✅ | - | IronClaw innovation; host resolves owner scope vs sender identity |
|
| WASM channels | ❌ | ✅ | - | OptimClaw innovation; host resolves owner scope vs sender identity |
|
||||||
| WhatsApp | ✅ | ❌ | P1 | Baileys (Web), same-phone mode with echo detection |
|
| WhatsApp | ✅ | ❌ | P1 | Baileys (Web), same-phone mode with echo detection |
|
||||||
| Telegram | ✅ | ✅ | - | WASM channel(MTProto), DM pairing, caption, /start, bot_username, DM topics, setup-time owner auto-verification, owner-scoped persistence |
|
| Telegram | ✅ | ✅ | - | WASM channel(MTProto), DM pairing, caption, /start, bot_username, DM topics, setup-time owner auto-verification, owner-scoped persistence |
|
||||||
| Discord | ✅ | ❌ | P2 | discord.js, thread parent binding inheritance |
|
| Discord | ✅ | ❌ | P2 | discord.js, thread parent binding inheritance |
|
||||||
@@ -88,7 +88,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
### Telegram-Specific Features (since Feb 2025)
|
### Telegram-Specific Features (since Feb 2025)
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Forum topic creation | ✅ | ❌ | Create topics in forum groups |
|
| Forum topic creation | ✅ | ❌ | Create topics in forum groups |
|
||||||
| channel_post support | ✅ | ❌ | Bot-to-bot communication |
|
| channel_post support | ✅ | ❌ | Bot-to-bot communication |
|
||||||
@@ -100,7 +100,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
### Discord-Specific Features (since Feb 2025)
|
### Discord-Specific Features (since Feb 2025)
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Forwarded attachment downloads | ✅ | ❌ | Fetch media from forwarded messages |
|
| Forwarded attachment downloads | ✅ | ❌ | Fetch media from forwarded messages |
|
||||||
| Faster reaction state machine | ✅ | ❌ | Watchdog + debounce |
|
| Faster reaction state machine | ✅ | ❌ | Watchdog + debounce |
|
||||||
@@ -108,7 +108,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
### Slack-Specific Features (since Feb 2025)
|
### Slack-Specific Features (since Feb 2025)
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Streaming draft replies | ✅ | ❌ | Partial replies via draft message updates |
|
| Streaming draft replies | ✅ | ❌ | Partial replies via draft message updates |
|
||||||
| Configurable stream modes | ✅ | ❌ | Per-channel stream behavior |
|
| Configurable stream modes | ✅ | ❌ | Per-channel stream behavior |
|
||||||
@@ -117,23 +117,23 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
### Mattermost-Specific Features (since Mar 2026)
|
### Mattermost-Specific Features (since Mar 2026)
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Interactive buttons | ✅ | ❌ | Clickable message buttons with signed callback flow |
|
| Interactive buttons | ✅ | ❌ | Clickable message buttons with signed callback flow |
|
||||||
| Interactive model picker | ✅ | ❌ | In-channel provider/model chooser |
|
| Interactive model picker | ✅ | ❌ | In-channel provider/model chooser |
|
||||||
|
|
||||||
### Feishu/Lark-Specific Features (since Mar 2026)
|
### Feishu/Lark-Specific Features (since Mar 2026)
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Doc/table actions | ✅ | ❌ | `feishu_doc` supports tables, positional insert, color_text, image upload, and file upload |
|
| Doc/table actions | ✅ | ❌ | `feishu_doc` supports tables, positional insert, color_text, image upload, and file upload |
|
||||||
| Rich-text embedded media extraction | ✅ | ❌ | Pull video/media attachments from post messages |
|
| Rich-text embedded media extraction | ✅ | ❌ | Pull video/media attachments from post messages |
|
||||||
|
|
||||||
### Channel Features
|
### Channel Features
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| DM pairing codes | ✅ | ✅ | `ironclaw pairing list/approve`, host APIs |
|
| DM pairing codes | ✅ | ✅ | `optimclaw pairing list/approve`, host APIs |
|
||||||
| Allowlist/blocklist | ✅ | 🚧 | `allow_from` + pairing store + hardened command/group allowlists |
|
| Allowlist/blocklist | ✅ | 🚧 | `allow_from` + pairing store + hardened command/group allowlists |
|
||||||
| Self-message bypass | ✅ | ❌ | Own messages skip pairing |
|
| Self-message bypass | ✅ | ❌ | Own messages skip pairing |
|
||||||
| Mention-based activation | ✅ | ✅ | bot_username + respond_to_all_group_messages |
|
| Mention-based activation | ✅ | ✅ | bot_username + respond_to_all_group_messages |
|
||||||
@@ -151,7 +151,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 4. CLI Commands
|
## 4. CLI Commands
|
||||||
|
|
||||||
| Command | OpenClaw | IronClaw | Priority | Notes |
|
| Command | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|---------|----------|----------|----------|-------|
|
|---------|----------|----------|----------|-------|
|
||||||
| `run` (agent) | ✅ | ✅ | - | Default command |
|
| `run` (agent) | ✅ | ✅ | - | Default command |
|
||||||
| `tool install/list/remove` | ✅ | ✅ | - | WASM tools |
|
| `tool install/list/remove` | ✅ | ✅ | - | WASM tools |
|
||||||
@@ -189,9 +189,9 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 5. Agent System
|
## 5. Agent System
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Pi agent runtime | ✅ | ➖ | IronClaw uses custom runtime |
|
| Pi agent runtime | ✅ | ➖ | OptimClaw uses custom runtime |
|
||||||
| RPC-based execution | ✅ | ✅ | Orchestrator/worker pattern |
|
| RPC-based execution | ✅ | ✅ | Orchestrator/worker pattern |
|
||||||
| Multi-provider failover | ✅ | ✅ | `FailoverProvider` tries providers sequentially on retryable errors |
|
| Multi-provider failover | ✅ | ✅ | `FailoverProvider` tries providers sequentially on retryable errors |
|
||||||
| Per-sender sessions | ✅ | ✅ | |
|
| Per-sender sessions | ✅ | ✅ | |
|
||||||
@@ -232,7 +232,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 6. Model & Provider Support
|
## 6. Model & Provider Support
|
||||||
|
|
||||||
| Provider | OpenClaw | IronClaw | Priority | Notes |
|
| Provider | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|----------|----------|----------|----------|-------|
|
|----------|----------|----------|----------|-------|
|
||||||
| NEAR AI | ✅ | ✅ | - | Primary provider |
|
| NEAR AI | ✅ | ✅ | - | Primary provider |
|
||||||
| Anthropic (Claude) | ✅ | 🚧 | - | Via NEAR AI proxy; Opus 4.5, Sonnet 4, Sonnet 4.6, adaptive thinking default |
|
| Anthropic (Claude) | ✅ | 🚧 | - | Via NEAR AI proxy; Opus 4.5, Sonnet 4, Sonnet 4.6, adaptive thinking default |
|
||||||
@@ -245,7 +245,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
| Cloudflare Workers AI | ✅ | ✅ | P3 | Via `cloudflare` adapter |
|
| Cloudflare Workers AI | ✅ | ✅ | P3 | Via `cloudflare` adapter |
|
||||||
| NVIDIA API | ✅ | ✅ | P3 | Via `nvidia` adapter and `providers.json` |
|
| NVIDIA API | ✅ | ✅ | P3 | Via `nvidia` adapter and `providers.json` |
|
||||||
| OpenRouter | ✅ | ✅ | - | Via OpenAI-compatible provider (RigAdapter) |
|
| OpenRouter | ✅ | ✅ | - | Via OpenAI-compatible provider (RigAdapter) |
|
||||||
| Tinfoil | ❌ | ✅ | - | Private inference provider (IronClaw-only) |
|
| Tinfoil | ❌ | ✅ | - | Private inference provider (OptimClaw-only) |
|
||||||
| OpenAI-compatible | ❌ | ✅ | - | Generic OpenAI-compatible endpoint (RigAdapter) |
|
| OpenAI-compatible | ❌ | ✅ | - | Generic OpenAI-compatible endpoint (RigAdapter) |
|
||||||
| GitHub Copilot | ✅ | ✅ | - | Dedicated provider with OAuth token exchange (`GithubCopilotProvider`) |
|
| GitHub Copilot | ✅ | ✅ | - | Dedicated provider with OAuth token exchange (`GithubCopilotProvider`) |
|
||||||
| Ollama (local) | ✅ | ✅ | - | via `rig::providers::ollama` (full support) |
|
| Ollama (local) | ✅ | ✅ | - | via `rig::providers::ollama` (full support) |
|
||||||
@@ -257,7 +257,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
### Model Features
|
### Model Features
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Auto-discovery | ✅ | ❌ | |
|
| Auto-discovery | ✅ | ❌ | |
|
||||||
| Failover chains | ✅ | ✅ | `FailoverProvider` with configurable `fallback_model` |
|
| Failover chains | ✅ | ✅ | `FailoverProvider` with configurable `fallback_model` |
|
||||||
@@ -273,7 +273,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 7. Media Handling
|
## 7. Media Handling
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Priority | Notes |
|
| Feature | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|---------|----------|----------|----------|-------|
|
|---------|----------|----------|----------|-------|
|
||||||
| Image processing (Sharp) | ✅ | ❌ | P2 | Resize, format convert |
|
| Image processing (Sharp) | ✅ | ❌ | P2 | Resize, format convert |
|
||||||
| Configurable image resize dims | ✅ | ❌ | P2 | Per-agent dimension config |
|
| Configurable image resize dims | ✅ | ❌ | P2 | Per-agent dimension config |
|
||||||
@@ -296,12 +296,12 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 8. Plugin & Extension System
|
## 8. Plugin & Extension System
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Dynamic loading | ✅ | ✅ | WASM modules |
|
| Dynamic loading | ✅ | ✅ | WASM modules |
|
||||||
| Manifest validation | ✅ | ✅ | WASM metadata |
|
| Manifest validation | ✅ | ✅ | WASM metadata |
|
||||||
| HTTP path registration | ✅ | ❌ | Plugin routes |
|
| HTTP path registration | ✅ | ❌ | Plugin routes |
|
||||||
| Workspace-relative install | ✅ | ✅ | ~/.ironclaw/tools/ |
|
| Workspace-relative install | ✅ | ✅ | ~/.optimclaw/tools/ |
|
||||||
| Channel plugins | ✅ | ✅ | WASM channels |
|
| Channel plugins | ✅ | ✅ | WASM channels |
|
||||||
| Auth plugins | ✅ | ❌ | |
|
| Auth plugins | ✅ | ❌ | |
|
||||||
| Memory plugins | ✅ | ❌ | Custom backends + selectable memory slot |
|
| Memory plugins | ✅ | ❌ | Custom backends + selectable memory slot |
|
||||||
@@ -321,7 +321,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 9. Configuration System
|
## 9. Configuration System
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Primary config file | ✅ `~/.openclaw/openclaw.json` | ✅ `.env` | Different formats |
|
| Primary config file | ✅ `~/.openclaw/openclaw.json` | ✅ `.env` | Different formats |
|
||||||
| JSON5 support | ✅ | ❌ | Comments, trailing commas |
|
| JSON5 support | ✅ | ❌ | Comments, trailing commas |
|
||||||
@@ -330,7 +330,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
| Config validation/schema | ✅ | ✅ | Type-safe Config struct + `openclaw config validate` |
|
| Config validation/schema | ✅ | ✅ | Type-safe Config struct + `openclaw config validate` |
|
||||||
| Hot-reload | ✅ | ❌ | |
|
| Hot-reload | ✅ | ❌ | |
|
||||||
| Legacy migration | ✅ | ➖ | |
|
| Legacy migration | ✅ | ➖ | |
|
||||||
| State directory | ✅ `~/.openclaw-state/` | ✅ `~/.ironclaw/` | |
|
| State directory | ✅ `~/.openclaw-state/` | ✅ `~/.optimclaw/` | |
|
||||||
| Credentials directory | ✅ | ✅ | Session files |
|
| Credentials directory | ✅ | ✅ | Session files |
|
||||||
| Full model compat fields in schema | ✅ | ❌ | pi-ai model compat exposed in config |
|
| Full model compat fields in schema | ✅ | ❌ | pi-ai model compat exposed in config |
|
||||||
|
|
||||||
@@ -340,7 +340,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 10. Memory & Knowledge System
|
## 10. Memory & Knowledge System
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Vector memory | ✅ | ✅ | pgvector |
|
| Vector memory | ✅ | ✅ | pgvector |
|
||||||
| Session-based memory | ✅ | ✅ | |
|
| Session-based memory | ✅ | ✅ | |
|
||||||
@@ -351,7 +351,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
| OpenAI embeddings | ✅ | ✅ | |
|
| OpenAI embeddings | ✅ | ✅ | |
|
||||||
| Gemini embeddings | ✅ | ❌ | |
|
| Gemini embeddings | ✅ | ❌ | |
|
||||||
| Local embeddings | ✅ | ❌ | |
|
| Local embeddings | ✅ | ❌ | |
|
||||||
| SQLite-vec backend | ✅ | ❌ | IronClaw uses PostgreSQL |
|
| SQLite-vec backend | ✅ | ❌ | OptimClaw uses PostgreSQL |
|
||||||
| LanceDB backend | ✅ | ❌ | Configurable auto-capture max length |
|
| LanceDB backend | ✅ | ❌ | Configurable auto-capture max length |
|
||||||
| QMD backend | ✅ | ❌ | |
|
| QMD backend | ✅ | ❌ | |
|
||||||
| Atomic reindexing | ✅ | ✅ | |
|
| Atomic reindexing | ✅ | ✅ | |
|
||||||
@@ -369,7 +369,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 11. Mobile Apps
|
## 11. Mobile Apps
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Priority | Notes |
|
| Feature | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|---------|----------|----------|----------|-------|
|
|---------|----------|----------|----------|-------|
|
||||||
| iOS app (SwiftUI) | ✅ | 🚫 | - | Out of scope initially |
|
| iOS app (SwiftUI) | ✅ | 🚫 | - | Out of scope initially |
|
||||||
| Android app (Kotlin) | ✅ | 🚫 | - | Out of scope initially |
|
| Android app (Kotlin) | ✅ | 🚫 | - | Out of scope initially |
|
||||||
@@ -390,7 +390,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 12. macOS App
|
## 12. macOS App
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Priority | Notes |
|
| Feature | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|---------|----------|----------|----------|-------|
|
|---------|----------|----------|----------|-------|
|
||||||
| SwiftUI native app | ✅ | 🚫 | - | Out of scope |
|
| SwiftUI native app | ✅ | 🚫 | - | Out of scope |
|
||||||
| Menu bar presence | ✅ | 🚫 | - | Animated menubar icon |
|
| Menu bar presence | ✅ | 🚫 | - | Animated menubar icon |
|
||||||
@@ -411,7 +411,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 13. Web Interface
|
## 13. Web Interface
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Priority | Notes |
|
| Feature | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|---------|----------|----------|----------|-------|
|
|---------|----------|----------|----------|-------|
|
||||||
| Control UI Dashboard | ✅ | ✅ | - | Web gateway with chat, memory, jobs, logs, extensions |
|
| Control UI Dashboard | ✅ | ✅ | - | Web gateway with chat, memory, jobs, logs, extensions |
|
||||||
| Channel status view | ✅ | 🚧 | P2 | Gateway status widget, full channel view pending |
|
| Channel status view | ✅ | 🚧 | P2 | Gateway status widget, full channel view pending |
|
||||||
@@ -431,7 +431,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 14. Automation
|
## 14. Automation
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Priority | Notes |
|
| Feature | OpenClaw | OptimClaw | Priority | Notes |
|
||||||
|---------|----------|----------|----------|-------|
|
|---------|----------|----------|----------|-------|
|
||||||
| Cron jobs | ✅ | ✅ | - | Routines with cron trigger |
|
| Cron jobs | ✅ | ✅ | - | Routines with cron trigger |
|
||||||
| Per-job model fallback override | ✅ | ❌ | P2 | `payload.fallbacks` overrides agent-level fallbacks |
|
| Per-job model fallback override | ✅ | ❌ | P2 | `payload.fallbacks` overrides agent-level fallbacks |
|
||||||
@@ -465,14 +465,14 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 15. Security Features
|
## 15. Security Features
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Gateway token auth | ✅ | ✅ | Bearer token auth on web gateway |
|
| Gateway token auth | ✅ | ✅ | Bearer token auth on web gateway |
|
||||||
| Device pairing | ✅ | ❌ | |
|
| Device pairing | ✅ | ❌ | |
|
||||||
| Tailscale identity | ✅ | ❌ | |
|
| Tailscale identity | ✅ | ❌ | |
|
||||||
| Trusted-proxy auth | ✅ | ❌ | Header-based reverse proxy auth |
|
| Trusted-proxy auth | ✅ | ❌ | Header-based reverse proxy auth |
|
||||||
| OAuth flows | ✅ | 🚧 | NEAR AI OAuth + Gemini OAuth (PKCE, S256) + hosted extension/MCP OAuth broker; external auth-proxy rollout still pending |
|
| OAuth flows | ✅ | 🚧 | NEAR AI OAuth + Gemini OAuth (PKCE, S256) + hosted extension/MCP OAuth broker; external auth-proxy rollout still pending |
|
||||||
| DM pairing verification | ✅ | ✅ | ironclaw pairing approve, host APIs |
|
| DM pairing verification | ✅ | ✅ | optimclaw pairing approve, host APIs |
|
||||||
| Allowlist/blocklist | ✅ | 🚧 | allow_from + pairing store |
|
| Allowlist/blocklist | ✅ | 🚧 | allow_from + pairing store |
|
||||||
| Per-group tool policies | ✅ | ❌ | |
|
| Per-group tool policies | ✅ | ❌ | |
|
||||||
| Exec approvals | ✅ | ✅ | TUI overlay |
|
| Exec approvals | ✅ | ✅ | TUI overlay |
|
||||||
@@ -483,7 +483,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
| Loopback-first | ✅ | 🚧 | HTTP binds 0.0.0.0 |
|
| Loopback-first | ✅ | 🚧 | HTTP binds 0.0.0.0 |
|
||||||
| Docker sandbox | ✅ | ✅ | Orchestrator/worker containers |
|
| Docker sandbox | ✅ | ✅ | Orchestrator/worker containers |
|
||||||
| Podman support | ✅ | ❌ | Alternative to Docker |
|
| Podman support | ✅ | ❌ | Alternative to Docker |
|
||||||
| WASM sandbox | ❌ | ✅ | IronClaw innovation |
|
| WASM sandbox | ❌ | ✅ | OptimClaw innovation |
|
||||||
| Sandbox env sanitization | ✅ | 🚧 | Shell tool scrubs env vars (secret detection); docker container env sanitization partial |
|
| Sandbox env sanitization | ✅ | 🚧 | Shell tool scrubs env vars (secret detection); docker container env sanitization partial |
|
||||||
| Tool policies | ✅ | ✅ | |
|
| Tool policies | ✅ | ✅ | |
|
||||||
| Elevated mode | ✅ | ❌ | |
|
| Elevated mode | ✅ | ❌ | |
|
||||||
@@ -505,7 +505,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## 16. Development & Build System
|
## 16. Development & Build System
|
||||||
|
|
||||||
| Feature | OpenClaw | IronClaw | Notes |
|
| Feature | OpenClaw | OptimClaw | Notes |
|
||||||
|---------|----------|----------|-------|
|
|---------|----------|----------|-------|
|
||||||
| Primary language | TypeScript | Rust | Different ecosystems |
|
| Primary language | TypeScript | Rust | Different ecosystems |
|
||||||
| Build tool | tsdown | cargo | |
|
| Build tool | tsdown | cargo | |
|
||||||
@@ -531,7 +531,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
- ✅ TUI channel with approval overlays
|
- ✅ TUI channel with approval overlays
|
||||||
- ✅ HTTP webhook channel
|
- ✅ HTTP webhook channel
|
||||||
- ✅ DM pairing (ironclaw pairing list/approve, host APIs)
|
- ✅ DM pairing (optimclaw pairing list/approve, host APIs)
|
||||||
- ✅ WASM tool sandbox
|
- ✅ WASM tool sandbox
|
||||||
- ✅ Workspace/memory with hybrid search + embeddings batching
|
- ✅ Workspace/memory with hybrid search + embeddings batching
|
||||||
- ✅ Prompt injection defense
|
- ✅ Prompt injection defense
|
||||||
@@ -605,7 +605,7 @@ This document tracks feature parity between IronClaw (Rust implementation) and O
|
|||||||
|
|
||||||
## Deviations from OpenClaw
|
## Deviations from OpenClaw
|
||||||
|
|
||||||
IronClaw intentionally differs from OpenClaw in these ways:
|
OptimClaw intentionally differs from OpenClaw in these ways:
|
||||||
|
|
||||||
1. **Rust vs TypeScript**: Native performance, memory safety, single binary distribution
|
1. **Rust vs TypeScript**: Native performance, memory safety, single binary distribution
|
||||||
2. **WASM sandbox vs Docker**: Lighter weight, faster startup, capability-based security
|
2. **WASM sandbox vs Docker**: Lighter weight, faster startup, capability-based security
|
||||||
@@ -613,7 +613,7 @@ IronClaw intentionally differs from OpenClaw in these ways:
|
|||||||
4. **NEAR AI focus**: Primary provider with session-based auth
|
4. **NEAR AI focus**: Primary provider with session-based auth
|
||||||
5. **No mobile/desktop apps**: Focus on server-side and CLI initially
|
5. **No mobile/desktop apps**: Focus on server-side and CLI initially
|
||||||
6. **WASM channels**: Novel extension mechanism not in OpenClaw
|
6. **WASM channels**: Novel extension mechanism not in OpenClaw
|
||||||
7. **Tinfoil private inference**: IronClaw-only provider for private/encrypted inference
|
7. **Tinfoil private inference**: OptimClaw-only provider for private/encrypted inference
|
||||||
8. **GitHub WASM tool**: Native GitHub integration as WASM tool
|
8. **GitHub WASM tool**: Native GitHub integration as WASM tool
|
||||||
9. **Prompt-based skills**: Different approach than OpenClaw capability bundles (trust gating, attenuation)
|
9. **Prompt-based skills**: Different approach than OpenClaw capability bundles (trust gating, attenuation)
|
||||||
|
|
||||||
|
|||||||
+26
-26
@@ -1,8 +1,8 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="ironclaw.png?v=2" alt="IronClaw" width="200"/>
|
<img src="optimclaw.png?v=2" alt="OptimClaw" width="200"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h1 align="center">IronClaw</h1>
|
<h1 align="center">OptimClaw</h1>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<strong>あなたの味方になる、安全なパーソナルAIアシスタント</strong>
|
<strong>あなたの味方になる、安全なパーソナルAIアシスタント</strong>
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="License: MIT OR Apache-2.0" /></a>
|
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="License: MIT OR Apache-2.0" /></a>
|
||||||
<a href="https://t.me/ironclawAI"><img src="https://img.shields.io/badge/Telegram-%40ironclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @ironclawAI" /></a>
|
<a href="https://t.me/optimclawAI"><img src="https://img.shields.io/badge/Telegram-%40optimclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @optimclawAI" /></a>
|
||||||
<a href="https://www.reddit.com/r/ironclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FironclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/ironclawAI" /></a>
|
<a href="https://www.reddit.com/r/optimclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FoptimclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/optimclawAI" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -34,16 +34,16 @@
|
|||||||
|
|
||||||
## フィロソフィー
|
## フィロソフィー
|
||||||
|
|
||||||
IronClawはシンプルな原則に基づいて構築されています:**あなたのAIアシスタントは、あなたのために働くべきであり、あなたに不利益をもたらすべきではありません。**
|
OptimClawはシンプルな原則に基づいて構築されています:**あなたのAIアシスタントは、あなたのために働くべきであり、あなたに不利益をもたらすべきではありません。**
|
||||||
|
|
||||||
AIシステムがデータの取り扱いについて不透明になり、企業の利益に沿って調整されることが増えている世界で、IronClawは異なるアプローチを取ります:
|
AIシステムがデータの取り扱いについて不透明になり、企業の利益に沿って調整されることが増えている世界で、OptimClawは異なるアプローチを取ります:
|
||||||
|
|
||||||
- **あなたのデータはあなたのもの** - すべての情報はローカルに保存・暗号化され、あなたの管理下から離れることはありません
|
- **あなたのデータはあなたのもの** - すべての情報はローカルに保存・暗号化され、あなたの管理下から離れることはありません
|
||||||
- **設計段階からの透明性** - オープンソース、監査可能、隠れたテレメトリやデータ収集なし
|
- **設計段階からの透明性** - オープンソース、監査可能、隠れたテレメトリやデータ収集なし
|
||||||
- **自己拡張する能力** - ベンダーのアップデートを待たずに、新しいツールをその場で構築
|
- **自己拡張する能力** - ベンダーのアップデートを待たずに、新しいツールをその場で構築
|
||||||
- **多層防御** - 複数のセキュリティレイヤーがプロンプトインジェクションやデータ流出から保護
|
- **多層防御** - 複数のセキュリティレイヤーがプロンプトインジェクションやデータ流出から保護
|
||||||
|
|
||||||
IronClawは、個人生活にも仕事にも本当に信頼できるAIアシスタントです。
|
OptimClawは、個人生活にも仕事にも本当に信頼できるAIアシスタントです。
|
||||||
|
|
||||||
## 機能
|
## 機能
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ IronClawは、個人生活にも仕事にも本当に信頼できるAIアシス
|
|||||||
|
|
||||||
### 自己拡張
|
### 自己拡張
|
||||||
|
|
||||||
- **動的ツール構築** - 必要なものを説明すると、IronClawがWASMツールとして構築
|
- **動的ツール構築** - 必要なものを説明すると、OptimClawがWASMツールとして構築
|
||||||
- **MCPプロトコル** - Model Context Protocolサーバーに接続して追加機能を利用
|
- **MCPプロトコル** - Model Context Protocolサーバーに接続して追加機能を利用
|
||||||
- **プラグインアーキテクチャ** - 再起動なしで新しいWASMツールやチャネルを追加
|
- **プラグインアーキテクチャ** - 再起動なしで新しいWASMツールやチャネルを追加
|
||||||
|
|
||||||
@@ -86,12 +86,12 @@ IronClawは、個人生活にも仕事にも本当に信頼できるAIアシス
|
|||||||
|
|
||||||
## ダウンロードまたはビルド
|
## ダウンロードまたはビルド
|
||||||
|
|
||||||
最新のアップデートは[リリースページ](https://github.com/nearai/ironclaw/releases/)をご覧ください。
|
最新のアップデートは[リリースページ](https://github.com/nearai/optimclaw/releases/)をご覧ください。
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Windowsインストーラーでインストール(Windows)</summary>
|
<summary>Windowsインストーラーでインストール(Windows)</summary>
|
||||||
|
|
||||||
[Windowsインストーラー](https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-x86_64-pc-windows-msvc.msi)をダウンロードして実行してください。
|
[Windowsインストーラー](https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-x86_64-pc-windows-msvc.msi)をダウンロードして実行してください。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ IronClawは、個人生活にも仕事にも本当に信頼できるAIアシス
|
|||||||
<summary>PowerShellスクリプトでインストール(Windows)</summary>
|
<summary>PowerShellスクリプトでインストール(Windows)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.ps1 | iex
|
irm https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.ps1 | iex
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -108,7 +108,7 @@ irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-install
|
|||||||
<summary>シェルスクリプトでインストール(macOS、Linux、Windows/WSL)</summary>
|
<summary>シェルスクリプトでインストール(macOS、Linux、Windows/WSL)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.sh | sh
|
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.sh | sh
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/release
|
|||||||
<summary>Homebrewでインストール(macOS/Linux)</summary>
|
<summary>Homebrewでインストール(macOS/Linux)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
brew install ironclaw
|
brew install optimclaw
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -128,8 +128,8 @@ brew install ironclaw
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# リポジトリをクローン
|
# リポジトリをクローン
|
||||||
git clone https://github.com/nearai/ironclaw.git
|
git clone https://github.com/nearai/optimclaw.git
|
||||||
cd ironclaw
|
cd optimclaw
|
||||||
|
|
||||||
# ビルド
|
# ビルド
|
||||||
cargo build --release
|
cargo build --release
|
||||||
@@ -146,25 +146,25 @@ cargo test
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# データベースを作成
|
# データベースを作成
|
||||||
createdb ironclaw
|
createdb optimclaw
|
||||||
|
|
||||||
# pgvectorを有効化
|
# pgvectorを有効化
|
||||||
psql ironclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
psql optimclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 設定
|
## 設定
|
||||||
|
|
||||||
セットアップウィザードを実行してIronClawを設定します:
|
セットアップウィザードを実行してOptimClawを設定します:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
```
|
```
|
||||||
|
|
||||||
ウィザードは、データベース接続、NEAR AI認証(ブラウザOAuth経由)、シークレットの暗号化(システムキーチェーンを使用)を処理します。設定は接続されたデータベースに永続化されます。ブートストラップ変数(例:`DATABASE_URL`、`LLM_BACKEND`)は、データベース接続前に利用できるよう`~/.ironclaw/.env`に書き込まれます。
|
ウィザードは、データベース接続、NEAR AI認証(ブラウザOAuth経由)、シークレットの暗号化(システムキーチェーンを使用)を処理します。設定は接続されたデータベースに永続化されます。ブートストラップ変数(例:`DATABASE_URL`、`LLM_BACKEND`)は、データベース接続前に利用できるよう`~/.optimclaw/.env`に書き込まれます。
|
||||||
|
|
||||||
### 代替LLMプロバイダー
|
### 代替LLMプロバイダー
|
||||||
|
|
||||||
IronClawはデフォルトでNEAR AIを使用しますが、多くのLLMプロバイダーをすぐに利用できます。組み込みプロバイダーには**Anthropic**、**OpenAI**、**Google Gemini**、**MiniMax**、**Mistral**、**Ollama**(ローカル)が含まれます。**OpenRouter**(300以上のモデル)、**Together AI**、**Fireworks AI**、セルフホストサーバー(**vLLM**、**LiteLLM**)などのOpenAI互換サービスもサポートされています。
|
OptimClawはデフォルトでNEAR AIを使用しますが、多くのLLMプロバイダーをすぐに利用できます。組み込みプロバイダーには**Anthropic**、**OpenAI**、**Google Gemini**、**MiniMax**、**Mistral**、**Ollama**(ローカル)が含まれます。**OpenRouter**(300以上のモデル)、**Together AI**、**Fireworks AI**、セルフホストサーバー(**vLLM**、**LiteLLM**)などのOpenAI互換サービスもサポートされています。
|
||||||
|
|
||||||
ウィザードでプロバイダーを選択するか、環境変数を直接設定してください:
|
ウィザードでプロバイダーを選択するか、環境変数を直接設定してください:
|
||||||
|
|
||||||
@@ -184,7 +184,7 @@ LLM_MODEL=anthropic/claude-sonnet-4
|
|||||||
|
|
||||||
## セキュリティ
|
## セキュリティ
|
||||||
|
|
||||||
IronClawは、データを保護し悪用を防ぐために多層防御を実装しています。
|
OptimClawは、データを保護し悪用を防ぐために多層防御を実装しています。
|
||||||
|
|
||||||
### WASMサンドボックス
|
### WASMサンドボックス
|
||||||
|
|
||||||
@@ -280,13 +280,13 @@ WASM ──► 許可リスト ──► リーク ──► 認証情報 ─
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 初回セットアップ(データベース、認証などを設定)
|
# 初回セットアップ(データベース、認証などを設定)
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
|
|
||||||
# インタラクティブREPLを起動
|
# インタラクティブREPLを起動
|
||||||
cargo run
|
cargo run
|
||||||
|
|
||||||
# デバッグログ付き
|
# デバッグログ付き
|
||||||
RUST_LOG=ironclaw=debug cargo run
|
RUST_LOG=optimclaw=debug cargo run
|
||||||
```
|
```
|
||||||
|
|
||||||
## 開発
|
## 開発
|
||||||
@@ -299,7 +299,7 @@ cargo fmt
|
|||||||
cargo clippy --all --benches --tests --examples --all-features
|
cargo clippy --all --benches --tests --examples --all-features
|
||||||
|
|
||||||
# テスト実行
|
# テスト実行
|
||||||
createdb ironclaw_test
|
createdb optimclaw_test
|
||||||
cargo test
|
cargo test
|
||||||
|
|
||||||
# 特定のテストを実行
|
# 特定のテストを実行
|
||||||
@@ -311,7 +311,7 @@ cargo test test_name
|
|||||||
|
|
||||||
## OpenClawの系譜
|
## OpenClawの系譜
|
||||||
|
|
||||||
IronClawは[OpenClaw](https://github.com/openclaw/openclaw)にインスパイアされたRust再実装です。完全な対応表は[FEATURE_PARITY.md](FEATURE_PARITY.md)をご覧ください。
|
OptimClawは[OpenClaw](https://github.com/openclaw/openclaw)にインスパイアされたRust再実装です。完全な対応表は[FEATURE_PARITY.md](FEATURE_PARITY.md)をご覧ください。
|
||||||
|
|
||||||
主な違い:
|
主な違い:
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="ironclaw.png?v=2" alt="IronClaw" width="200"/>
|
<img src="optimclaw.png?v=2" alt="OptimClaw" width="200"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h1 align="center">IronClaw</h1>
|
<h1 align="center">OptimClaw</h1>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<strong>Your secure personal AI assistant, always on your side</strong>
|
<strong>Your secure personal AI assistant, always on your side</strong>
|
||||||
@@ -10,10 +10,10 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="License: MIT OR Apache-2.0" /></a>
|
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="License: MIT OR Apache-2.0" /></a>
|
||||||
<a href="https://t.me/ironclawAI"><img src="https://img.shields.io/badge/Telegram-%40ironclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @ironclawAI" /></a>
|
<a href="https://t.me/optimclawAI"><img src="https://img.shields.io/badge/Telegram-%40optimclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @optimclawAI" /></a>
|
||||||
<a href="https://www.reddit.com/r/ironclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FironclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/ironclawAI" /></a>
|
<a href="https://www.reddit.com/r/optimclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FoptimclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/optimclawAI" /></a>
|
||||||
<a href="https://gitcgr.com/nearai/ironclaw">
|
<a href="https://gitcgr.com/nearai/optimclaw">
|
||||||
<img src="https://gitcgr.com/badge/nearai/ironclaw.svg" alt="gitcgr" />
|
<img src="https://gitcgr.com/badge/nearai/optimclaw.svg" alt="gitcgr" />
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -37,16 +37,16 @@
|
|||||||
|
|
||||||
## Philosophy
|
## Philosophy
|
||||||
|
|
||||||
IronClaw is built on a simple principle: **your AI assistant should work for you, not against you**.
|
OptimClaw is built on a simple principle: **your AI assistant should work for you, not against you**.
|
||||||
|
|
||||||
In a world where AI systems are increasingly opaque about data handling and aligned with corporate interests, IronClaw takes a different approach:
|
In a world where AI systems are increasingly opaque about data handling and aligned with corporate interests, OptimClaw takes a different approach:
|
||||||
|
|
||||||
- **Your data stays yours** - All information is stored locally, encrypted, and never leaves your control
|
- **Your data stays yours** - All information is stored locally, encrypted, and never leaves your control
|
||||||
- **Transparency by design** - Open source, auditable, no hidden telemetry or data harvesting
|
- **Transparency by design** - Open source, auditable, no hidden telemetry or data harvesting
|
||||||
- **Self-expanding capabilities** - Build new tools on the fly without waiting for vendor updates
|
- **Self-expanding capabilities** - Build new tools on the fly without waiting for vendor updates
|
||||||
- **Defense in depth** - Multiple security layers protect against prompt injection and data exfiltration
|
- **Defense in depth** - Multiple security layers protect against prompt injection and data exfiltration
|
||||||
|
|
||||||
IronClaw is the AI assistant you can actually trust with your personal and professional life.
|
OptimClaw is the AI assistant you can actually trust with your personal and professional life.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ IronClaw is the AI assistant you can actually trust with your personal and profe
|
|||||||
|
|
||||||
### Self-Expanding
|
### Self-Expanding
|
||||||
|
|
||||||
- **Dynamic Tool Building** - Describe what you need, and IronClaw builds it as a WASM tool
|
- **Dynamic Tool Building** - Describe what you need, and OptimClaw builds it as a WASM tool
|
||||||
- **MCP Protocol** - Connect to Model Context Protocol servers for additional capabilities
|
- **MCP Protocol** - Connect to Model Context Protocol servers for additional capabilities
|
||||||
- **Plugin Architecture** - Drop in new WASM tools and channels without restarting
|
- **Plugin Architecture** - Drop in new WASM tools and channels without restarting
|
||||||
|
|
||||||
@@ -89,12 +89,12 @@ IronClaw is the AI assistant you can actually trust with your personal and profe
|
|||||||
|
|
||||||
## Download or Build
|
## Download or Build
|
||||||
|
|
||||||
Visit [Releases page](https://github.com/nearai/ironclaw/releases/) to see the latest updates.
|
Visit [Releases page](https://github.com/nearai/optimclaw/releases/) to see the latest updates.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Install via Windows Installer (Windows)</summary>
|
<summary>Install via Windows Installer (Windows)</summary>
|
||||||
|
|
||||||
Download the [Windows Installer](https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-x86_64-pc-windows-msvc.msi) and run it.
|
Download the [Windows Installer](https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-x86_64-pc-windows-msvc.msi) and run it.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ Download the [Windows Installer](https://github.com/nearai/ironclaw/releases/lat
|
|||||||
<summary>Install via powershell script (Windows)</summary>
|
<summary>Install via powershell script (Windows)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.ps1 | iex
|
irm https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.ps1 | iex
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -111,7 +111,7 @@ irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-install
|
|||||||
<summary>Install via shell script (macOS, Linux, Windows/WSL)</summary>
|
<summary>Install via shell script (macOS, Linux, Windows/WSL)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.sh | sh
|
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.sh | sh
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/release
|
|||||||
<summary>Install via Homebrew (macOS/Linux)</summary>
|
<summary>Install via Homebrew (macOS/Linux)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
brew install ironclaw
|
brew install optimclaw
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -131,8 +131,8 @@ Install it with `cargo`, just make sure you have [Rust](https://rustup.rs) insta
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone the repository
|
# Clone the repository
|
||||||
git clone https://github.com/nearai/ironclaw.git
|
git clone https://github.com/nearai/optimclaw.git
|
||||||
cd ironclaw
|
cd optimclaw
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
cargo build --release
|
cargo build --release
|
||||||
@@ -149,28 +149,28 @@ For **full release** (after modifying channel sources), run `./scripts/build-all
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create database
|
# Create database
|
||||||
createdb ironclaw
|
createdb optimclaw
|
||||||
|
|
||||||
# Enable pgvector
|
# Enable pgvector
|
||||||
psql ironclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
psql optimclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Run the setup wizard to configure IronClaw:
|
Run the setup wizard to configure OptimClaw:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
```
|
```
|
||||||
|
|
||||||
The wizard handles database connection, NEAR AI authentication (via browser OAuth),
|
The wizard handles database connection, NEAR AI authentication (via browser OAuth),
|
||||||
and secrets encryption (using your system keychain). Settings are persisted in the
|
and secrets encryption (using your system keychain). Settings are persisted in the
|
||||||
connected database; bootstrap variables (e.g. `DATABASE_URL`, `LLM_BACKEND`) are
|
connected database; bootstrap variables (e.g. `DATABASE_URL`, `LLM_BACKEND`) are
|
||||||
written to `~/.ironclaw/.env` so they are available before the database connects.
|
written to `~/.optimclaw/.env` so they are available before the database connects.
|
||||||
|
|
||||||
### Alternative LLM Providers
|
### Alternative LLM Providers
|
||||||
|
|
||||||
IronClaw defaults to NEAR AI but supports many LLM providers out of the box.
|
OptimClaw defaults to NEAR AI but supports many LLM providers out of the box.
|
||||||
Built-in providers include **Anthropic**, **OpenAI**, **GitHub Copilot**, **Google Gemini**, **MiniMax**,
|
Built-in providers include **Anthropic**, **OpenAI**, **GitHub Copilot**, **Google Gemini**, **MiniMax**,
|
||||||
**Mistral**, and **Ollama** (local). OpenAI-compatible services like **OpenRouter**
|
**Mistral**, and **Ollama** (local). OpenAI-compatible services like **OpenRouter**
|
||||||
(300+ models), **Together AI**, **Fireworks AI**, and self-hosted servers (**vLLM**,
|
(300+ models), **Together AI**, **Fireworks AI**, and self-hosted servers (**vLLM**,
|
||||||
@@ -194,7 +194,7 @@ See [docs/LLM_PROVIDERS.md](docs/LLM_PROVIDERS.md) for a full provider guide.
|
|||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|
||||||
IronClaw implements defense in depth to protect your data and prevent misuse.
|
OptimClaw implements defense in depth to protect your data and prevent misuse.
|
||||||
|
|
||||||
### WASM Sandbox
|
### WASM Sandbox
|
||||||
|
|
||||||
@@ -287,13 +287,13 @@ External content passes through multiple security layers:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# First-time setup (configures database, auth, etc.)
|
# First-time setup (configures database, auth, etc.)
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
|
|
||||||
# Start interactive REPL
|
# Start interactive REPL
|
||||||
cargo run
|
cargo run
|
||||||
|
|
||||||
# With debug logging
|
# With debug logging
|
||||||
RUST_LOG=ironclaw=debug cargo run
|
RUST_LOG=optimclaw=debug cargo run
|
||||||
```
|
```
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
@@ -306,7 +306,7 @@ cargo fmt
|
|||||||
cargo clippy --all --benches --tests --examples --all-features
|
cargo clippy --all --benches --tests --examples --all-features
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
createdb ironclaw_test
|
createdb optimclaw_test
|
||||||
cargo test
|
cargo test
|
||||||
|
|
||||||
# Run specific test
|
# Run specific test
|
||||||
@@ -318,7 +318,7 @@ cargo test test_name
|
|||||||
|
|
||||||
## OpenClaw Heritage
|
## OpenClaw Heritage
|
||||||
|
|
||||||
IronClaw is a Rust reimplementation inspired by [OpenClaw](https://github.com/openclaw/openclaw). See [FEATURE_PARITY.md](FEATURE_PARITY.md) for the complete tracking matrix.
|
OptimClaw is a Rust reimplementation inspired by [OpenClaw](https://github.com/openclaw/openclaw). See [FEATURE_PARITY.md](FEATURE_PARITY.md) for the complete tracking matrix.
|
||||||
|
|
||||||
Key differences:
|
Key differences:
|
||||||
|
|
||||||
|
|||||||
+26
-26
@@ -1,8 +1,8 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="ironclaw.png?v=2" alt="IronClaw" width="200"/>
|
<img src="optimclaw.png?v=2" alt="OptimClaw" width="200"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h1 align="center">IronClaw</h1>
|
<h1 align="center">OptimClaw</h1>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<strong>Ваш защищенный персональный AI-ассистент, всегда на вашей стороне</strong>
|
<strong>Ваш защищенный персональный AI-ассистент, всегда на вашей стороне</strong>
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="Лицензия: MIT OR Apache-2.0" /></a>
|
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="Лицензия: MIT OR Apache-2.0" /></a>
|
||||||
<a href="https://t.me/ironclawAI"><img src="https://img.shields.io/badge/Telegram-%40ironclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @ironclawAI" /></a>
|
<a href="https://t.me/optimclawAI"><img src="https://img.shields.io/badge/Telegram-%40optimclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @optimclawAI" /></a>
|
||||||
<a href="https://www.reddit.com/r/ironclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FironclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/ironclawAI" /></a>
|
<a href="https://www.reddit.com/r/optimclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FoptimclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/optimclawAI" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -34,16 +34,16 @@
|
|||||||
|
|
||||||
## Философия
|
## Философия
|
||||||
|
|
||||||
IronClaw построен на простом принципе: **ваш AI-ассистент должен работать на вас, а не против вас**.
|
OptimClaw построен на простом принципе: **ваш AI-ассистент должен работать на вас, а не против вас**.
|
||||||
|
|
||||||
В мире, где системы ИИ становятся все более непрозрачными в вопросах обработки данных и ориентируются на корпоративные интересы, IronClaw выбирает другой путь:
|
В мире, где системы ИИ становятся все более непрозрачными в вопросах обработки данных и ориентируются на корпоративные интересы, OptimClaw выбирает другой путь:
|
||||||
|
|
||||||
- **Ваши данные остаются вашими** — вся информация хранится локально, зашифрована и никогда не покидает ваш контроль.
|
- **Ваши данные остаются вашими** — вся информация хранится локально, зашифрована и никогда не покидает ваш контроль.
|
||||||
- **Прозрачность по умолчанию** — открытый исходный код, возможность аудита, отсутствие скрытой телеметрии или сбора данных.
|
- **Прозрачность по умолчанию** — открытый исходный код, возможность аудита, отсутствие скрытой телеметрии или сбора данных.
|
||||||
- **Саморасширяемые возможности** — создавайте новые инструменты «на лету», не дожидаясь обновлений от вендора.
|
- **Саморасширяемые возможности** — создавайте новые инструменты «на лету», не дожидаясь обновлений от вендора.
|
||||||
- **Глубокая защита** — несколько уровней безопасности защищают от инъекций промптов и утечки данных.
|
- **Глубокая защита** — несколько уровней безопасности защищают от инъекций промптов и утечки данных.
|
||||||
|
|
||||||
IronClaw — это AI-ассистент, которому вы действительно можете доверять в личной и профессиональной жизни.
|
OptimClaw — это AI-ассистент, которому вы действительно можете доверять в личной и профессиональной жизни.
|
||||||
|
|
||||||
## Возможности
|
## Возможности
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ IronClaw — это AI-ассистент, которому вы действи
|
|||||||
|
|
||||||
### Саморасширяемый
|
### Саморасширяемый
|
||||||
|
|
||||||
- **Динамическое создание инструментов** — опишите, что вам нужно, и IronClaw создаст это как инструмент WASM.
|
- **Динамическое создание инструментов** — опишите, что вам нужно, и OptimClaw создаст это как инструмент WASM.
|
||||||
- **Протокол MCP** — подключайтесь к серверам Model Context Protocol для получения дополнительных возможностей.
|
- **Протокол MCP** — подключайтесь к серверам Model Context Protocol для получения дополнительных возможностей.
|
||||||
- **Плагинная архитектура** — добавляйте новые инструменты WASM и каналы без перезагрузки системы.
|
- **Плагинная архитектура** — добавляйте новые инструменты WASM и каналы без перезагрузки системы.
|
||||||
|
|
||||||
@@ -86,12 +86,12 @@ IronClaw — это AI-ассистент, которому вы действи
|
|||||||
|
|
||||||
## Загрузка и сборка
|
## Загрузка и сборка
|
||||||
|
|
||||||
Посетите [страницу релизов](https://github.com/nearai/ironclaw/releases/), чтобы увидеть последние обновления.
|
Посетите [страницу релизов](https://github.com/nearai/optimclaw/releases/), чтобы увидеть последние обновления.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Установка через установщик Windows (Windows)</summary>
|
<summary>Установка через установщик Windows (Windows)</summary>
|
||||||
|
|
||||||
Загрузите [Windows Installer](https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-x86_64-pc-windows-msvc.msi) и запустите его.
|
Загрузите [Windows Installer](https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-x86_64-pc-windows-msvc.msi) и запустите его.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ IronClaw — это AI-ассистент, которому вы действи
|
|||||||
<summary>Установка через powershell-скрипт (Windows)</summary>
|
<summary>Установка через powershell-скрипт (Windows)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.ps1 | iex
|
irm https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.ps1 | iex
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -108,7 +108,7 @@ irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-install
|
|||||||
<summary>Установка через shell-скрипт (macOS, Linux, Windows/WSL)</summary>
|
<summary>Установка через shell-скрипт (macOS, Linux, Windows/WSL)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.sh | sh
|
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.sh | sh
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/release
|
|||||||
<summary>Установка через Homebrew (macOS/Linux)</summary>
|
<summary>Установка через Homebrew (macOS/Linux)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
brew install ironclaw
|
brew install optimclaw
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -128,8 +128,8 @@ brew install ironclaw
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Клонируйте репозиторий
|
# Клонируйте репозиторий
|
||||||
git clone https://github.com/nearai/ironclaw.git
|
git clone https://github.com/nearai/optimclaw.git
|
||||||
cd ironclaw
|
cd optimclaw
|
||||||
|
|
||||||
# Сборка
|
# Сборка
|
||||||
cargo build --release
|
cargo build --release
|
||||||
@@ -146,25 +146,25 @@ cargo test
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Создание базы данных
|
# Создание базы данных
|
||||||
createdb ironclaw
|
createdb optimclaw
|
||||||
|
|
||||||
# Включение pgvector
|
# Включение pgvector
|
||||||
psql ironclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
psql optimclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Конфигурация
|
## Конфигурация
|
||||||
|
|
||||||
Запустите мастер настройки для конфигурации IronClaw:
|
Запустите мастер настройки для конфигурации OptimClaw:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
```
|
```
|
||||||
|
|
||||||
Мастер настройки поможет установить соединение с базой данных, пройти аутентификацию NEAR AI (через браузер OAuth) и настроить шифрование секретов (используя системную связку ключей). Настройки сохраняются в базе данных; базовые переменные (например, `DATABASE_URL`, `LLM_BACKEND`) записываются в `~/.ironclaw/.env`, чтобы они были доступны до подключения к БД.
|
Мастер настройки поможет установить соединение с базой данных, пройти аутентификацию NEAR AI (через браузер OAuth) и настроить шифрование секретов (используя системную связку ключей). Настройки сохраняются в базе данных; базовые переменные (например, `DATABASE_URL`, `LLM_BACKEND`) записываются в `~/.optimclaw/.env`, чтобы они были доступны до подключения к БД.
|
||||||
|
|
||||||
### Альтернативные LLM-провайдеры
|
### Альтернативные LLM-провайдеры
|
||||||
|
|
||||||
IronClaw по умолчанию использует NEAR AI, но поддерживает множество LLM-провайдеров из коробки.
|
OptimClaw по умолчанию использует NEAR AI, но поддерживает множество LLM-провайдеров из коробки.
|
||||||
Встроенные провайдеры включают **Anthropic**, **OpenAI**, **Google Gemini**, **MiniMax**,
|
Встроенные провайдеры включают **Anthropic**, **OpenAI**, **Google Gemini**, **MiniMax**,
|
||||||
**Mistral** и **Ollama** (локально). Также поддерживаются OpenAI-совместимые сервисы:
|
**Mistral** и **Ollama** (локально). Также поддерживаются OpenAI-совместимые сервисы:
|
||||||
**OpenRouter** (300+ моделей), **Together AI**, **Fireworks AI** и собственные серверы
|
**OpenRouter** (300+ моделей), **Together AI**, **Fireworks AI** и собственные серверы
|
||||||
@@ -188,7 +188,7 @@ LLM_MODEL=anthropic/claude-sonnet-4
|
|||||||
|
|
||||||
## Безопасность
|
## Безопасность
|
||||||
|
|
||||||
IronClaw реализует эшелонированную защиту для обеспечения безопасности ваших данных и предотвращения злоупотреблений.
|
OptimClaw реализует эшелонированную защиту для обеспечения безопасности ваших данных и предотвращения злоупотреблений.
|
||||||
|
|
||||||
### Песочница WASM
|
### Песочница WASM
|
||||||
|
|
||||||
@@ -282,13 +282,13 @@ WASM ──► Валидатор ──► Сканер ───► Инъек
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Первоначальная настройка (БД, аутентификация и т.д.)
|
# Первоначальная настройка (БД, аутентификация и т.д.)
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
|
|
||||||
# Запуск интерактивного REPL
|
# Запуск интерактивного REPL
|
||||||
cargo run
|
cargo run
|
||||||
|
|
||||||
# С отладочными логами
|
# С отладочными логами
|
||||||
RUST_LOG=ironclaw=debug cargo run
|
RUST_LOG=optimclaw=debug cargo run
|
||||||
```
|
```
|
||||||
|
|
||||||
## Разработка
|
## Разработка
|
||||||
@@ -301,7 +301,7 @@ cargo fmt
|
|||||||
cargo clippy --all --benches --tests --examples --all-features
|
cargo clippy --all --benches --tests --examples --all-features
|
||||||
|
|
||||||
# Запуск тестов
|
# Запуск тестов
|
||||||
createdb ironclaw_test
|
createdb optimclaw_test
|
||||||
cargo test
|
cargo test
|
||||||
|
|
||||||
# Запуск конкретного теста
|
# Запуск конкретного теста
|
||||||
@@ -313,7 +313,7 @@ cargo test название_теста
|
|||||||
|
|
||||||
## Наследие OpenClaw
|
## Наследие OpenClaw
|
||||||
|
|
||||||
IronClaw — это реализация на Rust, вдохновленная проектом [OpenClaw](https://github.com/openclaw/openclaw). Полную матрицу соответствия функций можно найти в [FEATURE_PARITY.md](FEATURE_PARITY.md).
|
OptimClaw — это реализация на Rust, вдохновленная проектом [OpenClaw](https://github.com/openclaw/openclaw). Полную матрицу соответствия функций можно найти в [FEATURE_PARITY.md](FEATURE_PARITY.md).
|
||||||
|
|
||||||
Ключевые отличия:
|
Ключевые отличия:
|
||||||
|
|
||||||
|
|||||||
+26
-26
@@ -1,8 +1,8 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="ironclaw.png?v=2" alt="IronClaw" width="200"/>
|
<img src="optimclaw.png?v=2" alt="OptimClaw" width="200"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h1 align="center">IronClaw</h1>
|
<h1 align="center">OptimClaw</h1>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<strong>安全可靠的个人 AI 助手,始终站在你这边</strong>
|
<strong>安全可靠的个人 AI 助手,始终站在你这边</strong>
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="License: MIT OR Apache-2.0" /></a>
|
<a href="#license"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="License: MIT OR Apache-2.0" /></a>
|
||||||
<a href="https://t.me/ironclawAI"><img src="https://img.shields.io/badge/Telegram-%40ironclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @ironclawAI" /></a>
|
<a href="https://t.me/optimclawAI"><img src="https://img.shields.io/badge/Telegram-%40optimclawAI-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @optimclawAI" /></a>
|
||||||
<a href="https://www.reddit.com/r/ironclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FironclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/ironclawAI" /></a>
|
<a href="https://www.reddit.com/r/optimclawAI/"><img src="https://img.shields.io/badge/Reddit-r%2FoptimclawAI-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/optimclawAI" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -34,16 +34,16 @@
|
|||||||
|
|
||||||
## 设计理念
|
## 设计理念
|
||||||
|
|
||||||
IronClaw 基于一个简单的原则:**你的 AI 助手应该为你服务,而不是与你为敌。**
|
OptimClaw 基于一个简单的原则:**你的 AI 助手应该为你服务,而不是与你为敌。**
|
||||||
|
|
||||||
在 AI 系统对数据处理日益不透明、与企业利益捆绑的今天,IronClaw 选择了一条不同的路:
|
在 AI 系统对数据处理日益不透明、与企业利益捆绑的今天,OptimClaw 选择了一条不同的路:
|
||||||
|
|
||||||
- **数据归你所有** — 所有信息存储在本地,加密保护,始终在你掌控之下
|
- **数据归你所有** — 所有信息存储在本地,加密保护,始终在你掌控之下
|
||||||
- **透明至上** — 完全开源,可审计,没有隐藏的遥测或数据收集
|
- **透明至上** — 完全开源,可审计,没有隐藏的遥测或数据收集
|
||||||
- **自主扩展** — 随时构建新工具,无需等待供应商更新
|
- **自主扩展** — 随时构建新工具,无需等待供应商更新
|
||||||
- **纵深防御** — 多层安全机制抵御提示注入和数据泄露
|
- **纵深防御** — 多层安全机制抵御提示注入和数据泄露
|
||||||
|
|
||||||
IronClaw 是一个你真正可以信赖的 AI 助手,无论是个人生活还是工作。
|
OptimClaw 是一个你真正可以信赖的 AI 助手,无论是个人生活还是工作。
|
||||||
|
|
||||||
## 功能特性
|
## 功能特性
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ IronClaw 是一个你真正可以信赖的 AI 助手,无论是个人生活还
|
|||||||
|
|
||||||
### 自主扩展
|
### 自主扩展
|
||||||
|
|
||||||
- **动态工具构建** — 描述你的需求,IronClaw 会将其构建为 WASM 工具
|
- **动态工具构建** — 描述你的需求,OptimClaw 会将其构建为 WASM 工具
|
||||||
- **MCP 协议** — 连接模型上下文协议(Model Context Protocol)服务器以获取额外能力
|
- **MCP 协议** — 连接模型上下文协议(Model Context Protocol)服务器以获取额外能力
|
||||||
- **插件架构** — 无需重启即可加载新的 WASM 工具和渠道
|
- **插件架构** — 无需重启即可加载新的 WASM 工具和渠道
|
||||||
|
|
||||||
@@ -86,12 +86,12 @@ IronClaw 是一个你真正可以信赖的 AI 助手,无论是个人生活还
|
|||||||
|
|
||||||
## 下载或编译
|
## 下载或编译
|
||||||
|
|
||||||
访问 [Releases 页面](https://github.com/nearai/ironclaw/releases/) 查看最新版本。
|
访问 [Releases 页面](https://github.com/nearai/optimclaw/releases/) 查看最新版本。
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>通过 Windows 安装程序安装 (Windows)</summary>
|
<summary>通过 Windows 安装程序安装 (Windows)</summary>
|
||||||
|
|
||||||
下载 [Windows 安装程序](https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-x86_64-pc-windows-msvc.msi) 并运行。
|
下载 [Windows 安装程序](https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-x86_64-pc-windows-msvc.msi) 并运行。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ IronClaw 是一个你真正可以信赖的 AI 助手,无论是个人生活还
|
|||||||
<summary>通过 PowerShell 脚本安装 (Windows)</summary>
|
<summary>通过 PowerShell 脚本安装 (Windows)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.ps1 | iex
|
irm https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.ps1 | iex
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -108,7 +108,7 @@ irm https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-install
|
|||||||
<summary>通过 Shell 脚本安装 (macOS、Linux、Windows/WSL)</summary>
|
<summary>通过 Shell 脚本安装 (macOS、Linux、Windows/WSL)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/releases/latest/download/ironclaw-installer.sh | sh
|
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/optimclaw/releases/latest/download/optimclaw-installer.sh | sh
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nearai/ironclaw/release
|
|||||||
<summary>通过 Homebrew 安装 (macOS/Linux)</summary>
|
<summary>通过 Homebrew 安装 (macOS/Linux)</summary>
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
brew install ironclaw
|
brew install optimclaw
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -128,8 +128,8 @@ brew install ironclaw
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 克隆仓库
|
# 克隆仓库
|
||||||
git clone https://github.com/nearai/ironclaw.git
|
git clone https://github.com/nearai/optimclaw.git
|
||||||
cd ironclaw
|
cd optimclaw
|
||||||
|
|
||||||
# 编译
|
# 编译
|
||||||
cargo build --release
|
cargo build --release
|
||||||
@@ -146,25 +146,25 @@ cargo test
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 创建数据库
|
# 创建数据库
|
||||||
createdb ironclaw
|
createdb optimclaw
|
||||||
|
|
||||||
# 启用 pgvector 扩展
|
# 启用 pgvector 扩展
|
||||||
psql ironclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
psql optimclaw -c "CREATE EXTENSION IF NOT EXISTS vector;"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 配置
|
## 配置
|
||||||
|
|
||||||
运行设置向导来配置 IronClaw:
|
运行设置向导来配置 OptimClaw:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
```
|
```
|
||||||
|
|
||||||
向导将引导你完成数据库连接、NEAR AI 身份验证(通过浏览器 OAuth)和密钥加密(使用系统钥匙串)。设置会保存在数据库中;引导变量(如 `DATABASE_URL`、`LLM_BACKEND`)写入 `~/.ironclaw/.env`,以便在数据库连接前可用。
|
向导将引导你完成数据库连接、NEAR AI 身份验证(通过浏览器 OAuth)和密钥加密(使用系统钥匙串)。设置会保存在数据库中;引导变量(如 `DATABASE_URL`、`LLM_BACKEND`)写入 `~/.optimclaw/.env`,以便在数据库连接前可用。
|
||||||
|
|
||||||
### 替代 LLM 提供商
|
### 替代 LLM 提供商
|
||||||
|
|
||||||
IronClaw 默认使用 NEAR AI,但开箱即用地支持多种 LLM 提供商。
|
OptimClaw 默认使用 NEAR AI,但开箱即用地支持多种 LLM 提供商。
|
||||||
内置提供商包括 **Anthropic**、**OpenAI**、**GitHub Copilot**、**Google Gemini**、**MiniMax**、**Mistral** 和 **Ollama**(本地部署)。同时也支持 OpenAI 兼容服务,如 **OpenRouter**(300+ 模型)、**Together AI**、**Fireworks AI** 以及自托管服务器(**vLLM**、**LiteLLM**)。
|
内置提供商包括 **Anthropic**、**OpenAI**、**GitHub Copilot**、**Google Gemini**、**MiniMax**、**Mistral** 和 **Ollama**(本地部署)。同时也支持 OpenAI 兼容服务,如 **OpenRouter**(300+ 模型)、**Together AI**、**Fireworks AI** 以及自托管服务器(**vLLM**、**LiteLLM**)。
|
||||||
|
|
||||||
在向导中选择你的提供商,或直接设置环境变量:
|
在向导中选择你的提供商,或直接设置环境变量:
|
||||||
@@ -185,7 +185,7 @@ LLM_MODEL=anthropic/claude-sonnet-4
|
|||||||
|
|
||||||
## 安全机制
|
## 安全机制
|
||||||
|
|
||||||
IronClaw 实现了纵深防御策略来保护你的数据并防止滥用。
|
OptimClaw 实现了纵深防御策略来保护你的数据并防止滥用。
|
||||||
|
|
||||||
### WASM 沙箱
|
### WASM 沙箱
|
||||||
|
|
||||||
@@ -278,13 +278,13 @@ WASM ──► 白名单 ──► 泄露扫描 ──► 凭据 ──► 执
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 首次设置(配置数据库、认证等)
|
# 首次设置(配置数据库、认证等)
|
||||||
ironclaw onboard
|
optimclaw onboard
|
||||||
|
|
||||||
# 启动交互式 REPL
|
# 启动交互式 REPL
|
||||||
cargo run
|
cargo run
|
||||||
|
|
||||||
# 启用调试日志
|
# 启用调试日志
|
||||||
RUST_LOG=ironclaw=debug cargo run
|
RUST_LOG=optimclaw=debug cargo run
|
||||||
```
|
```
|
||||||
|
|
||||||
## 开发
|
## 开发
|
||||||
@@ -297,7 +297,7 @@ cargo fmt
|
|||||||
cargo clippy --all --benches --tests --examples --all-features
|
cargo clippy --all --benches --tests --examples --all-features
|
||||||
|
|
||||||
# 运行测试
|
# 运行测试
|
||||||
createdb ironclaw_test
|
createdb optimclaw_test
|
||||||
cargo test
|
cargo test
|
||||||
|
|
||||||
# 运行指定测试
|
# 运行指定测试
|
||||||
@@ -309,7 +309,7 @@ cargo test test_name
|
|||||||
|
|
||||||
## OpenClaw 传承
|
## OpenClaw 传承
|
||||||
|
|
||||||
IronClaw 是受 [OpenClaw](https://github.com/openclaw/openclaw) 启发的 Rust 重新实现。参见 [FEATURE_PARITY.md](FEATURE_PARITY.md) 了解完整的功能追踪矩阵。
|
OptimClaw 是受 [OpenClaw](https://github.com/openclaw/openclaw) 启发的 Rust 重新实现。参见 [FEATURE_PARITY.md](FEATURE_PARITY.md) 了解完整的功能追踪矩阵。
|
||||||
|
|
||||||
主要差异:
|
主要差异:
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use criterion::{Criterion, black_box, criterion_group, criterion_main};
|
use criterion::{Criterion, black_box, criterion_group, criterion_main};
|
||||||
use ironclaw::safety::{LeakDetector, Sanitizer, Validator};
|
use optimclaw::safety::{LeakDetector, Sanitizer, Validator};
|
||||||
|
|
||||||
fn bench_sanitizer(c: &mut Criterion) {
|
fn bench_sanitizer(c: &mut Criterion) {
|
||||||
let mut group = c.benchmark_group("sanitizer");
|
let mut group = c.benchmark_group("sanitizer");
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use criterion::{Criterion, black_box, criterion_group, criterion_main};
|
use criterion::{Criterion, black_box, criterion_group, criterion_main};
|
||||||
use ironclaw::config::SafetyConfig;
|
use optimclaw::config::SafetyConfig;
|
||||||
use ironclaw::safety::{SafetyLayer, Validator};
|
use optimclaw::safety::{SafetyLayer, Validator};
|
||||||
|
|
||||||
fn bench_safety_layer_pipeline(c: &mut Criterion) {
|
fn bench_safety_layer_pipeline(c: &mut Criterion) {
|
||||||
let mut group = c.benchmark_group("safety_pipeline");
|
let mut group = c.benchmark_group("safety_pipeline");
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "discord-channel"
|
name = "discord-channel"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Discord channel for IronClaw"
|
description = "Discord channel for OptimClaw"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Discord Channel for IronClaw
|
# Discord Channel for OptimClaw
|
||||||
|
|
||||||
WASM channel for Discord integration - handle slash commands and button interactions via webhooks.
|
WASM channel for Discord integration - handle slash commands and button interactions via webhooks.
|
||||||
|
|
||||||
@@ -13,12 +13,12 @@ WASM channel for Discord integration - handle slash commands and button interact
|
|||||||
|
|
||||||
1. Create a Discord Application at <https://discord.com/developers/applications>
|
1. Create a Discord Application at <https://discord.com/developers/applications>
|
||||||
2. Create a Bot and get the token
|
2. Create a Bot and get the token
|
||||||
3. Set up Interactions URL to point to your IronClaw instance
|
3. Set up Interactions URL to point to your OptimClaw instance
|
||||||
4. Copy the Application ID and Public Key
|
4. Copy the Application ID and Public Key
|
||||||
5. Store in IronClaw secrets:
|
5. Store in OptimClaw secrets:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ironclaw secret set discord_bot_token YOUR_BOT_TOKEN
|
optimclaw secret set discord_bot_token YOUR_BOT_TOKEN
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note:** The `discord_bot_token` secret is used for Discord REST API calls.
|
**Note:** The `discord_bot_token` secret is used for Discord REST API calls.
|
||||||
@@ -51,7 +51,7 @@ curl -X POST \
|
|||||||
|
|
||||||
In your Discord app settings, set:
|
In your Discord app settings, set:
|
||||||
|
|
||||||
- Interactions Endpoint URL: `https://your-ironclaw.com/webhook/discord`
|
- Interactions Endpoint URL: `https://your-optimclaw.com/webhook/discord`
|
||||||
|
|
||||||
## Usage Examples
|
## Usage Examples
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ To send embeds, include an `embeds` array in the `metadata_json` field of the ag
|
|||||||
|
|
||||||
### "401 Unauthorized"
|
### "401 Unauthorized"
|
||||||
|
|
||||||
- Check that `discord_bot_token` is set correctly in IronClaw secrets.
|
- Check that `discord_bot_token` is set correctly in OptimClaw secrets.
|
||||||
- Ensure the bot is added to the server.
|
- Ensure the bot is added to the server.
|
||||||
|
|
||||||
### "Interaction Failed"
|
### "Interaction Failed"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//! Discord Gateway/Webhook channel for IronClaw.
|
//! Discord Gateway/Webhook channel for OptimClaw.
|
||||||
//!
|
//!
|
||||||
//! This WASM component implements the channel interface for handling Discord
|
//! This WASM component implements the channel interface for handling Discord
|
||||||
//! interactions via webhooks and sending messages back to Discord.
|
//! interactions via webhooks and sending messages back to Discord.
|
||||||
@@ -1171,7 +1171,7 @@ fn send_pairing_reply(ctx: &PairingReplyCtx, code: &str) -> Result<(), String> {
|
|||||||
);
|
);
|
||||||
let payload = serde_json::json!({
|
let payload = serde_json::json!({
|
||||||
"content": format!(
|
"content": format!(
|
||||||
"To pair with this bot, run: `ironclaw pairing approve discord {}`",
|
"To pair with this bot, run: `optimclaw pairing approve discord {}`",
|
||||||
code
|
code
|
||||||
),
|
),
|
||||||
"flags": 64
|
"flags": 64
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "feishu-channel"
|
name = "feishu-channel"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Feishu/Lark Bot channel for IronClaw"
|
description = "Feishu/Lark Bot channel for OptimClaw"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"auth": {
|
"auth": {
|
||||||
"secret_name": "feishu_app_id",
|
"secret_name": "feishu_app_id",
|
||||||
"display_name": "Feishu / Lark",
|
"display_name": "Feishu / Lark",
|
||||||
"instructions": "Create a bot at https://open.feishu.cn/app (Feishu) or https://open.larksuite.com/app (Lark). You need the App ID and App Secret. Note: IronClaw supports Event Subscription webhook delivery, but not Feishu's long-connection websocket mode.",
|
"instructions": "Create a bot at https://open.feishu.cn/app (Feishu) or https://open.larksuite.com/app (Lark). You need the App ID and App Secret. Note: OptimClaw supports Event Subscription webhook delivery, but not Feishu's long-connection websocket mode.",
|
||||||
"setup_url": "https://open.feishu.cn/app",
|
"setup_url": "https://open.feishu.cn/app",
|
||||||
"token_hint": "App ID looks like cli_XXXX, App Secret is a long alphanumeric string",
|
"token_hint": "App ID looks like cli_XXXX, App Secret is a long alphanumeric string",
|
||||||
"env_var": "FEISHU_APP_ID"
|
"env_var": "FEISHU_APP_ID"
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
// Feishu API types have fields reserved for future use.
|
// Feishu API types have fields reserved for future use.
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
//! Feishu/Lark Bot channel for IronClaw.
|
//! Feishu/Lark Bot channel for OptimClaw.
|
||||||
//!
|
//!
|
||||||
//! This WASM component implements the channel interface for handling Feishu
|
//! This WASM component implements the channel interface for handling Feishu
|
||||||
//! webhooks (Event Subscription v2.0) and sending messages back via the
|
//! webhooks (Event Subscription v2.0) and sending messages back via the
|
||||||
//! Feishu/Lark Bot API. IronClaw currently does not connect to Feishu's
|
//! Feishu/Lark Bot API. OptimClaw currently does not connect to Feishu's
|
||||||
//! long-connection websocket subscription mode; use Event Subscription
|
//! long-connection websocket subscription mode; use Event Subscription
|
||||||
//! webhooks for this channel.
|
//! webhooks for this channel.
|
||||||
//!
|
//!
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "slack-channel"
|
name = "slack-channel"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Slack Events API channel for IronClaw"
|
description = "Slack Events API channel for OptimClaw"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//! Slack Events API channel for IronClaw.
|
//! Slack Events API channel for OptimClaw.
|
||||||
//!
|
//!
|
||||||
//! This WASM component implements the channel interface for handling Slack
|
//! This WASM component implements the channel interface for handling Slack
|
||||||
//! webhooks and sending messages back to Slack.
|
//! webhooks and sending messages back to Slack.
|
||||||
@@ -650,7 +650,7 @@ fn send_pairing_reply(channel_id: &str, code: &str) -> Result<(), String> {
|
|||||||
let payload = serde_json::json!({
|
let payload = serde_json::json!({
|
||||||
"channel": channel_id,
|
"channel": channel_id,
|
||||||
"text": format!(
|
"text": format!(
|
||||||
"To pair with this bot, run: `ironclaw pairing approve slack {}`",
|
"To pair with this bot, run: `optimclaw pairing approve slack {}`",
|
||||||
code
|
code
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "telegram-channel"
|
name = "telegram-channel"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Telegram Bot API channel for IronClaw"
|
description = "Telegram Bot API channel for OptimClaw"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Telegram API types have fields reserved for future use (entities, reply threading, etc.)
|
// Telegram API types have fields reserved for future use (entities, reply threading, etc.)
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
//! Telegram Bot API channel for IronClaw.
|
//! Telegram Bot API channel for OptimClaw.
|
||||||
//!
|
//!
|
||||||
//! This WASM component implements the channel interface for handling Telegram
|
//! This WASM component implements the channel interface for handling Telegram
|
||||||
//! webhooks and sending messages back via the Bot API.
|
//! webhooks and sending messages back via the Bot API.
|
||||||
@@ -1170,7 +1170,7 @@ fn send_photo(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let boundary = format!("ironclaw-{}", channel_host::now_millis());
|
let boundary = format!("optimclaw-{}", channel_host::now_millis());
|
||||||
let mut body = Vec::new();
|
let mut body = Vec::new();
|
||||||
|
|
||||||
write_multipart_field(&mut body, &boundary, "chat_id", &chat_id.to_string());
|
write_multipart_field(&mut body, &boundary, "chat_id", &chat_id.to_string());
|
||||||
@@ -1235,7 +1235,7 @@ fn send_document(
|
|||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
let message_thread_id = normalize_thread_id(message_thread_id);
|
let message_thread_id = normalize_thread_id(message_thread_id);
|
||||||
|
|
||||||
let boundary = format!("ironclaw-{}", channel_host::now_millis());
|
let boundary = format!("optimclaw-{}", channel_host::now_millis());
|
||||||
let mut body = Vec::new();
|
let mut body = Vec::new();
|
||||||
|
|
||||||
write_multipart_field(&mut body, &boundary, "chat_id", &chat_id.to_string());
|
write_multipart_field(&mut body, &boundary, "chat_id", &chat_id.to_string());
|
||||||
@@ -1552,7 +1552,7 @@ fn send_pairing_reply(chat_id: i64, code: &str) -> Result<(), String> {
|
|||||||
send_message(
|
send_message(
|
||||||
chat_id,
|
chat_id,
|
||||||
&format!(
|
&format!(
|
||||||
"To pair with this bot, run: `ironclaw pairing approve telegram {}`",
|
"To pair with this bot, run: `optimclaw pairing approve telegram {}`",
|
||||||
code
|
code
|
||||||
),
|
),
|
||||||
None,
|
None,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "whatsapp-channel"
|
name = "whatsapp-channel"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "WhatsApp Cloud API channel for IronClaw"
|
description = "WhatsApp Cloud API channel for OptimClaw"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// WhatsApp API types have fields reserved for future use (contacts, statuses, etc.)
|
// WhatsApp API types have fields reserved for future use (contacts, statuses, etc.)
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
//! WhatsApp Cloud API channel for IronClaw.
|
//! WhatsApp Cloud API channel for OptimClaw.
|
||||||
//!
|
//!
|
||||||
//! This WASM component implements the channel interface for handling WhatsApp
|
//! This WASM component implements the channel interface for handling WhatsApp
|
||||||
//! webhooks and sending messages back via the Cloud API.
|
//! webhooks and sending messages back via the Cloud API.
|
||||||
@@ -910,7 +910,7 @@ fn send_pairing_reply(
|
|||||||
"text": {
|
"text": {
|
||||||
"preview_url": false,
|
"preview_url": false,
|
||||||
"body": format!(
|
"body": format!(
|
||||||
"To pair with this bot, run: ironclaw pairing approve whatsapp {}",
|
"To pair with this bot, run: optimclaw pairing approve whatsapp {}",
|
||||||
code
|
code
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# Complexity guardrails for AI-assisted development quality.
|
# Complexity guardrails for AI-assisted development quality.
|
||||||
# These thresholds prevent new violations while preserving existing code.
|
# These thresholds prevent new violations while preserving existing code.
|
||||||
# See: https://github.com/nearai/ironclaw/issues/338
|
# See: https://github.com/nearai/optimclaw/issues/338
|
||||||
|
|
||||||
cognitive-complexity-threshold = 15 # default: 25 (only active when lint is enabled)
|
cognitive-complexity-threshold = 15 # default: 25 (only active when lint is enabled)
|
||||||
too-many-lines-threshold = 100 # default: 100 (only active when lint is enabled)
|
too-many-lines-threshold = 100 # default: 100 (only active when lint is enabled)
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ironclaw_common"
|
name = "optimclaw_common"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.92"
|
rust-version = "1.92"
|
||||||
description = "Shared types and utilities for the IronClaw workspace"
|
description = "Shared types and utilities for the OptimClaw workspace"
|
||||||
authors = ["NEAR AI <[email protected]>"]
|
authors = ["NEAR AI <[email protected]>"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
homepage = "https://github.com/nearai/ironclaw"
|
homepage = "https://github.com/nearai/optimclaw"
|
||||||
repository = "https://github.com/nearai/ironclaw"
|
repository = "https://github.com/nearai/optimclaw"
|
||||||
|
|
||||||
[package.metadata.dist]
|
[package.metadata.dist]
|
||||||
dist = false
|
dist = false
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
//! Shared types and utilities for the IronClaw workspace.
|
//! Shared types and utilities for the OptimClaw workspace.
|
||||||
|
|
||||||
mod event;
|
mod event;
|
||||||
mod util;
|
mod util;
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ironclaw_safety"
|
name = "optimclaw_safety"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.92"
|
rust-version = "1.92"
|
||||||
description = "Prompt injection defense, input validation, secret leak detection, and safety policy enforcement"
|
description = "Prompt injection defense, input validation, secret leak detection, and safety policy enforcement"
|
||||||
authors = ["NEAR AI <[email protected]>"]
|
authors = ["NEAR AI <[email protected]>"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
homepage = "https://github.com/nearai/ironclaw"
|
homepage = "https://github.com/nearai/optimclaw"
|
||||||
repository = "https://github.com/nearai/ironclaw"
|
repository = "https://github.com/nearai/optimclaw"
|
||||||
|
|
||||||
[package.metadata.dist]
|
[package.metadata.dist]
|
||||||
dist = false
|
dist = false
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "ironclaw-safety-fuzz"
|
name = "optimclaw-safety-fuzz"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
publish = false
|
publish = false
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
@@ -11,7 +11,7 @@ cargo-fuzz = true
|
|||||||
libfuzzer-sys = "0.4"
|
libfuzzer-sys = "0.4"
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
|
|
||||||
[dependencies.ironclaw_safety]
|
[dependencies.optimclaw_safety]
|
||||||
path = ".."
|
path = ".."
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# ironclaw_safety Fuzz Targets
|
# optimclaw_safety Fuzz Targets
|
||||||
|
|
||||||
Fuzz testing for the `ironclaw_safety` crate using [cargo-fuzz](https://github.com/rust-fuzz/cargo-fuzz) (libFuzzer).
|
Fuzz testing for the `optimclaw_safety` crate using [cargo-fuzz](https://github.com/rust-fuzz/cargo-fuzz) (libFuzzer).
|
||||||
|
|
||||||
## Targets
|
## Targets
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ rustup install nightly
|
|||||||
## Running
|
## Running
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd crates/ironclaw_safety
|
cd crates/optimclaw_safety
|
||||||
|
|
||||||
# Run a specific target (runs until stopped or crash found)
|
# Run a specific target (runs until stopped or crash found)
|
||||||
cargo +nightly fuzz run fuzz_safety_sanitizer
|
cargo +nightly fuzz run fuzz_safety_sanitizer
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user