Compare commits

...

712 Commits

Author SHA1 Message Date
Argenis
feaca20582
feat: desktop companion app + device-aware installer + CI/CD (#4500)
* feat: add desktop companion app integration and CI/CD pipeline

- Add `zeroclaw desktop` CLI command to launch/install companion app
- Add device-aware installer (desktop/server/mobile/embedded/container)
- Replace from-source Tauri build with pre-built .dmg download flow
- Add `build-desktop` job to beta and stable release workflows
- Build universal macOS .dmg via Tauri on macos-14 runners
- Include .dmg in GitHub Release assets alongside CLI binaries

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: bump version to 0.6.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: update Cargo.lock for 0.6.1

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 03:59:11 -04:00
Nim G
40af505e90
feat(security): wire LeakDetector into outbound message path (#4457)
* feat(security): wire LeakDetector into outbound message path

Wire LeakDetector.scan() into channel response sanitization (via
sanitize_channel_response) and cron job delivery (via
deliver_announcement) to prevent credential leakage to external
channels.

Changes:
- src/channels/mod.rs: Add leak detection to sanitize_channel_response()
  with tracing::warn! on detection. Follows prior art from commit fb3b7b8e.
- src/cron/scheduler.rs: Add leak detection to deliver_announcement()
  before sending output to any channel (Telegram, Discord, Slack,
  Mattermost, Signal, Matrix, WhatsApp, QQ).
- Added unit tests in both modules to verify redaction behavior.

All outbound channel messages and cron job delivery are now scanned for
API keys, AWS credentials, JWTs, database URLs, private keys, and
high-entropy tokens. Detected leaks are redacted before delivery and
logged via tracing::warn! with pattern details.

Ref: SPEC-1.3-leak-detector-outbound.md (gap closure §1.3)
Prior art: commit fb3b7b8e (zeroclaw_homecomming branch)

* fix(security): enforce leak redaction with RedactedOutput newtype

Replace raw String return from scan_and_redact_output with a
RedactedOutput newtype. All channel dispatch in deliver_announcement
must go through this type, so the compiler rejects any path that
skips leak detection. Replaces tests that called LeakDetector in
isolation with tests that exercise scan_and_redact_output through
the RedactedOutput boundary.
2026-03-24 01:43:49 -04:00
Nim G
f812dbcb85
feat(channels): add message redaction API to Channel trait (#4458)
* feat(channels): add message redaction API to Channel trait

Add redact_message() method to Channel trait with default no-op implementation.
Implement for MatrixChannel using existing room.redact() SDK method.
Add comprehensive test coverage for trait default and Matrix implementation.

Changes:
- src/channels/traits.rs: Add redact_message() default method and test
- src/channels/matrix.rs: Implement redact_message() for MatrixChannel
- tests/integration/channel_matrix.rs: Add RedactMessage event, test channel impl, and lifecycle test

Tests added:
- default_redact_message_returns_success (trait default)
- redact_message_lifecycle (MatrixTestChannel)
- Updated minimal_channel_all_defaults_succeed

All tests pass. No breaking changes.

* test(channels): clarify redact_message test coverage

* fix(channels): use OwnedRoomId for matrix redact_message room lookup

RoomId is unsized (wraps str), so inlining .parse() in
get_room(&target_room.parse()?) fails to compile with the
channel-matrix feature. Use an intermediate OwnedRoomId binding,
matching the pattern used in send() and listen().
2026-03-24 01:43:41 -04:00
Nim G
59225d97b3
feat(memory): add bulk memory deletion by namespace and session (#4459)
Add purge_namespace() and purge_session() methods to Memory trait with
default bail! implementations. Implement both in SQLite backend using
spawn_blocking pattern matching forget(). Expose via new memory_purge
tool with security enforcement.

Changes:
- src/memory/traits.rs: Add purge_namespace/purge_session trait methods
- src/memory/sqlite.rs: Implement purge methods + 8 backend tests
- src/tools/memory_purge.rs: New tool following memory_forget pattern
- src/tools/mod.rs: Register memory_purge module and export

Tests:
- SQLite backend: 8 tests (namespace/session purge, preservation, count, noop)
- Tool: 8 tests (name/schema, purge success, noop, missing param, readonly/rate-limit)

All tests pass. Clippy clean. Formatted with cargo fmt.
2026-03-24 01:43:39 -04:00
Nim G
483f773e1d
feat(ci): add per-component path labels and labeler workflow (#4461)
* feat(ci): add per-component labels for channels, providers, and tools

labeler.yml only had base scope labels (channel, provider, tool) matching
entire directories. The PR workflow and ci-map specs already describe
fine-grained module labels (channel:telegram, provider:kimi, tool:shell)
but the labeler config never implemented them.

Adds 27 channel, 13 provider, and 12 tool group entries. Base labels are
preserved for the compaction rule in pr-labeler.yml.

* feat(ci): add pr-path-labeler workflow to invoke actions/labeler

labeler.yml has path-label config but no workflow was invoking it.
Adds pr-path-labeler.yml on pull_request_target to apply path and
per-component labels automatically. Updates actions source policy
doc to reflect the new workflow and action.

* docs(contributing): add label registry as single reference for all PR labels

Label definitions were scattered across labeler.yml, label-policy.json,
pr-workflow.md, and ci-map.md with no consolidated view. Adds a single
registry documenting all 99 labels by category, their definitions, how
each is applied, and which automation exists vs. is specced but missing.

* docs(contributing): correct label-registry automation status

The CI was simplified from 20+ workflows to 4. Size, risk,
contributor tier, and triage label automation (pr-labeler.yml,
pr-auto-response.yml, pr-check-stale.yml) were removed during
that simplification. Update the registry to reflect that these
labels are now applied manually, not "not yet implemented."

See PR #2931 for the upstream docs cleanup.
2026-03-24 01:43:35 -04:00
Argenis
b4bbe820a2
feat(memory): add pgvector support and Postgres knowledge graph (#4028) (#4488)
* feat(memory): add pgvector support and Postgres knowledge graph (#4028)

Enhance PostgresMemory with optional pgvector extension for hybrid
vector+keyword recall. Add namespace and importance columns. Create
PgKnowledgeGraph with recursive CTEs for graph traversal (no AGE
dependency). Extend ConsolidationResult with facts/trend fields for
richer extraction. All behind memory-postgres feature flag.

New file: knowledge_graph_pg.rs (5 unit tests)
Modified: postgres.rs (pgvector init, namespace/importance columns),
consolidation.rs (facts/trend fields), StorageProviderConfig

* fix: update PostgresMemory::new call in CLI with pgvector params
2026-03-24 01:04:01 -04:00
Argenis
1702bb2747
fix: route WebSocket connections through configured proxy (#4408)
* fix: route WebSocket connections through configured proxy (#4408)

tokio_tungstenite::connect_async does not honour proxy settings. Add
proxy-aware WebSocket connect helpers (HTTP CONNECT and SOCKS5) in
config::schema and update all six channel WebSocket connections
(discord, discord_history, slack, dingtalk, lark, qq) to use
ws_connect_with_proxy instead of connect_async.

* fix: update Cargo.lock with tokio-socks dependency
2026-03-24 01:02:46 -04:00
Argenis
b6f661c3c5
feat(agent): add complexity-based eval and auto-classify routing (#3928) (#4486)
Add heuristic complexity estimation (Simple/Standard/Complex) and
post-response quality evaluation to enable cheapest-capable model
routing. When rule-based classification misses, auto_classify falls
back to complexity-tier hints for model selection. Eval gate checks
response quality and suggests retry with higher-tier model if below
threshold.

New file: eval.rs (14 unit tests)
Modified: AgentConfig (eval, auto_classify fields), classify_model()
2026-03-24 00:51:18 -04:00
Argenis
ac543cff20
fix(tools): allow git_operations to run in workspace subdirectories (#4483)
Fixes #4409. The git_operations tool now accepts an optional 'path'
parameter to specify a subdirectory within the workspace. Path
traversal outside the workspace is rejected for security.
2026-03-24 00:44:41 -04:00
Argenis
c88affa020
fix(cron): treat empty allowed_tools as None and sanitize tool names (#4482)
Fixes #4442. Empty allowed_tools arrays caused all tools to be filtered
out, making cron jobs fail. Also adds tool name validation in the
OpenRouter provider to skip tools with names that violate the OpenAI
naming regex.
2026-03-24 00:44:39 -04:00
Argenis
67998ad702
fix(docker): add [autonomy] section with auto_approve to Docker configs (#4481)
Fixes #4445. Docker/podman containers running in daemon mode had no
[autonomy] section in the baked config.toml, causing file_write and
file_edit tools to be auto-denied in non-interactive mode.
2026-03-24 00:44:32 -04:00
Argenis
c104b23ddb
feat(agent): add token efficiency analyzer layer (#3892) (#4484)
Add history pruning and context-aware tool filtering to reduce token
usage per API call. History pruner collapses old tool call/result pairs
and drops oldest messages when over budget. Context analyzer suggests
relevant tools per iteration based on keyword matching.

New files: history_pruner.rs, context_analyzer.rs
Modified: AgentConfig (new fields), ToolFilterGroup (filter_builtins),
agent loop (pruning integration)
2026-03-24 00:38:15 -04:00
Argenis
698adca707
fix: add channel-lark to default features (#4472)
Resolves #3540. Lark/Feishu channel was not included in default features, causing builds via cargo install, brew, and other standard install methods to produce binaries without Lark support. Also fixes pre-existing lark audio test failures that were previously hidden.
2026-03-24 00:23:43 -04:00
Argenis
50a877b4c1
fix(ci): use shared concurrency group for master push events (#4479)
The concurrency group used github.sha for push events, giving each
merge its own group. Back-to-back merges queued multiple full CI runs
that never cancelled each other, exhausting runner capacity.

Use a fixed 'push-master' group so only the latest push to master
runs CI — older runs are cancelled automatically.
2026-03-24 00:15:26 -04:00
Argenis
fa7b615508
feat(providers): support Bearer token API keys for Amazon Bedrock (#4473)
Add BedrockAuth enum supporting both SigV4 and BearerToken authentication.
BEDROCK_API_KEY env var takes precedence over AWS AKSK credentials.
When a Bearer token is provided, requests use Authorization: Bearer header
instead of SigV4 signing. Existing SigV4 auth remains fully backward
compatible.

Closes #3742
2026-03-24 00:08:13 -04:00
Argenis
ea9eccfe8b
feat: make shell tool timeout configurable via config.toml (#4468)
Add `[shell_tool]` section to config schema with `timeout_secs` field
(default 60s). The ShellTool struct now carries the timeout as an
instance field instead of relying on the hardcoded constant, and the
full tool registry reads the value from Config at construction time.

Closes #4331
2026-03-24 00:07:46 -04:00
Argenis
eb036b4d95
feat(skills): add TEST.sh validation/testing framework (#4476)
Add a `zeroclaw skills test [name] [--verbose]` command that discovers
and executes TEST.sh files inside skill directories. Each line in a
TEST.sh follows the format `command | expected_exit_code | pattern` and
is validated against actual exit code and output (substring or regex).

- Add `Test` variant to `SkillCommands` enum in lib.rs
- Create `src/skills/testing.rs` with test runner, parser, and
  pretty-printed results using the console crate
- Wire the new subcommand into `handle_command()` in skills/mod.rs
- Add example TEST.sh for the browser skill
- Include 14 unit tests covering parsing, pattern matching, execution,
  aggregation, and edge cases

Closes #3697
2026-03-23 23:58:52 -04:00
Argenis
1c07d5b411
feat(tools): add built-in ask_user tool for interactive prompts (#4474)
Implement a new ask_user tool that sends a question to a messaging
channel and waits for the user's response with configurable timeout.
Supports optional structured choices and works across all channels
(Telegram, Discord, Slack, CLI, Web) via the late-bound channel map
pattern used by PollTool and ReactionTool.

Closes #3698
2026-03-23 23:58:50 -04:00
Argenis
0fe3834349
feat(channels): migrate inline transcription to TranscriptionManager (#4475)
Migrate Telegram, Discord, Slack, WhatsApp Web, and Matrix channels
from inline TranscriptionConfig/transcribe_audio() calls to the
centralized TranscriptionManager pattern for unified provider selection,
fallback, and global cap enforcement.

Each channel now:
- Stores a transcription_manager: Option<Arc<TranscriptionManager>> field
- Builds the manager in with_transcription() from config
- Calls manager.transcribe() instead of the legacy transcribe_audio() shim
- Matrix replaces the whisper-cpp shell-out with the manager API

Closes #4311
2026-03-23 23:58:05 -04:00
Argenis
33f9d66b54
feat(channel): add transcribe_non_ptt_audio config for WhatsApp STT (#4470)
Allow transcription of forwarded/regular audio messages on WhatsApp,
not just push-to-talk voice notes. Controlled by the new
`transcribe_non_ptt_audio` option in `[transcription]` (default: false).

Closes #4343
2026-03-23 23:43:28 -04:00
Argenis
368f39829f
fix: strip [Used tools: xxx] logs from channel responses (#4400)
The tool-context summary (e.g. `[Used tools: browser_open]`) was
prepended to assistant history entries for all non-Telegram channels so
the LLM could retain awareness of prior tool usage.  This caused the
model to learn and reproduce the bracket format in its own output,
delivering raw log lines to end-users instead of meaningful tool results.

Three changes:

1. Stop prepending `[Used tools: …]` to stored history for all channels.
   The LLM already receives tool context through the tool-call/result
   messages built by `run_tool_call_loop`, making the summary redundant.

2. Strip any `[Used tools: …]` prefix from cached history on reload, so
   existing sessions are cleaned up retroactively.

3. Strip the prefix in `sanitize_channel_response` as a safety net, in
   case the model still echoes it from older context.
2026-03-23 23:34:29 -04:00
Argenis
9376c26018
feat(tools): add Claude Code task runner with Slack progress and SSH handoff (#4466)
Implement ClaudeCodeRunner that spawns Claude Code in a tmux session with
HTTP hooks to POST tool execution events back to ZeroClaw's gateway,
updating a Slack message in-place with progress, plus an SSH handoff link.

Components:
- src/tools/claude_code_runner.rs: session lifecycle (tmux spawn, hook
  config generation, event handling, TTL cleanup)
- src/gateway/api.rs: POST /hooks/claude-code endpoint for hook events
- src/channels/slack.rs: chat.update + chat.postMessage with ts return
- src/config/schema.rs: ClaudeCodeRunnerConfig (enabled, ssh_host,
  tmux_prefix, session_ttl)
- src/tools/mod.rs: register runner tool

Closes #4287
2026-03-23 23:24:58 -04:00
Argenis
08e131d7c6
feat(slack): add /config command with Block Kit UI for model switching (#4464)
Add interactive /config command for Slack that renders Block Kit
static_select dropdowns for provider and model selection. Interactive
block_actions payloads from Socket Mode are translated into synthetic
/models and /model commands so existing runtime command handling
applies the selection to the per-sender RouteSelectionMap.

- Enable runtime model switching for the slack channel
- Add ShowConfig variant to ChannelRuntimeCommand
- Parse /config in parse_runtime_command (gated by supports_runtime_model_switch)
- Build Block Kit JSON with provider/model dropdowns and current selection
- Detect __ZEROCLAW_BLOCK_KIT__ prefix in SlackChannel::send() to post raw blocks
- Handle interactive envelope type in Socket Mode for block_actions events
- Non-Slack channels get a plain-text /config fallback

Closes #4286
2026-03-23 23:24:56 -04:00
Argenis
36db977b35
feat: adopt AGENTS.md as the primary agent instruction format (#4462)
Replace the AGENTS.md symlink with a real file containing all cross-tool
agent instructions. Reduce CLAUDE.md to Claude Code-specific directives
only, with a reference back to AGENTS.md for shared conventions.

Closes #4289
2026-03-23 23:24:45 -04:00
Argenis
92b0ebb61a
fix: include channel-lark in Docker build defaults (#4463)
Resolves #3538. Docker builds only included memory-postgres in ZEROCLAW_CARGO_FEATURES, which meant Lark/Feishu long-connection (WebSocket) support was not compiled into container images.
2026-03-23 23:22:36 -04:00
Argenis
9c312180a2
chore: bump version to 0.6.0 (#4455)
Includes macOS desktop menu bar app, media pipeline channels,
SOP engine improvements, and CLI tool integrations.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 21:16:46 -04:00
Argenis
a433c37c53
feat: add macOS desktop menu bar app (Tauri) (#4454)
* feat(tauri): add desktop app scaffolding with Tauri commands

Add Tauri v2 workspace member under apps/tauri with gateway client,
shared state, and Tauri command handlers for status, health, channels,
pairing, and agent messaging. The desktop app communicates with the
ZeroClaw gateway over HTTP and is buildable independently via
`cargo check -p zeroclaw-desktop`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(tauri): add system tray icon, menu, and events

Add tray module with menu construction (Show Dashboard, Status, Open
Gateway, Quit) and event handlers. Wire tray setup into the Tauri
builder's setup hook. Add icons/ placeholder directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(tauri): add mobile entry, platform capabilities, icons, and tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(tauri): add auto-pairing, gradient icons, and WebView integration

Desktop app now auto-pairs with the gateway on startup using localhost
admin endpoints, injects the token into the WebView localStorage, and
loads the dashboard from the gateway URL. Adds blue gradient Z tray
icons (idle/working/error/disconnected states), proper .icns app icon,
health polling with tray updates, and Tauri-aware API/WS/SSE paths in
the web frontend.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(tauri): add dock icon, keep-alive for tray mode, and install preflight

- Set macOS dock icon programmatically via NSApplication API so it shows
  the blue gradient Z even in dev builds without a .app bundle
- Add RunEvent::ExitRequested handler to keep app alive as a menu bar app
  when all windows are closed
- Add desktop app preflight checks to install.sh (Rust, Xcode CLT,
  cargo-tauri, Node.js) with automatic build on macOS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 20:55:22 -04:00
Argenis
af8e805016
fix(tools): correct CLI args for codex and gemini harness tools (#4401)
* feat(tools): add Codex CLI and Gemini CLI harness tools

Add two new ACP harness tools following the same pattern as ClaudeCodeTool:

- CodexCliTool: delegates to `codex -q` for OpenAI Codex CLI
- GeminiCliTool: delegates to `gemini -p` for Google Gemini CLI

Both tools share the same security model (rate limiting, act-policy
enforcement, workspace containment, env sanitisation, kill-on-drop
timeout) and are config-gated via `[codex_cli]` / `[gemini_cli]`
sections with `enabled = true`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(tools): use 'codex exec' instead of invalid '-q' flag

* feat(tools): add OpenCode CLI harness tool

Add opencode_cli tool following the same pattern as codex_cli and
gemini_cli. Uses `opencode run "<prompt>"` for non-interactive
delegation. Includes config struct, factory registration, env
sanitization, timeout, and tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(tools): correct CLI invocation args for codex and gemini tools

- Fix codex_cli to use `codex -q` (quiet mode) instead of incorrect
  `codex exec` subcommand, matching the documented behavior and the
  actual @openai/codex CLI interface.
- Fix gemini_cli install instruction to reference `@google/gemini-cli`
  instead of the incorrect `@anthropic-ai/gemini-cli` package name.

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: rareba <rareba@users.noreply.github.com>
2026-03-23 17:42:07 -04:00
Argenis
9f127f896d
fix(tools): validate task_id to prevent path traversal in delegate tool (#4405)
* feat(tools): add background and parallel execution to delegate tool

Add three new execution modes to the delegate tool:

- background: when true, spawns the sub-agent in a background tokio task
  and returns a task_id immediately. Results are persisted to
  workspace/delegate_results/{task_id}.json.

- parallel: accepts an array of agent names, runs them all concurrently
  with the same prompt, and returns all results when complete.

- action parameter with check_result/list_results/cancel_task support
  for managing background task lifecycle.

Cascade control: background sub-agents use child CancellationToken
derived from the parent, enabling cancel_all_background_tasks() to
abort all running background agents when the parent session ends.

Existing synchronous delegation flow is fully preserved (opt-in only).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(tools): validate task_id as UUID to prevent path traversal in delegate tool

The check_result and cancel_task actions accept a user-provided task_id
that is used directly in filesystem path construction. A malicious
task_id like "../../etc/passwd" could read or overwrite arbitrary files.

Since task_ids are always generated as UUIDs internally, this adds UUID
format validation before any filesystem operations, rejecting invalid
task_id values with a clear error message.

Also updates existing tests to use valid UUID-format task_ids and adds
dedicated path traversal rejection tests.

* fix: add missing attachments field to wati ChannelMessage after media pipeline merge

* fix(channels): add missing attachments field to voice_wake and lark

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 16:57:24 -04:00
Argenis
b98971c635
fix(sop): fix state file leak and add deterministic execution tests (#4404)
* feat(sop): add deterministic execution mode with typed steps and approval checkpoints

Add opt-in deterministic execution to the SOP workflow engine, inspired
by OpenClaw's Lobster engine. Deterministic mode bypasses LLM round-trips
for step transitions, executing steps sequentially with piped outputs.

Key additions:
- SopExecutionMode::Deterministic variant and `deterministic: true` SOP.toml flag
- SopStepKind enum (Execute/Checkpoint) for marking approval pause points
- StepSchema for typed input/output validation (JSON Schema fragments)
- DeterministicRunState for persisting/resuming interrupted workflows
- DeterministicSavings for tracking LLM calls saved
- SopRunAction::DeterministicStep and CheckpointWait action variants
- SopRunStatus::PausedCheckpoint status
- Engine methods: start_deterministic_run, advance_deterministic_step,
  resume_deterministic_run, persist/load_deterministic_state
- SopConfig in config/schema.rs with sops_dir, default_execution_mode,
  max_concurrent_total, approval_timeout_secs, max_finished_runs
- Wire `pub mod sop` in lib.rs (previously dead/uncompiled module)
- Fix pre-existing test issues: TempDir import, async test annotations

All 86 SOP core tests pass (engine: 42, mod: 17, dispatch: 13, types: 14).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(sop): resolve clippy warnings and fix metrics test failures

- Add `ampersona-gates = []` feature declaration to Cargo.toml to fix
  clippy `unexpected cfg condition value` errors in sop/mod.rs,
  sop/audit.rs, and sop/metrics.rs.
- Use dynamic Utc::now() timestamps in metrics test helper `make_run()`
  instead of hardcoded 2026-02-19 dates, which had drifted outside the
  7-day/30-day windowed metric windows causing 7 test failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(sop): remove non-functional ampersona-gates feature flag

The ampersona-gates feature flag referenced ampersona_core and
ampersona_engine crates that do not exist, causing cargo check
--all-features to fail. Remove the feature flag and all gated code:

- Remove ampersona-gates from Cargo.toml [features]
- Delete src/sop/gates.rs (entire module behind cfg gate)
- Remove gated methods from audit.rs (log_gate_decision, log_phase_state)
- Remove gated MetricsProvider impl and tests from metrics.rs
- Simplify sop_status.rs gate_eval field and append_gate_status
- Update observability docs (EN + zh-CN)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style(sop): fix formatting in metrics.rs

* fix(sop): wire SOP tools into tool registry

The five SOP tools (sop_list, sop_advance, sop_execute, sop_approve,
sop_status) existed as source files but were never registered in
all_tools_with_runtime. They are now conditionally registered when
sop.sops_dir is configured.

Also fixes:
- Add mod sop + SopCommands re-export to main.rs (binary crate)
- Handle new DeterministicStep/CheckpointWait variants in match arms
- Add missing struct fields (deterministic, kind, schema, llm_calls_saved)
  to test constructors

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(sop): fix state file leak and add deterministic execution tests

- Fix persist_deterministic_state fallback: use system temp dir instead
  of current working directory when SOP location is unset, preventing
  state files from polluting the working directory.
- Add comprehensive test coverage for deterministic execution path:
  start, advance, checkpoint pause, completion with savings tracking,
  and rejection of non-deterministic SOPs.
- Add tests for deterministic flag in TOML manifest loading and
  checkpoint kind parsing from SOP.md.
- Add serde roundtrip tests for DeterministicRunState, SopStepKind,
  SopExecutionMode::Deterministic, and SopRunStatus::PausedCheckpoint.

* ci: retrigger CI

* fix: add missing attachments field to wati ChannelMessage after media pipeline merge

* fix(channels): add missing attachments field to voice_wake and lark

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: rareba <rareba@users.noreply.github.com>
2026-03-23 16:40:26 -04:00
Argenis
2ee0229740
fix(gateway): improve WebSocket chat error handling and diagnostics (#4407)
- Add error codes to WS error messages (AGENT_INIT_FAILED, AUTH_ERROR, PROVIDER_ERROR, INVALID_JSON, UNKNOWN_MESSAGE_TYPE, EMPTY_CONTENT)
- Send Close frame with code 1011 on agent init failure
- Add tracing logs for agent init and turn errors
- Increase MAX_API_ERROR_CHARS from 200 to 500
- Frontend: handle abnormal close codes and show config error hints

Fixes #3681
Supersedes #4366
Original work by mark-linyb
2026-03-23 15:30:18 -04:00
Argenis
0d2b57ee2e
fix(channels): ensure newline between narration and draft status lines (#4394)
Narration text from native tool-call providers that doesn't end with a newline now gets one appended before dispatch to the draft updater. Prevents garbled output in Telegram drafts.

Closes #4348
2026-03-23 15:30:15 -04:00
Argenis
b85a445955
fix(channels): prevent draft streaming hang after tool loop completion (#4393)
Drop delta_tx before awaiting draft_updater so the mpsc channel closes and the updater task can terminate. Without this, draft-capable channels (e.g. Telegram) hang indefinitely after the tool loop completes.

Closes #4300
2026-03-23 15:30:12 -04:00
Argenis
dbd8c77519
feat(channels): add automatic media understanding pipeline (#4402)
* feat(channels): add automatic media understanding pipeline for inbound messages

Add MediaPipeline that pre-processes inbound channel message attachments
before the agent sees them:

- Audio: transcribed via existing transcription infrastructure, annotated
  as [Audio transcription: ...]
- Images: annotated with [Image: <file> attached] (vision-aware)
- Video: annotated with [Video: <file> attached] (placeholder for future API)

The pipeline is opt-in via [media_pipeline] config section (default: disabled).
Individual media types can be toggled independently.

Changes:
- New src/channels/media_pipeline.rs with MediaPipeline struct and tests
- New MediaPipelineConfig in config/schema.rs
- Added attachments field to ChannelMessage for media pass-through
- Wired pipeline into process_channel_message after hooks, before agent

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): add attachments field to integration test fixtures

Add missing `attachments: vec![]` to all ChannelMessage struct literals
in channel_matrix.rs and channel_routing.rs after the new attachments
field was added to the struct in traits.rs.

Also fix schema.rs test compilation: make TempDir import unconditional
and add explicit type annotations on tokio::fs calls to resolve type
inference errors in the bootstrap file tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): add missing attachments field to gmail_push and discord_history constructors

These channels were added to master after the media pipeline PR was
originally branched. The ChannelMessage struct now requires an
attachments field, so initialise it to an empty Vec for channels
that do not yet extract attachments.

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:14:11 -04:00
Argenis
34db67428f
fix(gateway): stream ws agent chat responses (#4390)
Add Agent::turn_streamed() that forwards TurnEvent (Chunk, ToolCall,
ToolResult) through an mpsc channel during execution. The WebSocket
gateway uses tokio::join! to relay these events to the client in real
time instead of waiting for the full turn to complete.

Introduce chunk_reset message type so the frontend clears its draft
buffer before the authoritative done message arrives.  Update the React
AgentChat page to render streamed text live in the typing indicator
area, replacing the bounce-dot animation when content is available.

Backward-compatible: the done message still carries the full_response
field unchanged, and providers that do not support streaming fall back
to the non-streaming chat path transparently.

Closes #4372
2026-03-23 15:01:04 -04:00
Argenis
01d0c6b23a
fix(config): add cost tracking configuration to template and example files (#4387)
Add the [cost] section to dev/config.template.toml and
examples/config.example.toml documenting all CostConfig options
(enabled, daily_limit_usd, monthly_limit_usd, warn_at_percent,
allow_override) with their defaults and commented-out model pricing
examples.

Fixes #4373
2026-03-23 15:01:01 -04:00
Argenis
79f0a5ae30
fix(matrix): handle unused Result from backups().disable() (#4386)
Add `let _ =` prefix to explicitly discard the Result from
`client.encryption().backups().disable().await`, suppressing the
`unused_must_use` compiler warning.

Closes #4374
2026-03-23 15:00:58 -04:00
Argenis
5bdeeba213
feat(wati): add audio and voice message transcription (#4391)
* fix(transcription): remove deployment-specific WireGuard references from doc comments

LocalWhisperProvider and LocalWhisperConfig doc comments referenced
WireGuard and specific internal infrastructure. Deployment topology is
operator choice — replace with neutral examples.

* feat(wati): add audio and voice message transcription

* fix(wati): SSRF host validation, early fromMe check, download size cap

Validate that media_url host matches the configured api_url host before
fetching, preventing SSRF with credential leakage.  Move the fromMe
check before the HTTP download to avoid wasting bandwidth on outgoing
messages.  Add MAX_WATI_AUDIO_BYTES (25 MiB) Content-Length pre-check.
Skip empty transcripts in parse_audio_as_message.  Short-circuit
with_transcription() when config.enabled is false.

* fix(wati): remove dead field, enforce streaming size cap, log errors

- Remove unused transcription config field (clippy dead code)
- Use streaming download to enforce size cap without Content-Length
- Log network errors instead of silently swallowing with .ok()?

---------

Co-authored-by: Nim G <theredspoon@users.noreply.github.com>
2026-03-23 14:58:21 -04:00
Argenis
b5447175ff
feat(mattermost): add audio transcription via TranscriptionManager (#4389)
* fix(transcription): remove deployment-specific WireGuard references from doc comments

LocalWhisperProvider and LocalWhisperConfig doc comments referenced
WireGuard and specific internal infrastructure. Deployment topology is
operator choice — replace with neutral examples.

* feat(mattermost): add audio transcription via TranscriptionManager

Add transcription support for Mattermost audio attachments. Routes
audio through TranscriptionManager when configured, with duration
limit enforcement and wiremock-based integration tests.

* fix(mattermost): add download size cap, HTTP status check, warn logging

Replace chained .ok()? calls in try_transcribe_audio_attachment with
explicit error handling that logs warnings on HTTP failure, non-success
status codes, and oversized files.  Add MAX_MATTERMOST_AUDIO_BYTES
(25 MiB) Content-Length pre-check.  Remove mp4 and webm from the
extension-only fallback in is_audio_file().  Short-circuit
with_transcription() when config.enabled is false.

* fix(mattermost): add [Voice] prefix, filter empty, fix config init

- Add [Voice] prefix to transcribed audio matching Slack/Discord
- Filter empty transcription results
- Only store transcription config on successful manager init
- Update test expectation for [Voice] prefix

---------

Co-authored-by: Nim G <theredspoon@users.noreply.github.com>
2026-03-23 14:58:18 -04:00
Argenis
0dc05771ba
feat(lark): add audio message transcription (#4388)
* fix(transcription): remove deployment-specific WireGuard references from doc comments

LocalWhisperProvider and LocalWhisperConfig doc comments referenced
WireGuard and specific internal infrastructure. Deployment topology is
operator choice — replace with neutral examples.

* feat(lark): add audio message transcription

* test(channels): add three missing lark audio transcription tests

- lark_audio_skips_when_manager_none: parse_event_payload_async returns
  empty when transcription_manager is None
- lark_audio_routes_through_transcription_manager: wiremock end-to-end
  test proving file_key → download → whisper → ChannelMessage chain
- lark_audio_token_refresh_on_invalid_token_response: wiremock test
  verifying 401 triggers token invalidation and retry

Adds a #[cfg(test)] api_base_override field to LarkChannel so wiremock
can intercept requests that normally go to hardcoded Lark/Feishu API
base URLs.

* fix(lark): add audio download size cap, event_type guard, skip disabled transcription

Add MAX_LARK_AUDIO_BYTES (25 MiB) Content-Length pre-check before
reading audio response bodies on both the normal and token-refresh
paths.  Add the missing im.message.receive_v1 event_type guard in
parse_event_payload_async so non-message callbacks are rejected before
the audio branch.  Short-circuit with_transcription() when
config.enabled is false.

* fix(lark): address review feedback for audio transcription

- Wire parse_event_payload_async in webhook handler (was dead code)
- Use streaming download with enforced size cap (no Content-Length bypass)
- Fix test: lark_manager_some_when_valid_config asserted is_some with enabled=false
- Fix test: add missing header to lark_audio_skips_when_manager_none payload
- Remove redundant group-mention check in audio arm (shared check covers it)

---------

Co-authored-by: Nim G <theredspoon@users.noreply.github.com>
2026-03-23 14:58:11 -04:00
Argenis
10f9ea3454
fix(security): update blocked_commands_basic test after #4338 (#4399)
* fix(security): update blocked_commands_basic test after allowing python/node

After adding python3 and node to default_allowed_commands in #4338,
the test asserting they are blocked is now wrong. Replace with ruby
and perl which remain correctly blocked.

* fix(security): also fix python3 reference in pipe validation test

The command_with_pipes_validates_all_segments test also referenced
python3 in a blocked assertion. Replace with ruby.
2026-03-23 14:16:42 -04:00
linyibin
3ec532bc29
fix(config): add cost tracking configuration section to template (#4368)
Add [cost] section to dev/config.template.toml with all configuration options and commented per-model pricing examples. Fixes #3679.
2026-03-23 14:14:59 -04:00
Nisit Sirimarnkit
f1688c5910
fix(agent): use Gregorian datetime and prioritize date context in prompts (#4369)
Force explicit Gregorian year/month/day via Datelike/Timelike traits instead of chrono format() which inherits system locale (e.g. Buddhist calendar on Thai systems). Prepend datetime before memory context in user messages. Rename DateTimeSection header to CRITICAL CONTEXT.
2026-03-23 14:14:56 -04:00
Argenis
fd9f140268
feat(tools): add cross-channel poll creation tool (#4396)
* feat(tools): add cross-channel poll creation tool

Adds a poll tool that enables cross-channel poll creation with voting
support. Changes all_tools_with_runtime return type from 3-tuple to
4-tuple to accommodate the new reaction handle.

Original PR #4243 by rareba.

* ci: retrigger CI
2026-03-23 13:58:01 -04:00
Argenis
b2dccf86eb
feat(tools): add Firecrawl fallback for JS-heavy sites (#4395)
* feat(tools): add Firecrawl fallback for JS-heavy and bot-blocked sites

Adds optional Firecrawl API integration as a fallback when standard web
fetching fails due to JavaScript-heavy pages or bot protection. Includes
configurable API key, timeout, and domain allowlist/blocklist.

Original PR #4244 by rareba.

* ci: retrigger CI
2026-03-23 13:57:56 -04:00
Argenis
f0c106a938
fix(update): diagnose arch mismatch in validate_binary before execution (#4379)
When a downloaded binary has the wrong architecture, the previous code
attempted to execute it and surfaced a raw "Exec format error (os error 8)".
Now validate_binary reads the ELF/Mach-O header first, compares the binary
architecture against the host, and reports a clear diagnostic like:
"architecture mismatch: downloaded binary is aarch64 but this host is x86_64".

Closes #4291
2026-03-23 13:36:44 -04:00
Keith_void
e276e66c05
fix(config): resolve macOS test failures from path canonicalization (#4362)
- Prefer HOME env var in default_config_dir() before falling back to UserDirs::new()
- Pre-create temp_default_dir in test so is_temp_directory() can canonicalize /var -> /private/var symlink on macOS
2026-03-23 13:33:19 -04:00
Giulio V
2300f21315
feat(channels): extend /new session reset to all channels (#4361)
Move supports_runtime_model_switch() guard from parse_runtime_command() entry to /model and /models match arms only, so /new is available on every channel.

Closes #4236
2026-03-23 13:33:06 -04:00
Giulio V
2575edb1d2
feat(tools): add LLM task tool for structured JSON-only sub-calls (#4241)
* feat(tools): add LLM task tool for structured JSON-only sub-calls

Add LlmTaskTool — a lightweight tool that runs a single prompt through
an LLM provider with no tool access and optionally validates the
response against a caller-supplied JSON Schema. Ideal for structured
data extraction, classification, and transformation in workflows.

- Parameters: prompt (required), schema (optional JSON Schema),
  model (optional override), temperature (optional override)
- Uses configured default provider/model from root config
- Validates response JSON against schema (required fields, type checks)
- Strips markdown code fences from LLM responses before validation
- Gated by ToolOperation::Act security policy
- Registered in all_tools_with_runtime (always available)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use non-constant value instead of approximate PI in tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: rareba <rareba@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:50:22 -04:00
Giulio V
d31f2c2d97
feat(agent): add loop detection guardrail for repetitive tool calls (#4240)
* feat(agent): add loop detection guardrail for repetitive tool calls

Introduces a LoopDetector that monitors a sliding window of recent tool
calls and detects three repetitive patterns:

1. Exact repeat — same tool+args called consecutively (default 3+)
2. Ping-pong — two tools alternating for 4+ cycles
3. No progress — same tool with different args but identical results (5+)

Each pattern escalates through Warning -> Block -> CircuitBreaker.
Configurable via [pacing] section: loop_detection_enabled (default true),
loop_detection_window_size (default 20), loop_detection_max_repeats
(default 3).

Wired into run_tool_call_loop alongside the existing time-gated
identical-output detector. Respects loop_ignore_tools exclusion list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(agent): fix channel test interaction with loop detector

The max_tool_iterations channel tests use an IterativeToolProvider that
intentionally repeats identical tool calls. The loop detector (enabled by
default) fires its circuit breaker before max_tool_iterations is reached,
causing the test to fail. Disable loop detection in these two tests so
they exercise only the max_tool_iterations boundary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(agent): address PR #4240 review — loop detector correctness and test precision

Critical fixes:
- Fix result_index/tool_calls misalignment: use enumerate() before
  filter_map() so the index stays aligned with tool_calls even when
  ordered_results contains None entries from skipped tool calls.
- Fix hash_value JSON key-order sensitivity: canonicalise() recursively
  sorts object keys before serialisation so {"a":1,"b":2} and
  {"b":2,"a":1} hash identically.

Tightened test assertions:
- ping_pong_escalates_with_more_cycles: assert Block with 5 cycles
  (was loose Warning|Block|Break match).
- no_progress_escalates_to_block_and_break: assert Break at 7 calls
  (was loose Block|Break match).
- no_progress_not_triggered_when_all_args_identical: assert Warning
  specifically (was accepting Ok as alternative).

New tests:
- ping_pong_detects_alternation_with_varying_args (item 3)
- window_eviction_prevents_stale_pattern_detection (item 4)
- hash_value_is_key_order_independent + nested variant (item 2)
- pacing_config_serde_defaults_match_manual_default (item 5)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: rareba <rareba@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 12:49:47 -04:00
Argenis
9d7f6c5aaf
fix(skills): surface actionable warning when skills are skipped due to script policy (#4383)
When a skill directory contains script files and `skills.allow_scripts`
is false (the default), the skill was silently skipped with only a
tracing::warn that most users never see. The LLM then reports "tool is
not available in this environment" with no guidance on how to fix it.

Now the loader emits a user-visible stderr warning that names the
skipped skill and suggests setting `skills.allow_scripts = true`.

Closes #4292
2026-03-23 12:47:32 -04:00
Argenis
f9081fcfa7
fix(update): use exact target triples in find_asset_url to prevent wrong binary selection (#4377)
The previous substring match (e.g. "aarch64-unknown-linux") could match
both gnu and android release assets. Switch to full triples like
"aarch64-unknown-linux-gnu" so find_asset_url only selects the correct
platform binary.

Closes #4293
2026-03-23 12:41:17 -04:00
Argenis
a4d95dec0e
fix(cost): enable cost tracking by default (#3679) (#4382)
Cost tracking was disabled by default (enabled: false), causing the
/api/cost endpoint to always return zeros unless users explicitly
opted in. Change the default to enabled: true so cost tracking works
out of the box for all models and channels.
2026-03-23 12:38:35 -04:00
Argenis
31508b8ec7
fix(build): disable prometheus on 32-bit ARM targets in installer (#3677) (#4384)
The prometheus crate requires AtomicU64 which is unavailable on 32-bit
ARM (armv7l/armv6l). Detect 32-bit ARM in install.sh and build with
--no-default-features, re-enabling only channel-nostr and
skill-creation (excluding observability-prometheus).
2026-03-23 12:35:09 -04:00
Argenis
3d9069552c
fix(gateway): send error responses for unrecognized WebSocket message types (#3681) (#4381)
Previously, the /ws/chat handler silently ignored messages with
unrecognized types, leaving clients waiting for a response that never
comes. Now sends explicit error messages describing the expected format.
2026-03-23 12:33:23 -04:00
Argenis
3b074041bf
fix(ollama): strip /api/chat suffix from user-provided base URL (#4376)
When users configure the Ollama api_url with the full endpoint path
(e.g. http://host:11434/api/chat), normalize_base_url only stripped
/api but not /api/chat, causing the final request URL to become
/api/chat/api/chat which fails on remote servers.

Closes #4342
2026-03-23 12:19:26 -04:00
Argenis
9a95318b85
fix(security): add python, python3, pip, node to default allowed commands (#4375)
The default_allowed_commands() list was missing common scripting
runtimes. After #3691 added serde defaults to AutonomyConfig, users
who omitted allowed_commands from their config silently fell back to
the restrictive default list, breaking shell tool access to Python.

Closes #4338
2026-03-23 12:19:23 -04:00
Argenis
ccd572b827
fix(matrix): handle unused Result from backups().disable() (#4374)
Add let _ = prefix to suppress unused Result warning on
client.encryption().backups().disable().await call.

Closes #4339
2026-03-23 12:19:10 -04:00
Argenis
41dd23175f
chore(ci): unify release pipeline for full auto-sync (#4283)
- Add tag-push trigger to Release Stable workflow so `git push origin v0.5.9`
  auto-triggers the full pipeline (builds, Docker, crates.io, website,
  Scoop, AUR, Homebrew, tweet) in one shot
- Add Homebrew Core as downstream job (was manual-only, never auto-triggered)
- Add `workflow_call` to pub-homebrew-core.yml so it can be called from
  the stable release workflow
- Skip beta releases on version bump commits (prevents beta/stable race)
- Skip auto crates.io publish when stable tag exists (prevents double-publish)
- Auto-create git tag on manual dispatch so tag always exists for downstream
- Fix cut_release_tag.sh to reference correct workflow name
2026-03-22 20:56:47 -04:00
Argenis
864d754b56
chore: bump version to 0.5.9 (#4282)
Release 0.5.9 includes:
- feat: enable internet access by default (#4270)
- feat: add browser automation skill and VNC setup scripts (#4281)
- feat: add voice message transcription support (#4278)
- feat: add image and file support for Feishu/Lark channel (#4280)
- feat: declarative cron job configuration (#4045)
- feat: add SearXNG search provider support (#4272)
- feat: register skill tools as callable tool specs (#4040)
- feat: named sessions with reconnect and validation (#4275)
- feat: restore time-decay scoring for memory (#4274)
- fix: prevent thinking level prefix leak across turns (#4277)
- fix: link enricher title extraction byte offset bug (#4271)
- fix: WhatsApp Web delivery channel with backend validation (#4273)
2026-03-22 20:23:55 -04:00
Argenis
ccd52f3394
feat: add browser automation skill and VNC setup scripts (#4281)
* feat: add browser automation skill and VNC setup scripts

- Add browser skill template for agent-browser CLI integration
- Add VNC setup scripts for GUI browser access (Xvfb, x11vnc, noVNC)
- Add comprehensive browser setup documentation
- Enables headless browser automation for AI agents

Tested on: Ubuntu 24.04, ZeroClaw 0.5.7, agent-browser 0.21.4

Co-authored-by: OpenClaw Assistant

* fix(docs): fix markdown lint errors and update browser config docs

- SKILL.md: add blank lines around headings (MD022)
- browser-setup.md: wrap bare URLs in angle brackets (MD034)
- browser-setup.md: rename duplicate "Access" heading (MD024)
- Update config examples to reflect browser enabled by default
- Add examples for restricting/disabling browser via config

---------

Co-authored-by: Argenis <theonlyhennygod@users.noreply.github.com>
2026-03-22 19:35:20 -04:00
Argenis
eb01aa451d
feat: add voice message transcription support (#4278)
Closes #4231. Adds voice memo detection and transcription for Slack and Discord channels. Audio files are downloaded, transcribed via the existing transcription module, and passed as text to the LLM.
2026-03-22 19:18:07 -04:00
Argenis
c785b45f2d
feat: add image and file support for Feishu/Lark channel (#4280)
Closes #4235. Adds image and file message type handling in the Lark channel - downloads images/files via Lark API, detects MIME types, and passes content to the model for analysis.
2026-03-22 19:14:43 -04:00
Argenis
ffb8b81f90
fix(agent): prevent thinking level prefix from leaking across turns (#4277)
* feat(agent): add thinking/reasoning level control per message

Users can set reasoning depth via /think:high etc. with resolution
hierarchy (inline > session > config > default). 6 levels from Off
to Max. Adjusts temperature and system prompt.

* fix(agent): prevent thinking level prefix from leaking across interactive turns

system_prompt was mutated in place for the first message's thinking
directive, then used as the "baseline" for restoration after each
interactive turn. This caused the first turn's thinking prefix to
persist across all subsequent turns.

Fix: save the original system_prompt before any thinking modifications
and restore from that saved copy between turns.
2026-03-22 19:09:12 -04:00
Argenis
65f856d710
fix(channels): link enricher title extraction byte offset bug (#4271)
* feat(channels): add automatic link understanding for inbound messages

Auto-detects URLs in inbound messages, fetches content, extracts
title+summary, and enriches the message before the agent sees it.
Includes SSRF protection (rejects private IPs).

* fix(channels): use lowercased string for title extraction to prevent byte offset mismatch

extract_title used byte offsets from the lowercased HTML to index into
the original HTML. Multi-byte characters whose lowercase form has a
different byte length (e.g. İ → i̇) would produce wrong slices or panics.
Fix: extract from the lowercased string directly. Add multibyte test.
2026-03-22 19:09:09 -04:00
Argenis
1682620377
feat(tools): enable internet access by default (#4270)
* feat(tools): enable internet access by default

Enable web_fetch, web_search, http_request, and browser tools by
default so ZeroClaw has internet access out of the box. Security
remains fully toggleable via config (set enabled = false to disable).

- web_fetch: enabled with allowed_domains = ["*"]
- web_search: enabled with DuckDuckGo (free, no API key)
- http_request: enabled with allowed_domains = ["*"]
- browser: enabled with allowed_domains = ["*"], agent_browser backend
- text_browser: remains opt-in (requires external binary)

* fix(tests): update component test for browser enabled by default

Update config_nested_optional_sections_default_when_absent to expect
browser.enabled = true, matching the new default.
2026-03-22 19:07:12 -04:00
Argenis
aa455ae89b
feat: declarative cron job configuration (#4045)
Add support for defining cron jobs directly in the TOML config file via
`[[cron.jobs]]` array entries. Declarative jobs are synced to the SQLite
database at scheduler startup with upsert semantics:

- New declarative jobs are inserted
- Existing declarative jobs are updated to match config
- Stale declarative jobs (removed from config) are deleted
- Imperative jobs (created via CLI/API) are never modified

Each declarative job requires a stable `id` for merge tracking. A new
`source` column (`"imperative"` or `"declarative"`) distinguishes the
two creation paths. Shell jobs require `command`, agent jobs require
`prompt`, validated before any DB writes.
2026-03-22 19:03:00 -04:00
Argenis
a9ffd38912
feat(memory): restore time-decay scoring lost in main→master migration (#4274)
Apply exponential time decay (2^(-age/half_life), 7-day half-life) to
memory entry scores post-recall. Core memories are exempt (evergreen).
Consolidate duplicate half-life constants into a single public constant
in the decay module.

Based on PR #4266 by 5queezer with constant consolidation fix.
2026-03-22 19:01:40 -04:00
Argenis
86a0584513
feat: add SearXNG search provider support (#4272)
Closes #4152. Adds SearXNG as a search provider option with JSON output support, configurable instance URL, env override support, and 7 new tests.
2026-03-22 19:01:35 -04:00
Argenis
abef4c5719
fix(cron): add WhatsApp Web delivery channel with backend validation (#4273)
Apply PR #4258 changes to add whatsapp/whatsapp-web/whatsapp_web match
arm in deliver_announcement, feature-gated behind whatsapp-web.

Added is_web_config() guard to bail early when the WhatsApp config is
for Cloud API mode (no session_path), preventing a confusing runtime
failure with an empty session path.
2026-03-22 18:58:26 -04:00
Argenis
483b2336c4
feat(gateway): add named sessions with reconnect and validation fixes (#4275)
* fix(cron): add WhatsApp Web delivery channel with backend validation

Apply PR #4258 changes to add whatsapp/whatsapp-web/whatsapp_web match
arm in deliver_announcement, feature-gated behind whatsapp-web.

Added is_web_config() guard to bail early when the WhatsApp config is
for Cloud API mode (no session_path), preventing a confusing runtime
failure with an empty session path.

* feat(gateway): add named sessions with human-readable labels

Apply PR #4267 changes with bug fixes:
- Add get_session_name trait method so WS session_start includes the
  stored name on reconnect (not just when ?name= query param is present)
- Rename API now returns 404 for non-existent sessions instead of
  silently succeeding
- Empty ?name= query param on WS connect no longer clears existing name
2026-03-22 18:58:15 -04:00
Argenis
14cda3bc9a
feat: register skill tools as callable tool specs (#4040)
Skill tools defined in [[tools]] sections are now registered as first-class
callable tool specs via the Tool trait, rather than only appearing as XML
in the system prompt. This enables the LLM to invoke skill tools through
native function calling.

- Add SkillShellTool for shell/script kind skill tools
- Add SkillHttpTool for http kind skill tools
- Add skills_to_tools() conversion and register_skill_tools() wiring
- Wire registration into both CLI and process_message agent paths
- Update prompt rendering to mark registered tools as callable
- Update affected tests across skills, agent/prompt, and channels
2026-03-22 18:51:24 -04:00
Argenis
6e8f0fa43c
docs: add ADR for tool shared state ownership contract (#4057)
Define the contract for long-lived shared state in multi-client tool
execution, covering ownership (handle pattern), identity assignment
(daemon-provided ClientId), lifecycle (validation at registration),
isolation (per-client for security state), and reload semantics
(config hash invalidation).
2026-03-22 18:40:34 -04:00
argenis de la rosa
a965b129f8 chore: bump version to 0.5.8
Release trigger bump after recent fixes.
2026-03-22 16:29:45 -04:00
Argenis
c135de41b7
feat(matrix): add allowed_rooms config for room-level gating (#4230) (#4260)
Add an `allowed_rooms` field to MatrixConfig that controls which rooms
the bot will accept messages from and join invites for. When the list
is non-empty, messages from unlisted rooms are silently dropped and
room invites are auto-rejected. When empty (default), all rooms are
allowed, preserving backward compatibility.

- Config: add `allowed_rooms: Vec<String>` with `#[serde(default)]`
- Message handler: replace disabled room_id filter with allowlist check
- Invite handler: auto-accept allowed rooms, auto-reject others
- Support both canonical room IDs and aliases, case-insensitive
2026-03-22 14:41:43 -04:00
Argenis
2d2c2ac9e6
feat(telegram): support forwarded messages with attribution (#4265)
Parse forward_from, forward_from_chat, and forward_sender_name fields
from Telegram message updates. Prepend forwarding attribution to message
content so the LLM has context about the original sender.

Closes #4118
2026-03-22 14:36:31 -04:00
Argenis
5e774bbd70
feat(multimodal): route image messages to dedicated vision provider (#4264)
When vision_provider is configured in [multimodal] config, messages
containing [IMAGE:] markers are automatically routed to the specified
vision-capable provider instead of failing on the default text provider.

Closes #4119
2026-03-22 14:36:29 -04:00
Argenis
33015067eb
feat(tts): add local Piper TTS provider (#4263)
Add a piper TTS provider that communicates with a local Piper/Coqui TTS
server via an OpenAI-compatible HTTP endpoint. This enables fully offline
voice pipelines: Whisper (STT) → LLM → Piper (TTS).

Closes #4116
2026-03-22 14:36:26 -04:00
Argenis
6b10c0b891
fix(approval): merge default auto_approve entries with user config (#4262)
When a user provides a custom `auto_approve` list in their TOML
config (e.g. to add an MCP tool), serde replaces the built-in
defaults instead of merging. This causes default safe tools like
`weather`, `calculator`, and `file_read` to lose auto-approve
status and get silently denied in non-interactive channel runs.

Add `ensure_default_auto_approve()` which merges built-in entries
into the user's list after deserialization, preserving user
additions while guaranteeing defaults are always present. Users
who want to require approval for a default tool can use
`always_ask`, which takes precedence.

Closes #4247
2026-03-22 14:28:09 -04:00
Argenis
bf817e30d2
fix(provider): prevent async runtime panic during model refresh (#4261)
Wrap `fetch_live_models_for_provider` calls in
`tokio::task::spawn_blocking` so the `reqwest::blocking::Client`
is created and dropped on a dedicated thread pool instead of
inside the async Tokio context. This prevents the
"Cannot drop a runtime in a context where blocking is not allowed"
panic when running `models refresh --provider openai`.

Closes #4253
2026-03-22 14:22:47 -04:00
Alix-007
0051a0c296
fix(matrix): enforce configured room scope on inbound events (#4251)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-22 14:08:13 -04:00
Canberk Özkan
d753de91f1
fix(skills): prevent panic by ensuring UTF-8 char boundary during truncation (#4252)
Fixed issue #4139.

Previously, slicing a string at exactly 64 bytes could land in the middle of a multi-byte UTF-8 character (e.g., Chinese characters), causing a runtime panic.

Changes:
- Replaced direct byte slicing with a safe boundary lookup using .char_indices().
- Ensures truncation always occurs at a valid character boundary at or before the 64-byte limit.
- Maintained existing hyphen-trimming logic.

Co-authored-by: loriscience <loriscience@gmail.com>
2026-03-22 14:08:01 -04:00
Argenis
f6b2f61a01
fix(matrix): disable automatic key backup when no backup key is configured (#4259)
Explicitly call `client.encryption().backups().disable()` when backups
are not enabled, preventing the matrix_sdk_crypto crate from attempting
room key backups on every sync cycle and spamming the logs with
"Trying to backup room keys but no backup key was found" warnings.

Closes #4227
2026-03-22 13:55:45 -04:00
Argenis
70e7910cb9
fix(web): remove unused import blocking release pipeline (#4234)
fix(web): remove unused import blocking release pipeline
2026-03-22 01:35:26 -04:00
argenis de la rosa
a8868768e8 fix(web): remove unused ChevronsUpDown import blocking release pipeline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 01:20:51 -04:00
Argenis
67293c50df
chore: bump version to 0.5.7 (#4232)
chore: bump version to 0.5.7
2026-03-22 01:14:08 -04:00
argenis de la rosa
1646079d25 chore: bump version to 0.5.7
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 00:49:41 -04:00
Argenis
25b639435f
fix: merge voice-wake feature (PR #4162) with conflict resolution (#4225)
* feat(channels): add voice wake word detection channel

Add VoiceWakeChannel behind the `voice-wake` feature flag that:
- Captures audio from the default microphone via cpal
- Uses energy-based VAD to detect speech activity
- Transcribes speech via the existing transcription API (Whisper)
- Checks for a configurable wake word in the transcription
- On detection, captures the following utterance and dispatches it
  as a ChannelMessage

State machine: Listening -> Triggered -> Capturing -> Processing -> Listening

Config keys (under [channels_config.voice_wake]):
- wake_word (default: "hey zeroclaw")
- silence_timeout_ms (default: 2000)
- energy_threshold (default: 0.01)
- max_capture_secs (default: 30)

Includes tests for config parsing, state machine, RMS energy
computation, and WAV encoding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(config): fix pre-existing test compilation errors in schema.rs

- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): exclude voice-wake from all-features CI check

Add a `ci-all` meta-feature in Cargo.toml that includes every feature
except `voice-wake`, which requires `libasound2-dev` (ALSA) not present
on CI runners. Update the check-all-features CI job to use
`--features ci-all` instead of `--all-features`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 00:49:12 -04:00
Argenis
77779844e5
feat(memory): layered architecture upgrade + remove mem0 backend (#4226)
feat(memory): layered architecture upgrade + remove mem0 backend
2026-03-22 00:47:42 -04:00
Argenis
f658d5806a
fix: honor [autonomy] config section in daemon/channel mode
Fixes #4171
2026-03-22 00:47:32 -04:00
Argenis
7134fe0824
Merge pull request #4223 from zeroclaw-labs/fix/4214-heartbeat-utf8-safety
fix(heartbeat): prevent UTF-8 panic, add memory bounds and path validation
2026-03-22 00:41:47 -04:00
Argenis
263802b3df
Merge pull request #4224 from zeroclaw-labs/fix/4215-thai-i18n-cleanup
fix(i18n): remove extra keys and translate notion in th.toml
2026-03-22 00:41:21 -04:00
Argenis
3c25fddb2a
fix: merge Gmail Pub/Sub push PR #4164 (already integrated via #4200) (#4222)
* feat(channels): add Gmail Pub/Sub push notifications for real-time email

Add GmailPushChannel that replaces IMAP polling with Google's Pub/Sub
push notification system for real-time email-driven automation.

- New channel at src/channels/gmail_push.rs implementing the Channel trait
- Registers Gmail watch subscription (POST /gmail/v1/users/me/watch)
  with automatic renewal before the 7-day expiry
- Handles incoming Pub/Sub notifications at POST /webhook/gmail
- Fetches new messages via Gmail History API (startHistoryId-based)
- Dispatches email messages to the agent with full metadata
- Sends replies via Gmail messages.send API
- Config: gmail_push.enabled, topic, label_filter, oauth_token,
  allowed_senders, webhook_url
- OAuth token encrypted at rest via existing secret store
- Webhook endpoint added to gateway router
- 30+ unit tests covering notification parsing, header extraction,
  body decoding, sender allowlist, and config serialization

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(config): fix pre-existing test compilation errors in schema.rs

- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): fix extract_body_text_plain test

Gmail API sends base64url without padding. The decode_body function
converted URL-safe chars back to standard base64 but did not restore
the padding, causing STANDARD decoder to fail and falling back to
snippet. Add padding restoration before decoding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 00:40:42 -04:00
Argenis
a6a46bdd25
fix: add weather tool to default auto_approve list
Fixes #4170
2026-03-22 00:21:33 -04:00
Argenis
235d4d2f1c
fix: replace ILIKE substring matching with full-text search in postgres memory recall()
Fixes #4204
2026-03-22 00:20:11 -04:00
argenis de la rosa
bd1e8c8e1a merge: resolve conflicts with master + remove memory-mem0 from ci-all
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 00:18:09 -04:00
Argenis
f81807bff6
fix: serialize env-dependent codex tests to prevent race (#4210) (#4218)
Add a process-scoped Mutex that all env-var-mutating tests in
openai_codex::tests must hold.  This prevents std::env::set_var /
remove_var calls from racing when Rust's test harness runs them on
parallel threads.

Affected tests:
- resolve_responses_url_prefers_explicit_endpoint_env
- resolve_responses_url_uses_provider_api_url_override
- resolve_reasoning_effort_prefers_configured_override
- resolve_reasoning_effort_uses_legacy_env_when_unconfigured
2026-03-22 00:14:01 -04:00
argenis de la rosa
bb7006313c feat(memory): layered architecture upgrade + remove mem0 backend
Implement 6-phase memory system improvement:
- Multi-stage retrieval pipeline (cache → FTS → vector)
- Namespace isolation with strict filtering
- Importance scoring (category + keyword heuristics)
- Conflict resolution via Jaccard similarity + superseded_by
- Audit trail decorator (AuditedMemory<M>)
- Policy engine (quotas, read-only namespaces, retention rules)
- Deterministic sort tiebreaker on equal scores

Remove mem0 (OpenMemory) backend — all capabilities now covered
natively with better performance (local SQLite vs external REST API).

46 battle tests + 262 existing tests pass. Backward-compatible:
existing databases auto-migrate, existing configs work unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 00:09:43 -04:00
Argenis
9a49626376
fix: use POSIX-compatible sh -c instead of dash-specific -lc (#4209) (#4217)
* fix: build web dashboard during install.sh (#4207)

* fix: use POSIX-compatible sh -c instead of dash-specific -lc in cron scheduler (#4209)
2026-03-22 00:07:37 -04:00
Argenis
8b978a721f
fix: build web dashboard during install.sh (#4207) (#4216) 2026-03-22 00:02:54 -04:00
argenis de la rosa
75b4c1d4a4 fix(heartbeat): prevent UTF-8 panic, add memory bounds and path validation in session context
- Use char_indices for safe UTF-8 truncation instead of byte slicing
- Replace unbounded Vec with VecDeque rolling window in load_jsonl_messages
- Add path separator validation for channel/to to prevent directory traversal
2026-03-22 00:01:44 -04:00
argenis de la rosa
b2087e6065 fix(i18n): remove extra keys and translate untranslated notion entry in th.toml 2026-03-21 23:59:46 -04:00
Nisit Sirimarnkit
ad8f81ad76
Merge branch 'master' into i18n/thai-tool-descriptions 2026-03-22 10:28:47 +07:00
ninenox
c58e1c1fb3 i18n: add Thai tool descriptions 2026-03-22 10:09:03 +07:00
Martin Minkus
cb0779d761 feat(heartbeat): add load_session_context to inject conversation history
When `load_session_context = true` in `[heartbeat]`, the daemon loads the
last 20 messages from the target user's JSONL session file and prepends them
to the heartbeat task prompt before calling the LLM.

This gives the companion context — who the user is, what was last discussed —
so outreach messages feel like a natural continuation rather than a blank-slate
ping. Defaults to `false` (opt-in, no change to existing behaviour).

Key behaviours:
- Session context is re-read on every heartbeat tick (not cached at startup)
- Skips context injection if only assistant messages are present (prevents
  heartbeat outputs feeding back in a loop)
- Scans sessions directory for matching JSONL files using flexible filename
  matching: {channel}_{to}.jsonl, {channel}_*_{to}.jsonl, or
  {channel}_{to}_*.jsonl — handles varying session key formats
- Injects file mtime as "last message ~Xh ago" so the LLM knows how long
  the user has been silent

Config example:
  [heartbeat]
  enabled = true
  interval_minutes = 120
  load_session_context = true
  target = "telegram"
  to = "your_username"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 02:44:19 +00:00
Chris Hengge
daca2d9354
fix(web/tools): make section headings collapsible (#4180)
Agent Tools and CLI Tools section headings were static divs with no
way to collapse sections the user is not interested in, making the
page unwieldy with a large tool set.

- Convert both section heading divs to button elements toggling
  agentSectionOpen / cliSectionOpen state (both default open)
- Section content renders conditionally on those booleans
- ChevronsUpDown icon added (already in lucide-react bundle) that
  fades in on hover and indicates collapsed/expanded state
- No change to individual tool card parameter schema expand/collapse

Risk: Low — UI state only, no API or logic change.
Does not change: search/filter behaviour, tool card expand/collapse,
CLI tools table structure.
2026-03-21 22:25:18 -04:00
Chris Hengge
3c1e710c38
fix(web/logs): layout, footer status indicator, and empty-state note (#4203)
Three issues addressed:

Empty page: the logs page shows nothing at idle because the SSE stream
only carries ObserverEvent variants (llm_request, tool_call, error,
agent_start, agent_end). Daemon stdout and RUST_LOG tracing output go
to the terminal/log file and are never forwarded to the broadcast
channel — this is correct behaviour, not a misconfiguration. Added a
dismissible informational banner explaining what appears on the stream
and how to access tracing output (RUST_LOG + terminal).

Layout: flex-1 log entries div was missing min-h-0, which can cause
flex children to refuse to shrink below content size in some browsers.

Connection indicator: moved from the toolbar (where it cluttered the
title and controls) to a compact footer strip below the scroll area,
matching the /agent page pattern exactly.

Also added colour rules for llm_request, agent_start, agent_end,
tool_call_start event types which previously fell through to default
grey.

Risk: Low — UI layout and informational copy only, no backend change.
Does not change: SSE connection logic, event parsing, pause/resume,
type filters, or the underlying broadcast observer.
2026-03-21 22:11:20 -04:00
Chris Hengge
0aefde95f2
fix(web/config): fill viewport and add TOML syntax highlighting (#4201)
Two issues with the config editor:

Layout: the page root had no height constraint and the textarea used
min-h-[500px] resize-y, causing independent scrollbars on both the
page and the editor. Fixed by adopting the Memory/Cron flex column
pattern so the editor fills the remaining viewport height with a single
scroll surface.

Highlighting: plain textarea with no visual structure for TOML.
Added a zero-dependency layered pre-overlay technique — no new npm
packages (per CLAUDE.md anti-pattern rules). A pre element sits
absolute behind a transparent textarea; highlightToml() produces HTML
colour-coding sections, keys, strings, booleans, numbers, datetimes,
and comments via per-line regex. onScroll syncs the overlay. Tab key
inserts two spaces instead of leaving focus.

dangerouslySetInnerHTML used on the pre — content is the user's own
local config, not from the network, risk equivalent to any local editor.

Risk: Low-Medium — no API or backend change. New rendering logic
in editor only.
Does not change: save/load API calls, validation, sensitive field
masking behaviour.
2026-03-21 22:11:18 -04:00
Chris Hengge
a84aa60554
fix(web/cron): contain table scroll within viewport (#4186)
The cron page used a block-flow root with no height constraint, causing
the jobs table to grow taller than the viewport and the page itself to
scroll. This was inconsistent with the Memory page pattern.

- Change page root to flex flex-col h-full matching Memory's layout
- Table wrapper gains flex-1 min-h-0 overflow-auto so it fills
  remaining height and scrolls both axes internally
- Table header already has position:sticky so it pins correctly
  inside the scrolling container with no CSS change needed

Risk: Low — layout only, no logic or API change.
Does not change: job CRUD, modal, catch-up toggle, run history panel.
2026-03-21 22:11:15 -04:00
Chris Hengge
edd4b37325
fix(web/dashboard): rename channels card heading and add internal scroll (#4178)
The card heading used the key dashboard.active_channels ("Active Channels")
even though the card has a toggle between Active and All views, making the
static heading misleading. The channel list div had no height cap, causing
tall channel lists to stretch the card and break 3-column grid alignment.

- Change heading to t("dashboard.channels") — key already present in all
  three locales (zh/en/tr), no i18n changes needed
- Add overflow-y-auto max-h-48 pr-1 to the channel list wrapper so it
  scrolls internally instead of stretching the card
2026-03-21 22:09:00 -04:00
Argenis
c5f0155061
Merge pull request #4193 from zeroclaw-labs/fix/reaction-tool
fix(tools): pass platform channel_id to reaction trait
2026-03-21 21:38:32 -04:00
argenis de la rosa
9ee06ed6fc merge: resolve conflicts with master (image_gen + sessions) 2026-03-21 21:18:46 -04:00
Argenis
ac6b43e9f4
fix: remove unused channel_names field from DiscordHistoryChannel (#4199)
* feat: add discord history logging and search tool with persistent channel cache

* fix: remove unused channel_names field from DiscordHistoryChannel

The channel_names HashMap was declared and initialized but never used.
Channel name caching is handled via discord_memory.get()/store() with
the cache:channel_name: prefix. Remove the dead field.

* style: run cargo fmt on discord_history.rs

---------

Co-authored-by: ninenox <nisit15@hotmail.com>
2026-03-21 21:15:23 -04:00
Argenis
6c5573ad96
Merge pull request #4194 from zeroclaw-labs/fix/session-messaging-tools
fix(security): add enforcement and validation to session tools
2026-03-21 21:15:17 -04:00
Argenis
1d57a0d1e5
fix(web/tools): improve a11y in collapsible section headings (#4197)
* fix(web/tools): make section headings collapsible

Agent Tools and CLI Tools section headings were static divs with no
way to collapse sections the user is not interested in, making the
page unwieldy with a large tool set.

- Convert both section heading divs to button elements toggling
  agentSectionOpen / cliSectionOpen state (both default open)
- Section content renders conditionally on those booleans
- ChevronsUpDown icon added (already in lucide-react bundle) that
  fades in on hover and indicates collapsed/expanded state
- No change to individual tool card parameter schema expand/collapse

Risk: Low — UI state only, no API or logic change.
Does not change: search/filter behaviour, tool card expand/collapse,
CLI tools table structure.

* fix(web/tools): improve a11y and fix invalid HTML in collapsible sections

- Replace <h2> inside <button> with <span role="heading" aria-level={2}>
  to fix invalid HTML (heading elements not permitted in interactive content)
- Add aria-expanded attribute to section toggle buttons for screen readers
- Add aria-controls + id linking buttons to their controlled sections
- Replace ChevronsUpDown with ChevronDown icon — ChevronsUpDown is
  visually symmetric so rotating 180deg has no visible effect; ChevronDown
  rotating to -90deg gives a clear directional cue
- Remove unused ChevronsUpDown import

---------

Co-authored-by: WareWolf-MoonWall <chris.hengge@gmail.com>
2026-03-21 21:02:10 -04:00
Argenis
9780c7d797
fix: restrict free command to Linux-only in security policy (#4198)
* fix: resolve claude-code test flakiness and update security policy

* fix: restrict `free` command to Linux-only in security policy

`free` is not available on macOS or other BSDs. Move it behind
a #[cfg(target_os = "linux")] gate so it is only included in the
default allowed commands on Linux systems.

---------

Co-authored-by: ninenox <nisit15@hotmail.com>
2026-03-21 21:02:05 -04:00
Argenis
35a5451a17
fix(channels): address critical security bugs in Gmail Pub/Sub push (#4200)
* feat(channels): add Gmail Pub/Sub push notifications for real-time email

Add GmailPushChannel that replaces IMAP polling with Google's Pub/Sub
push notification system for real-time email-driven automation.

- New channel at src/channels/gmail_push.rs implementing the Channel trait
- Registers Gmail watch subscription (POST /gmail/v1/users/me/watch)
  with automatic renewal before the 7-day expiry
- Handles incoming Pub/Sub notifications at POST /webhook/gmail
- Fetches new messages via Gmail History API (startHistoryId-based)
- Dispatches email messages to the agent with full metadata
- Sends replies via Gmail messages.send API
- Config: gmail_push.enabled, topic, label_filter, oauth_token,
  allowed_senders, webhook_url
- OAuth token encrypted at rest via existing secret store
- Webhook endpoint added to gateway router
- 30+ unit tests covering notification parsing, header extraction,
  body decoding, sender allowlist, and config serialization

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(config): fix pre-existing test compilation errors in schema.rs

- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): fix extract_body_text_plain test

Gmail API sends base64url without padding. The decode_body function
converted URL-safe chars back to standard base64 but did not restore
the padding, causing STANDARD decoder to fail and falling back to
snippet. Add padding restoration before decoding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): address critical security bugs in Gmail Pub/Sub push

- Add webhook authentication via shared secret (webhook_secret config
  field or GMAIL_PUSH_WEBHOOK_SECRET env var), preventing unauthorized
  message injection through the unauthenticated webhook endpoint
- Add 1MB body size limit on webhook endpoint to prevent memory exhaustion
- Fix race condition in handle_notification: hold history_id lock across
  the read-fetch-update cycle to prevent duplicate message processing
  when concurrent webhook notifications arrive
- Sanitize RFC 2822 headers (To/Subject) to prevent CRLF injection
  attacks that could add arbitrary headers to outgoing emails
- Fix extract_email_from_header panic on malformed angle brackets by
  using rfind('>') and validating bracket ordering
- Add 30s default HTTP client timeout for all Gmail API calls,
  preventing indefinite hangs
- Clone tx sender before message processing loop to avoid holding
  the mutex lock across network calls

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 20:59:56 -04:00
Argenis
8e81d44d54
fix(gateway): address critical security and reliability bugs in Live Canvas (#4196)
* feat(gateway): add Live Canvas (A2UI) tool and real-time web viewer

Add a Live Canvas system that enables the agent to push rendered content
(HTML, SVG, Markdown, text) to a web-visible canvas in real time.

Backend:
- src/tools/canvas.rs: CanvasTool with render/snapshot/clear/eval actions,
  backed by a shared CanvasStore (Arc<RwLock<HashMap>>) with per-canvas
  broadcast channels for real-time updates
- src/gateway/canvas.rs: REST endpoints (GET/POST/DELETE /api/canvas/:id,
  GET /api/canvas/:id/history, GET /api/canvas) and WebSocket endpoint
  (WS /ws/canvas/:id) for real-time frame delivery

Frontend:
- web/src/pages/Canvas.tsx: Canvas viewer page with WebSocket connection,
  iframe sandbox rendering, canvas switcher, frame history panel

Registration:
- CanvasTool registered in all_tools_with_runtime (always available)
- Canvas routes wired into gateway router
- CanvasStore added to AppState
- Canvas page added to App.tsx router and Sidebar navigation
- i18n keys added for en/zh/tr locales

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(config): fix pre-existing test compilation errors in schema.rs

- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(gateway): share CanvasStore between tool and REST API

The CanvasTool and gateway AppState each created their own CanvasStore,
so content rendered via the tool never appeared in the REST API.

Create the CanvasStore once in the gateway, pass it to
all_tools_with_runtime via a new optional parameter, and reuse the
same instance in AppState.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(gateway): address critical security and reliability bugs in Live Canvas

- Validate content_type in REST POST endpoint against allowed set,
  preventing injection of "eval" frames via the REST API
- Enforce MAX_CONTENT_SIZE (256KB) limit on REST POST endpoint,
  matching tool-side validation to prevent memory exhaustion
- Add MAX_CANVAS_COUNT (100) limit to prevent unbounded canvas creation
  and memory exhaustion from CanvasStore
- Handle broadcast RecvError::Lagged in WebSocket handler gracefully
  instead of disconnecting the client
- Make MAX_CONTENT_SIZE and ALLOWED_CONTENT_TYPES pub for gateway reuse
- Update CanvasStore::render and subscribe to return Option for
  canvas count enforcement

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: rareba <rareba@users.noreply.github.com>
2026-03-21 20:59:18 -04:00
Argenis
86ad0c6a2b
fix(channels): address critical bugs in voice wake word detection (#4191)
* feat(channels): add voice wake word detection channel

Add VoiceWakeChannel behind the `voice-wake` feature flag that:
- Captures audio from the default microphone via cpal
- Uses energy-based VAD to detect speech activity
- Transcribes speech via the existing transcription API (Whisper)
- Checks for a configurable wake word in the transcription
- On detection, captures the following utterance and dispatches it
  as a ChannelMessage

State machine: Listening -> Triggered -> Capturing -> Processing -> Listening

Config keys (under [channels_config.voice_wake]):
- wake_word (default: "hey zeroclaw")
- silence_timeout_ms (default: 2000)
- energy_threshold (default: 0.01)
- max_capture_secs (default: 30)

Includes tests for config parsing, state machine, RMS energy
computation, and WAV encoding.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(config): fix pre-existing test compilation errors in schema.rs

- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): exclude voice-wake from all-features CI check

Add a `ci-all` meta-feature in Cargo.toml that includes every feature
except `voice-wake`, which requires `libasound2-dev` (ALSA) not present
on CI runners. Update the check-all-features CI job to use
`--features ci-all` instead of `--all-features`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(channels): address critical bugs in voice wake word detection

- Replace std::mem::forget(stream) with dedicated thread that holds the
  cpal stream and shuts down cleanly via oneshot channel, preventing
  microphone resource leaks on task cancellation
- Add config validation: energy_threshold must be positive+finite,
  silence_timeout_ms >= 100ms, max_capture_secs clamped to 300
- Guard WAV encoding against u32 overflow for large audio buffers
- Add hard cap on capture_buf size to prevent unbounded memory growth
- Increase audio channel buffer from 4 to 64 slots to reduce chunk
  drops during transcription API calls
- Remove dead WakeState::Processing variant that was never entered

---------

Co-authored-by: Giulio V <vannini.gv@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 20:43:19 -04:00
Argenis
6ecf89d6a9
fix(ci): skip release and publish workflows on forks (#4190)
When a fork syncs with upstream, GitHub attributes the push to the fork
owner, causing release-beta-on-push and publish-crates-auto to run
under the wrong identity — leading to confusing notifications and
guaranteed failures (missing secrets).

Add repository guards to root jobs so the entire pipeline is skipped
on forks.
2026-03-21 20:42:55 -04:00
argenis de la rosa
691efa4d8c style: fix cargo fmt formatting in reaction tool 2026-03-21 20:38:24 -04:00
argenis de la rosa
d1e3f435b4 style: fix cargo fmt formatting in session tools 2026-03-21 20:38:08 -04:00
Argenis
44c3e264ad
Merge pull request #4192 from zeroclaw-labs/fix/image-gen-tool
fix(tools): harden image_gen security and model validation
2026-03-21 20:37:27 -04:00
argenis de la rosa
f2b6013329 fix(tools): harden image_gen security enforcement and model validation
- Replace manual can_act()/record_action() with enforce_tool_operation()
  to match the codebase convention used by all other tools (notion,
  memory_forget, claude_code, delegate, etc.), producing consistent
  error messages and avoiding logic duplication.

- Add model parameter validation to prevent URL path traversal attacks
  via crafted model identifiers (e.g. "../../evil-endpoint").

- Add tests for model traversal rejection and filename sanitization.
2026-03-21 20:08:51 -04:00
argenis de la rosa
05d3c51a30 fix(security): add security policy enforcement and input validation to session tools
SessionsSendTool was missing security gate enforcement entirely - any agent
could send messages to any session without security policy checks. Similarly,
SessionsHistoryTool had no security enforcement for reading session data.

Changes:
- Add SecurityPolicy field to SessionsHistoryTool (enforces ToolOperation::Read)
- Add SecurityPolicy field to SessionsSendTool (enforces ToolOperation::Act)
- Add session_id validation to reject empty or non-alphanumeric-only IDs
- Pass security policy from all_tools_with_runtime registration
- Add tests for empty session_id, non-alphanumeric session_id validation
2026-03-21 20:04:44 -04:00
argenis de la rosa
2ceda31ce2 fix(tools): pass platform channel_id to reaction trait instead of channel name
The reaction tool was passing the channel adapter name (e.g. "discord",
"slack") as the first argument to Channel::add_reaction() and
Channel::remove_reaction(), but the trait signature expects a
platform-specific channel_id (e.g. Discord channel snowflake, Slack
channel ID like "C0123ABCD"). This would cause all reaction API calls
to fail at the platform level.

Fixes:
- Add required "channel_id" parameter to the tool schema
- Extract and pass channel_id (not channel_name) to trait methods
- Update tool description to mention the new parameter
- Add MockChannel channel_id capture for test verification
- Add test asserting channel_id (not name) reaches the trait
- Update all existing tests to supply channel_id
2026-03-21 20:01:22 -04:00
Argenis
9069bc3c1f
fix(agent): add system prompt budgeting for small-context models (#4185)
For models with small context windows (e.g. glm-4.5-air ~8K tokens),
the system prompt alone can exceed the limit. This adds:

- max_system_prompt_chars config option (default 0 = unlimited)
- compact_context now also compacts the system prompt: skips the
  Channel Capabilities section and shows only tool names
- Truncation with marker when prompt exceeds the budget

Users can set `max_system_prompt_chars = 8000` in [agent] config
to cap the system prompt for small-context models.

Closes #4124
2026-03-21 19:40:21 -04:00
Argenis
9319fe18da
fix(approval): support wildcard * in auto_approve and always_ask (#4184)
auto_approve = ["*"] was doing exact string matching, so only the
literal tool name "*" was matched. Users expecting wildcard semantics
had every tool blocked in supervised mode.

Also adds "prompt exceeds max length" to the context-window error
detection hints (fixes GLM/ZAI error 1261 detection).

Closes #4127
2026-03-21 19:38:11 -04:00
Argenis
cc454a86c8
fix(install): remove pairing code display from installer (#4176)
The gateway pairing code is now shown in the dashboard, so displaying
it in the installer output is redundant and cluttered (showed 3 codes).
2026-03-21 19:06:37 -04:00
Argenis
256e8ccebf
chore: bump version to v0.5.6 (#4174)
Update version across all distribution manifests:
- Cargo.toml / Cargo.lock
- dist/aur/PKGBUILD + .SRCINFO
- dist/scoop/zeroclaw.json
2026-03-21 18:03:38 -04:00
Argenis
72c9e6b6ca
fix(publish): publish aardvark-sys dep before main crate (#4172)
* fix(publish): add aardvark-sys version and publish it before main crate

- Add version = "0.1.0" to aardvark-sys path dependency in Cargo.toml
- Update all three publish workflows to publish aardvark-sys first
- Add aardvark-sys COPY to Dockerfile for workspace builds
- Fixes cargo publish failure: "dependency aardvark-sys does not
  specify a version"

* ci: publish aardvark-sys before main crate in all publish workflows

All three crates.io publish workflows now publish aardvark-sys first,
wait for indexing, then publish the main zeroclawlabs crate.
2026-03-21 16:20:50 -04:00
Argenis
755a129ca2
fix(install): use /dev/tty for sudo in curl|bash Xcode license accept (#4169)
When run via `curl | bash`, stdin is the curl pipe, so sudo cannot
prompt for a password. Redirect sudo's stdin from /dev/tty to reach
the real terminal, allowing the password prompt to work in piped
invocations.
2026-03-21 14:15:21 -04:00
Argenis
8b0d3684c5
fix(install): auto-accept Xcode license instead of bailing out (#4165)
Instead of exiting with a manual remediation step, the installer now
attempts to accept the Xcode/CLT license automatically via
`sudo xcodebuild -license accept`. Falls back to a clear error message
only if sudo fails (e.g. no terminal or password).
2026-03-21 13:57:38 -04:00
Giulio V
cdb5ac1471 fix(tools): fix remove_reaction_success test
The output format used "{action}ed" which produced "removeed" for the
remove action. Use explicit past-tense mapping instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 18:49:35 +01:00
Giulio V
67acb1a0bb fix(config): fix pre-existing test compilation errors in schema.rs
- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 18:10:05 +01:00
Giulio V
9eac6bafef fix(config): fix pre-existing test compilation errors in schema.rs
- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 18:09:48 +01:00
Giulio V
a12f2ff439 fix(config): fix pre-existing test compilation errors in schema.rs
- Remove #[cfg(unix)] gate on `use tempfile::TempDir` import since
  TempDir is used unconditionally in bootstrap file tests
- Add explicit type annotations on tokio::fs::* calls to resolve
  type inference failures (create_dir_all, write, read_to_string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 18:09:36 +01:00
Argenis
a38a4d132e
fix(hardware): drain stdin in subprocess test to prevent broken pipe flake (#4161)
* fix(hardware): drain stdin in subprocess test to prevent broken pipe flake

The test script did not consume stdin, so SubprocessTool's stdin write
raced against the process exit, causing intermittent EPIPE failures.
Add `cat > /dev/null` to drain stdin before producing output.

* style: format subprocess test
2026-03-21 12:19:53 -04:00
Argenis
48aba73d3a
fix(install): always check Xcode license on macOS, not just with --install-system-deps (#4153)
The Xcode license test-compile was inside install_system_deps(), which
only runs when --install-system-deps is passed. On macOS the default
path skipped this entirely, so users hit `cc` exit code 69 deep in
cargo build. Move the check into the unconditional main flow so it
always fires on Darwin.
2026-03-21 11:29:36 -04:00
Argenis
a1ab1e1a11
fix(install): use test-compile instead of xcrun for Xcode license detection (#4151)
xcrun --show-sdk-path can succeed even when the Xcode/CLT license has
not been accepted, so the previous check was ineffective. Replace it
with an actual test-compilation of a trivial C file, which reliably
triggers the exit-code-69 failure when the license is pending.
2026-03-21 11:03:07 -04:00
Giulio V
f394abf35c feat(tools): add standalone image generation tool via fal.ai
Add ImageGenTool that exposes fal.ai Flux model image generation as a
standalone tool, decoupled from the LinkedIn client. The tool accepts a
text prompt, optional filename/size/model parameters, calls the fal.ai
synchronous API, downloads the result, and saves to workspace/images/.

- New src/tools/image_gen.rs with full Tool trait implementation
- New ImageGenConfig in schema.rs (enabled, default_model, api_key_env)
- Config-gated registration in all_tools_with_runtime
- Security: checks can_act() and record_action() before execution
- Comprehensive unit tests (prompt validation, API key, size enum,
  autonomy blocking, tool spec)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:17:28 +01:00
Giulio V
52e0271bd5 feat(tools): add emoji reaction tool for cross-channel reactions
Add ReactionTool that exposes Channel::add_reaction and
Channel::remove_reaction as an agent-callable tool. Uses a
late-binding ChannelMapHandle (Arc<RwLock<HashMap>>) pattern
so the tool can be constructed during tool registry init and
populated once channels are available in start_channels.

Parameters: channel, message_id, emoji, action (add/remove).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:15:25 +01:00
Giulio V
6c0a48efff feat(tools): add session list, history, and send tools for inter-agent messaging
Add three new tools in src/tools/sessions.rs:
- sessions_list: lists active sessions with channel, message count, last activity
- sessions_history: reads last N messages from a session by ID
- sessions_send: appends a message to a session for inter-agent communication

All tools operate on the SessionBackend trait, using the JSONL SessionStore
by default. Registered unconditionally in all_tools_with_runtime when the
sessions directory is accessible.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:07:18 +01:00
SimianAstronaut7
87b5bca449
feat(config): add configurable pacing controls for slow/local LLM workloads (#3343)
* feat(config): add configurable pacing controls for slow/local LLM workloads (#2963)

Add a new `[pacing]` config section with four opt-in parameters that
let users tune timeout and loop-detection behavior for local LLMs
(Ollama, llama.cpp, vLLM) without disabling safety features entirely:

- `step_timeout_secs`: per-step LLM inference timeout independent of
  the overall message budget, catching hung model responses early.
- `loop_detection_min_elapsed_secs`: time-gated loop detection that
  only activates after a configurable grace period, avoiding false
  positives on long-running browser/research workflows.
- `loop_ignore_tools`: per-tool loop-detection exclusions so tools
  like `browser_screenshot` that structurally resemble loops are not
  counted toward identical-output detection.
- `message_timeout_scale_max`: overrides the hardcoded 4x ceiling in
  the channel message timeout scaling formula.

All parameters are strictly optional with no effect when absent,
preserving full backwards compatibility.

Closes #2963

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(config): add missing pacing fields in tests and call sites

* fix(config): add pacing arg to remaining cost-tracking test call sites

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-21 08:54:08 -04:00
Argenis
be40c0c5a5
Merge pull request #4145 from zeroclaw-labs/feat/gateway-path-prefix
feat(gateway): add path_prefix for reverse-proxy deployments
2026-03-21 08:48:56 -04:00
argenis de la rosa
6527871928 fix: add path_prefix to test AppState in gateway/api.rs 2026-03-21 08:14:28 -04:00
argenis de la rosa
0bda80de9c feat(gateway): add path_prefix for reverse-proxy deployments
Adopted from #3709 by @slayer with minor cleanup.
Supersedes #3709
2026-03-21 08:14:28 -04:00
Argenis
02f57f4d98
Merge pull request #4144 from zeroclaw-labs/feat/claude-code-tool
feat(tools): add ClaudeCodeTool for two-tier agent delegation
2026-03-21 08:14:19 -04:00
Argenis
ef83dd44d7
Merge pull request #4146 from zeroclaw-labs/feat/memory-recall-time-range
feat(memory): add time range filter to recall (since/until)
2026-03-21 08:14:12 -04:00
Argenis
a986b6b912
fix(install): detect un-accepted Xcode license + bump to v0.5.5 (#4147)
* fix(install): detect un-accepted Xcode license before build

Add an xcrun check after verifying Xcode CLT is installed. When the
Xcode/CLT license has not been accepted, cc exits with code 69 and
the build fails with a cryptic linker error. This surfaces a clear
message telling the user to run `sudo xcodebuild -license accept`.

* chore(release): bump version to v0.5.5

Update version across all distribution manifests:
- Cargo.toml and Cargo.lock
- dist/aur/PKGBUILD and .SRCINFO
- dist/scoop/zeroclaw.json
2026-03-21 08:09:27 -04:00
SimianAstronaut7
b6b1186e3b
feat(channel): add per-channel proxy_url support for HTTP/SOCKS5 proxies (#3345)
* feat(channel): add per-channel proxy_url support for HTTP/SOCKS5 proxies

Allow each channel to optionally specify a `proxy_url` in its config,
enabling users behind restrictive networks to route channel traffic
through HTTP or SOCKS5 proxies. When set, the per-channel proxy takes
precedence over the global `[proxy]` config; when absent, the channel
falls back to the existing runtime proxy behavior.

Adds `proxy_url: Option<String>` to all 12 channel config structs
(Telegram, Discord, Slack, Mattermost, Signal, WhatsApp, Wati,
NextcloudTalk, DingTalk, QQ, Lark, Feishu) and introduces
`build_channel_proxy_client`, `build_channel_proxy_client_with_timeouts`,
and `apply_channel_proxy_to_builder` helpers that normalize proxy URLs
and integrate with the existing client cache.

Closes #3262

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(channel): add missing proxy_url fields in test initializers

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-21 07:53:20 -04:00
SimianAstronaut7
00dc0c8670
feat(tool): enrich delegate sub-agent system prompt and add skills_directory config key (#3344)
* feat(tool): enrich delegate sub-agent system prompt and add skills_directory config key (#3046)

Sub-agents configured under [agents.<name>] previously received only the
bare system_prompt string. They now receive a structured system prompt
containing: tools section (allowed tools with parameters and invocation
protocol), skills section (from scoped or default directory), workspace
path, current date/time, safety constraints, and shell policy when shell
is in the effective tool list.

Add optional skills_directory field to DelegateAgentConfig for per-agent
scoped skill loading. When unset, falls back to default workspace
skills/ directory.

Closes #3046

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(tools): add missing fields after rebase

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-21 07:53:02 -04:00
argenis de la rosa
43f2a0a815 fix: add ClaudeCodeConfig to config re-exports and fix formatting 2026-03-21 07:51:36 -04:00
argenis de la rosa
50b5bd4d73 ci: retrigger CI after stuck runners 2026-03-21 07:46:34 -04:00
argenis de la rosa
8c074870a1 fix(memory): replace redundant closures with function references
Clippy flagged `.map(|s| chrono::DateTime::parse_from_rfc3339(s))` as
redundant — use `.map(chrono::DateTime::parse_from_rfc3339)` directly.
2026-03-21 07:46:34 -04:00
argenis de la rosa
61d1841ce3 fix: update gateway mock Memory impls with since/until params
Both test mock implementations of Memory::recall() in gateway/mod.rs
were missing the new since/until parameters.
2026-03-21 07:46:34 -04:00
argenis de la rosa
eb396cf38f feat(memory): add time range filter to recall (since/until)
Adopted from #3705 by @fangxueshun with fixes:
- Added input validation for date strings (RFC 3339)
- Used chrono DateTime comparison instead of string comparison
- Added since < until validation
- Updated mem0 backend
Supersedes #3705
2026-03-21 07:46:34 -04:00
argenis de la rosa
9f1657b9be fix(tools): use kill_on_drop for ClaudeCodeTool subprocess timeout 2026-03-21 07:46:24 -04:00
argenis de la rosa
8fecd4286c fix(tools): use kill_on_drop for ClaudeCodeTool subprocess timeout
Fixes E0382 borrow-after-move error: wait_with_output() consumed the
child handle, making child.kill() in the timeout branch invalid.
Use kill_on_drop(true) with cmd.output() instead.
2026-03-21 07:46:24 -04:00
argenis de la rosa
df21d92da3 feat(tools): add ClaudeCodeTool for two-tier agent delegation
Adopted from #3748 by @ilyasubkhankulov with fixes:
- Removed unused _runtime field
- Fixed subprocess timeout handling
- Excluded unrelated Slack threading and Dockerfile changes

Closes #3748 (superseded)
2026-03-21 07:46:24 -04:00
Argenis
8d65924704
fix(channels): add cost tracking and enforcement to all channels (#4143)
Adds per-channel cost tracking via task-local context in the tool call
loop. Budget enforcement blocks further API calls when limits are
exceeded. Resolves merge conflicts with model-switch retry loop,
reply_target parameter, and autonomy level additions on master.

Supersedes #3758
2026-03-21 07:37:15 -04:00
Argenis
756c3cadff
feat(transcription): add LocalWhisperProvider for self-hosted STT (TDD) (#4141)
Self-hosted Whisper-compatible STT provider that POSTs audio to a
configurable HTTP endpoint (e.g. faster-whisper over WireGuard). Audio
never leaves the platform perimeter.

Implemented via red/green TDD cycles:
  Wave 1 — config schema: LocalWhisperConfig struct, local_whisper field
    on TranscriptionConfig + Default impl, re-export in config/mod.rs
  Wave 2 — from_config validation: url non-empty, url parseable, bearer_token
    non-empty, max_audio_bytes > 0, timeout_secs > 0; returns Result<Self>
  Wave 3 — manager integration: registration with ? propagation (not if let Ok
    — credentials come directly from config, no env-var fallback; present
    section with bad values is a hard error, not a silent skip)
  Wave 4 — transcribe(): resolve_audio_format() extracted from validate_audio()
    so LocalWhisperProvider can resolve MIME without the 25 MB cloud cap;
    size check + format resolution before HTTP send
  Wave 5 — HTTP mock tests: success response, bearer auth header, 503 error

33 tests (20 baseline + 13 new), all passing. Clippy clean.

Co-authored-by: Nim G <theredspoon@users.noreply.github.com>
2026-03-21 07:15:36 -04:00
Argenis
ee870028ff
feat(channel): use Slack native markdown blocks for rich formatting (#4142)
Slack's Block Kit supports a native `markdown` block type that accepts
standard Markdown and handles rendering. This removes the need for a
custom Markdown-to-mrkdwn converter. Messages over 12,000 chars fall
back to plain text.

Co-authored-by: Joe Hoyle <joehoyle@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 07:12:27 -04:00
frido22
83183a39a5
feat(status): show service running state in zeroclaw status (#3751) 2026-03-21 06:49:47 -04:00
shiben
7a941fb753
feat(auth): add import functionality for existing OpenAI Codex auth p… (#3762)
* feat(auth): add import functionality for existing OpenAI Codex auth profiles

Introduces a new command-line option to import an existing `auth.json` file for OpenAI Codex, allowing users to bypass the login flow. The import feature reads and parses the specified JSON file, extracting authentication tokens and storing them in the user's profile. This change enhances user experience by simplifying the authentication process for existing users.

- Added `import` option to `AuthCommands` enum
- Implemented `import_openai_codex_auth_profile` function to handle the import logic
- Updated `handle_auth_command` to process the import option and validate provider compatibility
- Ensured that the import feature is exclusive to the `openai-codex` provider

* feat(auth): extract expiry from JWT in OpenAI Codex import

Enhances the `import_openai_codex_auth_profile` function by extracting the expiration date from the JWT access token. This change allows for more accurate management of token lifetimes by replacing the hardcoded expiration date with a dynamic value derived from the token itself.

- Added `extract_expiry_from_jwt` function to handle JWT expiration extraction
- Updated `TokenSet` to use the extracted expiration date instead of a static value
2026-03-21 06:49:44 -04:00
Argenis
bcdbce0bee
feat(web): add theme system with CSS variables and settings modal (#4133)
- Add ThemeContext with light/dark/system theme support
- Migrate all hardcoded colors to CSS variables
- Add SettingsModal for theme customization
- Add font loader for dynamic font selection
- Add i18n support for Chinese and Turkish locales
- Fix accessibility: add aria-live to pairing error message

Co-authored-by: nanyuantingfeng <nanyuantingfeng@163.com>
2026-03-21 06:22:30 -04:00
Argenis
abb844d7f8
fix(config): add missing WhatsApp Web policy config keys (#4131)
* fix(config): add missing WhatsApp Web policy config keys (mode, dm_policy, group_policy, self_chat_mode)

* fix(onboard): add missing WhatsApp policy fields to wizard struct literals

The new mode, dm_policy, group_policy, and self_chat_mode fields added
to WhatsAppConfig need default values in the onboard wizard's struct
initializers to avoid E0063 compilation errors.
2026-03-21 06:04:21 -04:00
Argenis
48733d5ee2
feat(cron): add Edit button and modal for updating cron jobs (#4132)
- Backend: add PATCH /api/cron/{id} handler (handle_api_cron_patch)
  using update_shell_job_with_approval with approved=false; validates
  job exists (404 on miss), accepts name/schedule/command patch fields
- Router: register PATCH on /api/cron/{id} alongside existing DELETE
- Frontend API: add patchCronJob(id, patch) calling PATCH /api/cron/{id}
- i18n: add cron.edit, cron.edit_modal_title, cron.edit_error,
  cron.saving, cron.save keys to all 3 locales (zh, en, tr)
- UI: Edit (Pencil) button in Actions column opens a pre-populated modal
  with the job's current name, schedule expression, and command;
  submitting PATCHes the job and updates the table row in-place

Co-authored-by: WareWolf-MoonWall <chris.hengge@gmail.com>
2026-03-21 05:50:23 -04:00
Argenis
2d118af78f
fix(channels): wire model_switch callback into channel inference path (#4130)
The channel path in `src/channels/mod.rs` was passing `None` as the
`model_switch_callback` to `run_tool_call_loop()`, which meant model
switching via the `model_switch` tool was silently ignored in channel
mode.

Wire the callback in following the same pattern as the CLI path:
- Pass `Some(model_switch_callback.clone())` instead of `None`
- Wrap the tool call loop in a retry loop
- Handle `ModelSwitchRequested` errors by re-creating the provider
  with the new model and retrying

Fixes #4107
2026-03-21 05:43:21 -04:00
Argenis
8d7e7e994e
fix(memory): use plain OS threads for postgres operations to avoid nested runtime panic (#4129)
Replace `tokio::task::spawn_blocking()` with plain `std:🧵:Builder`
OS threads in all PostgresMemory trait methods. The sync `postgres` crate
(v0.19.x) internally calls `Runtime::block_on()`, which panics when called
from Tokio's blocking pool threads in recent Tokio versions. Plain OS threads
have no runtime context, so the nested `block_on` succeeds.

This matches the pattern already used in `PostgresMemory::initialize_client()`,
which correctly used `std:🧵:Builder` and never exhibited this bug.

A new `run_on_os_thread` helper centralizes the pattern: spawn an OS thread,
run the closure, and bridge the result back via a `tokio::sync::oneshot` channel.

Fixes #4101
2026-03-21 05:33:55 -04:00
Joe Hoyle
d38d706c8e
feat(channel): add Slack Assistants API status indicators (#4105)
Implement start_typing/stop_typing for Slack using the Assistants API
assistant.threads.setStatus method. Tracks thread context from
assistant_thread_started events and inbound messages, then sets
"is thinking..." status during processing. Status auto-clears when
the bot sends a reply via chat.postMessage.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 05:32:31 -04:00
Chris Hengge
523188da08
feat(tools): add WeatherTool with wttr.in integration (#4104)
Implements the Weather integration as a native Rust Tool trait
implementation, consistent with the existing first-party tool
architecture (no WASM/plugin layer required).

- Add src/tools/weather_tool.rs with full WeatherTool impl
  - Fetches from wttr.in ?format=j1 (no API key, global coverage)
  - Supports city names (any language/script), IATA airport codes,
    GPS coordinates, postal/zip codes, domain-based geolocation
  - Metric (°C, km/h, mm) and imperial (°F, mph, in) units
  - Current conditions + 0-3 day forecast with hourly breakdown
  - Graceful error messages for unknown/invalid locations
  - Respects runtime proxy config via apply_runtime_proxy_to_builder
  - 36 unit tests: schema, URL building, param validation, formatting
- Register WeatherTool unconditionally in all_tools_with_runtime
  (no API key needed, no config gate — same pattern as CalculatorTool)
- Flip integrations registry Weather entry from ComingSoon to Available

Closes #<issue>
2026-03-21 05:32:28 -04:00
Baha Abu Nojaim
82f7fbbe0f
feat(providers): add DeepMyst as OpenAI-compatible provider (#4103)
Register DeepMyst (https://deepmyst.com) as an OpenAI-compatible
provider with Bearer auth and DEEPMYST_API_KEY env var support.
Aliases: "deepmyst", "deep-myst".

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 05:32:26 -04:00
Caleb
c1b2fceca5
fix(onboard): make tmux paste safe for text prompts (#4106) 2026-03-21 05:14:37 -04:00
Loc Nguyen Huu
be6e9fca5d
fix(docker): align workspace with Cargo.lock for --locked builds (#4126)
The builder used sed to remove crates/robot-kit from [workspace].members because that path was not copied into the image. Cargo.lock is still generated for the full workspace (including zeroclaw-robot-kit), so the manifest and lockfile disagreed. cargo build --release --locked then tried to rewrite Cargo.lock and failed with "cannot update the lock file ... because --locked was passed" (commonly hit when ZEROCLAW_CARGO_FEATURES includes memory-postgres).

Copy crates/robot-kit/ into the image and drop the sed step so the workspace matches the committed lockfile.

Made-with: Cursor

Co-authored-by: lokinh <locnh@uniultra.xyz>
2026-03-21 05:14:35 -04:00
Greg Lamberson
75c11dfb92
fix(config): prevent test suite from clobbering active_workspace.toml (#4121)
* fix(config): prevent test suite from clobbering active_workspace.toml

Refactor persist_active_workspace_config_dir() to accept the default
config directory as an explicit parameter instead of reading HOME
internally. This eliminates a hidden dependency on process-wide
environment state that caused test-suite runs to overwrite the real
user's active_workspace.toml with a stale temp-directory path.

The temp-directory guard is now unconditional (previously gated behind
cfg(not(test))). It rejects writes only when a temp config_dir targets
a non-temp default location, so test-to-test writes within temp dirs
still succeed.

Closes #4117

* fix: remove needless borrow on default_config_dir parameter

---------

Co-authored-by: lamco-office <office@lamco.io>
2026-03-21 05:14:32 -04:00
tf4fun
48270fbbf3
fix(cron): add qq to supported delivery channel whitelist (#4120)
The channel validation in `validate_announce_delivery` was missing `qq`,
causing API-created cron jobs with QQ delivery to be rejected.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 05:14:30 -04:00
Argenis
18a456b24e
fix(mcp): wire MCP tools into WebSocket chat and gateway /api/tools (#4096)
* fix(mcp): wire MCP tools into WebSocket chat path and gateway /api/tools

Agent::from_config() did not initialize MCP tools because it was
synchronous and MCP connection requires async. The gateway tool
registry built for /api/tools also missed MCP tools for the same
reason.

Changes:
- Make Agent::from_config() async so it can call McpRegistry::connect_all()
- Add MCP tool initialization (both eager and deferred modes) to
  from_config(), following the same pattern used in loop_.rs CLI/webhook paths
- Add MCP tool initialization to the gateway's tool registry so
  /api/tools reflects MCP tools
- Update all three call sites (run(), handle_socket, test) to await

Closes #4042

* fix: merge master and fix formatting

* fix: remove underscore prefix from used bindings (clippy)
2026-03-21 05:13:01 -04:00
ehu shubham shaw
71e89801b5
feat(hardware): add RPi GPIO, Aardvark I2C/SPI/GPIO, and hardware plugin system (#4125)
* feat(hardware): add RPi GPIO, Aardvark I2C/SPI/GPIO, and hardware plugin system

Extends the hardware subsystem with three clusters of functionality,
all feature-gated (hardware / peripheral-rpi) with no impact on default builds.

Raspberry Pi native support:
- src/hardware/rpi.rs: board self-discovery (model, serial, revision),
  sysfs GPIO pin read/write, and ACT LED control
- scripts/99-act-led.rules: udev rule for non-root ACT LED access
- scripts/deploy-rpi.sh, scripts/rpi-config.toml, scripts/zeroclaw.service:
  one-shot deployment helper and systemd service template

Total Phase Aardvark USB adapter (I2C / SPI / GPIO):
- crates/aardvark-sys/: new workspace crate with FFI bindings loaded at
  runtime via libloading; graceful stub fallback when .so is absent or
  arch mismatches (Rosetta 2 detection)
- src/hardware/aardvark.rs: AardvarkTransport implementing Transport trait
- src/hardware/aardvark_tools.rs: agent tools i2c_scan, i2c_read,
  i2c_write, spi_transfer, gpio_aardvark
- src/hardware/datasheet.rs: datasheet search/download for detected devices
- docs/aardvark-integration.md, examples/hardware/aardvark/: guide + examples

Hardware plugin / ToolRegistry system:
- src/hardware/tool_registry.rs: ToolRegistry for hardware module tool sets
- src/hardware/loader.rs, src/hardware/manifest.rs: manifest-driven loader
- src/hardware/subprocess.rs: subprocess execution helper for board I/O
- src/gateway/hardware_context.rs: POST /api/hardware/reload endpoint
- src/hardware/mod.rs: exports all new modules; merge_hardware_tools and
  load_hardware_context_prompt helpers

Integration hooks (minimal surface):
- src/hardware/device.rs: DeviceKind::Aardvark, DeviceRuntime::Aardvark,
  has_aardvark / resolve_aardvark_device on DeviceRegistry
- src/hardware/transport.rs: TransportKind::Aardvark
- src/peripherals/mod.rs: gate create_board_info_tools behind hardware feature
- src/agent/loop_.rs: TOOL_CHOICE_OVERRIDE task-local for Anthropic provider
- src/providers/anthropic.rs: read TOOL_CHOICE_OVERRIDE; add tool_choice field
- Cargo.toml: add aardvark-sys to workspace and as dependency
- firmware/zeroclaw-nucleo/: update Cargo.toml and Cargo.lock

Non-goals:
- No changes to agent orchestration, channels, providers, or security policy
- No new config keys outside existing [hardware] / [peripherals] sections
- No CI workflow changes

Risk: Low. All new paths are feature-gated; aardvark.so loads at runtime
only when present. No schema migrations or persistent state introduced.

Rollback: revert this single commit.

* fix(hardware): resolve clippy and rustfmt CI failures

- struct_excessive_bools: allow on DeviceCapabilities (7 bool fields needed)
- unnecessary_debug_formatting: use .display() instead of {:?} for paths
- stable_sort_primitive: replace .sort() with .sort_unstable() on &str slices

* fix(hardware): add missing serial/uf2/pico modules declared in mod.rs

cargo fmt was exiting with code 1 because mod.rs declared pub mod serial,
uf2, pico_flash, pico_code but those files were missing from the branch.
Also apply auto-formatting to loader.rs.

* fix(hardware): apply rustfmt 1.92.0 formatting (matches CI toolchain)

* docs(scripts): add RPi deployment and interaction guide

* push

* feat(firmware): add initial Pico firmware and serial device handling

- Introduced main.py for ZeroClaw Pico firmware with a placeholder for MicroPython implementation.
- Added binary UF2 file for Pico deployment.
- Implemented serial device enumeration and validation in the hardware module, enhancing security by restricting allowed serial paths.
- Updated related modules to integrate new serial device functionality.

---------

Co-authored-by: ehushubhamshaw <eshaw1@wpi.edu>
2026-03-21 04:17:01 -04:00
Argenis
46f6e79557
fix(gateway): improve error message for Docker bridge connectivity (#4095)
When the gateway security guard blocks a public bind address, the error
message now mentions the Docker use case and provides clear instructions
for connecting from Docker containers.

Closes #4086
2026-03-21 00:16:01 -04:00
Argenis
c301b1d4d0
fix(approval): auto-approve read-only tools in non-interactive mode (#4094)
* fix(approval): auto-approve read-only tools in non-interactive mode

Add web_search_tool, web_fetch, calculator, glob_search, content_search,
and image_info to the default auto_approve list. These are read-only tools
with no side effects that were being silently denied in channel mode
(Telegram, Slack, etc.) because the non-interactive ApprovalManager
auto-denies any tool not in auto_approve when autonomy != full.

Closes #4083

* fix: remove duplicate default_otp_challenge_max_attempts function
2026-03-20 23:57:43 -04:00
Argenis
981a93d942
fix(config): remove duplicate default_otp_challenge_max_attempts function (#4098)
The function was defined twice in schema.rs after merging #3921, causing
compilation failures on all downstream branches.
2026-03-20 23:57:27 -04:00
Argenis
34f0b38e42
fix(config): remove duplicate default_otp_challenge_max_attempts function (#4097)
PR #3921 accidentally introduced a duplicate definition of
default_otp_challenge_max_attempts() in config/schema.rs, causing
compilation to fail on master (E0428: name defined multiple times).
2026-03-20 18:49:15 -04:00
khhjoe
00209dd899
feat(memory): add mem0 (OpenMemory) backend integration (#3965)
* feat(memory): add mem0 (OpenMemory) backend integration

- Implement Mem0Memory struct with full Memory trait
- Add history() audit trail, recall_filtered() with time/metadata filters
- Add store_procedural() for conversation trace extraction
- Add ProceduralMessage type to Memory trait with default no-op
- Feature-gated behind `memory-mem0` flag
- 9 unit tests covering edge cases

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style: apply cargo fmt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(memory): add extraction_prompt config, deploy scripts, and timing instrumentation

- Add `extraction_prompt` field to `Mem0Config` for custom LLM fact
  extraction prompts (e.g. Cantonese/Chinese content), with
  `MEM0_EXTRACTION_PROMPT` env var fallback
- Pass `custom_instructions` in mem0 store requests so the server
  uses the client-supplied prompt over its default
- Add timing instrumentation to channel message pipeline
  (mem_recall_ms, elapsed_before_llm_ms, llm_call_ms, total_ms)
- Add `deploy/mem0/` with self-hosted mem0 + reranker GPU server
  scripts, fully configurable via environment variables
- Update config reference docs (EN, zh-CN, VI) with `[memory.mem0]`
  subsection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

# Conflicts:
#	src/channels/mod.rs

* chore: remove accidentally staged worktree from index

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 18:22:44 -04:00
caoy
9e8a478254
fix(gemini): use default chat() for prompt-guided tool calling and add vision support (#3932)
* fix(gemini): use default chat() for prompt-guided tool calling and add multimodal vision support

The Gemini provider's chat() override bypassed the default trait
implementation that injects tool definitions into the system prompt for
providers without native tool calling. This caused the agent loop to see
tool definitions in context but never actually invoke them, resulting in
hallucinated tool calls (e.g. claiming "Stored" without calling
memory_store).

Remove the broken chat() override so the default prompt-guided fallback
in the Provider trait handles tool injection correctly. Add an explicit
capabilities() declaration (native_tool_calling: false, vision: true).

Also add multimodal support: convert Part from a plain struct to an
untagged enum with Text and Inline variants, and add build_parts() to
extract [IMAGE:data:...] markers as Gemini inline_data parts.

Includes 14 new tests covering capabilities, Part serialization,
build_parts edge cases, and role-mapping behavior. Removes unused
ChatResponse import.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test(gemini): move capabilities tests to component level and add tool conversion test

Move the 3 capabilities tests (native_tool_calling, vision,
supports_native_tools) from the inline module to
tests/component/gemini_capabilities.rs since they exercise the public
Provider trait contract through the factory. Add a new
convert_tools_returns_prompt_guided test verifying the agent loop will
receive PromptGuided payload for Gemini.

Private internals tests (Part serialization, build_parts, role mapping)
remain inline since those types are not publicly exported.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style(gemini): fix cargo fmt formatting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(gemini): add prompt_caching field to capabilities declaration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: myclaw <myclaw@myclaws-MacBook-Air.local>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 18:22:41 -04:00
Anton Markelov
96f25ac701
fix(prompt): respect autonomy level in SafetySection (Agent/gateway WS path) (#3952) (#4037)
The `SafetySection` in `SystemPromptBuilder` always hardcoded
"Do not run destructive commands without asking" and "Do not bypass
oversight or approval mechanisms" regardless of the configured
autonomy level. This caused the gateway WebSocket path (web interface)
to instruct the LLM to simulate approval dialogs even when
`autonomy.level = "full"`.

PRs #3955/#3970/#3975 fixed the channel dispatch path
(`build_system_prompt_with_mode_and_autonomy`) but missed the
`Agent::from_config` → `SystemPromptBuilder` path used by
`gateway/ws.rs`.

Changes:
- Add `autonomy_level` field to `PromptContext`
- Rewrite `SafetySection::build()` to conditionally include/exclude
  approval instructions based on autonomy level, matching the logic
  already present in `build_system_prompt_with_mode_and_autonomy`
- Add `autonomy_level` field to `Agent` struct and `AgentBuilder`
- Pass `config.autonomy.level` through `Agent::from_config`
- Add tests for full/supervised autonomy safety section behavior

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 18:22:35 -04:00
Jacobinwwey
fb5c8cb620
feat(tools): route web_search providers with alias fallback (#4038) 2026-03-20 18:22:32 -04:00
ifengqi
9f5543e046
fix(qq): respond to WebSocket Ping frames to prevent connection timeout (#4041)
The QQ channel WebSocket loop did not handle incoming Ping frames,
causing the server to consider the connection dead and drop it. Add a
Ping handler that replies with Pong, keeping the connection alive.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 18:22:30 -04:00
luikore
05c9b8180b
Make lark / feishu render markdown (#3866)
Co-authored-by: Luikore <masked>
2026-03-20 18:22:29 -04:00
Thorbjørn Lindeijer
f96a0471b5
fix(providers): clamp unsupported temperatures in Claude Code provider (#3961)
The Claude Code CLI only supports temperatures 0.7 and 1.0, but
internal subsystems (memory consolidation, context summarizer) use
lower values like 0.1 and 0.2. Previously the provider rejected these
with a hard error, triggering retries and WARN-level log noise.

Clamp to the nearest supported value instead, since the CLI ignores
temperature anyway.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 18:22:26 -04:00
Artem Chernenko
072f5f1170
fix(transcription): honor configured default provider (#3883)
Co-authored-by: Artem Chernenko <12207348+turboazot@users.noreply.github.com>
2026-03-20 18:22:25 -04:00
Darren.Zeng
28f94ae48c
style: enhance .editorconfig with comprehensive file type settings (#3872)
Expand the minimal .editorconfig to include comprehensive settings for
all file types used in the project:

- Add root = true declaration
- Add standard settings: end_of_line, charset, trim_trailing_whitespace,
  insert_final_newline
- Add Rust-specific settings (indent_size = 4, max_line_length = 100)
  to match rustfmt.toml
- Add Markdown settings (preserve trailing whitespace for hard breaks)
- Add TOML, YAML, Python, Shell script, and JSON settings

This ensures consistent editor behavior across all contributors and
matches the project's formatting standards.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-20 18:22:22 -04:00
RoomWithOutRoof
8a217a77f9
fix(config): add challenge_max_attempts field to OtpConfig (#3921)
* fix(docker): default CMD to daemon instead of gateway

- Change default Docker CMD from gateway to daemon in both dev and release stages
- gateway only starts the HTTP/WebSocket server — channel listeners (Matrix, Telegram, Discord, etc.) are never spawned
- daemon starts the full runtime: gateway + channels + heartbeat + scheduler
- Users who configure channels in config.toml and run the default image get no response because the channel sync loops never start

* fix(config): add challenge_max_attempts field to OtpConfig

Add missing challenge_max_attempts field to support OTP challenge
attempt limiting. This field allows users to configure the maximum
number of OTP challenge attempts before lockout.

Fixes #3919

---------

Co-authored-by: Jah-yee <jah.yee@outlook.com>
Co-authored-by: Jah-yee <jahyee@sparklab.ai>
2026-03-20 18:22:19 -04:00
Chris Hengge
79a7f08b04
fix(web): anchor memory table to viewport with dual scrollbars (#4027)
The /memory data grid grew unboundedly with table rows, pushing the
horizontal scrollbar to the very bottom of a tall page and making it
inaccessible without scrolling all the way down first.

- Layout: change outer shell from min-h-screen to h-screen +
  overflow-hidden, and add min-h-0 to <main> so flex-1 overflow-y-auto
  actually clamps at the viewport boundary instead of growing infinitely.
- Memory page: switch root div to flex-col h-full so it fills the
  bounded main area; give the glass-card table wrapper flex-1 min-h-0
  overflow-auto so it consumes remaining space and exposes both
  scrollbars without any page-level scrolling required.
- index.css: pin .table-electric thead th with position:sticky / top:0
  and a matching opaque background so column headers stay visible
  during vertical scroll inside the bounded card.

The result behaves like a bounded iframe: the table fills the available
screen, rows scroll vertically, wide columns scroll horizontally, and
both scrollbars are always reachable.
2026-03-20 18:22:11 -04:00
Argenis
de12055364
feat(slack): implement reaction support for Slack channel (#4091)
* feat(slack): implement reaction support with sanitized error responses

Add add_reaction() and remove_reaction() for Slack channel, with
unicode-to-Slack emoji mapping, idempotent error handling, and
sanitized API error responses matching the pattern used by
chat.postMessage.

Based on #4089 by @joehoyle, with sanitize_api_error() applied to
reaction error paths for consistency with existing Slack methods.

Supersedes #4089

* chore(deps): bump rustls-webpki to 0.103.10 (RUSTSEC-2026-0049)
2026-03-20 18:18:45 -04:00
Argenis
65c34966bb
Merge pull request #4092 from zeroclaw-labs/docs/aur-ssh-key
docs: remove architecture diagram from all READMEs
2026-03-20 18:02:32 -04:00
Will Sarg
4a2be7c2e5
feat(verifiable_intent): add native verifiable intent lifecycle module (#2938)
* feat(verifiable_intent): add native verifiable intent lifecycle module

Implements a Rust-native Verifiable Intent (VI) subsystem for ZeroClaw,
providing full credential lifecycle support for commerce agent authorization
using SD-JWT layered credentials.

New module: src/verifiable_intent/
- error.rs: ViError/ViErrorKind (25+ variants), implements std::error::Error
- types.rs: JWK, Cnf, Entity, Constraint (8 variants), Immediate/Autonomous
  mandate structs, Fulfillment, Layer1/Layer2/CredentialChain
- crypto.rs: base64url helpers, SD hash, JWS sign/verify, EC P-256 key
  generation/loading, disclosure creation, SD-JWT serialize/parse
- verification.rs: StrictnessMode, ChainVerificationResult,
  ConstraintCheckResult, verify_timestamps, verify_sd_hash_binding,
  verify_l3_cross_reference, verify_checkout_hash_binding, check_constraints
- issuance.rs: create_layer2_immediate, create_layer2_autonomous,
  create_layer3_payment, create_layer3_checkout

New tool: src/tools/verifiable_intent.rs
- VerifiableIntentTool implementing Tool trait (name: vi_verify)
- Operations: verify_binding, evaluate_constraints, verify_timestamps
- Gated behind verifiable_intent.enabled config flag

Wiring:
- src/lib.rs: pub mod verifiable_intent
- src/main.rs: mod verifiable_intent (binary re-declaration)
- src/config/schema.rs: VerifiableIntentConfig struct, field on Config
- src/config/mod.rs: re-exports VerifiableIntentConfig
- src/onboard/wizard.rs: default field in Config literals
- src/tools/mod.rs: conditional tool registration

Uses only existing deps: ring (ECDSA P-256), sha2, base64, serde_json,
chrono, anyhow. No new dependencies added.

Validation: cargo fmt clean, cargo clippy -D warnings clean,
cargo test --lib -- verifiable_intent passes (44 tests)

* chore(verifiable_intent): add Apache 2.0 attribution for VI spec reference

The src/verifiable_intent/ module is a Rust-native reimplementation based
on the Verifiable Intent open specification and reference implementation by
genereda (https://github.com/genereda/verifiable-intent), Apache 2.0.

- Add attribution section to src/verifiable_intent/mod.rs doc comment
- Add third-party attribution entry to NOTICE per Apache 2.0 section 4(d)

* fix(verifiable_intent): correct VI attribution URL and author

Replace hallucinated github.com/genereda/verifiable-intent with the
actual remote: github.com/agent-intent/verifiable-intent

* fix(verifiable_intent): remove unused pub re-exports to fix clippy

Remove unused re-exports of ViError, ViErrorKind, types::*,
ChainVerificationResult, and ConstraintCheckResult from the module
root. Only StrictnessMode is used externally.

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-20 17:52:55 -04:00
argenis de la rosa
2bd141aa07 docs: remove architecture diagram section from all READMEs
Remove the "How it works (short)" ASCII diagram section from
all 31 README files (English + 30 translations).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 17:45:35 -04:00
Argenis
cc470601de
docs(i18n): expand language hubs and add six new locales (#2934)
Expand README/docs navigation to include Korean, Tagalog, German, Arabic, Hindi, and Bengali locale entries. Add canonical locale hub and summary files for each new language under docs/i18n/.

Update i18n index/coverage metadata to reflect hub-level support and keep language discovery consistent across root docs entry points.
2026-03-20 17:40:09 -04:00
Argenis
707ee02d76
chore: bump version to 0.5.4 (#4090) 2026-03-20 16:06:52 -04:00
Argenis
a47a9ee269
fix(skills): improve ClawhHub skill installer with zip crate and URL parsing (#4088)
Replace the shell-based unzip extraction with the zip crate for
cross-platform support. Use reqwest::Url for proper URL parsing,
add www.clawhub.ai and clawhub: shorthand support, fix the download
API URL, add ZIP path traversal protection, size limits, rate-limit
handling, and SKILL.toml fallback generation.

Supersedes #4043
Closes #4022
2026-03-20 15:46:52 -04:00
Argenis
8bb61fe368
fix(cron): persist delivery for api-created cron jobs (#4087)
Resolves merge conflicts from PR #4064. Uses typed DeliveryConfig in
CronAddBody and passes delivery directly to add_shell_job_with_approval
and add_agent_job instead of post-creation patching. Preserves master's
richer API fields (session_target, model, allowed_tools, delete_after_run).
2026-03-20 15:42:00 -04:00
avianion
38a8e910d0
feat(providers): add Avian as OpenAI-compatible provider (#4076)
* feat(providers): add Avian as a named provider

Add Avian (https://avian.io) as a first-class OpenAI-compatible provider
with bearer auth via AVIAN_API_KEY. Registers the provider in the factory,
credential resolver, provider list, onboard wizard, and docs.

Models: deepseek/deepseek-v3.2, moonshotai/kimi-k2.5, z-ai/glm-5,
minimax/minimax-m2.5.

* style: fix rustfmt formatting in wizard.rs curated models

Collapse short GLM-5 tuple onto single line to satisfy cargo fmt.

* fix: add none-backend test and sync localized docs

- Add memory_backend parameter to scaffold_workspace so it can
  conditionally skip MEMORY.md creation and adjust AGENTS.md guidance
  when memory.backend = "none"
- Add test scaffold_none_backend_disables_memory_guidance_and_skips_memory_md
- Sync Avian provider entry to all 6 localized providers-reference.md
  files (el, fr, ja, ru, vi, zh-CN)
- Bump providers-reference.md date to March 9, 2026

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test(onboard): add explicit Avian assertions in wizard helper tests

Add targeted assertions for the Avian provider branches to prevent
silent regressions, as requested in CodeRabbit review feedback:

- default_model_for_provider("avian") => "deepseek/deepseek-v3.2"
- curated_models_for_provider("avian") includes all 4 catalog entries
- supports_live_model_fetch("avian") => true
- models_endpoint_for_provider("avian") => Avian API URL
- provider_env_var("avian") => "AVIAN_API_KEY"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: fix rustfmt formatting in wizard.rs scaffold_workspace

Break scaffold_workspace function signature and .await.unwrap() chains
across multiple lines to comply with rustfmt max line width.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-20 15:31:59 -04:00
Eddie's AI Agent
916ad490bd
fix: remove BSD stat fallback from Dockerfiles (#3847) (#4077)
Containers always run Linux, so only GNU stat (-c%s) is needed.
The BSD fallback (stat -f%z) caused shell arithmetic errors under
podman when the fallback syntax was evaluated.

Co-authored-by: SpaceLobster <spacelobster@SpaceLobsters-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-20 15:31:56 -04:00
Eddie's AI Agent
2dee42d6e4
fix(daemon): add 8MB stack size for ARM64 Linux targets (#4078)
ARM64 Linux (musl and Android) targets were using the default 2MB stack,
which is insufficient for the 126 JsonSchema derives and causes silent
daemon crashes due to stack overflow. x86_64 and Windows already had 8MB
overrides.

Closes #3537

Co-authored-by: SpaceLobster <spacelobster@SpaceLobsters-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-20 15:28:40 -04:00
dependabot[bot]
6dbc1d7c9c
chore(deps): bump the rust-all group with 2 updates (#4047)
Bumps the rust-all group with 2 updates: [opentelemetry-otlp](https://github.com/open-telemetry/opentelemetry-rust) and [extism](https://github.com/extism/extism).


Updates `opentelemetry-otlp` from 0.31.0 to 0.31.1
- [Release notes](https://github.com/open-telemetry/opentelemetry-rust/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-rust/blob/main/docs/release_0.30.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-rust/compare/v0.31.0...opentelemetry-otlp-0.31.1)

Updates `extism` from 1.13.0 to 1.20.0
- [Release notes](https://github.com/extism/extism/releases)
- [Commits](https://github.com/extism/extism/compare/v1.13.0...v1.20.0)

---
updated-dependencies:
- dependency-name: opentelemetry-otlp
  dependency-version: 0.31.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: extism
  dependency-version: 1.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-20 15:16:08 -04:00
Anatolii Fesiuk
2bc2ddfbae
feat(tool): add myself and list_projects actions to jira tool (#4061)
* Sync jira tool description between .rs and en.toml

Replace multi-line operational guide in en.toml with the same one-liner
already in jira_tool.rs description(), matching the pattern used by all
other tools where both sources are in sync.

* Add myself action to jira tool for credential verification

* Add tests for myself action in jira tool

* Review and fix list_projects action added to jira tool

- Fix doc comment: update action count from four to five and add missing
  myself entry
- Remove redundant statuses_url variable (was identical to url)

The list_projects action fetches all projects with their issue types,
statuses, and assignable users by combining /rest/api/3/project,
per-project /statuses, and /user/assignable/multiProjectSearch endpoints.

* Remove hardcoded project-specific statuses from shape_projects

Replace fixed known_order list (which included project-specific statuses
like 'Collecting Intel', 'Design', 'Verification') with a simple
alphabetical sort. Any Jira project can use arbitrary status names so
hardcoding an order is not applicable universally.

* Fix list_projects: bounded concurrency, error surfacing, and output shape

- Use tokio::task::JoinSet with STATUS_CONCURRENCY=5 to fetch per-project
  statuses concurrently instead of sequentially, bounding API blast radius
- Surface user fetch errors: non-2xx and JSON parse failures now bail
  instead of silently falling back to empty vec
- Surface per-project status JSON parse errors instead of swallowing them
  with unwrap_or_else
- Move users to top-level output {projects, users} so they are not
  duplicated across every project entry

* fix(tool): apply rustfmt formatting to jira_tool.rs
2026-03-20 15:11:53 -04:00
Moksh Gupta
9fadf50375
Feat/add pinggy tunnel (#4060)
* feat(tunnel): add Pinggy tunnel support with configuration options

* feat(pinggy): update Pinggy tunnel configuration to remove domain field and improve SSH command handling

* feat(pinggy): add encryption and decryption for Pinggy tunnel token in config

* feat(pinggy): enhance region configuration for Pinggy tunnel with detailed options and validation

* feat(pinggy): enhance region validation and streamline output handling in Pinggy tunnel

* fix(pinggy): resolve clippy and fmt warnings

---------

Co-authored-by: moksh gupta <moksh.gupta@linktoany.com>
2026-03-20 15:11:50 -04:00
tf4fun
a047a0d9b8
feat(channel): enhance QQ channel with rich media and cron delivery (#4059)
Add full rich media send/receive support using unified [TYPE:target] markers
(aligned with Telegram). Register QQ as a cron announcement delivery channel.

- Media upload with SHA256-based caching and TTL
- Attachment download to workspace with all types supported
- Voice: prefer voice_wav_url (WAV), inject QQ ASR transcription
- File uploads include file_name for proper display in QQ client
- msg_seq generation and reply rate-limit tracking
- QQ delivery instructions in system prompt
- Register QQ in cron scheduler and tool description

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 15:11:47 -04:00
Argenis
43be8e5075
fix: preserve Slack session context when thread_replies=false (#4084)
* fix: preserve session context across Slack messages when thread_replies=false

When thread_replies=false, inbound_thread_ts() was falling back to each
message's own ts, giving every message a unique conversation key and
breaking multi-turn context. Now top-level messages get thread_ts=None
when threading is disabled, so all messages from the same user in the
same channel share one session.

Closes #4052

* chore: ignore RUSTSEC-2024-0384 (unmaintained instant crate via nostr)
2026-03-20 15:00:31 -04:00
Argenis
ea8fe95b19
fix: normalize 5-field cron weekday numbers to standard crontab semantics (#4082)
* fix: normalize 5-field cron weekday numbers to match standard crontab

The cron crate uses 1=Sun,2=Mon,...,7=Sat while standard crontab uses
0/7=Sun,1=Mon,...,6=Sat. This caused '1-5' to mean Sun-Thu instead of
Mon-Fri. Add a normalization step when converting 5-field expressions
to 6-field so user-facing semantics match standard crontab behavior.

Closes #4049

* chore: ignore RUSTSEC-2024-0384 (unmaintained instant crate via nostr)
2026-03-20 15:00:28 -04:00
Argenis
ce8f2133fb
fix(provider): replace overall timeout with per-read timeout for Codex streams (#4081)
* fix(provider): replace overall timeout with per-read timeout for Codex streams

The 120-second overall HTTP timeout was killing SSE streams mid-flight
when GPT-5.4 reasoning responses exceeded that duration. Replace with
a 300-second per-read timeout that only fires when no data arrives,
allowing long-running streams to complete while still detecting stalled
connections.

Closes #3786

* chore(deps): bump aws-lc-rs to fix RUSTSEC-2026-0044/0048

Update aws-lc-rs 1.16.1 → 1.16.2 (aws-lc-sys 0.38.0 → 0.39.0) to
resolve security advisory for X.509 Name Constraints Bypass.
2026-03-20 14:40:27 -04:00
Argenis
19d9c6f32c
Merge pull request #4075 from zeroclaw-labs/feat/testing-agent-loop
chore: bump version to 0.5.3
2026-03-20 13:34:04 -04:00
argenis de la rosa
0bff8d18fd chore: bump version to 0.5.3
Update version across all distribution manifests:
- Cargo.toml + Cargo.lock
- dist/scoop/zeroclaw.json
- dist/aur/PKGBUILD + .SRCINFO (catch up from 0.4.3)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 12:56:19 -04:00
Argenis
6f5b029033
fix(skills): support ClawHub registry URLs in skills install (#4069)
`zeroclaw skills install https://clawhub.ai/owner/skill` previously
failed because is_git_source() treated all https:// URLs as git repos.
ClawHub is a web registry, not a git host.

- Add is_clawhub_source() to detect clawhub.ai URLs
- Add clawhub_slug() to extract the skill name from the URL path
- Add install_clawhub_skill_source() to download via the ClawHub
  download API and extract the ZIP into the skills directory
- Exclude clawhub.ai URLs from git source detection
- Security audit runs on downloaded skills as with git installs

Closes #4022
2026-03-20 12:19:14 -04:00
Argenis
83ee103abb
fix: add interrupt_on_new_message support for Matrix channel (#4070)
Add the missing interrupt_on_new_message field to MatrixConfig and wire
it through InterruptOnNewMessageConfig so Matrix behaves consistently
with Telegram, Slack, Discord, and Mattermost.

Closes #4058
2026-03-20 12:17:16 -04:00
Argenis
d39ba69156
fix(providers): bail immediately on unrecoverable context window overflow (#4068)
When a request exceeds a model's context window and there is no
conversation history to truncate (e.g. system prompt alone is too
large), bail immediately with an actionable error message instead of
wasting all retry attempts on the same unrecoverable error.

Previously, the retry loop would attempt truncation, find nothing to
drop (only system + one user message), then fall through to the normal
retry logic which classified context window errors as retryable. This
caused 3 identical failing API calls for a single "hello" message.

The fix adds an early exit in all three chat methods (chat_with_history,
chat_with_tools, chat) when truncate_for_context returns 0 dropped
messages, matching the existing behavior in chat_with_system.

Fixes #4044
2026-03-20 12:10:24 -04:00
Argenis
22cdb5e2e2
fix(whatsapp): remove duplicate variable declaration causing unused warning (#4066)
* feat(config): add google workspace operation allowlists

* docs(superpowers): link google workspace operation inventory sources

* docs(superpowers): verify starter operation examples

* fix(google_workspace): remove duplicate credential/audit blocks, fix trim in allowlist check, add duplicate-methods test

- Remove the duplicated credentials_path, default_account, and audit_log
  blocks that were copy-pasted into execute() — they were idempotent but
  misleading and would double-append --account args on every call.
- Trim stored service/resource/method values in is_operation_allowed() to
  match the trim applied during Config::validate(), preventing a mismatch
  where a config entry with surrounding whitespace would pass validation but
  never match at runtime.
- Add google_workspace_allowed_operations_reject_duplicate_methods_within_entry
  test to cover the duplicate-method validation path that was implemented but
  untested.

* fix(google_workspace): close sub_resource bypass, trim allowed_services at runtime, mark spec implemented

- HIGH: extract and validate sub_resource before the allowlist check;
  is_operation_allowed() now accepts Option<&str> for sub_resource and
  returns false (fail-closed) when allowed_operations is non-empty and
  a sub_resource is present — prevents nested gws calls such as
  `drive/files/permissions/list` from slipping past a 3-segment policy
- MEDIUM: runtime allowed_services check now uses s.trim() == service,
  matching the trim() applied during config validation
- LOW: spec status updated to Implemented; stale "does not currently
  support method-level allowlists" line removed
- Added test: operation_allowlist_rejects_sub_resource_when_operations_configured

* docs(google_workspace): document sub_resource limitation and add config-reference entries

Spec updates (superpowers/specs):
- Semantics section: note that sub_resource calls are denied fail-closed when
  allowed_operations is configured
- Mental model: show both 3-segment and 4-segment gws command shapes; explain
  that 4-segment commands are unsupported with allowed_operations in this version
- Runtime enforcement: correct the validation order to match the implementation
  (sub_resource extracted before allowlist check, budget charged last)
- New section: Sub-Resource Limitation — documents impact, operator workaround,
  and confirms the deny is intentional for this slice
- Follow-On Work: add sub_resource config model extension as item 1

Config reference updates (all three locales):
- Add [google_workspace] section with top-level keys, [[allowed_operations]]
  sub-table, sub-resource limitation note, and TOML example

* fix(docs): add classroom and events to allowed_services list in all config-reference locales

* feat(google_workspace): extend allowed_operations to support sub_resource for 4-segment gws commands

All Gmail operations use gws gmail users <sub_resource> <method>, not the flat
3-segment shape. Without sub_resource support in allowed_operations, Gmail could
not be scoped at all, making the email-assistant use case impossible.

Config model:
- Add optional sub_resource field to GoogleWorkspaceAllowedOperation
- An entry without sub_resource matches 3-segment calls (Drive, Calendar, etc.)
- An entry with sub_resource matches only calls with that exact sub_resource value
- Duplicate detection updated to (service, resource, sub_resource) key

Runtime:
- Remove blanket sub_resource deny; is_operation_allowed now matches on all four
  dimensions including the optional sub_resource

Tests:
- Add operation_allowlist_matches_gmail_sub_resource_shape
- Add operation_allowlist_matches_drive_3_segment_shape
- Add rejects_operation_with_unlisted_sub_resource
- Add google_workspace_allowed_operations_allow_same_resource_different_sub_resource
- Add google_workspace_allowed_operations_reject_invalid_sub_resource_characters
- Add google_workspace_allowed_operations_deserialize_without_sub_resource
- Update all existing tests to use correct gws command shapes

Docs:
- Spec: correct Gmail examples throughout; remove Sub-Resource Limitation section;
  update data model, validation rules, example use case, and follow-on work
- Config-reference (en, vi, zh-CN): add sub_resource field to allowed_operations
  table; update Gmail examples to correct 4-segment shapes

Platform:
- email-assistant SKILL.md: update allowed_operations paths to gmail/users/* shape

* fix(google_workspace): add classroom and events to service parameter schema description

* fix(google_workspace): cross-validate allowed_operations service against allowed_services

When allowed_services is explicitly configured, each allowed_operations entry's
service must appear in that list. An entry that can never match at runtime is a
misconfigured policy: it looks valid but silently produces a narrower scope than
the operator intended. Validation now rejects it with a clear error message.

Scope: only applies when allowed_services is non-empty. When it is empty, the tool
uses a built-in default list defined in the tool layer; the validator cannot
enumerate that list without duplicating the constant, so the cross-check is skipped.

Also:
- Update allowed_operations field doc-comment from 3-part (service, resource, method)
  to 4-part (service, resource, sub_resource, method) model
- Soften Gmail sub_resource "required" language in config-reference (en, vi, zh-CN)
  from a validation requirement to a runtime matching requirement — the validator
  does not and should not hardcode API shape knowledge for individual services
- Add tests: rejects operation service not in allowed_services; skips cross-check
  when allowed_services is empty

* fix(google_workspace): cross-validate allowed_operations.service against effective service set

When allowed_services is empty the validator was silently skipping the
service cross-check, allowing impossible configs like an unlisted service
in allowed_operations to pass validation and only fail at runtime.

Move DEFAULT_GWS_SERVICES from the tool layer (google_workspace.rs) into
schema.rs so the validator can use it unconditionally. When allowed_services
is explicitly set, validate against that set; when empty, fall back to
DEFAULT_GWS_SERVICES. Remove the now-incorrect "skips cross-check when empty"
test and add two replacement tests: one confirming a valid default service
passes, one confirming an unknown service is rejected even with empty
allowed_services.

* fix(google_workspace): update test assertion for new error message wording

* docs(google_workspace): fix stale 3-segment gmail example in TDD plan

* fix(google_workspace): address adversarial review round 4 findings

- Error message for denied operations now includes sub_resource when
  present, so gmail/users/messages/send and gmail/users/drafts/send
  produce distinct, debuggable errors.
- Audit log now records sub_resource, completing the trail for 4-segment
  Gmail operations.
- Normalize (trim) allowed_services and allowed_operations fields at
  construction time in new(). Runtime comparisons now use plain equality
  instead of .trim() on every call, removing the latent defect where a
  future code path could forget to trim and silently fail to match.
- Unify runtime character validation with schema validation: sub_resource
  and service/resource/method checks now both require lowercase alphanumeric
  plus underscore and hyphen, matching the validator's character set.
- Add positional_cmd_args() test helper and tests verifying 3-segment
  (Drive) and 4-segment (Gmail) argument ordering.
- Add test confirming page_limit without page_all passes validation.
- Add test confirming whitespace in config values is normalized at
  construction, not deferred to comparison time.
- Fix spec Runtime Enforcement section to reflect actual code order.

* fix(google_workspace): wire production helpers to close test coverage gaps

- Remove #[cfg(test)] from positional_cmd_args; execute() now calls the
  same function the arg-ordering tests exercise, so a drift in the real
  command-building path is caught by the existing tests.
- Extract build_pagination_args(page_all, page_limit) as a production
  method used by execute(). Replace the brittle page_limit_without_page_all
  test (which relied on environment-specific execution failure wording)
  with four direct assertions on build_pagination_args covering all
  page_all/page_limit combinations.

* fix(whatsapp): remove duplicate variable declaration causing unused warning

Remove duplicate `let transcription_config = self.transcription.clone()`
(line 626 shadowed by identical line 628). The duplicate caused a
compiler warning during --features whatsapp-web builds.

Note: the reported "hang" at 526/528 crates is expected behavior for
release builds with lto="fat" + codegen-units=1 — the final link step
is slow but does complete.

Closes #4034

---------

Co-authored-by: Nim G <theredspoon@users.noreply.github.com>
2026-03-20 12:07:55 -04:00
Argenis
206d19af11
fix(api): respect job_type and delivery in POST /api/cron (#4063) (#4065) 2026-03-20 12:03:46 -04:00
Nim G
bbd2556861
feat(tool): google_workspace operation-level allowlist (#4010)
* feat(config): add google workspace operation allowlists

* docs(superpowers): link google workspace operation inventory sources

* docs(superpowers): verify starter operation examples

* fix(google_workspace): remove duplicate credential/audit blocks, fix trim in allowlist check, add duplicate-methods test

- Remove the duplicated credentials_path, default_account, and audit_log
  blocks that were copy-pasted into execute() — they were idempotent but
  misleading and would double-append --account args on every call.
- Trim stored service/resource/method values in is_operation_allowed() to
  match the trim applied during Config::validate(), preventing a mismatch
  where a config entry with surrounding whitespace would pass validation but
  never match at runtime.
- Add google_workspace_allowed_operations_reject_duplicate_methods_within_entry
  test to cover the duplicate-method validation path that was implemented but
  untested.

* fix(google_workspace): close sub_resource bypass, trim allowed_services at runtime, mark spec implemented

- HIGH: extract and validate sub_resource before the allowlist check;
  is_operation_allowed() now accepts Option<&str> for sub_resource and
  returns false (fail-closed) when allowed_operations is non-empty and
  a sub_resource is present — prevents nested gws calls such as
  `drive/files/permissions/list` from slipping past a 3-segment policy
- MEDIUM: runtime allowed_services check now uses s.trim() == service,
  matching the trim() applied during config validation
- LOW: spec status updated to Implemented; stale "does not currently
  support method-level allowlists" line removed
- Added test: operation_allowlist_rejects_sub_resource_when_operations_configured

* docs(google_workspace): document sub_resource limitation and add config-reference entries

Spec updates (superpowers/specs):
- Semantics section: note that sub_resource calls are denied fail-closed when
  allowed_operations is configured
- Mental model: show both 3-segment and 4-segment gws command shapes; explain
  that 4-segment commands are unsupported with allowed_operations in this version
- Runtime enforcement: correct the validation order to match the implementation
  (sub_resource extracted before allowlist check, budget charged last)
- New section: Sub-Resource Limitation — documents impact, operator workaround,
  and confirms the deny is intentional for this slice
- Follow-On Work: add sub_resource config model extension as item 1

Config reference updates (all three locales):
- Add [google_workspace] section with top-level keys, [[allowed_operations]]
  sub-table, sub-resource limitation note, and TOML example

* fix(docs): add classroom and events to allowed_services list in all config-reference locales

* feat(google_workspace): extend allowed_operations to support sub_resource for 4-segment gws commands

All Gmail operations use gws gmail users <sub_resource> <method>, not the flat
3-segment shape. Without sub_resource support in allowed_operations, Gmail could
not be scoped at all, making the email-assistant use case impossible.

Config model:
- Add optional sub_resource field to GoogleWorkspaceAllowedOperation
- An entry without sub_resource matches 3-segment calls (Drive, Calendar, etc.)
- An entry with sub_resource matches only calls with that exact sub_resource value
- Duplicate detection updated to (service, resource, sub_resource) key

Runtime:
- Remove blanket sub_resource deny; is_operation_allowed now matches on all four
  dimensions including the optional sub_resource

Tests:
- Add operation_allowlist_matches_gmail_sub_resource_shape
- Add operation_allowlist_matches_drive_3_segment_shape
- Add rejects_operation_with_unlisted_sub_resource
- Add google_workspace_allowed_operations_allow_same_resource_different_sub_resource
- Add google_workspace_allowed_operations_reject_invalid_sub_resource_characters
- Add google_workspace_allowed_operations_deserialize_without_sub_resource
- Update all existing tests to use correct gws command shapes

Docs:
- Spec: correct Gmail examples throughout; remove Sub-Resource Limitation section;
  update data model, validation rules, example use case, and follow-on work
- Config-reference (en, vi, zh-CN): add sub_resource field to allowed_operations
  table; update Gmail examples to correct 4-segment shapes

Platform:
- email-assistant SKILL.md: update allowed_operations paths to gmail/users/* shape

* fix(google_workspace): add classroom and events to service parameter schema description

* fix(google_workspace): cross-validate allowed_operations service against allowed_services

When allowed_services is explicitly configured, each allowed_operations entry's
service must appear in that list. An entry that can never match at runtime is a
misconfigured policy: it looks valid but silently produces a narrower scope than
the operator intended. Validation now rejects it with a clear error message.

Scope: only applies when allowed_services is non-empty. When it is empty, the tool
uses a built-in default list defined in the tool layer; the validator cannot
enumerate that list without duplicating the constant, so the cross-check is skipped.

Also:
- Update allowed_operations field doc-comment from 3-part (service, resource, method)
  to 4-part (service, resource, sub_resource, method) model
- Soften Gmail sub_resource "required" language in config-reference (en, vi, zh-CN)
  from a validation requirement to a runtime matching requirement — the validator
  does not and should not hardcode API shape knowledge for individual services
- Add tests: rejects operation service not in allowed_services; skips cross-check
  when allowed_services is empty

* fix(google_workspace): cross-validate allowed_operations.service against effective service set

When allowed_services is empty the validator was silently skipping the
service cross-check, allowing impossible configs like an unlisted service
in allowed_operations to pass validation and only fail at runtime.

Move DEFAULT_GWS_SERVICES from the tool layer (google_workspace.rs) into
schema.rs so the validator can use it unconditionally. When allowed_services
is explicitly set, validate against that set; when empty, fall back to
DEFAULT_GWS_SERVICES. Remove the now-incorrect "skips cross-check when empty"
test and add two replacement tests: one confirming a valid default service
passes, one confirming an unknown service is rejected even with empty
allowed_services.

* fix(google_workspace): update test assertion for new error message wording

* docs(google_workspace): fix stale 3-segment gmail example in TDD plan

* fix(google_workspace): address adversarial review round 4 findings

- Error message for denied operations now includes sub_resource when
  present, so gmail/users/messages/send and gmail/users/drafts/send
  produce distinct, debuggable errors.
- Audit log now records sub_resource, completing the trail for 4-segment
  Gmail operations.
- Normalize (trim) allowed_services and allowed_operations fields at
  construction time in new(). Runtime comparisons now use plain equality
  instead of .trim() on every call, removing the latent defect where a
  future code path could forget to trim and silently fail to match.
- Unify runtime character validation with schema validation: sub_resource
  and service/resource/method checks now both require lowercase alphanumeric
  plus underscore and hyphen, matching the validator's character set.
- Add positional_cmd_args() test helper and tests verifying 3-segment
  (Drive) and 4-segment (Gmail) argument ordering.
- Add test confirming page_limit without page_all passes validation.
- Add test confirming whitespace in config values is normalized at
  construction, not deferred to comparison time.
- Fix spec Runtime Enforcement section to reflect actual code order.

* fix(google_workspace): wire production helpers to close test coverage gaps

- Remove #[cfg(test)] from positional_cmd_args; execute() now calls the
  same function the arg-ordering tests exercise, so a drift in the real
  command-building path is caught by the existing tests.
- Extract build_pagination_args(page_all, page_limit) as a production
  method used by execute(). Replace the brittle page_limit_without_page_all
  test (which relied on environment-specific execution failure wording)
  with four direct assertions on build_pagination_args covering all
  page_all/page_limit combinations.

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-20 11:46:22 -04:00
ryankr
2a1b32f8bf
feat(gateway): make request timeout configurable via env var (#4055)
Add `ZEROCLAW_GATEWAY_TIMEOUT_SECS` environment variable to override the
hardcoded 30-second gateway request timeout at runtime.

Agentic workloads with tool use (web search, MCP tools, sub-agent
delegation) regularly exceed 30 seconds, causing HTTP 408 timeouts at the
gateway layer — even though provider_timeout_secs allows longer LLM calls.

The default remains 30s for backward compatibility.

Co-authored-by: Claude Code (claude-opus-4-6) <noreply@anthropic.com>
2026-03-20 11:24:13 -04:00
Tomas Ward
505024d290
fix(provider): complete Anthropic OAuth setup-token authentication (#4053)
Setup tokens (sk-ant-oat01-*) from Claude Pro/Max subscriptions require
specific headers and a system prompt to authenticate successfully.
Without these, the API returns 400 Bad Request.

Changes to apply_auth():
- Add claude-code-20250219 and interleaved-thinking-2025-05-14 beta
  headers alongside existing oauth-2025-04-20
- Add anthropic-dangerous-direct-browser-access: true header

New apply_oauth_system_prompt() method:
- Prepends required "You are Claude Code" identity to system prompt
- Handles String, Blocks, and None system prompt variants

Changes to chat_with_system() and chat():
- Inject OAuth system prompt when using setup tokens
- Use NativeChatRequest/NativeChatResponse for proper SystemPrompt
  enum support in chat_with_system

Test updates:
- Updated apply_auth test to verify new beta headers and
  browser-access header

Tested with real OAuth token via `zeroclaw agent -m` — confirmed
working end-to-end.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 11:24:10 -04:00
ryankr
a0c12b5a28
fix(agent): force sequential execution when tool_search is in batch (#4054)
tool_search activates deferred MCP tools into ActivatedToolSet at runtime.
When tool_search runs in parallel with the tools it activates, a race
condition occurs where tool lookups happen before activation completes,
resulting in "Unknown tool" errors.

Force sequential execution in should_execute_tools_in_parallel() whenever
tool_search is present in the tool call batch.

Co-authored-by: Claude Code (claude-opus-4-6) <noreply@anthropic.com>
2026-03-20 11:24:07 -04:00
Argenis
b4a2afb04a
feat(tools): add text browser tool for headless environments (#4031)
* feat(tools): add text browser tool for headless environments (#3879)

* fix(tools): remove redundant match arm in text_browser clippy lint

* ci: trigger fresh workflow run
2026-03-20 01:59:43 -04:00
Argenis
8c2122017b
feat(ci): add ARM cross-compilation targets for SBCs (#4033)
Add armv7-unknown-linux-gnueabihf and arm-unknown-linux-gnueabihf targets
to the release build matrix for Raspberry Pi Zero, Orange Pi, and similar
ARM single-board computers. Disable observability-prometheus on 32-bit
targets (requires AtomicU64). Update install.sh to map armv6l to the
correct ARM binary.
2026-03-20 01:59:32 -04:00
Argenis
4f5644cf46
fix(skills): preserve TOML [[tools]] in Compact prompt injection mode (#4032)
In Compact (MetadataOnly) mode, skill tools were omitted from the system
prompt alongside instructions. This meant the LLM had no visibility into
TOML-defined tools when running in Compact mode, defeating the primary
advantage of TOML skills over MD skills (structured tool metadata).

Now Compact mode skips only instructions (loaded on demand via
read_skill) while still inlining tool definitions so the LLM knows
which skill tools are available.

Closes #3702
2026-03-20 01:55:34 -04:00
Argenis
7d958c33ef
feat(ci): add armv7-unknown-linux-gnueabihf release target (#4029)
Add pre-built armv7 (32-bit ARM hard-float) binary to all release
workflows: stable, beta, and cross-platform manual build. Uses
gcc-arm-linux-gnueabihf cross-compiler on ubuntu-22.04 for glibc 2.35
compatibility.

The install script already maps armv7l/armv6l to this target, so
users on Raspberry Pi and similar devices will be able to install
directly via the install script once binaries are published.

Closes #3759
2026-03-20 01:36:15 -04:00
sagit
89df0ab89e
feat(providers): add Bailian (Aliyun) provider support (#3158)
* feat: add Bailian (Aliyun) provider support

- Add bailian provider with coding.dashscope.aliyuncs.com endpoint
- Set User-Agent to 'openclaw' for compatibility with Bailian Coding Plan
- Support aliases: bailian, aliyun-bailian, aliyun
- Enable vision support for multimodal models

This allows users to use Alibaba Cloud's Bailian (百炼) Coding Plan API keys
with zeroclaw, matching the configuration used in OpenClaw.

* fix: address PR review comments for bailian provider

- Use is_bailian_alias() in factory match arm (consistency with other providers)
- Add bailian to canonical_china_provider_name() for onboarding routing
- Add BAILIAN_API_KEY env var resolution with DASHSCOPE_API_KEY fallback
- Add test coverage for bailian aliases in canonical_china_provider_name test

* fix: format bailian provider code

---------

Co-authored-by: Sagit-chu <sagit@example.com>
2026-03-20 01:26:16 -04:00
Chris Hengge
e4439a5c95
feat(web): add Active/All filter toggle to dashboard Channels card (#4026)
- Rename 'Active Channels' card heading to 'Channels'
- Add showAllChannels state (default: active-only view)
- Pill toggle button switches between 'Active' (green) and 'All' (blue)
  views; button label reflects the *current* view so clicking switches to
  the other mode
- When active-only and all channels are inactive, show
  'No active channels' hint instead of an empty list
- Add i18n keys dashboard.channels, dashboard.filter_active,
  dashboard.filter_all, dashboard.no_active_channels to en, zh, tr
  locales
- No backend changes; no new dependencies
2026-03-20 01:20:38 -04:00
Argenis
15d84b2622
fix(copilot): support vision via multi-part content messages (#4021)
* fix(copilot): support vision via multi-part content messages

The Copilot provider sent image markers as plain text in the content
field. The API expects OpenAI-style multi-part content arrays with
separate text and image_url parts for vision input.

Add ApiContent enum (untagged) that serializes as either a plain string
or an array of ContentPart objects. User messages containing [IMAGE:]
markers are converted to multi-part content using the shared
multimodal::parse_image_markers() helper, matching the pattern used by
the OpenRouter and Compatible providers. Non-user messages and messages
without images serialize as plain strings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(copilot): route chat_with_system through multimodal parser and add tests

Fix chat_with_system user message bypassing to_api_content(), which left
[IMAGE:] markers as plain text on that code path. Add unit tests for
to_api_content() covering image-marker, plain-text, and non-user roles.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* style: fix clippy wildcard match warning in copilot test

* style: apply rustfmt formatting

* style: fix formatting in channels/mod.rs

* ci: re-trigger CI

* fix(test): update conversation history key in new-session test

The conversation_history_key function now includes reply_target in the
key format. Update test assertions to use the correct key format
(telegram_chat-refresh_alice instead of telegram_alice).

---------

Co-authored-by: Tim Stewart <timstewartj@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-20 00:07:00 -04:00
Argenis
9b14ddab79
fix(ollama): default to prompt-guided tool calling for local models (#4024)
* fix(ollama): default to prompt-guided tool calling for local models

Ollama's /api/chat native tool-calling parameter is silently ignored by
many local models (llama3, qwen3, phi4, etc.), causing them to emit
tool-call JSON as plain text instead of structured tool calls. When
native_tool_calling was true, the XML tool-use instructions were
suppressed from the system prompt, leaving models with no guidance on
the expected tool protocol.

Default to prompt-guided (XML) tool calling so all Ollama models receive
tool-use instructions in the system prompt and the existing text-based
parser in the agent loop can extract tool calls reliably.

Also fixes a minor rustfmt issue in channels/mod.rs from #2891.

Fixes #3999
Fixes #3982

* fix(channels): update test keys for reply_target in history key

The conversation_history_key now includes reply_target (from #2891),
but the refreshes_available_skills_after_new_session test still used
the old key format "telegram_alice" instead of
"telegram_chat-refresh_alice".
2026-03-19 23:42:03 -04:00
Argenis
0c73dc9427
Merge pull request #4025 from zeroclaw-labs/chore/version-bump-0.5.2
chore: bump version to 0.5.2
2026-03-19 23:41:28 -04:00
argenis de la rosa
19ac6ec2a5 chore: bump version to 0.5.2
Update version in Cargo.toml, Cargo.lock, and Scoop manifest.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 23:35:01 -04:00
Argenis
fda06ed157
Merge pull request #4023 from zeroclaw-labs/docs/architecture-diagram
docs(readme): overhaul all 31 READMEs to match OpenClaw-level depth
2026-03-19 23:33:15 -04:00
argenis de la rosa
169733f8de docs(readme): suppress MD001/MD024 lint in translated Prerequisites sections
The Prerequisites section uses #### headings inside <details> blocks,
which triggers MD001 (heading increment skip) and MD024 (duplicate
heading text). The English README is excluded from the docs quality
gate; add markdownlint-disable/enable comments to match.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 23:22:14 -04:00
argenis de la rosa
eaf23e63a4 docs(readme): overhaul all 31 READMEs to match OpenClaw-level depth
Restructure the English README and all 30 translated READMEs to match
OpenClaw's comprehensive structure while preserving ZeroClaw branding.

Key changes across all files:
- Replace outdated bootstrap.sh references with install.sh
- Add missing sections: Security defaults (DM access), Everything we
  built so far, How it works (ASCII architecture diagram), CLI commands,
  Agent workspace + skills, Channel configuration examples, Subscription
  Auth (OAuth), Migrating from OpenClaw
- Fix comparison image path to docs/assets/zeroclaw-comparison.jpeg
- Update doc links to current paths (docs/reference/api/*, docs/ops/*)
- Standardize social badges (X, Facebook, Discord, Instagram, TikTok,
  RedNote, Reddit) and contributors badge across all locales
- Update benchmark table (binary size ~8.8 MB)
- Full structural parity: all 31 files are 792 lines with identical
  section ordering

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 23:09:07 -04:00
Tim
ecbef64a7c
fix(channels): include reply_target in conversation history key (#2891)
conversation_history_key() now includes reply_target to isolate
conversation histories across distinct Discord/Slack/Mattermost
channels for the same sender. Previously all channels produced
the same key {channel}_{sender}, causing cross-channel context bleed.

New key format: {channel}_{reply_target}_{sender} (without thread)
or {channel}_{reply_target}_{thread_ts}_{sender} (with thread).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-19 22:58:06 -04:00
guoraymon
633d711faa
fix(agent): prevent memory context duplication by reordering operations (#2649)
Swap auto_save and load_context order to avoid retrieving the just-stored
user message in memory recall.

Before: load_context → auto_save (could retrieve own message)
After: auto_save → load_context (query first, store after)

This fixes the issue where "[Memory context]\n- user_msg: <current>\n<current>"
would appear, causing the user's input to be duplicated.
2026-03-19 22:54:28 -04:00
Argenis
37594fd520
fix(tool): include descriptions in deferred MCP tools system prompt (#4018)
Add tool descriptions alongside names in the deferred tools section so
the LLM can better identify which tool to activate via tool_search.

Original author: @mark-linyb
2026-03-19 22:35:55 -04:00
Octopus
64ecb76773
feat: upgrade MiniMax default model to M2.7 (#3865)
Add MiniMax-M2.7 and M2.7-highspeed to model selection lists. Set M2.7 as the new default for MiniMax, Novita, and Ollama cloud providers. Retain all previous models (M2.5, M2.1, M2) as alternatives.
2026-03-19 22:33:29 -04:00
Eddie's AI Agent
128b33e717
fix(channel): remove dead AtomicU32 fallback in channels mod (#3521)
The conditional cfg branches for AtomicU32 (32-bit fallback) and
AtomicU64 (64-bit) became dead code after portable_atomic::AtomicU64
was adopted in bd757996. The AtomicU32 branch would fail to compile
on 32-bit targets because the import was removed but the usage remained.

Use portable_atomic::AtomicU64 unconditionally, which works on all
targets.

Fixes #3452

Co-authored-by: SpaceLobster <spacelobster@SpaceLobsters-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:33:05 -04:00
Eddie's AI Agent
aa6e3024d4
fix(channel): use uppercase IMAGE tag in Matrix channel for multimodal handling (#3523)
Closes #3486

Co-authored-by: SpaceLobster <spacelobster@SpaceLobsters-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:32:48 -04:00
Eddie's AI Agent
bc7f797603
fix(channel): align Matrix reply channel key with dispatch key (#3522)
The Matrix channel was setting `channel: format!("matrix:{}", room_id)`
on incoming messages, but the reply router looks up channels by name
using `channels_by_name.get(&msg.channel)` where the key is just
"matrix". This mismatch caused replies to silently drop.

Align with how all other channels (telegram, discord, slack, etc.)
set the channel field to just the channel name.

Closes #3477

Co-authored-by: SpaceLobster <spacelobster@SpaceLobsters-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:32:44 -04:00
Eddie's AI Agent
2d4a1b1ad7
fix(packaging): ensure Homebrew var directory exists on first start (#3524)
* fix(packaging): ensure Homebrew var directory exists on first start

When zeroclaw is installed via Homebrew, the service plist references
/opt/homebrew/var/zeroclaw (or /usr/local/var/zeroclaw on Intel) for
runtime data, but this directory was never created. This caused
`brew services start zeroclaw` to fail on first use.

The fix detects Homebrew installations by checking if the binary lives
under a Homebrew prefix (Cellar path or symlinked bin/ with Cellar
sibling). When detected:

- install_macos() creates the var directory and sets
  ZEROCLAW_CONFIG_DIR + WorkingDirectory in the generated plist
- start() defensively ensures the var directory exists before
  invoking launchctl

Closes #3464

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* style(service): fix cargo fmt formatting in Homebrew var dir tests

Collapse multi-line assert_eq! macros to single-line form as
required by cargo fmt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: SpaceLobster <spacelobster@SpaceLobsters-Mac-mini.local>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 22:32:13 -04:00
Darren.Zeng
c7e8f3d235
docs(service): add SAFETY comments to unsafe libc::getuid() calls (#3869)
Add proper SAFETY documentation comments to the two unsafe blocks using
libc::getuid() in src/service/mod.rs:

1. In is_root() function: documents why getuid() is safe to call
2. In is_root_matches_system_uid() test: documents the test's purpose

This addresses the best practices audit finding about unsafe code without
safety comments. While we could use the nix crate's safe wrapper, adding
safety comments is a minimal change that satisfies the audit requirement
without introducing new dependencies.

As noted in refactor-candidates.md, the nix crate alternative would also
be acceptable, but this change follows the principle of minimal intervention
for documentation-only improvements.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 22:12:02 -04:00
Darren.Zeng
ff5c1c6e9b
style: enhance rustfmt.toml with additional stable formatting options (#3870)
Expand rustfmt.toml configuration beyond just 'edition = \"2021\"' to
include additional stable formatting options that improve code consistency:

- max_width = 100: consistent line length
- tab_spaces = 4, hard_tabs = false: standard indentation
- use_field_init_shorthand = true: cleaner struct initialization
- use_try_shorthand = true: cleaner try operator usage
- reorder_imports = true, reorder_modules = true: consistent ordering
- match_arm_leading_pipes = \"Never\": cleaner match syntax

These options are all available on stable Rust and follow common Rust
formatting conventions. This addresses the finding in refactor-candidates.md
about the minimal rustfmt.toml configuration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 22:12:00 -04:00
linyibin
b3e3a0a335
fix(config): handle tilde expansion in non-TTY environments (cron) (#3849)
When HOME environment variable is not set (common in cron jobs or
other non-TTY environments), `shellexpand::tilde` returns the literal
`~` unexpanded. This caused SOUL.md, IDENTITY.md, and other workspace
files to not be loaded because the workspace_dir path was invalid.

This fix adds `expand_tilde_path()` helper that falls back to
`directories::UserDirs` when shellexpand fails to expand tilde.
If both methods fail, a warning is logged advising users to use
absolute paths or set HOME explicitly in cron environments.

Closes #3819
2026-03-19 22:10:59 -04:00
linyibin
4d89f27f21
fix(docker): remove conflicting .dockerignore entries (closes #3836) (#3844)
The Dockerfile requires firmware/ and crates/robot-kit/ for the build:
- crates/robot-kit/Cargo.toml is needed for workspace manifest parsing
- firmware/ is copied as part of the build context

These entries in .dockerignore caused COPY commands to fail with
"file not found" errors, resulting in 100% Docker build failure.

Made-with: Cursor
2026-03-19 22:10:56 -04:00
dependabot[bot]
8d8d010196
chore(deps): bump indicatif from 0.17.11 to 0.18.4 (#3857)
Bumps [indicatif](https://github.com/console-rs/indicatif) from 0.17.11 to 0.18.4.
- [Release notes](https://github.com/console-rs/indicatif/releases)
- [Commits](https://github.com/console-rs/indicatif/compare/0.17.11...0.18.4)

---
updated-dependencies:
- dependency-name: indicatif
  dependency-version: 0.18.4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 22:10:09 -04:00
dependabot[bot]
ff9904c740
chore(deps): bump tokio-tungstenite from 0.28.0 to 0.29.0 (#3858)
Bumps [tokio-tungstenite](https://github.com/snapview/tokio-tungstenite) from 0.28.0 to 0.29.0.
- [Changelog](https://github.com/snapview/tokio-tungstenite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/snapview/tokio-tungstenite/compare/v0.28.0...v0.29.0)

---
updated-dependencies:
- dependency-name: tokio-tungstenite
  dependency-version: 0.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 22:10:06 -04:00
Argenis
e411e80acb
fix(provider): disable native tool calling for Venice (#4016)
Venice's API accepts the OpenAI-compatible tool format without error
but models ignore the tool specs and hallucinate tool usage in prose
instead. Disable native tool calling so Venice uses prompt-guided
tools, which work reliably.

Add without_native_tools() builder method to OpenAiCompatibleProvider
for providers that support system messages but not native function
calling.

Closes #4007
2026-03-19 21:48:38 -04:00
Argenis
073c8cccbc
fix(web): add clipboard fallback for HTTP contexts (#4015)
The copy button in the web dashboard silently failed when served over
HTTP because navigator.clipboard requires a secure context (HTTPS).
Add a textarea-based fallback using document.execCommand('copy') and
proper error handling for the clipboard promise.

Closes #4008
2026-03-19 21:48:35 -04:00
Argenis
58be05a6e0
fix(channel): clear persisted JSONL session on /new command (#4014)
The /new command only cleared in-memory conversation history but left
the JSONL session file on disk. On daemon restart, stale history was
rehydrated, negating the user's session reset. This caused context
pollution and degraded tool calling reliability.

Add delete_session() to SessionStore and call it from the /new handler
so both in-memory and persisted state are cleared.

Closes #4009
2026-03-19 21:48:33 -04:00
Argenis
c794d54821
feat(tools): add calculator tool with arithmetic and statistical functions (#4012)
Provides 25 functions (add, subtract, divide, multiply, pow, sqrt, abs,
modulo, round, log, ln, exp, factorial, sum, average, median, mode, min,
max, range, variance, stdev, percentile, count, percentage_change, clamp)
as a single always-enabled tool to avoid LLM miscalculations and reduce
token waste on numeric tasks.

Co-authored-by: Anatolii <anatolii@Anatoliis-MacBook.local>
2026-03-19 21:40:27 -04:00
Argenis
5f0f88de3d
fix(channel): add interruption_scope_id for thread-aware cancellation scoping (#4017)
Add interruption_scope_id to ChannelMessage for thread-aware cancellation. Slack genuine thread replies and Matrix threads get scoped keys, preventing cross-thread cancellation. All other channels preserve existing behavior.

Supersedes #3900. Depends on #3891.
2026-03-19 21:34:04 -04:00
RoomWithOutRoof
776e5947ef
fix(docker): default CMD to daemon instead of gateway (#3897)
Change default Docker CMD from gateway to daemon in both dev and release stages. Gateway only starts the HTTP/WebSocket server — channel listeners are never spawned. Daemon starts the full runtime: gateway + channels + heartbeat + scheduler.

Closes #3893
2026-03-19 21:08:53 -04:00
Darren.Zeng
e2183c89a3
dev: add Justfile for convenient development commands (#3874)
Add a Justfile providing convenient shortcuts for common development
tasks. Just is a modern command runner that serves as a better Make
alternative for project-specific commands.

Commands provided:
- just fmt / just fmt-check - Format code
- just lint - Run clippy
- just test / just test-lib - Run tests
- just ci - Run full CI quality gate locally
- just build / just build-debug - Build the project
- just dev [args] - Run zeroclaw in development mode
- just doc - Generate and open documentation
- just audit / just deny - Security and license checks
- just fmt-toml - Format TOML files with taplo

This complements the existing shell scripts in dev/ and scripts/
by providing a more discoverable command interface.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 21:08:16 -04:00
Darren.Zeng
29dc1172c0
style: add taplo.toml for TOML file formatting consistency (#3873)
Add Taplo configuration file to ensure consistent formatting of TOML
files across the project. Taplo is a TOML formatter and linter that
helps maintain consistent style in configuration files.

Configuration includes:
- 2-space indentation to match project style
- Comment alignment for better readability
- Trailing newline enforcement
- Sorting rules for dependencies and features

This complements rustfmt.toml and .editorconfig to provide complete
formatting coverage for all file types in the project.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 21:08:08 -04:00
Darren.Zeng
e79e1b88b7
dev: add .gitattributes for consistent line endings and file handling (#3875)
Add comprehensive .gitattributes file to ensure consistent line endings
and proper file handling across different operating systems and editors.

Key features:
- Automatic line ending normalization (LF for most files)
- Language detection hints for GitHub Linguist
- Binary file declarations to prevent text processing
- CRLF handling for Windows-specific files (.ps1, .sln)
- Mark Cargo.lock as generated to hide diff noise in PRs

This helps prevent issues with:
- Mixed line endings in the repository
- Incorrect language statistics on GitHub
- Binary files being corrupted by text processing
- Unnecessary merge conflicts due to line ending differences

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-19 21:08:02 -04:00
Reaster
f886ce47e9
fix(docker): default CMD to daemon instead of gateway (#3893)
The `gateway` command only starts the HTTP/WebSocket server without
channel listeners. Users configuring channels (Matrix, Telegram, etc.)
in config.toml get no response because the channel sync loops are
never spawned. The `daemon` command starts the full runtime including
gateway, channels, heartbeat, and scheduler.

Co-authored-by: reaster <reaster@courrier.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 21:07:53 -04:00
Nim G
6a30e24e7b
feat(channel): add interrupt_on_new_message support for Discord (#3918)
* feat(channel): add /stop command to cancel in-flight tasks

Adds an explicit /stop slash command that allows users on any non-CLI
channel (Matrix, Telegram, Discord, Slack, etc.) to cancel an agent
task that is currently running.

Changes:
- is_stop_command(): new helper that detects /stop (case-insensitive,
  optional @botname suffix), not gated on channel type
- /stop fast path in run_message_dispatch_loop: intercepts /stop before
  semaphore acquisition so the target task is never replaced in the store;
  fires CancellationToken on the running task; sends reply via tokio::spawn
  using the established two-step channel lookup pattern
- register_in_flight separated from interrupt_enabled: all non-CLI tasks
  now enter the in_flight_by_sender store, enabling /stop to reach them;
  auto-cancel-on-new-message remains gated on interrupt_enabled (Telegram/
  Slack only) — this is a deliberate broadening, not a side effect

Deferred to follow-up (feat/matrix-interrupt-on-new-message):
- interrupt_on_new_message config field for Matrix
- thread-aware interruption_scope_key (requires per-channel thread_ts
  semantics analysis; Slack always sets thread_ts, Matrix only for replies)

Supersedes #2855

Tests: 7 new unit tests for is_stop_command; all 4075 tests pass.

* feat(channel): add interrupt_on_new_message support for Discord

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-19 19:33:37 -04:00
Argenis
83587eea4a
Merge pull request #3917 from theredspoon/feat/mattermost-interrupt-on-new-message
feat(channel): add interrupt_on_new_message support for Mattermost
2026-03-19 19:09:16 -04:00
Argenis
226b2282f5
Fix delegate agent timeout config regression (#4004)
* feat(delegate): make delegate timeout configurable via config.toml

Add configurable timeout options for delegate tool:
- timeout_secs: for non-agentic sub-agent calls (default: 120s)
- agentic_timeout_secs: for agentic sub-agent runs (default: 300s)

Previously these were hardcoded constants (DELEGATE_TIMEOUT_SECS
and DELEGATE_AGENTIC_TIMEOUT_SECS). Users can now customize them
in config.toml under [[delegate.agents]] section.

Fixes #3898

* feat(config): make delegate tool timeouts configurable via config.toml

This change makes the hardcoded 120s/300s delegate tool timeouts
configurable through the config file:

- Add [delegate] section to Config with timeout_secs and agentic_timeout_secs
- Add DelegateToolConfig struct for global default timeout values
- Add DEFAULT_DELEGATE_TIMEOUT_SECS (120) and DEFAULT_DELEGATE_AGENTIC_TIMEOUT_SECS (300) constants
- Remove hardcoded constants from delegate.rs
- Update tests to use constant values instead of magic numbers
- Update examples/config.example.toml with documentation

Closes #3898

* fix: keep delegate timeout fields as Option<u64> with global fallback

- Change DelegateAgentConfig.timeout_secs and agentic_timeout_secs from
  u64 to Option<u64> so per-agent overrides are truly optional
- Implement manual Default for DelegateToolConfig with correct values
  (120s and 300s) instead of derive(Default)
- Add DelegateToolConfig to DelegateTool struct and wire through
  constructors so agent timeouts fall back to global [delegate] config
- Add validation for delegate timeout values in Config::validate()
- Fix example config to use [agents.name] table syntax matching the
  HashMap<String, DelegateAgentConfig> schema
- Add missing timeout fields to all DelegateAgentConfig struct literals
  across codebase (doctor, swarm, model_routing_config, tools/mod)

* chore: trigger CI

* chore: retrigger CI

* fix: cargo fmt line wrapping in config/mod.rs

* fix: import timeout constants in delegate tests

* style: cargo fmt

---------

Co-authored-by: vincent067 <vincent067@outlook.com>
2026-03-19 18:54:33 -04:00
argenis de la rosa
7bf5f3edde fix: add missing mattermost field to test InterruptOnNewMessageConfig 2026-03-19 18:53:28 -04:00
Argenis
191192a104
add configurable allow_scripts audit option (#4001)
Co-authored-by: wangyingtao.10 <wangyingtao.10@jd.com>
2026-03-19 18:31:31 -04:00
argenis de la rosa
8b942853c4 merge: resolve conflicts with master after #3891 merge
Keep both the PR's Mattermost interrupt_on_new_message additions
and master's new fields (pending_new_sessions, prompt_config,
autonomy_level) from the /stop command PR (#3891).
2026-03-19 18:29:36 -04:00
Argenis
95473d83b5
Merge pull request #4006 from zeroclaw-labs/readme-updates
docs: add OpenClaw migration commands to all translated READMEs
2026-03-19 18:29:04 -04:00
Argenis
b5668acf2f
Merge pull request #3891 from theredspoon/feat/stop-command
feat(channel): add /stop command to cancel in-flight tasks
2026-03-19 18:24:04 -04:00
Argenis
2128c9db5b
Fix Jira tool panics and dedup bug (#4003)
* feat: add Jira tool with get_ticket, search_tickets, and comment_ticket

Implements a new `jira` tool following the existing zeroclaw tool
conventions (Tool trait, SecurityPolicy, config-gated registration).

- get_ticket: configurable detail level (basic/basic_search/full/changelog)
  with response shaping; always in the default allowed_actions list
- search_tickets: JQL-based search with cursor pagination (nextPageToken);
  always returns basic_search shape; gated by allowed_actions
- comment_ticket: posts ADF comments with inline markdown-like syntax —
  @email mentions resolved to Jira accountId, **bold**, bullet lists,
  newlines; gated by allowed_actions and SecurityPolicy Act operation

Config: [jira] section with base_url, email, api_token (encrypted at
rest, falls back to JIRA_API_TOKEN env var), allowed_actions (default:
["get_ticket"]), and timeout_secs. Validated on load.

Tool description in tool_descriptions/en.toml documents all three
actions and the full comment syntax for the AI system prompt.

* fix: address jira tool code review findings

High priority:
- Validate issue_key against ^[A-Z][A-Z0-9]+-\d+$ before URL interpolation
  to prevent path traversal in get_ticket and comment_ticket

Medium priority:
- Add email guard in tool registration (mod.rs) to skip with a warning
  instead of registering a broken tool when jira.email is empty
- Shape comment_ticket response to return only id, author, created —
  avoids exposing internal Jira metadata to the AI
- Replace O(n²) comment matching in shape_basic with a HashMap lookup
  keyed by comment ID for O(1) access
- Add api_token validation in Config::validate() checking both the
  config field and JIRA_API_TOKEN env var when jira.enabled = true

Low priority:
- Make shape_basic_search private (was accidentally pub)
- Extend clean_email to strip leading punctuation (( and [) so that
  @(john@co.com) resolves correctly; fix suffix computation via pointer
  arithmetic to handle the shifted offset
- Clarify tool_descriptions/en.toml: @prefix is required for mentions,
  bare emails without @ are treated as plain text
- Handle unmatched ** in parse_inline: emit as literal text instead of
  silently producing a bold node with no closing marker

* fix(jira): allow lowercase project keys in issue_key validation

Relax validate_issue_key to accept both PROJ-123 and proj-123, since
some Jira instances use lowercase custom project keys. Path traversal
protection is preserved via alphanumeric + digit-number requirement.

* feat(tools): add tool honesty instructions to system prompt

Prevent AI from fabricating tool results by injecting a CRITICAL:
Tool Honesty section into both channel and CLI/agent system prompts.

Rules: never fabricate or guess tool results, report errors as-is,
and ask the user when unsure if a tool call succeeded.

* style: sort JiraConfig import alphabetically in config/mod.rs

* style(jira): fix strict clippy lints in jira_tool

- Derive Default for LevelOfDetails instead of manual impl
- Use char arrays in trim_start_matches/trim_end_matches
- Allow cast_possible_truncation on search_tickets (usize->u32 bounded by max_results)
- Remove needless borrow on &email

* fix(ci): adapt to upstream autonomy_level additions in channels/mod.rs

- Add missing autonomy_level argument to build_system_prompt_with_mode call in test
- Add missing autonomy_level field in ChannelRuntimeContext test initializer
- Allow large_futures in load_or_init test (Config struct growth from JiraConfig)

* fix(ci): resolve duplicate and missing autonomy_level in test initializers

* fix(ci): use TelegramRecordingChannel in telegram-specific test

The test process_channel_message_executes_tool_calls_instead_of_sending_raw_json
sent messages on channel "telegram" but registered RecordingChannel (name:
"test-channel"), causing the channel lookup to return None and no messages to
be sent.

* fix(jira): prevent panics on short dates, fix dedup bug, normalize base_url

- Add date_prefix() helper to safely slice date strings instead of
  panicking on empty or short strings from the Jira API.
- Replace Vec::dedup() with HashSet-based retain in extract_emails()
  to correctly deduplicate non-adjacent duplicates.
- Strip trailing slashes from base_url during construction to prevent
  double-slash URLs.
- Add tests for date_prefix and non-adjacent email dedup.

---------

Co-authored-by: Anatolii <anatolii@Anatoliis-MacBook.local>
Co-authored-by: Anatolii <anatolii.fesiuk@gmail.com>
2026-03-19 18:14:34 -04:00
argenis de la rosa
8d3d14f1e4 docs(readme): add OpenClaw migration commands to all translated READMEs
Every translated README now includes the migrate section:
  zeroclaw migrate openclaw --dry-run
  zeroclaw migrate openclaw

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 18:09:46 -04:00
Argenis
632d513c2e
fix(agent): preserve native tool-call text in draft updates (#4005)
Preserve assistant text from native tool-call turns in draft updates. Falls back to response_text when parsed_text is empty and native tool calls are present. Relays text through on_delta for draft-capable channels like Telegram.

Supersedes #3976. Closes #3974
2026-03-19 18:07:25 -04:00
Argenis
ade588b4ec
feat(security): inject security policy summary into LLM system prompt (#4002)
Inject a human-readable summary of the active SecurityPolicy into the system prompt Safety section. LLM sees allowed commands, forbidden paths, autonomy level, and rate limits.

Supersedes #3968. Closes #2404
2026-03-19 17:54:12 -04:00
Dmitrii Mukhutdinov
f7636ab81c
fix(observability): handle missing OtelObserver match arms and add all-features CI check (#3981)
Add missing CacheHit/CacheMiss match arms to OtelObserver::record_event. Add check-all-features CI job to prevent --all-features compile regressions.
2026-03-19 17:48:35 -04:00
Martin
d76e4e5a86
feat(channels): add TTS voice reply support to Telegram channel (#3942)
Adds text-to-speech output to the Telegram channel, mirroring the
existing WhatsApp Web voice-chat implementation. When a user sends a
voice note (transcribed via STT), the channel enters voice-chat mode
and subsequent agent replies are synthesised into a Telegram voice note
via the configured TTS provider, in addition to the normal text reply.
Sending a text message exits voice-chat mode.

Implementation details:
- Add `tts_config`, `voice_chats`, and `pending_voice` fields to
  `TelegramChannel`
- Add `with_tts()` builder method, gated on `config.enabled`
- Track voice-chat state: enter on successful STT transcription, exit
  on incoming text message
- `synthesize_and_send_voice()` static method: synthesises audio via
  `TtsManager` and uploads to Telegram using `sendVoice` multipart API
- 10-second debounce in `send()` ensures only the final substantive
  reply in a tool chain gets a voice note (skips JSON, code blocks,
  URLs, short status messages)
- Wire `.with_tts(config.tts.clone())` into both Telegram construction
  sites in the channel factory

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 17:35:22 -04:00
Argenis
d9cea87fae
Merge pull request #3998 from zeroclaw-labs/fix/images-2
fix(docs): absolute banner URLs + web dashboard logo update
2026-03-19 16:47:09 -04:00
argenis de la rosa
6213bcab07 fix(docs): use absolute URLs for banner in all READMEs + update web dashboard logo
- Replace relative docs/assets/zeroclaw-banner.png paths with absolute
  raw.githubusercontent.com URLs in all 31 README files so the banner
  renders correctly regardless of where the README is viewed
- Switch web dashboard favicon and logos from logo.png to zeroclaw-trans.png
- Add zeroclaw-trans.png and zeroclaw-banner.png assets
- Update build.rs to track new dashboard asset
- Fix missing autonomy_level in new test + Box::pin large future

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 16:34:32 -04:00
argenis de la rosa
fe9f58f917 fix(docs): use absolute URLs for banner in all READMEs + update web dashboard logo
- Replace relative docs/assets/zeroclaw-banner.png paths with absolute
  raw.githubusercontent.com URLs in all 31 README files so the banner
  renders correctly regardless of where the README is viewed
- Switch web dashboard favicon and logos from logo.png to zeroclaw-trans.png
- Add zeroclaw-trans.png and zeroclaw-banner.png assets
- Update build.rs to track new dashboard asset

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 16:31:21 -04:00
Argenis
04c7ce4488
Merge pull request #3955 from Alix-007/issue-3952-full-autonomy-channel-prompt
fix(prompt): respect autonomy level in channel prompts
2026-03-19 16:12:13 -04:00
Argenis
5eea95ef2a
Merge pull request #3899 from Alix-007/issue-3842-openrouter-timeout
fix(openrouter): respect provider_timeout_secs on slow responses
2026-03-19 16:06:57 -04:00
argenis de la rosa
af1c37c2fb fix: pass autonomy_level through to prompt builder in wrapper function
build_system_prompt_with_mode was discarding the autonomy_level
parameter, passing None to build_system_prompt_with_mode_and_autonomy.
This caused full-autonomy prompts to still include "ask before acting"
instructions. Convert the level to an AutonomyConfig and pass it through.
2026-03-19 15:56:37 -04:00
argenis de la rosa
e3e4aef21c fix: box-pin large future in config init test to satisfy clippy
Config::load_or_init() produces a future >16KB, triggering
clippy::large_futures. Wrap with Box::pin() as recommended.
2026-03-19 15:44:41 -04:00
argenis de la rosa
a48e335be9 fix: box-pin large future in config init test to satisfy clippy
Config::load_or_init() produces a future >16KB, triggering
clippy::large_futures. Wrap with Box::pin() as recommended.
2026-03-19 15:44:19 -04:00
argenis de la rosa
fba15520dc fix: add missing autonomy_level field to test ChannelRuntimeContext
The full_autonomy_prompt test was missing the autonomy_level field
added to ChannelRuntimeContext by a recently merged PR.
2026-03-19 15:32:23 -04:00
argenis de la rosa
7504da1117 fix: add missing autonomy_level arg to test after merge with master
The refresh-skills test was missing the autonomy_level parameter
added to build_system_prompt_with_mode and ChannelRuntimeContext
by a recently merged PR.
2026-03-19 15:31:18 -04:00
argenis de la rosa
6292cdfe1c Merge origin/master into issue-3952-full-autonomy-channel-prompt
Resolve conflict in src/channels/mod.rs Safety section. Keeps the
PR's AutonomyConfig-based prompt construction (build_system_prompt_with_mode_and_autonomy)
while incorporating master's granular safety rules (conditional
destructive-command and ask-before-acting lines based on autonomy level).
Also fixes missing autonomy_level arg in refresh-skills test and removes
duplicate autonomy.level args from auto-merged call sites.
2026-03-19 15:27:43 -04:00
argenis de la rosa
693661b564 Merge origin/master into issue-3842-openrouter-timeout
Resolve merge conflicts keeping the PR's changes:
- timeout_secs parameter in OpenRouterProvider::new()
- read_response_body + parse_response_body pattern
- OPENROUTER_CONNECT_TIMEOUT_SECS and DEFAULT_OPENROUTER_TIMEOUT_SECS constants
- Update master's new tests to use two-arg new() signature
2026-03-19 15:19:32 -04:00
Argenis
4daec8c0df
Merge pull request #3288 from Alix-007/fix-2400-block-config-self-mutation
fix(security): block agent writes to runtime config state
2026-03-19 15:16:48 -04:00
Argenis
3cf609cb38
Merge pull request #3959 from Alix-007/issue-3706-read-skill
feat(skills): add read_skill for compact mode
2026-03-19 15:16:42 -04:00
Argenis
e1b7d29f1b
Merge pull request #3940 from Alix-007/issue-3845-refresh-skills-on-new
channel: refresh available skills after /new
2026-03-19 15:16:35 -04:00
Argenis
fef69a4128
Merge pull request #3787 from Alix-007/issue-3774-path-normalization
fix(tools): normalize workspace-prefixed paths
2026-03-19 15:16:17 -04:00
Argenis
643b683c39
Merge pull request #3954 from Alix-007/issue-2901-zai-tool-stream
fix(zai): enable tool_stream for tool-capable requests
2026-03-19 15:15:59 -04:00
Argenis
74c93b0ebc
Merge pull request #3943 from Alix-007/issue-3902-claude-code-test-race
test(claude_code): isolate echo script per test run
2026-03-19 15:15:52 -04:00
Argenis
a7bf69d279
Merge pull request #3356 from Alix-007/fix/config-load-initialized-state
fix(config): report existing configs as initialized on load
2026-03-19 15:15:47 -04:00
Argenis
f68af9a4c7
Merge pull request #3994 from zeroclaw-labs/fix/images
fix(docs): update banner image and add Instagram to all READMEs
2026-03-19 15:14:02 -04:00
Argenis
cca3d66955
fix: add Node.js build dependency to Homebrew formula template (#3996)
The Homebrew publish workflow downloads a source tarball but never
ensures Node.js is available during the build. Without it, build.rs
cannot run npm to compile the web frontend, so Homebrew-installed
ZeroClaw ships without the web dashboard.

Add `depends_on "node" => :build` to the formula by inserting it
after the existing `depends_on "rust" => :build` line. This lets
build.rs detect npm and automatically run `npm ci && npm run build`
to produce the web/dist assets.

Fixes #3991
2026-03-19 15:13:56 -04:00
Argenis
95bf229225
fix(config): enable compact_context by default (#3995)
* fix: change compact_context default to true

Local LLMs with limited context windows immediately run out of context
when compact_context defaults to false. The system prompt alone can
consume 25K+ tokens, exceeding even 55K context windows with history.

Setting compact_context=true by default limits system prompt injection
to 6000 chars and RAG results to 2 chunks, making the agent usable
with smaller models out of the box.

Fixes #3987

* docs: update compact_context default to true in config reference

Update all locale variants (en, zh-CN, vi) to reflect the new default.

* test: update tests to expect compact_context default of true

Update assertions in schema.rs unit tests and config_persistence.rs
component tests to match the new default value.
2026-03-19 15:13:14 -04:00
argenis de la rosa
ebe19147f2 fix(docs): update banner image and add Instagram badge to all READMEs
- Replace zeroclaw.png (broken/outdated) with zeroclaw-banner.png
  across all 30 translated README files
- Add Instagram social badge (@therealzeroclaw) to all translations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 14:57:28 -04:00
Argenis
e387f58579
Merge pull request #3951 from Alix-007/issue-3946-release-memory-postgres
build(release): include memory-postgres in published artifacts
2026-03-19 14:42:15 -04:00
Argenis
fa06798926
fix(cron): persist allowed_tools for agent jobs (#3993)
Persist allowed_tools in cron_jobs table, threading it through CLI add/update and cron_add/cron_update tool APIs. Add regression coverage for store, tool, and CLI roundtrip paths.

Fixups over original PR #3929: add allowed_tools to all_overdue_jobs SELECT (merge gap), resolve merge conflicts.

Closes #3920
Supersedes #3929
2026-03-19 14:37:55 -04:00
Alix-007
a4cd4b287e
feat(slack): add thread_replies channel option (#3930)
Add a thread_replies option to Slack channel config (default true). When false, replies go to channel root instead of the originating thread.

Closes #3888
2026-03-19 14:32:02 -04:00
argenis de la rosa
3ce7f2345e merge: resolve conflicts with master, include channel-lark in RELEASE_CARGO_FEATURES
Add channel-lark (merged to master separately) to RELEASE_CARGO_FEATURES
env var. Keep the DRY env-var approach and remove stale Docker build-args.
2026-03-19 14:24:30 -04:00
Argenis
eb9dfc04b4
fix(anthropic): always apply cache_control to system prompts (#3990)
* fix: always use Blocks format for system prompts with cache_control

System prompts under 3KB were wrapped in SystemPrompt::String which
cannot carry cache_control headers, resulting in 0% cache hit rate
on Haiku 4.5. Always use SystemPrompt::Blocks with ephemeral
cache_control regardless of prompt size.

Fixes #3977

* fix: lower conversation caching threshold from >4 to >1 messages

The previous threshold of >4 non-system messages was too restrictive,
delaying cache benefits until 5+ turns. Lower to >1 so caching kicks
in after the first user+assistant exchange.

Fixes #3977

* test: update anthropic cache tests for new thresholds and Blocks format

- convert_messages_small_system_prompt now expects Blocks with
  cache_control instead of String variant
- should_cache_conversation tests updated for >1 threshold
- backward_compatibility test replaced with blocks-system test
2026-03-19 14:21:45 -04:00
Argenis
9cc74a2698
fix(security): wire sandbox into shell command execution (#3989)
* fix: add sandbox field to ShellTool struct

Add `sandbox: Arc<dyn Sandbox>` field to `ShellTool` and a
`new_with_sandbox()` constructor so callers can inject the configured
sandbox backend. The existing `new()` constructor defaults to
`NoopSandbox` for backward compatibility.

Ref: #3983

* fix: apply sandbox wrapping in ShellTool::execute()

Call `self.sandbox.wrap_command()` on the underlying std::process::Command
(via `as_std_mut()`) after building the shell command and before clearing
the environment. This ensures every shell command passes through the
configured sandbox backend before execution.

Ref: #3983

* fix: wire up sandbox creation at ShellTool callsites

In `all_tools_with_runtime()`, create a sandbox from
`root_config.security` via `create_sandbox()` and pass it to
`ShellTool::new_with_sandbox()`. The `default_tools_with_runtime()`
path retains `ShellTool::new()` which defaults to `NoopSandbox`.

Ref: #3983

* test: add sandbox integration tests for ShellTool

Verify that ShellTool can be constructed with a sandbox via
`new_with_sandbox()`, that NoopSandbox leaves commands unmodified,
and that command execution works end-to-end with a sandbox attached.

Ref: #3983
2026-03-19 14:21:42 -04:00
Argenis
133dc46b41
fix(web): restore accidentally deleted logo file (#3988)
* fix: restore accidentally deleted logo file

The logo.png was removed in commit 48bdbde2 but is still referenced
by the web UI components. Restore it from git history.

Fixes #3984

* fix: copy logo to web/dist for rust-embed

The Rust binary embeds files from web/dist/ via rust-embed, so the
logo must also be present there to be served without a rebuild.

Fixes #3984
2026-03-19 14:21:15 -04:00
Argenis
ad03605cad
Merge pull request #3949 from Alix-007/issue-3817-cron-delivery-context
fix: default cron delivery to the active channel context
2026-03-19 14:20:59 -04:00
Argenis
ae1acf9b9c
Merge pull request #3950 from Alix-007/issue-3466-homebrew-service-workspace
fix(onboard): warn when Homebrew services use another workspace
2026-03-19 14:20:56 -04:00
Alix-007
cc91f22e9b
fix(skills): narrow shell shebang detection (#3944)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-19 14:10:51 -04:00
Martin
030f5fe288
fix(install): fix guided installer in LXC/container environments (#3947)
Replace subshell-based /dev/stdin probing in guided_input_stream with a
file-descriptor approach (guided_open_input) that works reliably in LXC
containers accessed over SSH.

The previous implementation probed /dev/stdin and /proc/self/fd/0 via
subshells before falling back to /dev/tty. In LXC containers these
probes fail even when FD 0 is perfectly usable, causing the guided
installer to exit with "requires an interactive terminal".

The fix:
- When stdin is a terminal (-t 0), assign GUIDED_FD=0 directly without
  any subshell probing — trusting the kernel's own tty check
- Otherwise, open /dev/tty as an explicit fd (exec {GUIDED_FD}</dev/tty)
- guided_read uses `read -u "$GUIDED_FD"` instead of `< "$file_path"`
- Add echo after silent reads (password prompts) for correct line handling

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 14:10:48 -04:00
Giulio V
c47bbcc972
fix(cron): add startup catch-up and drop login shell flag (#3948)
* fix(cron): add startup catch-up and drop login shell flag

Problems:
1. When ZeroClaw started after downtime (late boot, daemon restart),
   overdue jobs were picked up via `due_jobs()` but limited by
   `max_tasks` per poll cycle — with many overdue jobs, catch-up
   could take many cycles.
2. Cron shell jobs used `sh -lc` (login shell), which loads the
   full user profile on every execution — slow and may cause
   unexpected side effects.

Fixes:
- Add `all_overdue_jobs()` store query without `max_tasks` limit
- Add `catch_up_overdue_jobs()` startup phase that runs ALL overdue
  jobs once before entering the normal polling loop
- Extract `build_cron_shell_command()` helper using `sh -c` (non-login)
- Add structured tracing for catch-up progress
- Add tests for all new functions

* feat(cron): make catch-up configurable via API and control panel

Add `catch_up_on_startup` boolean to `[cron]` config (default: true).
When enabled, the scheduler runs all overdue jobs at startup before
entering the normal polling loop. Users can toggle this from:

- The Cron page toggle switch in the control panel
- PATCH /api/cron/settings { "catch_up_on_startup": false }
- The `[cron]` section of the TOML config editor

Also adds GET /api/cron/settings endpoint to read cron subsystem
settings without parsing the full config.

* fix(config): add catch_up_on_startup to CronConfig test constructors

The CI Lint job failed because the `cron_config_serde_roundtrip` test
constructs CronConfig directly and was missing the new field.
2026-03-19 14:10:37 -04:00
Argenis
72fbb22059
Merge pull request #3985 from zeroclaw-labs/fix/aur-ssh-publish
fix(ci): harden AUR SSH key setup and add diagnostics
2026-03-19 13:44:01 -04:00
argenis de la rosa
cbb3d9ae92 fix(ci): harden AUR SSH key setup and add diagnostics (#3952)
The AUR publish step fails with "Permission denied (publickey)".
Root cause is likely key formatting (Windows line endings from
GitHub secrets UI) or missing public key registration on AUR.

Changes:
- Normalize line endings (strip \r) when writing SSH key
- Set correct permissions on ~/.ssh (700) and ~/.ssh/config (600)
- Validate key with ssh-keygen before attempting clone
- Add SSH connectivity test for clearer error diagnostics

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 13:28:58 -04:00
Argenis
8d1eebad4d
Merge pull request #3980 from zeroclaw-labs/version-bump-0.5.1
chore: bump version to 0.5.1
2026-03-19 09:56:36 -04:00
argenis de la rosa
0fdd1ad490 chore: bump version to 0.5.1
Release highlights:
- Autonomy enforcement in gateway and channel paths (#3952)
- conversational_ai startup warning for unimplemented config (#3958)
- Heartbeat default interval 30→5min (#3938)
- Provider timeout and error handling improvements (#3973, #3978)
- Docker/CI postgres and Lark feature fixes (#3971, #3933)
- Tool path resolution fix (#3937)
- OTP config fix (#3936)
- README: Instagram badge + banner image (#3979)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 09:45:32 -04:00
Argenis
86bc60fcd1
Merge pull request #3979 from zeroclaw-labs/readme
docs: add Instagram badge and banner to README
2026-03-19 09:42:00 -04:00
argenis de la rosa
4837e1fe73 docs(readme): add Instagram social badge and switch to banner image
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 09:30:54 -04:00
Argenis
985977ae0c
fix(providers): exempt tool schema errors from non-retryable classification (#3978)
* fix: exempt tool schema validation errors from non-retryable classification

Groq returns 400 "tool call validation failed" which was classified as
non-retryable by is_non_retryable(), preventing the provider-level
fallback in compatible.rs from executing. Add is_tool_schema_error()
to detect these errors and return false from is_non_retryable(), allowing
the retry loop to pass control back to the provider's built-in fallback.

Fixes #3757

* test: add unit tests for tool schema error detection in reliable.rs

Verify is_tool_schema_error detects Groq-style validation failures and
that is_non_retryable returns false for tool schema 400s while still
returning true for other 400 errors like invalid API key.

* fix: escape format braces in test string literals for cargo check

The anyhow::anyhow! macro interprets curly braces as format
placeholders. Use explicit format argument to pass JSON-containing
strings in tests.
2026-03-19 09:25:49 -04:00
Argenis
72b10f12dd
Merge pull request #3975 from zeroclaw-labs/agent-loop
fix: enforce autonomy level in gateway/channel paths + conversational_ai warning
2026-03-19 09:20:21 -04:00
Argenis
3239f5ea07
fix(ci): include channel-lark feature in precompiled release binaries (#3933) (#3972)
Add channel-lark to the cargo --features flag in all release and
cross-platform build workflows, and to the Docker build-args.  This
gives users Feishu/Lark channel support out of the box without needing
to compile from source.

The channel-lark feature depends only on dep:prost (pure Rust protobuf),
so it is safe to enable on all platforms (Linux, macOS, Windows, Android).
2026-03-19 09:15:10 -04:00
Argenis
3353729b01
fix(openrouter): respect provider_timeout_secs and improve error messages (#3973)
* fix(openrouter): wire provider_timeout_secs through factory

Apply the configured provider_timeout_secs to OpenRouterProvider
in the provider factory, matching the pattern used for compatible
providers.

* fix(openrouter): add timeout_secs field to OpenRouterProvider

Add a configurable timeout_secs field (default 120s) and a
with_timeout_secs() builder method so the HTTP client timeout
can be overridden via provider config instead of being hardcoded.

* refactor(openrouter): improve response decode error messages

Read the response body as text first, then parse with
serde_json::from_str so that decode failures include a truncated
snippet of the raw body for easier debugging.

* test(openrouter): add timeout_secs configuration tests

Verify that the default timeout is 120s and that with_timeout_secs
correctly overrides it.

* style: run rustfmt on openrouter.rs
2026-03-19 09:12:14 -04:00
argenis de la rosa
b6c2930a70 fix(agent): enforce autonomy level in gateway and channel paths (#3952)
- Channel tool filtering (`non_cli_excluded_tools`) now respects
  `autonomy.level = "full"` — full-autonomy agents keep all tools
  available regardless of channel.
- Gateway `process_message` now creates and passes an `ApprovalManager`
  to `agent_turn`, so `ReadOnly`/`Supervised` policies are enforced
  instead of silently skipped.
- Gateway also applies `non_cli_excluded_tools` filtering with the same
  full-autonomy bypass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:56:45 -04:00
argenis de la rosa
181cafff70 fix(config): warn when conversational_ai.enabled is set (#3958)
The conversational_ai config section is parsed but not yet consumed by
any runtime code. Emit a startup warning so users know the setting is
ignored, and update the doc comment to mark it as reserved for future use.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:56:38 -04:00
Argenis
d87f387111
fix(docker): add memory-postgres feature to Docker and CI builds (#3971)
The GHCR image v0.5.0 fails to start when users configure the postgres
memory backend because the binary was compiled without the
memory-postgres cargo feature. Add it to all build configurations:
Dockerfiles (default ARG), release workflows (cargo build --features),
and Docker push steps (ZEROCLAW_CARGO_FEATURES build-arg).

Fixes #3946
2026-03-19 08:51:20 -04:00
Argenis
7068079028
fix: make channel system prompt respect autonomy.level = full (#3952) (#3970)
When autonomy.level is set to "full", the channel/web system prompt no
longer includes instructions telling the model to ask for permission
before executing tools. Previously these safety lines were hardcoded
regardless of autonomy config, causing the LLM to simulate approval
dialogs in channel and web-interface modes even though the
ApprovalManager correctly allowed execution.

The fix adds an autonomy_level parameter to build_system_prompt_with_mode
and conditionally omits the "ask before acting" instructions when the
level is Full. Core safety rules (no data exfiltration, prefer trash)
are always included.
2026-03-19 08:48:38 -04:00
Argenis
a9b511e6ec
fix: omit experimental conversational_ai section from default config (#3969)
The [conversational_ai] config section was serialized into every
freshly-generated config.toml despite the feature being experimental
and not yet wired into the agent runtime. This confused new users who
found an undocumented section in their config.

Add skip_serializing_if = "ConversationalAiConfig::is_disabled" so the
section is only written when a user has explicitly enabled it. Existing
configs that already contain the section continue to deserialize
correctly via #[serde(default)].

Fixes #3958
2026-03-19 08:48:33 -04:00
Argenis
65cb4fe099
feat(heartbeat): default interval 30→5min + prune heartbeat from auto-save (#3938)
Lower the default heartbeat interval to 5 minutes to match the renewable
partial wake-lock cadence. Add `[heartbeat task` to the memory auto-save
skip filter so heartbeat prompts (both Phase 1 decision and Phase 2 task
execution) do not pollute persistent conversation memory.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 08:17:08 -04:00
Alix-007
1bbc159e0e style(zai): satisfy rustfmt in tool_stream request 2026-03-19 19:15:58 +08:00
Alix-007
0d28cca843 build(release): drop stale docker feature args 2026-03-19 19:14:07 +08:00
Alix-007
b1d20d38f9 feat(skills): add read_skill for compact mode 2026-03-19 17:53:40 +08:00
Alix-007
2bad6678ec fix(prompt): respect autonomy level in channel prompts 2026-03-19 16:54:51 +08:00
Alix-007
b6fe054915 fix(zai): send tool_stream for tool-capable requests 2026-03-19 16:32:06 +08:00
Alix-007
7ddd2aace3 build(release): ship postgres-capable release artifacts 2026-03-19 15:37:45 +08:00
Alix-007
c7b3b762e0 fix(onboard): warn when Homebrew service uses another workspace 2026-03-19 15:30:40 +08:00
Alix-007
4b00e8ba75 fix(cron): default channel delivery to active reply target 2026-03-19 15:11:47 +08:00
Alix-007
dd462a2b04 test(claude_code): isolate echo script per test run 2026-03-19 13:47:08 +08:00
Alix-007
2d68b880c2 Fix /new regression test lint scope 2026-03-19 12:19:31 +08:00
Alix-007
3a672a2ede Refresh skills after new channel sessions 2026-03-19 12:07:08 +08:00
Argenis
2e48cbf7c3
fix(tools): use resolve_tool_path for consistent path resolution (#3937)
Replace workspace_dir.join(path) with resolve_tool_path(path) in
file_write, file_edit, and pdf_read tools to correctly handle absolute
paths within the workspace directory, preventing path doubling.

Closes #3774
2026-03-18 23:51:35 -04:00
Argenis
e4910705d1
fix(config): add missing challenge_max_attempts field to OtpConfig (#3919) (#3936)
The OtpConfig struct uses deny_unknown_fields but was missing the
challenge_max_attempts field, causing zeroclaw config schema to fail
with a TOML parse error when the field appeared in config files.

Add challenge_max_attempts as an Option<u32>-style field with a default
of 3 and a validation check ensuring it is greater than 0.
2026-03-18 23:48:53 -04:00
Argenis
1b664143c2
fix: move misplaced include key from [lib] to [package] in Cargo.toml (#3935)
The `include` array was placed after `[lib]` without a section header,
causing Cargo to parse it as `lib.include` — an invalid manifest key.
This triggered a warning during builds and caused lockfile mismatch
errors when building with --locked in Docker (Dockerfile.debian).

Move the `include` key to the `[package]` section where it belongs and
regenerate Cargo.lock to stay in sync.

Fixes #3925
2026-03-18 23:48:50 -04:00
Argenis
950f996812
Merge pull request #3926 from zeroclaw-labs/fix/pairing-code-terminal-display
fix(gateway): move pairing code below dashboard URL in terminal
2026-03-18 20:34:08 -04:00
argenis de la rosa
b74c5cfda8 fix(gateway): move pairing code below dashboard URL in terminal banner
Repositions the one-time pairing code display to appear directly below
the dashboard URL for cleaner terminal output, and removes the duplicate
display that was showing at the bottom of the route list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 19:50:26 -04:00
Argenis
02688eb124
feat(skills): autonomous skill creation from multi-step tasks (#3916)
Add SkillCreator module that persists successful multi-step task
executions as reusable SKILL.toml definitions under the workspace
skills directory.

- SkillCreationConfig in [skills.skill_creation] (disabled by default)
- Slug validation, TOML generation, embedding-based deduplication
- LRU eviction when max_skills limit is reached
- Agent loop integration post-success
- Gated behind `skill-creation` compile-time feature flag

Closes #3825.
2026-03-18 17:15:02 -04:00
Argenis
2c92cf913b
fix: ensure SOUL.md and IDENTITY.md exist in non-tty sessions (#3915)
When the workspace is created outside of `zeroclaw onboard` (e.g., via
cron, daemon, or `< /dev/null`), SOUL.md and IDENTITY.md were never
scaffolded, causing the agent to activate without identity files.

Added `ensure_bootstrap_files()` in `Config::load_or_init()` that
idempotently creates default SOUL.md and IDENTITY.md if missing.

Closes #3819.
2026-03-18 17:12:44 -04:00
Argenis
3c117d2d7b
feat(delegate): make sub-agent timeouts configurable via config.toml (#3909)
Add `timeout_secs` and `agentic_timeout_secs` fields to
`DelegateAgentConfig` so users can tune per-agent timeouts instead
of relying on the hardcoded 120s / 300s defaults.

Validation rejects values of 0 or above 3600s, matching the pattern
used by MCP timeout validation.

Closes #3898
2026-03-18 17:07:03 -04:00
Argenis
1f7c3c99e4
feat(i18n): externalize tool descriptions for translation (#3912)
Add a locale-aware tool description system that loads translations from
TOML files in tool_descriptions/. This enables non-English users to see
tool descriptions in their language.

- Add src/i18n.rs module with ToolDescriptions loader, locale detection
  (ZEROCLAW_LOCALE, LANG, LC_ALL env vars), and English fallback chain
- Add locale config field to Config struct for explicit locale override
- Create tool_descriptions/en.toml with all 47 tool descriptions
- Create tool_descriptions/zh-CN.toml with Chinese translations
- Integrate with ToolsSection::build() and build_tool_instructions()
  to resolve descriptions from locale files before hardcoded fallback
- Add PromptContext.tool_descriptions field for prompt-time resolution
- Add AgentBuilder.tool_descriptions() setter for Agent construction
- Include tool_descriptions/ in Cargo.toml package include list
- Add 8 unit tests covering locale loading, fallback chains, env
  detection, and config override

Closes #3901
2026-03-18 17:01:39 -04:00
Argenis
92940a3d16
Merge pull request #3904 from zeroclaw-labs/fix/install-stale-build-cache
fix(install): clean stale build cache on upgrade
2026-03-18 15:49:10 -04:00
Argenis
d77c616905
fix: reset tool call dedup cache each iteration to prevent loops (#3910)
The seen_tool_signatures HashSet was initialized outside the iteration loop, causing cross-iteration deduplication of legitimate tool calls. This triggered a self-correction spiral where the agent repeatedly attempted skipped calls until hitting max_iterations.

Moving the HashSet inside the loop ensures deduplication only applies within a single iteration, as originally intended.

Fixes #3798
2026-03-18 15:45:10 -04:00
Argenis
ac12470c27
fix(channels): respect ack_reactions config for Telegram channel (#3834) (#3913)
The Telegram channel was ignoring the ack_reactions setting because it
sent setMessageReaction API calls directly in its polling loop, bypassing
the top-level channels_config.ack_reactions check.

- Add optional ack_reactions field to TelegramConfig so it can be set
  under [channels_config.telegram] without "unknown key" warnings
- Add ack_reactions field and with_ack_reactions() builder to
  TelegramChannel, defaulting to true
- Guard try_add_ack_reaction_nonblocking() behind self.ack_reactions
- Wire channel-level override with fallback to top-level default
- Add config deserialization and channel behavior tests
2026-03-18 15:40:31 -04:00
Nim G
a322e01b5f feat(channel): add interrupt_on_new_message support for Mattermost 2026-03-18 16:40:25 -03:00
Argenis
c5a1148ae9
fix: ensure install.sh creates config.toml and workspace files (#3852) (#3906)
When running install.sh with --docker --skip-build --prefer-prebuilt
(especially with podman via ZEROCLAW_CONTAINER_CLI), the script would
skip creating config.toml and workspace scaffold files because these
were only generated by the onboard wizard, which requires an interactive
terminal or explicit API key.

Add ensure_default_config_and_workspace() that creates a minimal
config.toml (with provider, workspace_dir, and optional api_key/model)
and seeds the workspace directory structure (sessions/, memory/, state/,
cron/, skills/ subdirectories plus IDENTITY.md, USER.md, MEMORY.md,
AGENTS.md, and SOUL.md) when they don't already exist.

This function is called:
- At the end of run_docker_bootstrap(), so config and workspace files
  exist on the host volume regardless of whether onboard ran inside the
  container.
- After the [3/3] Finalizing setup onboard block in the native install
  path, covering --skip-build, --prefer-prebuilt, --skip-onboard, and
  cases where the binary wasn't found.

The function is idempotent: it only writes files that don't already
exist, so it never overwrites config or workspace files created by a
successful onboard run.

Also makes the container onboard failure non-fatal (|| true) so that
the fallback config generation always runs.

Fixes #3852
2026-03-18 15:15:47 -04:00
Argenis
440ad6e5b5
fix: handle double-serialized schedule in cron_add and cron_update (#3860) (#3905)
When LLMs pass the schedule parameter as a JSON string instead of a JSON
object, serde fails with "invalid type: string, expected internally
tagged enum Schedule". Add a deserialize_maybe_stringified helper that
detects stringified JSON values and parses the inner string before
deserializing, providing backward compatibility for both object and
string representations.

Fixes #3860
2026-03-18 15:15:22 -04:00
Argenis
2e41cb56f6
fix: enable vision support for llamacpp provider (#3907)
The llamacpp provider was instantiated with vision disabled by default, causing image transfers from Telegram to fail. Use new_with_vision() with vision enabled, matching the behavior of other compatible providers.

Fixes #3802
2026-03-18 15:14:57 -04:00
Argenis
2227fadb66
fix(tools): include tool_search instruction in deferred tools system prompt (#3826) (#3914)
The deferred MCP tools section in the system prompt only listed tool
names inside <available-deferred-tools> tags without any instruction
telling the LLM to call tool_search to activate them. In daemon and
Telegram mode, where conversations are shorter and less guided, the
LLM never discovered it should call tool_search, so deferred tools
were effectively unavailable.

Add a "## Deferred Tools" heading with explicit instructions that
the LLM MUST call tool_search before using any listed tool. This
ensures the LLM knows to activate deferred tools in all modes
(CLI, daemon, Telegram) consistently.

Also add tests covering:
- Instruction presence in the deferred section
- Multiple-server deferred tool search
- Cross-server keyword search ranking
- Activation persistence across multiple tool_search calls
- Idempotent re-activation
2026-03-18 15:13:58 -04:00
Argenis
162efbb49c
fix(providers): recover from context window errors by truncating history (#3908)
When a provider returns a context-size-exceeded error, truncate the
oldest non-system messages from conversation history and retry instead
of immediately bailing out. This enables local models with small
context windows (llamafile, llama.cpp) to work by automatically
fitting the conversation within available context.

Closes #3894
2026-03-18 14:54:56 -04:00
argenis de la rosa
3c8b6d219a fix(test): use PID-scoped script path to prevent ETXTBSY in CI
The echo_provider() test helper writes a fake_claude.sh script to
a shared temp directory. When lib and bin test binaries run in
parallel (separate processes, separate OnceLock statics), one
process can overwrite the script while the other is executing it,
causing "Text file busy" (ETXTBSY). Scope the filename with PID
to isolate each test process.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 14:33:04 -04:00
Vasanth
58b98c59a8
feat(agent): add runtime model switching via model_switch tool (#3853)
Add support for switching AI models at runtime during a conversation.
The model_switch tool allows users to:
- Get current model state
- List available providers
- List models for a provider
- Switch to a different model

The switch takes effect immediately for the current conversation by
recreating the provider with the new model after tool execution.

Risk: Medium - internal state changes and provider recreation
2026-03-18 14:17:52 -04:00
argenis de la rosa
d72e9379f7 fix(install): clean stale build cache on upgrade
When upgrading an existing installation, stale build artifacts in
target/release/build/ can cause compilation failures (e.g.
libsqlite3-sys bindgen.rs not found). Run cargo clean --release
before building when an upgrade is detected.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 14:15:59 -04:00
Alix-007
e3e9db5210 fix(openrouter): respect provider timeout config 2026-03-19 01:36:57 +08:00
Nim G
ad8a209bd7 feat(channel): add /stop command to cancel in-flight tasks
Adds an explicit /stop slash command that allows users on any non-CLI
channel (Matrix, Telegram, Discord, Slack, etc.) to cancel an agent
task that is currently running.

Changes:
- is_stop_command(): new helper that detects /stop (case-insensitive,
  optional @botname suffix), not gated on channel type
- /stop fast path in run_message_dispatch_loop: intercepts /stop before
  semaphore acquisition so the target task is never replaced in the store;
  fires CancellationToken on the running task; sends reply via tokio::spawn
  using the established two-step channel lookup pattern
- register_in_flight separated from interrupt_enabled: all non-CLI tasks
  now enter the in_flight_by_sender store, enabling /stop to reach them;
  auto-cancel-on-new-message remains gated on interrupt_enabled (Telegram/
  Slack only) — this is a deliberate broadening, not a side effect

Deferred to follow-up (feat/matrix-interrupt-on-new-message):
- interrupt_on_new_message config field for Matrix
- thread-aware interruption_scope_key (requires per-channel thread_ts
  semantics analysis; Slack always sets thread_ts, Matrix only for replies)

Supersedes #2855

Tests: 7 new unit tests for is_stop_command; all 4075 tests pass.
2026-03-18 12:32:20 -04:00
Nim G
571ccd67cb feat(channel): add /stop command to cancel in-flight tasks
Adds an explicit /stop slash command that allows users on any non-CLI
channel (Matrix, Telegram, Discord, Slack, etc.) to cancel an agent
task that is currently running.

Changes:
- is_stop_command(): new helper that detects /stop (case-insensitive,
  optional @botname suffix), not gated on channel type
- /stop fast path in run_message_dispatch_loop: intercepts /stop before
  semaphore acquisition so the target task is never replaced in the store;
  fires CancellationToken on the running task; sends reply via tokio::spawn
  using the established two-step channel lookup pattern
- register_in_flight separated from interrupt_enabled: all non-CLI tasks
  now enter the in_flight_by_sender store, enabling /stop to reach them;
  auto-cancel-on-new-message remains gated on interrupt_enabled (Telegram/
  Slack only) — this is a deliberate broadening, not a side effect

Deferred to follow-up (feat/matrix-interrupt-on-new-message):
- interrupt_on_new_message config field for Matrix
- thread-aware interruption_scope_key (requires per-channel thread_ts
  semantics analysis; Slack always sets thread_ts, Matrix only for replies)

Supersedes #2855

Tests: 7 new unit tests for is_stop_command; all 4075 tests pass.
2026-03-18 13:29:40 -03:00
Argenis
959b933841
fix(providers): preserve conversation context in Claude Code CLI (#3885)
* fix(providers): preserve conversation context in Claude Code CLI provider

Override chat_with_history to format full multi-turn conversation
history into a single prompt for the claude CLI, instead of only
forwarding the last user message.

Closes #3878

* fix(providers): fix ETXTBSY race in claude_code tests

Use OnceLock to initialize the fake_claude.sh test script exactly
once, preventing "Text file busy" errors when parallel tests
concurrently write and execute the same script file.
2026-03-18 11:13:42 -04:00
Argenis
caf7c7194f
fix(cron): prevent one-shot jobs from re-executing indefinitely (#3886)
Handle Schedule::At jobs in reschedule_after_run by disabling them
instead of rescheduling to a past timestamp. Also add a fallback in
persist_job_result to disable one-shot jobs if removal fails.

Closes #3868
2026-03-18 11:03:44 -04:00
Argenis
ee7d542da6
fix: pass route-specific api_key through channel provider creation (#3881)
When using Channel mode with dynamic classification and routing, the
route-specific `api_key` from `[[model_routes]]` was silently dropped.
The system always fell back to the global `api_key`, causing 401 errors
when routing to `custom:` providers that require distinct credentials.

Root cause: `ChannelRouteSelection` only stored provider + model, and
`get_or_create_provider` always used `ctx.api_key` (the global key).

Changes:
- Add `api_key` field to `ChannelRouteSelection` so the matched route's
  credential survives through to provider creation.
- Update `get_or_create_provider` to accept and prefer a route-specific
  `api_key` over the global key.
- Use a composite cache key (provider name + api_key hash) to prevent
  cache poisoning when multiple routes target the same provider with
  different credentials.
- Wire the route api_key through query classification matching and the
  `/model` (SetModel) command path.

Fixes #3838
2026-03-18 10:06:06 -04:00
Argenis
d51ec4b43f
fix(docker): remove COPY commands for dockerignored paths (#3880)
The Dockerfile and Dockerfile.debian COPY `firmware/`, `crates/robot-kit/`,
and `crates/robot-kit/Cargo.toml`, but `.dockerignore` excludes both
`firmware/` and `crates/robot-kit/`, causing COPY failures during build.

Since these are hardware-only paths not needed for the Docker runtime:
- Remove COPY commands for `firmware/` and `crates/robot-kit/`
- Remove dummy `crates/robot-kit/src` creation in dep-caching steps
- Use sed to strip `crates/robot-kit` from workspace members in the
  copied Cargo.toml so Cargo doesn't look for the missing manifest

Fixes #3836
2026-03-18 10:06:03 -04:00
Alix-007
d81eeefe52 fix(tools): normalize workspace-prefixed paths 2026-03-18 10:35:25 +08:00
Argenis
3d92b2a652
Merge pull request #3833 from zeroclaw-labs/fix/pairing-code-display
fix(web): display pairing code in dashboard
2026-03-17 22:16:50 -04:00
argenis de la rosa
3255051426 fix(web): display pairing code in dashboard instead of terminal-only
Fetch the current pairing code from GET /admin/paircode (localhost-only)
and display it in both the initial PairingDialog and the /pairing
management page. Users no longer need to check the terminal to find
the 6-digit code — it appears directly in the web UI.

Falls back gracefully when the admin endpoint is unreachable (e.g.
non-localhost access), showing the original "check your terminal" prompt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 22:01:03 -04:00
Argenis
dcaf330848
Merge pull request #3828 from zeroclaw-labs/fix/readme
fix(readme): update social links across all locales
2026-03-17 19:15:29 -04:00
argenis de la rosa
7f8de5cb17 fix(readme): update Facebook group URL and add Discord, TikTok, RedNote badges
Update Facebook group link from /groups/zeroclaw to /groups/zeroclawlabs
across all 31 README locale files. Add Discord, TikTok, and RedNote
social badges to the badge section of all READMEs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 19:02:53 -04:00
Argenis
1341cfb296
Merge pull request #3827 from zeroclaw-labs/feat/plugin-wasm
feat(plugins): add WASM plugin system with Extism runtime
2026-03-17 18:51:41 -04:00
argenis de la rosa
9da620a5aa fix(ci): add cargo-audit ignore for wasmtime vulns from extism
cargo-audit uses .cargo/audit.toml (not deny.toml) for its ignore
list. These 3 wasmtime advisories are transitive via extism 1.13.0
with no upstream fix available. Plugin system is feature-gated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:38:02 -04:00
argenis de la rosa
d016e6b1a0 fix(ci): ignore wasmtime vulns from extism 1.13.0 (no upstream fix)
RUSTSEC-2026-0006, RUSTSEC-2026-0020, RUSTSEC-2026-0021 are all in
wasmtime 37.x pinned by extism. No newer extism release available.
Plugin system is behind a feature flag to limit exposure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:35:08 -04:00
argenis de la rosa
9b6360ad71 fix(ci): ignore unmaintained transitive deps from extism and indicatif
Add cargo-deny ignore entries for RUSTSEC-2024-0388 (derivative),
RUSTSEC-2025-0057 (fxhash), and RUSTSEC-2025-0119 (number_prefix).
All are transitive dependencies we cannot directly control.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:33:03 -04:00
argenis de la rosa
dc50ca9171 fix(plugins): update lockfile and fix ws.rs formatting
Sync Cargo.lock with new Extism/WASM plugin dependencies and apply
rustfmt line-wrap fix in gateway WebSocket handler.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:30:41 -04:00
argenis de la rosa
67edd2bc60 fix(plugins): integrate WASM tools into registry, add gateway routes and tests
- Wire WASM plugin tools into all_tools_with_runtime() behind
  cfg(feature = "plugins-wasm"), discovering and registering tool-capable
  plugins from the configured plugins directory at startup.
- Add /api/plugins gateway endpoint (cfg-gated) for listing plugin status.
- Add mod plugins declaration to main.rs binary crate so crate::plugins
  resolves when the feature is enabled.
- Add unit tests for PluginHost: empty dir, manifest discovery, capability
  filtering, lookup, and removal.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:10:24 -04:00
argenis de la rosa
dcf66175e4 feat(plugins): add example weather plugin and manifest
Add a standalone example plugin demonstrating the WASM plugin interface:
- example-plugin/Cargo.toml: cdylib crate targeting wasm32-wasip1
- example-plugin/src/lib.rs: mock weather tool using extism-pdk
- example-plugin/manifest.toml: plugin manifest declaring tool capability

This crate is intentionally NOT added to the workspace members since it
targets wasm32-wasip1 and would break the main build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:09:54 -04:00
argenis de la rosa
b3bb79d805 feat(plugins): add PluginHost, WasmTool, and WasmChannel bridges
Implement the core plugin infrastructure:
- PluginHost: discovers plugins from the workspace plugins directory,
  loads manifest.toml files, supports install/remove/list/info operations
- WasmTool: bridges WASM plugins to the Tool trait (execute stub pending
  Extism runtime wiring)
- WasmChannel: bridges WASM plugins to the Channel trait (send/listen
  stubs pending Extism runtime wiring)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:09:54 -04:00
argenis de la rosa
c857b64bb4 feat(plugins): add Extism dependency, feature flag, and plugin module skeleton
Introduce the WASM plugin system foundation:
- Add extism 1.9 as an optional dependency behind `plugins-wasm` feature
- Create `src/plugins/` module with manifest types, error types, and stub host
- Add `Plugin` CLI subcommands (list, install, remove, info) behind cfg gate
- Add `PluginsConfig` to the config schema with sensible defaults

All plugin code is behind `#[cfg(feature = "plugins-wasm")]` so the default
build is unaffected.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:09:54 -04:00
Argenis
c051f0323e
Merge pull request #3822 from zeroclaw-labs/feat/pairing-dashboard
feat(gateway): add pairing dashboard with device management
2026-03-17 17:54:28 -04:00
Argenis
dea5c67ab0
Merge pull request #3821 from zeroclaw-labs/feat/self-test-update
feat(cli): add self-test and update commands
2026-03-17 17:54:25 -04:00
Argenis
a14afd7ef9
Merge pull request #3820 from zeroclaw-labs/feat/docker-fix
feat(docker): web-builder stage, healthcheck probe, resource limits
2026-03-17 17:54:22 -04:00
argenis de la rosa
4455b24056 fix(pairing): add SQLite persistence, fix config defaults, align with plan
- Add SQLite persistence to DeviceRegistry (backed by rusqlite)
- Rename config fields: ttl_secs -> code_ttl_secs, max_pending -> max_pending_codes, max_attempts -> max_failed_attempts
- Update defaults: code_length 6 -> 8, ttl_secs 300 -> 3600, max_pending 10 -> 3
- Add attempts tracking to PendingPairing struct
- Add token_hash() and authenticate_and_hash() to PairingGuard
- Fix route paths: /api/pairing/submit -> /api/pair, /api/devices/{id}/rotate -> /api/devices/{id}/token/rotate
- Add QR code placeholder to Pairing.tsx
- Pass workspace_dir to DeviceRegistry constructor

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:44:55 -04:00
argenis de la rosa
8ec6522759 fix(gateway): add new fields to test AppState and GatewayConfig constructors
Add device_registry, pending_pairings to test AppState instances and
pairing_dashboard to test GatewayConfig to fix compilation of tests
after the new pairing dashboard fields were introduced.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:36:01 -04:00
argenis de la rosa
a818edb782 feat(web): add pairing dashboard page
Add Pairing page with device list table, pairing code generation,
and device revocation. Create useDevices hook for reusable device
fetching. Wire /pairing route into App.tsx router.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:35:39 -04:00
argenis de la rosa
e0af3d98dd feat(gateway): extend WebSocket handshake with optional connect params
Add ConnectParams struct for an optional first-frame connect handshake.
If the first WebSocket message is {"type":"connect",...}, connection
parameters (session_id, device_name, capabilities) are extracted and
a "connected" ack is sent back. Old clients sending "message" first
still work unchanged (backward-compatible).

Extract process_chat_message() helper to avoid duplication between
fallback first-message handling and the main message loop.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:35:39 -04:00
argenis de la rosa
48bdbde26c feat(gateway): add device registry and pairing API handlers
Introduce DeviceRegistry, PairingStore, and five new API endpoints:
- POST /api/pairing/initiate — generate a new pairing code
- POST /api/pairing/submit — submit code with device metadata
- GET /api/devices — list paired devices
- DELETE /api/devices/{id} — revoke a paired device
- POST /api/devices/{id}/rotate — rotate a device token

Wire into AppState and gateway router. Registry is only created
when require_pairing is enabled.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:34:56 -04:00
argenis de la rosa
dc495a105f feat(config): add PairingDashboardConfig to gateway schema
Add PairingDashboardConfig struct with configurable code_length,
ttl_secs, max_pending, max_attempts, and lockout_secs fields.
Nested under GatewayConfig as `pairing_dashboard` with serde defaults.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:32:27 -04:00
argenis de la rosa
fe9addcfe0 fix(cli): align self-test and update commands with implementation plan
- Export commands module from lib.rs (pub mod commands) for external consumers
- Add --force and --version flags to the Update CLI command
- Wire version parameter through to check() and run() in update.rs,
  supporting targeted version fetches via GitHub releases/tags API
- Add WebSocket handshake check (check_websocket_handshake) to the full
  self-test suite in self_test.rs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:24:59 -04:00
argenis de la rosa
5bfa5f18e1 feat(cli): add update command with 6-phase pipeline and rollback
Add `zeroclaw update` command with a 6-phase self-update pipeline:
1. Preflight — check GitHub releases API for newer version
2. Download — fetch platform-specific binary to temp dir
3. Backup — copy current binary to .bak for rollback
4. Validate — size check + --version smoke test on download
5. Swap — overwrite current binary with new version
6. Smoke test — verify updated binary runs, rollback on failure

Supports --check flag for update-check-only mode without installing.
Includes version comparison logic with unit tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:24:58 -04:00
argenis de la rosa
72b7e1e647 feat(cli): add self-test command with quick and full modes
Add `zeroclaw self-test` command with two modes:
- Quick mode (--quick): 8 offline checks including config, workspace,
  SQLite, provider/tool/channel registries, security policy, and version
- Full mode (default): adds gateway health and memory round-trip checks

Creates src/commands/ module structure with self_test and update stubs.
Adds indicatif and tempfile runtime dependencies for the update pipeline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 17:24:58 -04:00
argenis de la rosa
413c94befe chore(docker): tighten compose resource limits
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 16:02:15 -04:00
argenis de la rosa
5aa6026fa1 feat(cli): add status --format=exit-code for Docker healthcheck
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 16:02:15 -04:00
argenis de la rosa
6eca841bd7 feat(docker): add web-builder stage and update .dockerignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 16:02:15 -04:00
Argenis
50e8d4f5f8
fix(ci): use pre-built binaries for Debian Docker image (#3814)
The Debian compatibility image was building from source with QEMU
cross-compilation for ARM64, which is extremely slow and was getting
cancelled by the concurrency group. Switch to using pre-built binaries
(same as the distroless image) with a debian:bookworm-slim runtime base.

- Add Dockerfile.debian.ci (mirrors Dockerfile.ci with Debian runtime)
- Update release-beta-on-push.yml to use docker-ctx + pre-built bins
- Update release-stable-manual.yml with same fix
- Drop GHA cache layers (no longer building from source)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 15:21:15 -04:00
Argenis
fc2aac7c94
feat(gateway): persist WS chat sessions across restarts (#3813)
Gateway WebSocket chat sessions were in-memory only — conversation
history was lost on gateway restart, macOS sleep/wake, or client
reconnect. This wires up the existing SessionBackend (SQLite) to
the gateway WS handler so sessions survive restarts and reconnections.

Changes:
- Add delete_session() to SessionBackend trait + SQLite implementation
- Add session_persistence and session_ttl_hours to GatewayConfig
- Add Agent::seed_history() to hydrate agent from persisted messages
- Initialize SqliteSessionBackend in run_gateway() when enabled
- Send session_start message on WS connect with session_id + resumed
- Persist user/assistant messages after each turn
- Add GET /api/sessions and DELETE /api/sessions/{id} REST endpoints
- Bump version to 0.5.0

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 14:26:39 -04:00
Argenis
4caa3f7e6f
fix(web): remove duplicate dashboard keys in Turkish locale (#3812)
The Turkish (tr) locale section had a duplicate "Dashboard specific
labels" block that repeated 19 keys already defined earlier, causing
TypeScript error TS1117. Moved the unique keys (provider_model,
paired_yes, etc.) into the primary dashboard section and removed
the duplicate block.

Fixes build failure introduced by #3777.
2026-03-17 14:13:46 -04:00
Argenis
3bc6ec3cf5
fix: only tweet for stable releases, not beta builds (#3808)
Remove tweet job from beta workflow. Update tweet-release.yml to diff
against previous stable tag (excluding betas) to capture all features
across the full release cycle. Simplify tweet format to feature-focused
style without contributor counts.

Supersedes #3575.
2026-03-17 14:06:46 -04:00
Argenis
f3fbd1b094
fix(web): preserve provider runtime options in ws agent (#3807)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 14:06:22 -04:00
Yingpeng MA
79e8252d7a
feat(web/i18n): add full Chinese locale and complete Turkish translations (#3777)
- Add comprehensive Simplified Chinese (zh) translations for all UI strings
- Extend and complete Turkish (tr) translations
- Fill in missing English (en) translation keys
- Reset default locale to 'en'
- Update language toggle to cycle through all three locales: en → zh → tr
2026-03-17 13:40:25 -04:00
Marijan Petričević
924521c927
config/schema: add serde default to AutonomyConfig (#3691)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-17 13:40:18 -04:00
Argenis
07ca270f03
fix(security): restore tokens.is_empty() guard, add re-pairing hint (#3738)
Revert "always generate pairing code" to tighter security posture:
codes are only generated on first startup when no tokens exist. Add
a CLI hint to the gateway banner so operators know how to re-pair
on demand. Fix install.sh to not use --new on fresh install (avoids
invalidating the auto-generated code). Fix onboard to show an
informational message instead of a throwaway PairingGuard.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 13:40:02 -04:00
Alix-007
e08091a2e2
fix(install): print PATH guidance after cargo install (#3769)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:39:53 -04:00
Alix-007
1f1123d071
fix(channels): allow low-risk shell in non-interactive mode (#3771)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:39:37 -04:00
Alix-007
d5bc46238a
fix(install): skip prebuilt flow on musl (#3788)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:39:29 -04:00
Alix-007
843973762a
ci(docker): publish debian compatibility image (#3789)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:39:20 -04:00
Alix-007
5f8d7d7347
fix(daemon): preserve deferred MCP tools in /api/chat (#3790)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:39:12 -04:00
Alix-007
7b3bea8d01
fix(agent): resolve deferred MCP tools by suffix (#3793)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:39:03 -04:00
Alix-007
ac461dc704
fix(docker): align debian image glibc baseline (#3794)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:38:55 -04:00
Alix-007
f04e56d9a1
feat(skills): support YAML frontmatter in SKILL.md (#3797)
* feat(skills): support YAML frontmatter in SKILL.md

* fix(skills): preserve nested open-skill names

---------

Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:38:49 -04:00
Alix-007
1d6f482b04
fix(build): rerun embedded web assets when dist changes (#3799)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:38:40 -04:00
Alix-007
ba6d0a4df9
fix(release): include matrix channel in official builds (#3800)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 13:38:33 -04:00
Alix-007
3cf873ab85
fix(groq): fall back on tool validation 400s (#3778)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-17 09:23:39 -04:00
Argenis
025724913d
feat(runtime): add configurable reasoning effort (#3785)
* feat(runtime): add configurable reasoning effort

* fix(test): add missing reasoning_effort field in live test

Add reasoning_effort: None to ProviderRuntimeOptions construction in
openai_codex_vision_e2e.rs to fix E0063 compile error.

---------

Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-17 09:21:53 -04:00
project516
49dd4cd9da
Change AppImage to tar.gz in arduino-uno-q-setup.md (#3754)
Arduino App Lab is a tar.gz file for Linux, not an AppImage

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-17 09:19:38 -04:00
dependabot[bot]
0664a5e854
chore(deps): bump rust from 7d37016 to da9dab7 (#3776)
Bumps rust from `7d37016` to `da9dab7`.

---
updated-dependencies:
- dependency-name: rust
  dependency-version: 1.94-slim
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-17 09:16:21 -04:00
Argenis
acd09fbd86
feat(ci): use pre-built binaries for Docker images (#3784)
Instead of compiling Rust from source inside Docker (~60 min),
download the already-built linux binaries from the build matrix
and copy them into a minimal distroless image (~2 min).

- Add Dockerfile.ci for release workflows (no Rust toolchain needed)
- Update both beta and stable workflows to use pre-built artifacts
- Drop Docker job timeout from 60 to 15 minutes
- Original Dockerfile unchanged for local dev builds
2026-03-17 09:03:13 -04:00
Alix-007
0f7d1fceeb
fix(channels): hide tool-call notifications by default (#3779)
Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-17 08:52:49 -04:00
GhostC
01e13ac92d
fix(skills): allow sibling markdown links within skills root (#3781)
Made-with: Cursor
2026-03-17 08:31:20 -04:00
Argenis
a9a6113093
fix(docs): revert unauthorized CLAUDE.md additions from #3604 (#3761)
PR #3604 included CLAUDE.md changes referencing non-existent modules
(src/security/taint.rs, src/sop/workflow.rs) and duplicating content
from CONTRIBUTING.md. These additions violate the anti-pattern rule
against modifying CLAUDE.md in feature PRs.
2026-03-17 01:56:51 -04:00
Giulio V
906951a587
feat(multi): LinkedIn tool, WhatsApp voice notes, and Anthropic OAuth fix (#3604)
* feat(tools): add native LinkedIn integration tool

Add a config-gated LinkedIn tool that enables ZeroClaw to interact with
LinkedIn's REST API via OAuth2. Supports creating posts, listing own
posts, commenting, reacting, deleting posts, viewing engagement stats,
and retrieving profile info.

Architecture:
- linkedin.rs: Tool trait impl with action-dispatched design
- linkedin_client.rs: OAuth2 token management and API wrappers
- Config-gated via [linkedin] enabled = false (default off)
- Credentials loaded from workspace .env file
- Automatic token refresh with line-targeted .env update

39 unit tests covering security enforcement, parameter validation,
credential parsing, and token management.

* feat(linkedin): configurable content strategy and API version

- Expand LinkedInConfig with api_version and nested LinkedInContentConfig
  (rss_feeds, github_users, github_repos, topics, persona, instructions)
- Add get_content_strategy tool action so agents can read config at runtime
- Fix hardcoded LinkedIn API version 202402 (expired) → configurable,
  defaulting to 202602
- LinkedInClient accepts api_version as parameter instead of static header
- 4 new tests (43 total), all passing

* feat(linkedin): add multi-provider image generation for posts

Add ImageGenerator with provider chain (DALL-E, Stability AI, Imagen, Flux)
and SVG fallback card. LinkedIn tool create_post now supports generate_image
parameter. Includes LinkedIn image upload (register → upload → reference),
configurable provider priority, and 14 new tests.

* feat(whatsapp): add voice note transcription and TTS voice replies

- Add STT support: download incoming voice notes via wa-rs, transcribe
  with OpenAI Whisper (or Groq), send transcribed text to agent
- Add TTS support: synthesize agent replies to Opus audio via OpenAI
  TTS, upload encrypted media, send as WhatsApp voice note (ptt=true)
- Voice replies only trigger when user sends a voice note; text
  messages get text replies only. Flag is consumed after one use to
  prevent multiple voice notes per agent turn
- Fix transcription module to support OpenAI API key (not just Groq):
  auto-detect provider from API URL, check ANTHROPIC_OAUTH_TOKEN /
  OPENAI_API_KEY / GROQ_API_KEY env vars in priority order
- Add optional api_key field to TranscriptionConfig for explicit key
- Add response_format: opus to OpenAI TTS for WhatsApp compatibility
- Add channel capability note so agent knows TTS is automatic
- Wire transcription + TTS config into WhatsApp Web channel builder

* fix(providers): prefer ANTHROPIC_OAUTH_TOKEN over global api_key

When the Anthropic provider is used alongside a non-Anthropic primary
provider (e.g. custom: gateway), the global api_key would be passed
as credential override, bypassing provider-specific env vars. This
caused Claude Code subscription tokens (sk-ant-oat01-*) to be ignored
in favor of the unrelated gateway JWT.

Fix: for the anthropic provider, check ANTHROPIC_OAUTH_TOKEN and
ANTHROPIC_API_KEY env vars before falling back to the credential
override. This mirrors the existing MiniMax OAuth pattern and enables
subscription-based auth to work as a fallback provider.

* feat(linkedin): add scheduled post support via LinkedIn API

Add scheduled_at parameter to create_post and create_post_with_image.
When provided (RFC 3339 timestamp), the post is created as a DRAFT
with scheduledPublishOptions so LinkedIn publishes it automatically
at the specified time. This enables the cron job to schedule a week
of posts in advance directly on LinkedIn.

* fix(providers): prefer env vars for openai and groq credential resolution

Generalize the Anthropic OAuth fix to also cover openai and groq
providers. When used alongside a non-matching primary provider (e.g.
a custom: gateway), the global api_key would be passed as credential
override, causing auth failures. Now checks provider-specific env
vars (OPENAI_API_KEY, GROQ_API_KEY) before falling back to the
credential override.

* fix(whatsapp): debounce voice replies to voice final answer only

The voice note TTS was triggering on the first send() call, which was
often intermediate tool output (URLs, JSON, web fetch results) rather
than the actual answer. This produced incomprehensible voice notes.

Fix: accumulate substantive replies (>30 chars, not URLs/JSON/code)
in a pending_voice map. A spawned debounce task waits 4 seconds after
the last substantive message, then synthesizes and sends ONE voice
note with the final answer. Intermediate tool outputs are skipped.

This ensures the user hears the actual answer in the correct language,
not raw tool output in English.

* fix(whatsapp): voice in = voice out, text in = text out

Rewrite voice reply logic with clean separation:
- Voice note received: ALL text output suppressed. Latest message
  accumulated silently. After 5s of no new messages, ONE voice note
  sent with the final answer. No tool outputs, no text, just voice.
- Text received: normal text reply, no voice.

Atomic debounce: multiple spawned tasks race but only one can extract
the pending message (remove-inside-lock pattern). Prevents duplicate
voice notes.

* fix(whatsapp): voice replies send both text and voice note

Voice note in → text replies sent normally in real-time PLUS one
voice note with the final answer after 10s debounce. Only substantive
natural-language messages are voiced (tool outputs, URLs, JSON, code
blocks filtered out). Longer debounce (10s) ensures the agent
completes its full tool chain before the voice note fires.

Text in → text out only, no voice.

* fix(channels): suppress tool narration and ack reactions

- Add system prompt instruction telling the agent to NEVER narrate
  tool usage (no "Let me fetch..." or "I will use http_request...")
- Disable ack_reactions (emoji reactions on incoming messages)
- Users see only the final answer, no intermediate steps

* docs(claude): add full CONTRIBUTING.md guidelines to CLAUDE.md

Add PR template requirements, code naming conventions, architecture
boundary rules, validation commands, and branch naming guidance
directly to CLAUDE.md for AI assistant reference.

* fix(docs): add blank lines around headings in CLAUDE.md for markdown lint

* fix(channels): strengthen tool narration suppression and fix large_futures

- Move anti-narration instruction to top of channel system prompt
- Add emphatic instruction for WhatsApp/voice channels specifically
- Add outbound message filter to strip tool-call-like patterns (, 🔧)
- Box::pin the two-phase heartbeat agent::run call (16664 bytes on Linux)
2026-03-17 01:55:05 -04:00
Giulio V
220745e217
feat(channels): add Reddit, Bluesky, and generic Webhook adapters (#3598)
* feat(channels): add Reddit, Bluesky, and generic Webhook adapters

- Reddit: OAuth2 polling for mentions/DMs/replies, comment and DM sending
- Bluesky: AT Protocol session auth, notification polling, post replies
- Webhook: Axum HTTP server for inbound, configurable outbound POST/PUT
- All three follow existing channel patterns with tests

* fix(channels): use neutral test fixtures and improve test naming in webhook
2026-03-17 01:26:58 -04:00
Giulio V
61de3d5648
feat(knowledge): add knowledge graph for expertise capture and reuse (#3596)
* feat(knowledge): add knowledge graph for expertise capture and reuse

SQLite-backed knowledge graph system for consulting firms to capture,
organize, and reuse architecture decisions, solution patterns, lessons
learned, and expert matching across client engagements.

- KnowledgeGraph (src/memory/knowledge_graph.rs): node CRUD, edge
  creation, FTS5 full-text search, tag filtering, subgraph traversal,
  expert ranking by authored contributions, graph statistics
- KnowledgeTool (src/tools/knowledge_tool.rs): Tool trait impl with
  capture, search, relate, suggest, expert_find, lessons_extract, and
  graph_stats actions
- KnowledgeConfig (src/config/schema.rs): disabled by default,
  configurable db_path/max_nodes, cross_workspace_search off by default
  for client data isolation
- Wired into tools factory (conditional on config.knowledge.enabled)

20 unit tests covering node CRUD, edge creation, search ranking,
subgraph queries, expert ranking, and tool actions.

* fix: address CodeRabbit review findings

- Fix UTF-8 truncation panic in truncate_str by using char-based
  iteration instead of byte indexing
- Add config validation for knowledge.max_nodes > 0
- Add subgraph depth boundary validation (must be > 0, capped at 100)

* fix(knowledge): address remaining CodeRabbit review issues

- MAJOR: Add db_path non-empty validation in Config::validate()
- MAJOR: Reject tags containing commas in add_node (comma is separator)
- MAJOR: Fix subgraph depth boundary (0..depth instead of 0..=depth)
- MAJOR: Apply project and node_type filters consistently in both
  tag-only and similarity search paths

* fix: correct subgraph traversal test assertion and sync CI workflows
2026-03-17 01:11:29 -04:00
Giulio V
675a5c9af0
feat(tools): add Google Workspace CLI (gws) integration (#3616)
* feat(tools): add Google Workspace CLI (gws) integration

Adds GoogleWorkspaceTool for interacting with Google Drive, Sheets,
Gmail, Calendar, Docs, and other Workspace services via CLI.

- Config-gated (google_workspace.enabled)
- Service allowlist for restricted access
- Requires shell access for CLI delegation
- Input validation against shell injection
- Wrong-type rejection for all optional parameters
- Config validation for allowed_services (empty, duplicate, malformed)
- Registered in integrations registry and CLI discovery

Closes #2986

* style: fix cargo fmt + clippy violations

* feat(google-workspace): expand config with auth, rate limits, and audit settings

* fix(tools): define missing GWS_TIMEOUT_SECS constant

* fix: Box::pin large futures and resolve duplicate Default impl

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-17 00:52:59 -04:00
Giulio V
b099728c27
feat(stt): multi-provider STT with TranscriptionProvider trait (#3614)
* feat(stt): add multi-provider STT with TranscriptionProvider trait

Refactors single-endpoint transcription to support multiple providers:
Groq (existing), OpenAI Whisper, Deepgram, AssemblyAI, and Google Cloud
Speech-to-Text. Adds TranscriptionManager for provider routing with
backward-compatible config fields.

* style: fix cargo fmt + clippy violations

* fix: Box::pin large futures and resolve merge conflicts with master

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-17 00:33:41 -04:00
Alix-007
f87c7442b9 chore(pr): restore merge-base docs file for #3356 2026-03-17 12:11:35 +08:00
Alix-007
0a191fc02c chore(pr): drop unrelated docs delta from #3356 2026-03-17 12:08:20 +08:00
Argenis
1ca2092ca0
test(channel): add QQ markdown msg_type regression test (#3752)
Verify that QQ send body uses msg_type 2 with nested markdown object
instead of msg_type 0 with top-level content. Adapted from #3668.
2026-03-16 22:03:43 -04:00
Giulio V
5e3308eaaa
feat(providers): add Claude Code, Gemini CLI, and KiloCLI subprocess providers (#3615)
* feat(providers): add Claude Code, Gemini CLI, and KiloCLI subprocess providers

Adds three new local subprocess-based providers for AI CLI tools.
Each provider spawns the CLI as a child process, communicates via
stdin/stdout pipes, and parses responses into ChatResponse format.

* fix: resolve clippy unnecessary_debug_formatting and rustfmt violations

* fix: resolve remaining clippy unnecessary_debug_formatting in CLI providers

* fix(providers): add AiAgent CLI category for subprocess providers
2026-03-16 21:51:05 -04:00
Chris Hengge
ec255ad788
fix(tool): expand cron_add and cron_update parameter schemas (#3671)
The schedule field in cron_add used a bare {"type":"object"} with a
description string encoding a tagged union in pseudo-notation. The patch
field in cron_update was an opaque {"type":"object"} despite CronJobPatch
having nine fully-typed fields. Both gaps cause weaker instruction-following
models to produce malformed or missing nested JSON when invoking these tools.

Changes:
- cron_add: expand schedule into a oneOf discriminated union with explicit
  properties and required fields for each variant (cron/at/every), matching
  the Schedule enum in src/cron/types.rs exactly
- cron_add: add descriptions to all previously undocumented top-level fields
- cron_add: expand delivery from a bare inline comment to fully-specified
  properties with per-field descriptions
- cron_update: expand patch from opaque object to full properties matching
  CronJobPatch (name, enabled, command, prompt, model, session_target,
  delete_after_run, schedule, delivery)
- cron_update: schedule inside patch mirrors the same oneOf expansion
- Both: add inline NOTE comments flagging that oneOf is correct for
  OpenAI-compatible APIs but SchemaCleanr::clean_for_gemini must be
  applied if Gemini native tool calling is ever wired up
- Both: add schema-shape tests using the existing test_config/test_security
  helper pattern, covering oneOf variant structure, required fields, and
  delivery channel enum completeness

No behavior changes. No new dependencies. Backward compatible: the runtime
deserialization path (serde on Schedule/CronJobPatch) is unchanged.

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-16 21:45:49 -04:00
Sid Jain
7182f659ce
fix(slack): honor mention_only in runtime channel wiring (#3715)
* feat(slack): wire mention_only group reply policy

* feat(slack): expose mention_only in config and wizard defaults
2026-03-16 21:40:47 -04:00
Ericsunsk
ae7681209d
fix(openai-codex): decode utf-8 safely across stream chunks (#3723) 2026-03-16 21:40:45 -04:00
Markus Bergholz
ee3469e912
Fix: Support Nextcloud Talk Activity Streams 2.0 webhook format (#3737)
* fix

* fix

* format
2026-03-16 21:40:42 -04:00
Argenis
fec81d8e75
ci: auto-sync Scoop and AUR on stable release (#3743)
Add workflow_call triggers to pub-scoop.yml and pub-aur.yml so the
stable release workflow can invoke them automatically after publish.

Wire scoop and aur jobs into release-stable-manual.yml as post-publish
steps (parallel with tweet), gated on publish success.

Update ci-map.md trigger docs to reflect auto-called behavior.
2026-03-16 21:34:29 -04:00
Ricardo Madriz
9a073fae1a
fix(tools) Wire activated toolset into dispatch (#3747)
* fix(tools): wire ActivatedToolSet into tool dispatch and spec advertisement

When deferred MCP tools are activated via tool_search, they are stored
in ActivatedToolSet but never consulted by the tool call loop.
tool_specs is built once before the iteration loop and never refreshed,
so the provider API tools[] parameter never includes activated tools.
find_tool only searches the static registry, so execution dispatch also
fails silently.

Thread Arc<Mutex<ActivatedToolSet>> from creation sites through to
run_tool_call_loop. Rebuild tool_specs each iteration to merge base
registry specs with activated specs. Add fallback in execute_one_tool
to check the activated set when the static registry lookup misses.

Change ActivatedToolSet internal storage from Box<dyn Tool> to
Arc<dyn Tool> so we can clone the Arc out of the mutex guard before
awaiting tool.execute() (std::sync::MutexGuard is not Send).

* fix(tools): add activated_tools field to new ChannelRuntimeContext test site
2026-03-16 21:34:08 -04:00
Chris Hengge
f0db63e53c
fix(integrations): wire Cron and Browser status to config fields (#3750)
Both entries had hardcoded |_| IntegrationStatus::Available, ignoring
the live config entirely. Users with cron.enabled = true or
browser.enabled = true saw 'Available' on the /integrations dashboard
card instead of 'Active'.

Root cause: status_fn closures did not capture the Config argument.

Fix: replace the |_| stubs with |c| closures that check c.cron.enabled
and c.browser.enabled respectively, matching the pattern used by every
other wired entry in the registry (Telegram, Discord, Shell, etc.).

What did NOT change: ComingSoon entries, always-Active entries (Shell,
File System), platform entries, or any other registry logic.
2026-03-16 21:34:06 -04:00
Argenis
df4dfeaf66
chore: bump version to 0.4.3 (#3749)
Update version across Cargo.toml, Cargo.lock, Scoop manifest,
and AUR PKGBUILD/.SRCINFO for the v0.4.3 stable release.
2026-03-16 21:23:04 -04:00
Giulio V
e4ef25e913
feat(security): add Merkle hash-chain audit trail (#3601)
* feat(security): add Merkle hash-chain audit trail

Each audit entry now includes a SHA-256 hash linking it to the previous
entry (entry_hash, prev_hash, sequence), forming a tamper-evident chain.
Modifying any entry invalidates all subsequent hashes.

- Chain fields added to AuditEvent with #[serde(default)] for backward compat
- AuditLogger tracks chain state and recovers from existing logs on restart
- verify_chain() validates hash linkage, sequence continuity, and integrity
- Five new tests: genesis seed, multi-entry verify, tamper detection,
  sequence gap detection, and cross-restart chain recovery

* fix(security): replace personal name with neutral label in audit tests
2026-03-16 18:38:59 -04:00
Argenis
c3a3cfc9a6
fix(agent): prevent duplicate tool schema injection in XML dispatcher (#3744)
Remove duplicate tool listing from XmlToolDispatcher::prompt_instructions()
since tool listing is already handled by ToolsSection in prompt.rs. The
method now only emits the XML protocol envelope.

Also fix UTF-8 char boundary panics in memory consolidation truncation by
using char_indices() instead of manual byte-boundary scanning.

Fixes #3643
Supersedes #3678

Co-authored-by: TJUEZ <TJUEZ@users.noreply.github.com>
2026-03-16 18:38:44 -04:00
伊姆
013fca6ad2
fix(config): support socks proxy scheme for Clash Verge (#3001)
Co-authored-by: imu <imu@sgcc.com.cn>
2026-03-16 18:38:03 -04:00
linyibin
23a0f25b44
fix(web): ensure web/dist exists in fresh clones (#3114)
The Rust build expects web/dist to exist (static assets). Track an empty
placeholder via web/dist/.gitkeep and adjust ignore rules to keep build
artifacts ignored while allowing the placeholder file.

Made-with: Cursor
2026-03-16 18:37:14 -04:00
Giulio V
2eaa8c45f4
feat(whatsapp-web): add voice message transcription support (#3617)
Adds audio message detection and transcription to WhatsApp Web channel.
Voice messages (PTT) are downloaded, transcribed via the existing
transcription subsystem (Groq Whisper), and delivered as text content.

- TranscriptionConfig field with builder pattern
- Duration limit enforcement before download
- MIME type mapping for audio formats
- Graceful error handling (skip on failure)
- Preserves full retry/reconnect state machine from master
2026-03-16 18:34:50 -04:00
Sandeep Ghael
85bf649432
fix(channel): resolve multi-room reply routing regression (#3224) (#3378)
* fix(channel): resolve multi-room reply routing regression (#3224)

PR #3224 (f0f0f808, "feat(matrix): add multi-room support") changed the
channel name format in matrix.rs from "matrix" to "matrix:!roomId", but
the channel lookup in mod.rs still does an exact match against
channels_by_name, which is keyed by Channel::name() (returns "matrix").

This mismatch causes target_channel to always resolve to None for Matrix
messages, silently dropping all replies.

Fix: fall back to a prefix match on the base channel name (before ':')
when the exact lookup fails. This preserves multi-room conversation
isolation while correctly routing replies to the originating channel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: apply cargo fmt to channel routing fix

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Sandeep (Claude) <sghael+claude@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 18:32:56 -04:00
Giulio V
3ea99a7619
feat(tools): add browser delegation tool (#3610)
* feat(tools): add browser delegation tool for corporate web app interaction

Adds BrowserDelegateTool that delegates browser-based tasks to Claude Code
(or other browser-capable CLIs) for interacting with corporate tools
(Teams, Outlook, Jira, Confluence) via browser automation. Includes domain
validation (allow/blocklist), task templates, Chrome profile persistence
for SSO sessions, and timeout management.

* fix: resolve clippy violation in browser delegation tool

* fix(browser-delegate): validate URLs embedded in task text against domain policy

Scan the task text for http(s):// URLs using regex and validate each
against the allow/block domain lists before forwarding to the browser
CLI subprocess. This prevents bypassing domain restrictions by
embedding blocked URLs in the task parameter.

* fix(browser-delegate): constrain URL schemes, gate on runtime, document config

- Add has_shell_access gate so BrowserDelegateTool is only registered on
  shell-capable runtimes (skipped with warning on WASM/edge runtimes)
- Add boundary tests for javascript: and data: URL scheme rejection
- URL scheme validation (http/https only) and config docs were already
  addressed by a prior commit on this branch

* fix(tools): address CodeRabbit review findings for browser delegation

Remove dead `max_concurrent_tasks` config field and expand doc comments
on the `[browser_delegate]` config section in schema.rs.
2026-03-16 18:32:20 -04:00
Christian Pojoni
14f58c77c1
fix(tool+channel): revert invalid model set via model_routing_config (#3497)
When the LLM hallucinates an invalid model ID through the
model_routing_config tool's set_default action, the invalid model gets
persisted to config.toml. The channel hot-reload then picks it up and
every subsequent message fails with a non-retryable 404, permanently
killing the connection with no user recovery path.

Fix with two layers of defense:

1. Tool probe-and-rollback: after saving the new model, send a minimal
   chat request to verify the model is accessible. If the API returns a
   non-retryable error (404, auth failure, etc.), automatically restore
   the previous config and return a failure notice to the LLM.

2. Channel safety net: in maybe_apply_runtime_config_update, reject
   config reloads when warmup fails with a non-retryable error instead
   of applying the broken config anyway.

Co-authored-by: Christian Pojoni <christian.pojoni@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 18:30:36 -04:00
dependabot[bot]
b833eb19f5
chore(deps): bump rust in the docker-all group (#3692)
Bumps the docker-all group with 1 update: rust.


Updates `rust` from 1.93-slim to 1.94-slim

---
updated-dependencies:
- dependency-name: rust
  dependency-version: 1.94-slim
  dependency-type: direct:production
  dependency-group: docker-all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-16 18:28:51 -04:00
DotViegas
5db883b453
fix(providers): adjust temperature for OpenAI reasoning models (#2936)
Some OpenAI models (o1, o3, o4, gpt-5 variants) only accept temperature=1.0 and return errors with other values like 0.7. This change automatically adjusts the temperature parameter based on the model being used.

Changes:
- Add adjust_temperature_for_model() function to detect reasoning models
- Apply temperature adjustment in chat_with_system(), chat(), and chat_with_tools()
- Preserve user-specified temperature for standard models (gpt-4o, gpt-4-turbo, etc.)
- Force temperature=1.0 for reasoning models (o1, o3, o4, gpt-5, gpt-5-mini, gpt-5-nano, gpt-5.x-chat-latest)

Testing:
- Add 7 unit tests covering reasoning models, standard models, and edge cases
- All tests pass successfully
- Empirical testing documented in docs/openai-temperature-compatibility.md

Impact:
- Fixes temperature errors when using o1, o3, o4, and gpt-5 model families
- No breaking changes - transparent adjustment for end users
- Standard models continue to work with flexible temperature values

Risk: Low - isolated change within OpenAI provider, well-tested

Rollback: Revert this commit to restore previous behavior

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-16 18:28:01 -04:00
Eddie's AI Agent
0ae515b6b8
fix(channel): correct Matrix image marker casing to match canonical format (#3519)
Co-authored-by: Eddie Tong <xinhant@gmail.com>
2026-03-16 18:25:33 -04:00
Giulio V
2deb91455d
feat(observability): add Hands dashboard metrics and events (#3595)
Add HandStarted, HandCompleted, and HandFailed event variants to
ObserverEvent, and HandRunDuration, HandFindingsCount, HandSuccessRate
metric variants to ObserverMetric. Update all observer backends (log,
noop, verbose, prometheus, otel) to handle the new variants with
appropriate instrumentation. Prometheus backend registers hand_runs
counter, hand_duration histogram, and hand_findings counter. OTel
backend creates spans and records metrics for hand runs.
2026-03-16 18:24:47 -04:00
smallwhite
595b81be41
fix(telegram): avoid duplicate finalize_draft messages (#3259) 2026-03-16 18:24:19 -04:00
Chris Hengge
4f9d817ddb
fix(memory): serialize MemoryCategory as plain string and guard dashboard render crashes (#3051)
The /memory dashboard page rendered a black screen when MemoryCategory::Custom
was serialized by serde's derived impl as a tagged object {"custom":"..."} but
the frontend expected a plain string. No navigation was possible without using
the browser Back button.

Changes:
- src/memory/traits.rs: replace derived serde impls with custom serialize
  (delegates to Display, emits plain snake_case string) and deserialize
  (parses known variants by name, falls through to Custom(s) for unknown).
  Adds memory_category_serde_uses_snake_case and memory_category_custom_roundtrip
  tests. No persistent storage migration needed — all backends (SQLite, Markdown,
  Postgres) use their own category_to_str/str_to_category helpers and never
  read serde-serialized category values back from disk.
- web/src/App.tsx: export ErrorBoundary class so render crashes surface a
  recoverable UI instead of a black screen. Adds aria-live="polite" to the
  pairing error paragraph for screen reader accessibility.
- web/src/components/layout/Layout.tsx: wrap Outlet in ErrorBoundary keyed
  by pathname so the navigation shell stays mounted during a page crash and
  the boundary resets on route change.

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-16 18:23:03 -04:00
Darren.Zeng
d13f5500e9
fix(install): add missing libssl-dev for Debian/Ubuntu (#3285)
The install.sh script was missing libssl-dev package for Debian/Ubuntu
systems. This caused compilation failures on Debian 12 and other
Debian-based distributions when building ZeroClaw from source.

The package is already included for other distributions:
- Alpine: openssl-dev
- Fedora/RHEL: openssl-devel
- Arch: openssl

This change adds libssl-dev to the apt-get install command to ensure
OpenSSL headers are available during compilation.

Fixes #2914

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-16 18:22:10 -04:00
Chris Hengge
1ccfe643ba
fix(channel): bypass mention_only gate for Discord DMs (#2983)
When mention_only is enabled, the bot correctly requires an @mention in
guild (server) channels. However, Direct Messages have no guild_id and
are inherently private and addressed to the bot — requiring a @mention
in a DM is never correct and silently drops all DM messages.

Changes:
- src/channels/discord.rs: detect DMs via absence of guild_id in the
  gateway payload, compute effective_mention_only = self.mention_only && !is_dm,
  and pass that to normalize_incoming_content instead of self.mention_only.
  DMs bypass the mention gate; guild messages retain existing behaviour.
- Adds three tests: DM bypasses mention gate, guild message without mention
  is rejected, guild message with mention passes and strips the mention tag.

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-16 18:21:27 -04:00
Vadim Rutkovsky
d4d3e03e34
fix: add dummy src/lib.rs in Dockerfile.debian for dep caching stage (#3553) 2026-03-16 18:20:43 -04:00
simonfr
aa0f11b0a2
fix(docker): copy build.rs into builder stage to invalidate dummy binary cache (#3570)
* Fix build with Docker

* fix(docker): copy build.rs into builder stage to fix rag feature activation
2026-03-16 18:19:55 -04:00
Argenis
806f8b4020
fix(docker): purge stale zeroclawlabs fingerprints before build (#3741)
The BuildKit cache mount persists .fingerprint and .d files across
source tree changes, causing compilation errors when imports change.
Clear zeroclawlabs-specific artifacts before building to ensure
a clean recompile of the main crate while preserving dep caches.
2026-03-16 18:10:36 -04:00
Ericsunsk
83803cef5b
fix(memory): filter autosave noise and scope recall/store by session (#3695)
* fix(memory): filter autosave noise and scope memory by session

* style: format rebase-resolved gateway and memory loader

* fix(tests): update memory loader mock for session-aware context

* fix(openai-codex): decode utf-8 safely across stream chunks
2026-03-16 16:36:35 -04:00
Vast-stars
dcb182cdd5
fix(agent): remove bare URL → curl fallback in GLM-style tool call parser (#3694)
* fix(agent): remove bare URL → curl fallback in GLM-style tool call parser

The `parse_glm_style_tool_calls` function had a "Plain URL" fallback
that converted any bare URL line (e.g. `https://example.com`) into a
`shell` tool call running `curl -s '<url>'`. This caused:

- False positives: normal URLs in LLM replies misinterpreted as tool calls
- Swallowed replies: text with URLs not forwarded to the channel
- Unintended shell commands: `curl` executed without user intent

Explicit GLM-format tool calls like `browser_open/url>https://...` and
`shell/command>...` are unaffected — only the bare URL catch-all is
removed.

* style: cargo fmt

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-16 16:36:27 -04:00
Argenis
7c36a403b0
chore: sync Scoop and AUR templates to v0.4.1 (#3736) 2026-03-16 16:36:26 -04:00
Argenis
058dbc8786
feat(channels): add X/Twitter and Mochat channel integrations (#3735)
* feat(channels): add X/Twitter and Mochat channel integrations

Add two new channel implementations to close competitive gaps:

- X/Twitter: Twitter API v2 with mentions polling, tweet threading
  (auto-splits at 280 chars), DM support, and rate limit handling
- Mochat: HTTP polling-based integration with Mochat customer service
  platform, configurable poll interval, message dedup

Both channels follow the existing Channel trait pattern with full
config schema integration, health checks, and dedup.

Closes competitive gap: NanoClaw had X/Twitter, Nanobot had Mochat.

* fix(channels): use write! instead of format_push_string for clippy

Replace url.push_str(&format!(...)) with write!(url, ...) to satisfy
clippy::format_push_string lint on CI.

* fix(channels): rename reply_to parameter to avoid legacy field grep

The component test source_does_not_use_legacy_reply_to_field greps
for "reply_to:" in source files. Rename the parameter to
reply_tweet_id to pass this check.
2026-03-16 16:35:21 -04:00
SimianAstronaut7
aff7a19494
Merge pull request #3641 from zeroclaw-labs/work-issues/3011-fix-dashboard-ws-protocols
fix(gateway): pass bearer token in WebSocket subprotocol for dashboard auth
2026-03-16 16:34:46 -04:00
SimianAstronaut7
0894429b54
Merge pull request #3640 from zeroclaw-labs/work-issues/2881-transcription-initial-prompt
feat(config): support initial_prompt in transcription config
2026-03-16 16:34:43 -04:00
SimianAstronaut7
6b03e885fc
Merge pull request #3639 from zeroclaw-labs/work-issues/3474-docker-restart-docs
docs(setup): add Docker/Podman stop/restart instructions
2026-03-16 16:34:41 -04:00
Argenis
84470a2dd2
fix(agent): strip vision markers from history for non-vision providers (#3734)
* fix(agent): strip vision markers from history for non-vision providers

When a user sends an image via Telegram to a non-vision provider, the
`[IMAGE:/path]` marker gets stored in the JSONL session file. Previously,
the rollback only removed it from in-memory history, not from the JSONL
file. On restart, the marker was reloaded and permanently broke the
conversation.

Two fixes:
1. `rollback_orphan_user_turn` now also calls `remove_last` on the
   session store so the poisoned entry is removed from disk.
2. When building history for a non-vision provider, `[IMAGE:]` markers
   are stripped from older history messages (and empty turns are dropped).

Fixes #3674

* fix(agent): only strip vision markers from older history, not current message

The initial fix stripped [IMAGE:] markers from all prior_turns including
the current message, which caused the vision check to never fire. Now
only strip from turns before the last one (the current request), so
fresh image sends still get a proper vision capability error.
2026-03-16 16:25:45 -04:00
Argenis
8a890be021
chore: bump version to 0.4.2 (#3733)
Update version across Cargo.toml, Cargo.lock, Scoop manifest,
and AUR PKGBUILD/.SRCINFO for the v0.4.2 stable release.
2026-03-16 16:02:34 -04:00
Argenis
74a5ff78e7
fix(qq): send markdown messages instead of plain text (#3732)
* fix(ci): decouple tweet from Docker push in release workflows

Remove Docker from the tweet job's dependency chain in both beta and
stable release workflows. Docker multi-platform builds are slow and
can be cancelled by concurrency groups, which was blocking the tweet
from ever firing. The tweet announces the GitHub Release, not the
Docker image.

* fix(qq): send markdown messages instead of plain text

Change msg_type from 0 (plain text) to 2 (markdown) and wrap content
in a markdown object per QQ's API documentation. This ensures markdown
formatting (bold, italic, code blocks, etc.) renders properly in QQ
clients instead of displaying raw syntax.

Fixes #3647
2026-03-16 15:56:09 -04:00
Argenis
93b16dece5
Merge pull request #3731 from zeroclaw-labs/fix/tweet-decouple-docker
fix(ci): decouple tweet from Docker push in release workflows
2026-03-16 15:52:05 -04:00
Argenis
c773170753
feat(providers): close AiHubMix, SiliconFlow, and Codex OAuth provider gaps (#3730)
Add env var resolution for AiHubMix (AIHUBMIX_API_KEY) and SiliconFlow
(SILICONFLOW_API_KEY) so users can authenticate via environment variables.

Add factory and credential resolution tests for AiHubMix, SiliconFlow,
and Codex OAuth to ensure all provider aliases work correctly.
2026-03-16 15:48:27 -04:00
argenis de la rosa
f210b43977 fix(ci): decouple tweet from Docker push in release workflows
Remove Docker from the tweet job's dependency chain in both beta and
stable release workflows. Docker multi-platform builds are slow and
can be cancelled by concurrency groups, which was blocking the tweet
from ever firing. The tweet announces the GitHub Release, not the
Docker image.
2026-03-16 15:32:29 -04:00
Argenis
50bc360bf4
Merge pull request #3729 from zeroclaw-labs/fix/crates-auto-publish-idempotent
fix(ci): make crates.io publish idempotent across all workflows
2026-03-16 15:30:30 -04:00
Argenis
fc8ed583a0
feat(providers): add VOLCENGINE_API_KEY env var for VolcEngine/ByteDance gateway (#3725) 2026-03-16 15:29:36 -04:00
argenis de la rosa
d593b6b1e4 fix(ci): make crates.io publish idempotent across all workflows
Both publish-crates-auto.yml and publish-crates.yml now treat
"already exists" from cargo publish as success instead of failing
the workflow. This prevents false failures when the auto-sync and
stable release workflows race or when re-running a publish.
2026-03-16 15:11:29 -04:00
Argenis
426faa3923
Merge pull request #3724 from zeroclaw-labs/fix/release-sync-tweet-and-crates
fix(ci): ensure tweet posts for stable releases and fix beta concurrency
2026-03-16 15:07:58 -04:00
argenis de la rosa
85429b3657 fix(ci): ensure tweet posts for stable releases and fix beta concurrency
- Tweet workflow: stable releases always tweet (no feature-check gate);
  beta tweets now also trigger on fix() commits, not just feat()
- Beta release: use cancel-in-progress to avoid queued runs getting
  stuck when rapid merges hit the concurrency group
2026-03-16 14:54:32 -04:00
Argenis
8adf05f307
Merge pull request #3722 from zeroclaw-labs/ci/restore-package-manager-syncs
ci: restore Homebrew and add Scoop/AUR package manager workflows
2026-03-16 14:30:09 -04:00
Argenis
a5f844d7cc
fix(daemon): ignore SIGHUP to survive terminal/SSH disconnect (#3721)
* fix(daemon): ignore SIGHUP to survive terminal/SSH disconnect (#3688)

* style: remove redundant continue flagged by clippy
2026-03-16 14:21:59 -04:00
Argenis
7a9e815948
fix(config): add serde default for cli field in ChannelsConfig (#3720)
* fix(config): add serde default for cli field in ChannelsConfig (#3710)

* style: fix rustfmt formatting in test
2026-03-16 14:21:51 -04:00
Argenis
46378cf8b4
fix(security): validate command before rate-limiting in cron once (#3699) (#3719) 2026-03-16 14:21:45 -04:00
Argenis
c2133e6e62
fix(docker): prevent dummy binary from being shipped in container (#3687) (#3718) 2026-03-16 14:21:37 -04:00
Argenis
e9b3148e73
Merge pull request #3717 from zeroclaw-labs/chore/version-bump-0.4.1
chore: bump version to 0.4.1
2026-03-16 14:21:20 -04:00
argenis de la rosa
3d007f6b55 docs: add Scoop and AUR workflows to CI map and release process 2026-03-16 14:17:18 -04:00
argenis de la rosa
f349de78ed ci(aur): add AUR PKGBUILD template and publishing workflow
Adds Arch Linux distribution via AUR:
- dist/aur/PKGBUILD: package build template with cargo dist profile
- dist/aur/.SRCINFO: AUR metadata
- .github/workflows/pub-aur.yml: manual workflow to push to AUR
2026-03-16 14:16:30 -04:00
argenis de la rosa
cd40051f4c ci(scoop): add Scoop manifest template and publishing workflow
Adds Windows package distribution via Scoop:
- dist/scoop/zeroclaw.json: manifest template with checkver/autoupdate
- .github/workflows/pub-scoop.yml: manual workflow to update Scoop bucket
2026-03-16 14:15:29 -04:00
argenis de la rosa
6e4b1ede28 ci(homebrew): restore Homebrew core formula publishing workflow
Re-adds the manual-dispatch workflow for bumping the zeroclaw formula
in Homebrew/homebrew-core via a bot-owned fork. Improved from the
previously removed version with safer env-var handling.

Requires secrets: HOMEBREW_CORE_BOT_TOKEN or HOMEBREW_UPSTREAM_PR_TOKEN
Requires variables: HOMEBREW_CORE_BOT_FORK_REPO, HOMEBREW_CORE_BOT_EMAIL
2026-03-16 14:12:48 -04:00
argenis de la rosa
cfba009833 chore: regenerate Cargo.lock for v0.4.1 2026-03-16 13:49:39 -04:00
argenis de la rosa
45abd27e4a chore: bump version to 0.4.1
Reflects the addition of heartbeat metrics, SQLite session backend,
and two-tier response cache in this release cycle.
2026-03-16 13:49:36 -04:00
Argenis
566e3cf35b
Merge pull request #3712 from zeroclaw-labs/feat/competitive-edge-heartbeat-sessions-caching
feat: competitive edge — heartbeat metrics, SQLite sessions, two-tier prompt cache
2026-03-16 13:47:42 -04:00
Argenis
d642b0f3c8
fix(ci): decouple tweet from crates.io and fix duplicate publish handling (#3716)
Drop crates-io from the tweet job's needs so the release announcement
goes out with GitHub release, Docker, and website — not blocked by
crates.io publish timing.

Also fix the duplicate detection: the previous curl-based check used
a URL that didn't match the actual crate, causing cargo publish to
hit "already exists" and fail the whole job. Now we just run cargo
publish and treat "already exists" as success.
2026-03-16 13:46:05 -04:00
Argenis
8153992a11
fix(ci): scope rust-cache by OS image in stable release workflow (#3711)
Same glibc cache mismatch fix as the beta workflow — ubuntu-22.04 builds
must not share cached build-script binaries with ubuntu-latest (24.04).
2026-03-16 12:56:30 -04:00
argenis de la rosa
98688c61ff feat(cache): wire two-tier response cache, multi-provider token tracking, and cache analytics
- Two-tier response cache: in-memory LRU (hot) + SQLite (warm) with TTL-aware eviction
- Wire response cache into agent turn loop (temp==0.0, text-only responses only)
- Parse Anthropic cache_creation_input_tokens/cache_read_input_tokens
- Parse OpenAI prompt_tokens_details.cached_tokens
- Add cached_input_tokens to TokenUsage, prompt_caching to ProviderCapabilities
- Add CacheHit/CacheMiss observer events with Prometheus counters
- Add response_cache_hot_entries config field (default: 256)
2026-03-16 12:44:48 -04:00
argenis de la rosa
9ba5ba5632 feat(sessions): add SQLite backend with FTS5, trait abstraction, and migration
- Add SessionBackend trait abstracting over storage backends (load,
  append, remove_last, list, search, cleanup_stale, compact)
- Add SqliteSessionBackend with WAL mode, FTS5 full-text search,
  session metadata tracking, and TTL-based cleanup
- Add remove_last() and compact() to JSONL SessionStore
- Implement SessionBackend for both JSONL and SQLite backends
- Add automatic JSONL-to-SQLite migration (renames .jsonl → .jsonl.migrated)
- Add config: session_backend ("jsonl"/"sqlite"), session_ttl_hours
- SQLite is the new default backend; JSONL preserved for backward compat
2026-03-16 12:23:18 -04:00
argenis de la rosa
318ed8e9f1 feat(heartbeat): add health metrics, adaptive intervals, and task history
- Add HeartbeatMetrics struct with uptime, consecutive success/failure
  counts, EMA tick duration, and total ticks
- Add compute_adaptive_interval() for exponential backoff on failures
  and faster polling when high-priority tasks are present
- Add SQLite-backed task run history (src/heartbeat/store.rs) mirroring
  the cron/store.rs pattern with output truncation and pruning
- Add dead-man's switch that alerts if heartbeat stops ticking
- Wire metrics, history recording, and adaptive sleep into daemon worker
- Add config fields: adaptive, min/max_interval_minutes,
  deadman_timeout_minutes, deadman_channel, deadman_to, max_run_history
- All new fields are backward-compatible with serde defaults
2026-03-16 12:08:32 -04:00
Argenis
5ddea82789
fix(ci): scope rust-cache by OS image and target in release beta workflow (#3708)
The aarch64-unknown-linux-gnu build runs on ubuntu-22.04 (glibc 2.35)
but was restoring cached build-script binaries compiled on ubuntu-latest
(24.04, glibc 2.39), causing GLIBC_2.39 not found failures.

Adding prefix-key with the OS image and target ensures each matrix entry
gets its own isolated cache, preventing cross-image glibc mismatches.
2026-03-16 11:37:14 -04:00
Argenis
a2b18bdb16
chore: gitignore stale target-* build cache dirs (#3707)
Adds /target-*/ to .gitignore to prevent alternative Cargo build
directories (e.g. target-ms365, target-pr) from being tracked.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 11:21:04 -04:00
Argenis
85271441b5
docs: remove duplicate Vietnamese docs and orphan Greek locale (#3701)
- Remove docs/i18n/vi/ — duplicate of canonical docs/vi/ per docs-contract
- Remove docs/i18n/el/ — orphan Greek locale, not in supported locales list
- Update docs/i18n/README.md to reflect correct canonical paths

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 10:41:43 -04:00
Argenis
813ae17f48
fix(install): correct version display, show pairing code, bump to 0.4.0 (#3669)
* style: cargo fmt Box::pin calls in cron scheduler

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(install): correct version display, show pairing code, bump to 0.4.0

- Reorder ZEROCLAW_BIN resolution to prefer ~/.cargo/bin over PATH,
  preventing stale binaries from shadowing the fresh install
- Sync binary to ~/.local/bin after cargo install
- Fetch and display gateway pairing code via `gateway get-paircode`
  after service restart instead of referencing non-existent output
- Update fallback message to actionable CLI command
- Bump Cargo.toml version from 0.3.4 to 0.4.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update Cargo.lock for 0.4.0 version bump

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 09:58:31 -04:00
Argenis
bb99d2b57a
Merge branch 'master' into fix-2400-block-config-self-mutation 2026-03-16 09:21:57 -04:00
Argenis
794d87d95c
fix(config): add missing #[serde(default)] to Config struct fields (#3700)
Several recently-added Config fields (data_retention, cloud_ops,
conversational_ai, security_ops) were missing #[serde(default)],
causing deserialization failures when those sections are absent
from config files. Also fixes security field whose #[serde(default)]
was accidentally consumed by the backup doc comment.

Fixes test failures: agent_config_deserializes and
browser_config_backward_compat_missing_section.
2026-03-16 09:21:41 -04:00
李龙 0668001470
81256dbf42 test(config): fix helper lint and swarms fixture 2026-03-16 17:56:30 +08:00
李龙 0668001470
eb9b26cea0 test(config): centralize backward-compat fixtures 2026-03-16 17:45:20 +08:00
李龙 0668001470
6211824f01 fix(security): block runtime config state edits 2026-03-16 17:21:22 +08:00
Argenis
d6e5907b65
feat(tools): add cloud transformation accelerator tools (#3663)
* feat(tools): add cloud transformation accelerator tools

Add cloud_ops and cloud_patterns tools providing read-only cloud
transformation analysis: IaC review, migration assessment, cost
analysis, and Well-Architected Framework architecture review.

Includes CloudOpsConfig, SecurityOpsConfig, and ConversationalAiConfig
schema additions, Box::pin fixes for recursive async in cron scheduler,
and approval_manager field in ChannelRuntimeContext test constructors.

Original work by @rareba. Rebased on latest master with conflict
resolution (kept SwarmConfig/SwarmStrategy exports, swarm tool
registration, and approval_manager in test constructors).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: cargo fmt Box::pin calls

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:43:55 -04:00
Argenis
861dd3e2e9
feat(tools): add backup/restore and data management tools (#3662)
Add BackupTool for creating, listing, verifying, and restoring
timestamped workspace backups with SHA-256 manifest integrity
checking. Add DataManagementTool for retention status, time-based
purge, and storage statistics. Both tools are config-driven via
new BackupConfig and DataRetentionConfig sections.

Original work by @rareba. Rebased on latest master with conflict
resolution for SwarmConfig/SwarmStrategy exports and swarm tool
registration, and added missing approval_manager fields in
ChannelRuntimeContext test constructors.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:35:44 -04:00
Argenis
8a61a283b2
feat(security): add MCSS security operations tool (#3657)
* feat(security): add MCSS security operations tool

Add managed cybersecurity service (MCSS) tool with alert triage,
incident response playbook execution, vulnerability scan parsing,
and security report generation. Includes SecurityOpsConfig, playbook
engine with approval gating, vulnerability scoring, and full test
coverage. Also fixes pre-existing missing approval_manager field in
ChannelRuntimeContext test constructors.

Original work by @rareba. Supersedes #3599.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add SecurityOpsConfig to re-exports, fix test constructors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:28:54 -04:00
Argenis
dcc0a629ec
feat(tools): add project delivery intelligence tool (#3656)
Add a new read-only project_intel tool that provides:
- Status report generation (weekly/sprint/month)
- Risk scanning with configurable sensitivity
- Client update drafting (formal/casual, client/internal)
- Sprint summary generation
- Heuristic effort estimation

Includes multi-language report templates (EN, DE, FR, IT),
ProjectIntelConfig schema with validation, and comprehensive tests.

Also fixes missing approval_manager field in 4 ChannelRuntimeContext
test constructors.

Supersedes #3591 — rebased on latest master. Original work by @rareba.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 02:10:14 -04:00
Argenis
a8c6363cde
feat(nodes): add secure HMAC-SHA256 node transport layer (#3654)
Add a new `nodes` module with HMAC-SHA256 authenticated transport for
secure inter-node communication over standard HTTPS. Includes replay
protection via timestamped nonces and constant-time signature
comparison.

Also adds `NodeTransportConfig` to the config schema and fixes missing
`approval_manager` field in four `ChannelRuntimeContext` test
constructors that failed compilation on latest master.

Original work by @rareba. Rebased on latest master to resolve merge
conflicts (SwarmConfig/SwarmStrategy exports, duplicate MCP validation,
test constructor fields).

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 01:53:47 -04:00
Argenis
d9ab017df0
feat(tools): add Microsoft 365 integration via Graph API (#3653)
Add Microsoft 365 tool providing access to Outlook mail, Teams messages,
Calendar events, OneDrive files, and SharePoint search via Microsoft
Graph API. Includes OAuth2 token caching (client credentials and device
code flows), security policy enforcement, and config validation.

Rebased on latest master, resolving conflicts with SwarmConfig exports
and adding approval_manager to ChannelRuntimeContext test constructors.

Original work by @rareba.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 01:44:39 -04:00
李龙 0668001470
b4decb40c6 Merge upstream/master into fix/config-load-initialized-state 2026-03-16 13:18:30 +08:00
Argenis
249434edb2
feat(notion): add Notion database poller channel and API tool (#3650)
Add Notion integration with two components:
- NotionChannel: polls a Notion database for tasks with configurable
  status properties, concurrency limits, and stale task recovery
- NotionTool: provides CRUD operations (query_database, read_page,
  create_page, update_page) for agent-driven Notion interactions

Includes config schema (NotionConfig), onboarding wizard support,
and full unit test coverage for both channel and tool.

Supersedes #3609 — rebased on latest master to resolve merge conflicts
with swarm feature additions in config/mod.rs.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 00:55:23 -04:00
Argenis
62781a8d45
fix(lint): Box::pin crate::agent::run calls to satisfy large_futures (#3675)
Wrap all crate::agent::run() calls with Box::pin() across scheduler,
daemon, gateway tests, and main.rs to satisfy clippy::large_futures.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 00:54:27 -04:00
Chris Hengge
0adec305f9
fix(tools): qualify is_service_environment with super:: inside mod native_backend (#3659)
Commit 811fab3b added is_service_environment() as a top-level function and
called it from two sites. The call at line 445 is at module scope and resolves
fine. The call at line 1473 is inside mod native_backend, which is a child
module — Rust does not implicitly import parent-scope items, so the unqualified
name fails with E0425 (cannot find function in this scope).

Fix: prefix the call with super:: so it resolves to the parent module's
function, matching how mod native_backend already imports other parent items
(e.g. use super::BrowserAction).

The browser-native feature flag is required to reproduce:
  cargo check --features browser-native  # fails without this fix
  cargo check --features browser-native  # clean with this fix

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-16 00:35:09 -04:00
Argenis
75701195d7
feat(security): add Nevis IAM integration for SSO/MFA authentication (#3651)
* feat(security): add Nevis IAM integration for SSO/MFA authentication

Add NevisAuthProvider supporting OAuth2/OIDC token validation (local JWKS +
remote introspection), FIDO2/passkey/OTP MFA verification, session management,
and health checks. Add IamPolicy engine mapping Nevis roles to ZeroClaw tool
and workspace permissions with deny-by-default enforcement and audit logging.

Add NevisConfig and NevisRoleMappingConfig to config schema with client_secret
wired through SecretStore encrypt/decrypt. All features disabled by default.

Rebased on latest master to resolve merge conflicts in security/mod.rs (redact
function) and config/schema.rs (test section).

Original work by @rareba. Supersedes #3593.

Co-Authored-By: rareba <5985289+rareba@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: cargo fmt Box::pin calls

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: rareba <5985289+rareba@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 00:34:52 -04:00
Argenis
82fe2e53fd
feat(tunnel): add OpenVPN tunnel provider (#3648)
* feat(tunnel): add OpenVPN tunnel provider

Add OpenVPN as a new tunnel provider alongside cloudflare, tailscale,
ngrok, and custom. Includes config schema, validation, factory wiring,
and comprehensive unit tests.

Co-authored-by: rareba <rareba@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add missing approval_manager field to ChannelRuntimeContext constructors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: rareba <rareba@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 00:34:34 -04:00
Argenis
327e2b4c47
style: cargo fmt Box::pin calls in cron scheduler (#3667)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 23:34:26 -04:00
Argenis
5a5d9ae5f9
fix(lint): Box::pin large futures in cron scheduler and cron_run tool (#3666)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 23:25:28 -04:00
Argenis
d8f228bd15
Merge pull request #3661 from zeroclaw-labs/work/multi-client-workspaces
feat(workspace): add multi-client workspace isolation
2026-03-15 23:10:01 -04:00
Argenis
d5eeaed3d9
Merge pull request #3649 from zeroclaw-labs/work/capability-tool-access
feat(security): add capability-based tool access control
2026-03-15 23:09:51 -04:00
Argenis
429094b049
Merge pull request #3660 from zeroclaw-labs/fix/cron-large-future
fix: add Box::pin for large future and missing approval_manager in tests
2026-03-15 23:08:47 -04:00
李龙 0668001470
2b30f060fe test(config): move initialized log regression away from merge hotspot 2026-03-16 11:06:18 +08:00
argenis de la rosa
80213b08ef feat(workspace): add multi-client workspace isolation
Add workspace profile management, security boundary enforcement, and
a workspace management tool for isolated client engagements.

Original work by @rareba. Supersedes #3597 — rebased on latest master.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:41:18 -04:00
argenis de la rosa
bf67124499 fix: add Box::pin for large future and missing approval_manager in tests
- Box::pin the cron_run execute_job_now call to satisfy clippy::large_futures
- Add missing approval_manager field to 4 query_classification test constructors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:32:06 -04:00
李龙 0668001470
f994979380 fix(config): avoid clippy used_underscore_binding 2026-03-16 09:13:18 +08:00
argenis de la rosa
cb250dfecf fix: add missing approval_manager field to ChannelRuntimeContext test constructors
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 20:03:59 -04:00
argenis de la rosa
fabd35c4ea feat(security): add capability-based tool access control
Add an optional `allowed_tools` parameter that restricts which tools are
available to the agent. When `Some(list)`, only tools whose name appears
in the list are retained; when `None`, all tools remain available
(backward compatible). This enables fine-grained capability control for
cron jobs, heartbeat tasks, and CLI invocations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 19:34:34 -04:00
Argenis
a695ca4b9c
fix(onboard): auto-detect TTY instead of --interactive flag (#3573)
Remove the --interactive flag from `zeroclaw onboard`. The command now
auto-detects whether stdin/stdout are a TTY: if yes and no provider
flags are given, it launches the full interactive wizard; otherwise it
runs the quick (scriptable) setup path.

This means all three install methods work with a single flow:
  curl -fsSL https://zeroclawlabs.ai/install.sh | bash
  cargo install zeroclawlabs && zeroclaw onboard
  docker run … zeroclaw onboard --api-key …
2026-03-15 19:25:55 -04:00
Argenis
811fab3b87
fix(service): headless browser works in service mode (systemd/OpenRC) (#3645)
When zeroclaw runs as a service, the process inherits a minimal
environment without HOME, DISPLAY, or user namespaces. Headless
browsers (Chromium/Firefox) need HOME for profile/cache dirs and
fail with sandbox errors without user namespaces.

- Detect service environment via INVOCATION_ID, JOURNAL_STREAM,
  or missing HOME on Linux
- Auto-apply --no-sandbox and --disable-dev-shm-usage for Chrome
  in service mode
- Set HOME fallback and CHROMIUM_FLAGS on agent-browser commands
- systemd unit: add Environment=HOME=%h and PassEnvironment
- OpenRC script: export HOME=/var/lib/zeroclaw with start_pre()
  to create the directory

Closes #3584
2026-03-15 19:16:36 -04:00
Argenis
1a5d91fe69
fix(channels): wire query_classification config into channel message processing (#3619)
The QueryClassificationConfig was parsed from config but never applied
during channel message processing. This adds the query_classification
field to ChannelRuntimeContext and invokes the classifier in
process_channel_message to override the route when a classification
rule matches a model_routes hint.

Closes #3579
2026-03-15 19:16:32 -04:00
Argenis
6eec1c81b9
fix(ci): use ubuntu-22.04 for Linux release builds (#3573)
Build against glibc 2.35 to ensure binary compatibility with Ubuntu 22.04+.
2026-03-15 18:57:30 -04:00
Argenis
602db8bca1
fix: exclude name field from Mistral tool_calls (#3572)
* fix: exclude name field from Mistral tool_calls (#3572)

Add skip_serializing_if to the compatibility fields (name, arguments,
parameters) on the ToolCall struct so they are omitted from the JSON
payload when None. Mistral's API returns 422 "Extra inputs are not
permitted" when these extra null fields are present in tool_calls.

* fix: format serde attribute for CI lint compliance
2026-03-15 18:38:41 -04:00
simianastronaut
2539bcafe0 fix(gateway): pass bearer token in WebSocket subprotocol for dashboard auth
The dashboard WebSocket client was only sending ['zeroclaw.v1'] as the
protocols parameter, omitting the bearer token subprotocol. When
require_pairing = true, the server extracts the token from
Sec-WebSocket-Protocol as a fallback (browsers cannot set custom
headers on WebSocket connections). Without the bearer.<token> entry
in the protocols array, subprotocol-based authentication always failed.

Include `bearer.<token>` in the protocols array when a token is
available, matching the server's extract_ws_token() expectation.

Closes #3011

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 16:37:41 -04:00
simianastronaut
37d76f7c42 feat(config): support initial_prompt in transcription config for proper noun recognition
Add `initial_prompt: Option<String>` to `TranscriptionConfig` and pass
it as the `prompt` field in the Whisper API multipart POST when present.
This lets users bias transcription toward expected vocabulary (proper
nouns, technical terms) via the config file.

Closes #2881

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 16:31:55 -04:00
simianastronaut
41b46f23e3 docs(setup): add Docker/Podman stop/restart instructions
Users who installed via `./install.sh --docker` had no documented way to
restart the container after stopping it. Add clear lifecycle instructions
(stop, start, restart, logs, health check) to both the bootstrap guide and
the operations runbook, covering docker-compose, manual `docker run`, and
Podman-specific flags.

Closes #3474

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 16:26:28 -04:00
SimianAstronaut7
314e1d3ae8
Merge pull request #3638 from zeroclaw-labs/work-issues/3487-channel-approval-manager
fix(security): enforce approval policy for channel-driven runs
2026-03-15 16:11:14 -04:00
SimianAstronaut7
82be05b1e9
Merge pull request #3636 from zeroclaw-labs/work-issues/3628-surface-tool-failures-in-chat
feat(agent): surface tool call failure reasons in chat
2026-03-15 16:07:38 -04:00
SimianAstronaut7
1373659058
Merge pull request #3634 from zeroclaw-labs/work-issues/3477-fix-matrix-channel-key
fix(channel): use plain "matrix" channel key for consistent outbound routing
2026-03-15 16:07:36 -04:00
Argenis
c7f064e866
fix(channels): surface visible warning when whatsapp-web feature is missing (#3629)
The WhatsApp Web QR code was not shown during onboarding channel launch
because the wizard allowed configuring WhatsApp Web mode even when the
binary was built without the `whatsapp-web` feature flag. At runtime,
the channel was silently skipped with only a tracing::warn that most
users never see.

- Add compile-time warning in the onboarding wizard when WhatsApp Web
  mode is selected but the feature is not compiled in
- Add eprintln! in collect_configured_channels so users see a visible
  terminal warning when the feature is missing at startup

Closes #3577
2026-03-15 16:07:13 -04:00
Giulio V
9c1d63e109
feat(hands): add autonomous knowledge-accumulating agent packages (#3603)
Introduce the Hands system — autonomous agent packages that run on
schedules and accumulate knowledge over time. Each Hand maintains a
rolling context of findings across runs so the agent grows smarter
with every execution.

This PR adds:
- Hand definition type (TOML-deserializable, reuses cron Schedule)
- HandRun / HandRunStatus for execution records
- HandContext for rolling cross-run knowledge accumulation
- File-based persistence (load/save context as JSON)
- Directory-based Hand loading from ~/.zeroclaw/hands/*.toml
- 20 unit tests covering deserialization, persistence roundtrip,
  history capping, fact deduplication, and error handling

Execution integration with the agent loop is deferred to a follow-up.
2026-03-15 16:06:14 -04:00
Argenis
966edf1553
Merge pull request #3635 from zeroclaw-labs/chore/bump-v0.3.4
chore: bump version to v0.3.4
2026-03-15 15:59:51 -04:00
simianastronaut
a1af84d992 fix(security): enforce approval policy for channel-driven runs
Channel-driven runs (Telegram, Matrix, Discord, etc.) previously bypassed
the ApprovalManager entirely — `None` was passed into the tool-call loop,
so `auto_approve`, `always_ask`, and supervised approval checks were
silently skipped for all non-CLI execution paths.

Add a non-interactive mode to ApprovalManager that enforces the same
autonomy config policies but auto-denies tools requiring interactive
approval (since no operator is present on channel runs). Specifically:

- Add `ApprovalManager::for_non_interactive()` constructor that creates
  a manager which auto-denies tools needing approval instead of prompting
- Add `is_non_interactive()` method so the tool-call loop can distinguish
  interactive (CLI prompt) from non-interactive (auto-deny) managers
- Update tool-call loop: non-interactive managers auto-deny instead of
  the previous auto-approve behavior for non-CLI channels
- Wire the non-interactive approval manager into ChannelRuntimeContext
  so channel runs enforce the full approval policy
- Add 8 tests covering non-interactive approval behavior

Security implications:
- `always_ask` tools are now denied on channels (previously bypassed)
- Supervised-mode unknown tools are now denied on channels (previously
  bypassed)
- `auto_approve` tools continue to work on channels unchanged
- `full` autonomy mode is unaffected (no approval needed regardless)
- `read_only` mode is unaffected (blocks execution elsewhere)

Closes #3487

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:56:57 -04:00
simianastronaut
0ad1965081 feat(agent): surface tool call failure reasons in chat progress messages
When a tool call fails (security policy block, hook cancellation, user
denial, or execution error), the failure reason is now included in the
progress message sent to the chat channel via on_delta. Previously only
a  icon was shown; now users see the actual reason (e.g. "Command not
allowed by security policy") without needing to check `zeroclaw doctor
traces`.

Closes #3628

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:49:27 -04:00
argenis de la rosa
70e8e7ebcd chore: bump version to v0.3.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 15:44:59 -04:00
Alix-007
2bcb82c5b3
fix(python): point docs URL at master branch (#3334)
Co-authored-by: Alix-007 <Alix-007@users.noreply.github.com>
2026-03-15 15:43:35 -04:00
simianastronaut
e211b5c3e3 fix(channel): use plain "matrix" channel key for consistent outbound routing
The Matrix channel listener was building channel keys as `matrix:<room_id>`,
but the runtime channel mapping expects the plain key `matrix`. This mismatch
caused replies to silently drop in deployments using the Matrix channel.

Closes #3477

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:42:43 -04:00
Argenis
8691476577
Merge pull request #3624 from zeroclaw-labs/feat/multi-swarm-and-bugfixes
feat(swarm): multi-agent swarm orchestration + bug fixes (#3572, #3573)
2026-03-15 15:42:03 -04:00
SimianAstronaut7
e34a804255
Merge pull request #3632 from zeroclaw-labs/work-issues/3544-fix-codex-sse-buffering
fix(provider): use incremental SSE stream reading for openai-codex responses
2026-03-15 15:34:39 -04:00
SimianAstronaut7
6120b3f705
Merge pull request #3630 from zeroclaw-labs/work-issues/3567-allow-commands-bypass-high-risk
fix(security): let explicit allowed_commands bypass high-risk block
2026-03-15 15:34:37 -04:00
SimianAstronaut7
f175261e32
Merge pull request #3631 from zeroclaw-labs/work-issues/3486-fix-matrix-image-marker
fix(channels): use canonical IMAGE marker in Matrix channel
2026-03-15 15:34:31 -04:00
simianastronaut
fd9f66cad7 fix(provider): use incremental SSE stream reading for openai-codex responses
Replace full-body buffering (`response.text().await`) in
`decode_responses_body()` with incremental `bytes_stream()` chunk
processing.  The previous approach held the HTTP connection open until
every byte had arrived; on high-latency links the long-lived connection
would frequently drop mid-read, producing the "error decoding response
body" failure on the first attempt (succeeding only after retry).

Reading chunks incrementally lets each network segment complete within
its own timeout window, eliminating the systematic first-attempt failure.

Closes #3544

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:22:55 -04:00
simianastronaut
d928ebc92e fix(channels): use canonical IMAGE marker in Matrix channel
Matrix image messages used lowercase `[image: ...]` format instead of
the canonical `[IMAGE:...]` marker used by all other channels (Telegram,
Slack, Discord, QQ, LinQ). This caused Matrix image attachments to
bypass the multimodal vision pipeline which looks for `[IMAGE:...]`.

Closes #3486

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:14:53 -04:00
simianastronaut
9fca9f478a fix(security): let explicit allowed_commands bypass high-risk block
When `block_high_risk_commands = true`, commands like `curl` and `wget`
were unconditionally blocked even if explicitly listed in
`allowed_commands`. This made it impossible to use legitimate API calls
in full autonomy mode.

Now, if a command is explicitly named in `allowed_commands` (not via
the wildcard `*`), it is exempt from the `block_high_risk_commands`
gate. The wildcard entry intentionally does NOT grant this exemption,
preserving the safety net for broad allowlists.

Other security gates (supervised-mode approval, rate limiting, path
policy, argument validation) remain fully enforced.

Closes #3567

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:13:32 -04:00
SimianAstronaut7
7106632b51
Merge pull request #3627 from zeroclaw-labs/work-issues/3533-fix-utf8-slice-panic
fix(agent): use char-boundary-safe slicing to prevent CJK text panic
2026-03-15 14:36:49 -04:00
SimianAstronaut7
b834278754
Merge pull request #3626 from zeroclaw-labs/work-issues/3563-fix-cron-add-nl-security
fix(cron): add --agent flag so natural language prompts bypass shell security
2026-03-15 14:36:46 -04:00
SimianAstronaut7
186f6d9797
Merge pull request #3625 from zeroclaw-labs/work-issues/3568-http-request-private-hosts
feat(tool): add allow_private_hosts option to http_request tool
2026-03-15 14:36:44 -04:00
simianastronaut
6cdc92a256 fix(agent): use char-boundary-safe slicing to prevent CJK text panic
Replace unsafe byte-index string slicing (`&text[..N]`) with
char-boundary-safe alternatives in memory consolidation and security
redaction to prevent panics when multi-byte UTF-8 characters (e.g.
Chinese/Japanese/Korean) span the slice boundary.

Fixes the same class of bug as the prior fix in `execute_one_tool`
(commit 8fcbb6eb), applied to two remaining instances:
- `src/memory/consolidation.rs`: truncation at byte 4000 and 200
- `src/security/mod.rs`: `redact()` prefix at byte 4

Adds regression tests with CJK input for both locations.

Closes #3533

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 14:27:09 -04:00
simianastronaut
02599dcd3c fix(cron): add --agent flag to CLI cron commands to bypass shell security validation
The CLI `cron add` command always routed the second positional argument
through shell security policy validation, which blocked natural language
prompts like "Check server health: disk space, memory, CPU load". This
adds an `--agent` flag to `cron add`, `cron add-at`, `cron add-every`,
and `cron once` so that natural language prompts are correctly stored as
agent jobs without shell command validation.

Closes #3563

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 14:26:45 -04:00
simianastronaut
fe64d7ef7e feat(tool): add allow_private_hosts option to http_request tool (#3568)
The http_request tool unconditionally blocked all private/LAN hosts with
no opt-out, preventing legitimate use cases like calling a local Home
Assistant instance or internal APIs. This adds an `allow_private_hosts`
config flag (default: false) under `[http_request]` that, when set to
true, skips the private-host SSRF check while still enforcing the domain
allowlist.

Closes #3568

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 14:23:54 -04:00
argenis de la rosa
996dbe95cf feat(swarm): multi-agent swarm orchestration, Mistral tool fix, restore --interactive
- Add SwarmTool with sequential (pipeline), parallel (fan-out/fan-in),
  and router (LLM-selected) strategies for multi-agent workflows
- Add SwarmConfig and SwarmStrategy to config schema
- Fix Mistral 422 error by adding skip_serializing_if to ToolCall
  compat fields (name, arguments, parameters, kind) — Fixes #3572
- Restore `zeroclaw onboard --interactive` flag with run_wizard
  routing and mutual-exclusion validation — Fixes #3573
- 20 new swarm tests, 2 serialization tests, 1 CLI test, config tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 14:23:20 -04:00
Argenis
45f953be6d
Merge pull request #3578 from zeroclaw-labs/chore/bump-v0.3.3
chore: bump version to v0.3.3
2026-03-15 09:53:13 -04:00
argenis de la rosa
82f29bbcb1 chore: bump version to v0.3.3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:41:22 -04:00
Argenis
93b5a0b824
feat(context): token-based compaction, persistent sessions, and LLM consolidation (#3574)
Comprehensive long-running context upgrades:

- Token-based compaction: replace message-count trigger with token
  estimation (~4 chars/token). Compaction fires when estimated tokens
  exceed max_context_tokens (default 32K) OR message count exceeds
  max_history_messages. Cuts at user-turn boundaries only.

- Persistent sessions: JSONL append-only session files per channel
  sender in {workspace}/sessions/. Sessions survive daemon restarts.
  Hydrates in-memory history from disk on startup.

- LLM-driven memory consolidation: two-phase extraction after each
  conversation turn. Phase 1 writes a timestamped history entry (Daily).
  Phase 2 extracts new facts/preferences to Core memory (if any).
  Replaces raw message auto-save with semantic extraction.

- New config fields: agent.max_context_tokens (32000),
  channels_config.session_persistence (true).

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 09:25:23 -04:00
Argenis
08a67c4a2d
chore: bump version to v0.3.2 (#3564)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 06:47:37 -04:00
Argenis
c86a0673ba
feat(heartbeat): two-phase execution, structured tasks, and auto-routing (#3562)
Upgrade heartbeat system with 4 key improvements:

- Two-phase heartbeat: Phase 1 asks LLM "skip or run?" to save API cost
  on quiet periods. Phase 2 executes only selected tasks.
- Structured task format: `- [priority|status] task text` with
  high/medium/low priority and active/paused/completed status.
- Decision intelligence: LLM-driven smart filtering via structured prompt
  at temperature 0.0 for deterministic decisions.
- Delivery routing: auto-detect best configured channel when no explicit
  target is set (telegram > discord > slack > mattermost).

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 06:11:59 -04:00
Argenis
cabf99ba07
Merge pull request #3539 from zeroclaw-labs/cleanup
chore: add .wrangler/ to gitignore
2026-03-14 22:53:12 -04:00
argenis de la rosa
2d978a6b64 chore: add .wrangler/ to gitignore and clean up stale files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 22:41:17 -04:00
Argenis
4dbc9266c1
Merge pull request #3536 from zeroclaw-labs/test/termux-release-validation
test: add Termux release validation script
2026-03-14 22:21:21 -04:00
argenis de la rosa
ea0b3c8c8c test: add Termux release validation script
Validates the aarch64-linux-android release artifact: download, archive
integrity, ELF format, architecture, checksum, and install.sh detection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 22:10:33 -04:00
Argenis
0c56834385
chore(ci): remove sync-readme workflow and script (#3535)
The auto-generated What's New and Recent Contributors README sections
have been removed, so the sync-readme workflow and its backing script
are no longer needed.
2026-03-14 21:38:04 -04:00
Argenis
caccf0035e
docs(readme): remove stale What's New and Contributors sections (#3534)
Clear auto-generated sections so they repopulate correctly on the next
release via sync-readme workflow.
2026-03-14 21:36:26 -04:00
Argenis
627b160f55
fix(install): clean up stale cargo tracking from old package name (#3532)
When the crate was renamed from `zeroclaw` to `zeroclawlabs`, users who
installed via install.sh (which uses `cargo install --path`) had the
binary tracked under the old package name. Later running
`cargo install zeroclawlabs` from crates.io fails with:

  error: binary `zeroclaw` already exists as part of `zeroclaw v0.1.9`

The installer now detects and removes stale tracking for the old
`zeroclaw` package name before installing, so both install.sh and
`cargo install zeroclawlabs` work cleanly for upgrades.
2026-03-14 21:20:02 -04:00
Argenis
6463bc84b0
fix(ci): sync tweet and README after all release artifacts are published (#3531)
The tweet was firing on `release: published` immediately when the GitHub
Release was created, but Docker push, crates.io publish, and website
redeploy were still in-flight. This meant users saw the tweet before
they could actually pull the new Docker image or install from crates.io.

Convert tweet-release.yml and sync-readme.yml to reusable workflows
(workflow_call) and call them as the final jobs in both release
pipelines, gated on completion of docker, crates-io, and
redeploy-website jobs.

Before: gh release create → tweet fires immediately (race condition)
After:  gh release create → docker + crates + website → tweet + readme
2026-03-14 21:19:56 -04:00
ZeroClaw Bot
f84f1229af docs(readme): auto-sync What's New and Contributors 2026-03-15 01:07:01 +00:00
ZeroClaw Bot
f85d21097b docs(readme): auto-sync What's New and Contributors 2026-03-15 01:01:55 +00:00
Argenis
306821d6a2
Merge pull request #3530 from zeroclaw-labs/chore/bump-v0.3.1
chore: bump version to v0.3.1
2026-03-14 20:29:13 -04:00
argenis de la rosa
06f9424274 chore: bump version to v0.3.1
Patch release for Termux/Android support. Corrects from v0.4.0 to v0.3.1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 20:17:53 -04:00
Argenis
fa14ab4ab2
Merge pull request #3528 from zeroclaw-labs/chore/bump-v0.4.0
chore: bump version to v0.4.0
2026-03-14 20:06:32 -04:00
argenis de la rosa
36a0c8eba9 chore: bump version to v0.4.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 19:49:07 -04:00
Argenis
f4c82d5797
Merge pull request #3525 from zeroclaw-labs/feat/termux-release-support
feat(ci): add Termux (aarch64-linux-android) release target
2026-03-14 19:47:50 -04:00
ZeroClaw Bot
5edebf4869 docs(readme): auto-sync What's New and Contributors 2026-03-14 23:47:45 +00:00
argenis de la rosa
613fa79444 feat(ci): add Termux (aarch64-linux-android) release target
Add prebuilt binary support for Termux/Android devices:
- Add aarch64-linux-android to stable and beta release matrices with NDK setup
- Detect Termux in install.sh and map to the correct android target
- Add Termux pkg manager support for system dependency installation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 19:36:44 -04:00
ZeroClaw Bot
44c8e1eaac docs(readme): auto-sync What's New and Contributors 2026-03-14 22:35:02 +00:00
Argenis
414b1fa8dd
fix(docs): remove stale onboarding flags after CLI changes (#3516)
Remove references to --interactive, --security-level, and --onboard
flags that no longer exist in the CLI. Update examples to use current
supported flags.

Closes #3484
2026-03-14 17:54:14 -04:00
Argenis
913d5ee851
fix(provider): skip empty text content blocks in Anthropic API requests (#3515)
Filter out empty/whitespace-only text content blocks from assistant,
tool, and user messages before sending to the Anthropic API.

Closes #3483
2026-03-14 17:52:53 -04:00
Argenis
5a4332d0e4
fix(install): avoid /dev/stdin file redirect in guided installer (#3514)
Probe /dev/stdin readability before selecting it, and add /proc/self/fd/0
as a fallback for constrained containers where /dev/stdin is inaccessible.

Closes #3482
2026-03-14 17:52:03 -04:00
ZeroClaw Bot
970c80d278 docs(readme): auto-sync What's New and Contributors 2026-03-14 21:46:24 +00:00
ZeroClaw Bot
9514c20038 docs(readme): auto-sync What's New and Contributors 2026-03-14 21:18:20 +00:00
Argenis
9cf31a732c
fix: increase recursion limit for matrix-sdk 0.16 on Rust 1.94+ (#3512)
matrix-sdk 0.16 generates deeply nested types that exceed the default
recursion limit (128) on newer Rust compilers. Bump to 256.

Closes #3468
2026-03-14 17:07:28 -04:00
Argenis
7f0ddf06a9
fix: wire Signal channel into scheduled announcement delivery (#3511)
Add SignalChannel import and match arm in deliver_announcement() so
cron jobs with delivery.channel = "signal" are handled instead of
rejected as unsupported.

Closes #3476
2026-03-14 17:07:26 -04:00
Argenis
b79e88662e
fix: resolve web dashboard 404 on static assets and SPA fallback (#3510)
* fix: resolve web dashboard 404 on static assets and SPA fallback

Strip leading slash from asset paths after prefix removal so rust-embed
can find the files. Return 503 with a helpful build hint when index.html
is missing instead of a generic 404.

Closes #3508

* fix: return concrete Response type to fix match arm type mismatch
2026-03-14 17:07:24 -04:00
ZeroClaw Bot
b71b69fa6e docs(readme): auto-sync What's New and Contributors 2026-03-14 21:02:25 +00:00
Argenis
8b961b7bd9
chore: bump version to v0.3.0 (#3509)
Milestone release covering:
- Comprehensive channel matrix test suite (50 tests across 16 platforms)
- Auto-synced README What's New and Contributors across 31 locales
- Anthropic consecutive message merging fix
- Nextcloud Talk Create event support
- Tweet content-hash dedup
- CI/CD stability improvements (Docker timeout, release token, tweet URLs)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:55:38 -04:00
ZeroClaw Bot
3b67d8a797 docs(readme): auto-sync What's New and Contributors 2026-03-14 20:45:42 +00:00
Argenis
f0e111bf7b
feat(channels): comprehensive channel matrix tests + v0.2.2 (#3507)
* feat(channels): add comprehensive channel matrix tests and bump to v0.2.2

Add 50 integration tests covering the full Channel trait contract across
all 16 platforms: identity semantics, threading, draft lifecycle, reactions,
pinning, concurrency, edge cases, and cross-channel routing. Bump version
to 0.2.2.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: fix rustfmt formatting in channel matrix tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(lint): remove empty line after doc comment in channel matrix tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:34:00 -04:00
ZeroClaw Bot
b3071f622a docs(readme): auto-sync What's New and Contributors 2026-03-14 20:31:58 +00:00
Argenis
8dbf142c7b
feat(ci): auto-sync README What's New and Contributors on release (#3505)
* feat(ci): auto-sync README What's New and Contributors on release

Replace hardcoded What's New (v0.1.9b) and Recent Contributors sections
with marker-based auto-sync powered by a new GitHub Actions workflow.
The sync-readme workflow runs on each release and updates both sections
from git history.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(ci): auto-sync What's New and Contributors across all 31 READMEs

Add marker comments to all 30 translated README files and update the
sync script to process all README*.md files on each release. Fix regex
to handle empty markers on first run.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 16:00:18 -04:00
Argenis
2b3603bacf
fix(anthropic): merge consecutive same-role messages to prevent 500 errors (#3501)
When multiple tool calls execute in a single turn, each tool result was
emitted as a separate role="user" message. Anthropic's API rejects
adjacent messages with the same role, and newer models like
claude-sonnet-4-6 respond with 500 Internal Server Error instead of a
descriptive 400.

Merge consecutive same-role messages in convert_messages() so that
multiple tool_result blocks are combined into one user message, and
consecutive user/assistant messages are also properly coalesced.

Fixes #3493
2026-03-14 15:10:37 -04:00
Argenis
02369d892d
fix(ci): bump Docker timeout to 60m and skip duplicate crates.io publish (#3503)
fix(ci): bump Docker timeout to 60m and skip duplicate crates.io publish
2026-03-14 15:07:57 -04:00
argenis de la rosa
b38db505ff fix(ci): bump Docker timeout to 60m and skip duplicate crates.io publish
Multi-platform Docker builds (linux/amd64 + linux/arm64) with fat LTO
and codegen-units=1 consistently exceed 30 minutes. Bump to 60m.

Also skip crates.io publish when the version already exists (the
auto-sync workflow may have published it before the stable release
runs).
2026-03-14 14:56:16 -04:00
Argenis
06b9525263
fix(nextcloud_talk): accept "Create" event type for new messages (#3500)
Nextcloud Talk bot webhooks send event type "Create" for new chat
messages, but the parser only accepted "message". This caused all
valid messages to be skipped with "skipping non-message event: Create".

Accept both "message" and "Create" as valid event types.

Closes #3491
2026-03-14 14:48:48 -04:00
Argenis
8fe573330c
fix(tweet): add content-hash dedup to prevent duplicate tweets (#3499)
Uses GitHub Actions cache with SHA-256 hash of tweet content. If the
exact same tweet text was already posted in a previous run, the tweet
is skipped with a warning. Works for both auto-release and manual
dispatch tweets.

Three-layer dedup:
1. feat() commit check — skip if no new features since last release
2. Content hash — skip if identical tweet already posted (cache hit)
3. Beta-to-beta diff — only new features since previous release tag

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 14:14:28 -04:00
Argenis
dc61f08f60
fix(ci): preserve release URL in tweets instead of truncating (#3498)
fix(ci): preserve release URL in tweets instead of truncating
2026-03-14 14:09:42 -04:00
Argenis
f7c8a3b8be
fix(ci): use RELEASE_TOKEN for stable release tag creation (#3496)
fix(ci): use RELEASE_TOKEN for stable release tag creation
2026-03-14 14:03:34 -04:00
argenis de la rosa
6cd8749eb4 fix(ci): preserve release URL in tweets instead of truncating it
The 280-char truncation was blindly chopping the tweet text, cutting
off the GitHub release URL. Now we extract the URL first, truncate
only the body text to fit (accounting for X's 23-char t.co counting),
then re-append the full URL so it always renders correctly.
2026-03-14 13:56:18 -04:00
argenis de la rosa
c54f374c7e fix(ci): use RELEASE_TOKEN for stable release creation
GITHUB_TOKEN lacks permission to create tags, causing 'Published
releases must have a valid tag' errors. Use RELEASE_TOKEN (same PAT
the beta workflow uses successfully).
2026-03-14 13:49:58 -04:00
argenis de la rosa
dd00b57f6f fix: add dummy src/lib.rs in Dockerfile for dep caching stage 2026-03-14 13:49:19 -04:00
argenis de la rosa
c8db32389d feat: auto-sync crates.io on version bump
Triggers on push to master when Cargo.toml changes. Detects version
bumps by comparing current vs previous commit, checks crates.io to
avoid duplicate publishes, then publishes automatically.
2026-03-14 13:28:52 -04:00
Argenis
611e4702c2
Merge pull request #3495 from zeroclaw-labs/chore/bump-v0.2.1
chore: bump version to v0.2.1
2026-03-14 13:17:34 -04:00
argenis de la rosa
99cfae1f00 fix: use --no-verify and clean web source to prevent build.rs from re-running npm 2026-03-14 13:05:03 -04:00
argenis de la rosa
1c624f0c51 chore: bump version to v0.2.1
GitHub's immutability policy prevents reuse of the v0.2.0 tag after the
original release was deleted. Bump to v0.2.1 for a clean stable release.
2026-03-14 13:02:05 -04:00
argenis de la rosa
8a8f946269 fix: clean web/node_modules before cargo package to prevent leaking into crate 2026-03-14 12:59:06 -04:00
argenis de la rosa
17469945f7 fix: keep lib/bin name as zeroclaw while publishing as zeroclawlabs
The source uses `zeroclaw::` internally so we need explicit bin/lib
names to avoid breaking crate references after package rename.
2026-03-14 12:52:17 -04:00
argenis de la rosa
6dcd7b7222 fix: regenerate Cargo.lock after crate rename to zeroclawlabs 2026-03-14 12:48:21 -04:00
argenis de la rosa
342f743720 fix: rename crate to zeroclawlabs (zeroclaw taken by another user) 2026-03-14 12:47:13 -04:00
Argenis
e05fd75763
feat(providers): add 17 providers, total now 61 — most in any AI agent (#3492)
New fast inference providers:
- Cerebras, SambaNova, Hyperbolic

New model hosting platforms:
- DeepInfra, Hugging Face, AI21 Labs, Reka, Baseten, Nscale,
  Anyscale, Nebius AI Studio, Friendli AI, Lepton AI

New Chinese AI providers:
- Stepfun, Baichuan, 01.AI (Yi), Tencent Hunyuan

Also fixed missing list_providers() entries for Telnyx and Azure OpenAI.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 12:39:28 -04:00
argenis de la rosa
4daeb380a0 fix: allow-dirty flag for cargo publish (web/dist built in CI) 2026-03-14 12:06:17 -04:00
Argenis
ddacb2a917
feat: add crates.io publish workflow and package config (#3490)
- Add include filter to Cargo.toml (750 -> 235 files) for clean crate packaging
- Add publish-crates.yml workflow for manual crates.io publishing with dry-run support
- Add crates-io job to release-stable-manual.yml for auto-publish on stable releases
- Requires CARGO_REGISTRY_TOKEN secret to be configured in repo settings
2026-03-14 12:01:53 -04:00
Argenis
77ca576be6
feat(release+providers): fix release race condition, add 3 providers (#3489)
* feat(release+providers): fix release race condition, add 3 providers

Release fix (two parts):
1. Replace softprops/action-gh-release with `gh release create` — the
   CLI uploads assets atomically with the release in a single call,
   avoiding the immutable release race condition
2. Move website redeploy to a separate job with `if: always()` — so the
   website updates regardless of publish outcome

Both release-beta-on-push.yml and release-stable-manual.yml are fixed.

Provider additions:
- SiliconFlow (siliconflow, silicon-flow)
- AiHubMix (aihubmix)
- LiteLLM router (litellm, lite-llm)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: trigger CI

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 11:53:27 -04:00
Argenis
5a4f69e71f
Merge pull request #3488 from zeroclaw-labs/fix/release-immutable-asset-upload
fix(ci): fix immutable release error blocking release updates
2026-03-14 11:36:34 -04:00
argenis de la rosa
e952838eef fix(ci): harden release publish with notes-file and explicit repo flag
- Use --notes-file instead of --notes to safely handle multiline
  release notes with special characters
- Add explicit --repo flag for resilience
- Simplify redeploy-website condition to only run on publish success
2026-03-14 11:24:53 -04:00
argenis de la rosa
3fc4e66fb6 fix(ci): replace softprops/action-gh-release with gh CLI to fix immutable release error
The softprops/action-gh-release action creates the release first, then
uploads assets in separate API calls. GitHub's immutable release policy
rejects those subsequent uploads, causing "Cannot upload assets to an
immutable release" errors. The gh CLI uploads assets atomically with
release creation, avoiding this race condition.

Also moves website redeploy into a separate job that runs regardless of
publish outcome, so the site stays in sync even if asset upload fails.
2026-03-14 11:21:30 -04:00
Argenis
0a331a1440
docs: remove obsolete architecture/config/dev sections from all READMEs (#3485)
Remove Architecture, Security, Configuration, Python Companion, Identity
System, Gateway API, Commands, Development, CI/CD, and Build troubleshooting
sections from README.md and all 16 translated variants. These sections are
no longer relevant and the information lives in the docs/ directory.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 11:20:01 -04:00
guitaripod
5919becab9
fix(telegram): route image-extension Documents through vision pipeline (#3457)
Documents with image extensions (jpg, png, etc.) are routed to
[Document: name] /path instead of [IMAGE:/path], bypassing the
multimodal pipeline entirely. This causes the model to have no vision
input for images sent as Telegram Documents.

Re-applies fix from merged dev PR #1631 which was lost during the
master branch migration.

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-14 09:54:41 -04:00
guitaripod
287d9bdc17
fix(telegram): handle brackets in attachment filenames (#3458)
parse_attachment_markers uses .find(']') which matches the first ]
in the content. Filenames containing brackets (e.g. yt-dlp output
'Video [G4PvTrTp7Tc].mp4') get truncated at the inner bracket,
causing the send to fail with 'path not found'.

Uses depth-tracking bracket matching instead.

Re-applies fix from merged dev PR #1632 which was lost during the
master branch migration.

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-14 09:52:37 -04:00
guitaripod
f900d7079e
feat(channels): add show_tool_calls config to suppress tool notifications (#3480)
* feat(channels): add show_tool_calls config to suppress tool notifications

When show_tool_calls is false, the ChannelNotifyObserver drains tool
events silently instead of forwarding them as individual messages to
the channel. Server-side logs remain unaffected.

Defaults to true for backwards compatibility.

* docs: add before/after screenshots for show_tool_calls PR

* docs(config): add doc comment on show_tool_calls field

---------

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-14 09:49:35 -04:00
Argenis
5a5b5a4402
fix(tweet): prevent duplicates, show contributor count, add hashtags (#3481)
- Only tweet when there are NEW feat() commits since the previous
  release (including betas) — skips if no new features to announce
- Feature diff uses previous release tag (beta-to-beta) to prevent
  listing the same features across consecutive releases
- Contributor count uses stable-to-HEAD range for full cycle credit
- Shows count instead of names to avoid 280 char clipping
- Added #zeroclaw #rust #ai #opensource hashtags

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 09:41:18 -04:00
Argenis
06f65fb711
feat(release): bump to v0.2.0 with auto-tweet and contributor notes (#3475)
* feat(release): bump to v0.2.0, auto-tweet with features + contributors

- Bump version from 0.1.9 to 0.2.0
- Release notes now auto-generate from feat() commits only (no bug
  fixes) keeping them clean and concise
- Contributors are always featured in release notes, pulled from
  git log authors and Co-Authored-By trailers
- Tweet workflow now fires on all releases (beta + stable), auto-
  generates punchy feature-focused tweets with contributor shoutouts
- Stable release workflow gets the same release notes treatment
- Tweet gracefully skips if Twitter secrets aren't configured

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(release): credit all contributors, wider range, filter bots

- Use wider git range for contributor collection — skips same-version
  betas to capture everyone who contributed to the release, not just
  the last incremental push
- Filter out bot accounts (dependabot, github-actions, copilot, etc.)
  from contributor lists
- Tweet shows up to 6 contributors with "+ N more" when there are
  extras, ensuring everyone gets credit
- Deduplicate contributors across git authors and Co-Authored-By
- Deduplicate features with sort -uf for cleaner notes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(release): use last stable tag for contributor range, not last beta

Ensures the tweet and release notes capture ALL contributors since the
last stable release (e.g. v0.1.9a), not just since the last beta tag.
This gives proper credit to everyone who contributed across the full
release cycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 07:59:04 -04:00
Argenis
46d4b13c22
feat(install): branded one-click installer with secure pairing flow (#3471)
* feat(install): consolidate one-click installer with branded output and inline onboarding

- Add blue color scheme with 🦀 crab emoji branding throughout installer
- Add structured [1/3] [2/3] [3/3] step output with ✓/·/✗ indicators
- Consolidate onboarding into install.sh: inline provider selection menu,
  API key prompt, and model override — no separate wizard step needed
- Replace --onboard/--interactive-onboard with --skip-onboard (opt-out)
- Add OS detection display, install method, version detection, upgrade vs
  fresh install logic
- Add post-install gateway service install/restart, doctor health check
- Add dashboard URL (port 42617) with clipboard copy and browser auto-open
- Add docs link (https://www.zeroclawlabs.ai/docs) to success output
- Display pairing code after onboarding in Rust CLI (src/main.rs)
- Remove --interactive flag from `zeroclaw onboard` CLI command
- Remove redundant scripts/install-release.sh legacy redirect
- Update all --interactive references across codebase

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(onboard): auto-pair and include bearer token in dashboard URL

After onboarding, the CLI now auto-pairs using the generated pairing
code to produce a bearer token, then displays the dashboard URL with
the token embedded (e.g. http://127.0.0.1:42617?token=zc_...) so
users can access the dashboard immediately without a separate pairing
step. The token is also persisted to config for gateway restarts.

The install script captures this token-bearing URL from the onboard
output and uses it for clipboard copy and browser auto-open.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* security(onboard): revert token-in-URL, keep pairing code terminal-only

Removes the auto-pair + token-in-URL approach in favor of the original
secure pairing flow. Bearer tokens should never appear in URLs where
they can leak via browser history, Referer headers, clipboard, or
proxy logs. The pairing code stays in the terminal and the user enters
it in the dashboard to complete the handshake securely.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: apply cargo fmt formatting

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 07:33:14 -04:00
Jacobinwwey
8fcbb6eb2d
fix(channels): harden slack threading and utf8 truncation (#3461)
* fix(channels): harden slack threading and utf8 truncation

* refactor(channel): collapse interrupt flags to satisfy clippy

---------

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-14 07:31:10 -04:00
Argenis
ce22eba7d0
fix(channels): proactively trim conversation history before provider call (#3473)
Conversation history on long-running channel sessions (e.g. Feishu) grew
unbounded until the provider returned a context-window-exceeded error.
The existing reactive compaction only kicked in *after* the error,
causing the user's message to be lost and requiring a resend.

Add proactive_trim_turns() which estimates total character count and
drops the oldest turns before the request reaches the provider.  The
budget (400 k chars ≈ 100 k tokens) leaves headroom for system prompt,
memory context, and model output.

Closes #3460
2026-03-14 07:15:34 -04:00
Argenis
7ba4d06e78
fix(docs): use absolute URL for install.sh One-Click Setup link (#3470)
The relative href="install.sh" in README nav headers resolves to
zeroclawlabs.ai/install.sh when viewed on the website, which returns
404 since the website does not serve repo-root files. Replace with
the raw.githubusercontent.com URL used elsewhere in the docs.

Fixes #3463
2026-03-14 07:14:47 -04:00
lilstaz
dc12d03876
feat(gateway): enable multi-turn chat for WebSocket connections (#3467)
Replace single-turn chat with persistent Agent to maintain conversation
history across WebSocket turns within the same connection.

Co-authored-by: staz <starzwan2333@gmail.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-14 07:04:59 -04:00
Argenis
3151604b04
fix(ci): include install.sh in release assets and website dispatch (#3469)
The website at zeroclawlabs.ai shows a copy button with
curl -fsSL https://zeroclawlabs.ai/install.sh | bash but the website
does not serve the script, returning 404.

Add install.sh as a GitHub release asset in both beta and stable
workflows so it is always available at a stable URL. Pass the raw
GitHub URL in the website redeploy dispatch payload so the website
can configure a redirect or proxy for /install.sh.

Closes #3463
2026-03-14 07:04:17 -04:00
guitaripod
c5fcda06ad
fix(agent): add channel media markers to system prompt (#3459)
The system prompt has no documentation of channel media markers
([Voice], [IMAGE:], [Document:]), causing the LLM to misinterpret
transcribed voice messages as unprocessable audio attachments instead
of responding to the transcribed text content.

Re-applies fix from merged dev PR #1697 which was lost during the
master branch migration.

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-14 06:58:40 -04:00
Ericsunsk
51a52dcadb
fix(memory): pass embedding_routes in gateway and agent loop (#3462)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-14 06:56:55 -04:00
argenis de la rosa
dd9e26eac6 ci: trigger website redeploy after release publish
After publishing a beta or stable release, dispatch a
repository_dispatch event to zeroclaw-website so it rebuilds
with the latest version tag automatically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 06:08:09 -04:00
argenis de la rosa
c4b2a21c61 ci: upgrade tweet-release with OpenClaw-style formatting, image support, and manual dispatch 2026-03-14 05:01:56 -04:00
argenis de la rosa
d6170ab49b ci: add tweet-release workflow to post to X on stable releases 2026-03-14 04:59:18 -04:00
Argenis
399c896c3b
chore: bump release notes to v0.1.9b (#3455)
Update What's New and Recent Contributors sections to reference
v0.1.9b release.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 22:57:11 -04:00
Argenis
71d32c3b04
docs(readme): add v0.1.9a release highlights and contributor credits (#3453)
* docs(readme): add v0.1.9a release highlights and contributor credits

Add "What's New in v0.1.9a" section covering web dashboard restyle,
new providers/channels, MCP tools, infrastructure updates, and fixes.
Add "Recent Contributors" table crediting key contributors with their
specific highlights for this release cycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(docs): use table format for release highlights to pass MD036 lint

Replace bold-text subsections with a table to satisfy the markdown
linter's no-emphasis-as-heading rule (MD036).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 22:41:11 -04:00
Christopher Wong
27936b051d
Windows/wizard deadlock (#3451)
* ci: add x86_64-pc-windows-msvc to build matrix

* fix: prevent test deadlock in ensure_onboard_overwrite_allowed

Gate non-interactive terminal check behind cfg!(not(test)) so tests with
force=false do not hang waiting on stdin. cfg!(test) path bails immediately
with a clear message. No changes to extra_headers, mcp, nodes, or shellexpand.

---------

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 21:59:05 -04:00
Alix-007
39d788a95f
fix(linq): accept latest webhook payload shape (#3351)
* fix(linq): accept current webhook payload shape

* style(linq): satisfy clippy lifetime lint

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-13 21:53:41 -04:00
Alix-007
5d921bd37d
fix(config): decrypt feishu channel secrets on load (#3355)
* fix(config): decrypt feishu channel secrets on load

* style(config): format feishu secret assertions

---------

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 21:53:11 -04:00
Alix-007
d17f0a946c
fix(config): recover docker runtime path on save (#3354)
* fix(config): recover docker runtime path on save

* style(config): align docker save path formatting

---------

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 21:52:40 -04:00
Alix-007
2710ce65cc
fix(cli): handle empty invocation before clap parse (#3353) 2026-03-13 21:52:15 -04:00
Alix-007
51e8fc8423
fix(install): restore legacy release installer path (#3352) 2026-03-13 21:51:56 -04:00
Alix-007
ecf9d477bd
fix(docs): use master install script URL (#3349)
Co-authored-by: Alix-007 <Alix-007@users.noreply.github.com>
2026-03-13 21:51:34 -04:00
Christopher Wong
625784c25f
ci: add x86_64-pc-windows-msvc to build matrix (#3449)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 21:45:08 -04:00
Asuta
348c0c37b7
feat(agent): 支持交互会话状态持久化与恢复 (#3421)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 18:55:42 -04:00
zq
11a1dae55b
docs(i18n/zh-CN): Complete full Chinese documentation translation and… (#3429)
* docs(i18n/zh-CN): Complete full Chinese documentation translation and i18n migration

  - Translate 58 core Chinese docs covering all modules (setup, reference, operations, security, hardware,
  contributor guides, etc.)
  - Migrate all .zh-CN.md files to i18n/zh-CN directory preserving original directory structure
  - Update internal links across 3 entry files:
    * Root README.zh-CN.md
    * docs/README.zh-CN.md
    * docs/SUMMARY.zh-CN.md
  - All links point to correct i18n paths with full accessibility
  - Align with Vietnamese i18n directory structure per project conventions

* fix(i18n/zh-CN): resolve all 30 blocking markdown lint errors
- Fix all MD022 blank lines around headings issues across 10 files
- Fix MD036 emphasis used as heading issue in refactor-candidates.md

* docs(i18n/zh-CN): resolve broken document reference link in root README.zh-CN.md

* fix(docs): repair double-quote HTML bug and broken relative links in zh-CN docs

- Remove stray extra `"` after href closing quotes in 6 HTML links in
  root README.zh-CN.md
- Fix relative link depth for files under docs/i18n/zh-CN/ that
  reference repo-root files (CONTRIBUTING.md, README.zh-CN.md,
  .github/workflows/, tests/, docs/SUMMARY.zh-CN.md): use correct
  number of `../` levels based on actual file location in the tree

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-13 18:46:29 -04:00
Argenis
dd1681be44
docs(i18n): add documentation hub translations for all 30 languages (#3450)
Add README and SUMMARY translations for 25 missing languages to match
the root-level README coverage. Update English docs hub and SUMMARY
with links to all localized hubs.

New languages: ar, bn, cs, da, de, el, es, fi, he, hi, hu, id, it,
ko, nb, nl, pl, pt, ro, sv, th, tl, tr, uk, ur. Also adds missing
SUMMARY.vi.md for Vietnamese.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 18:42:26 -04:00
Fausto
cabd3de3cb
Allow ZEROCLAW_PROVIDER_URL env variable to override api_url (#3414)
* Ignore JetBrains .idea folder

* fix(ollama): support stringified JSON tool call arguments

* providers: allow ZEROCLAW_PROVIDER_URL env var to override Ollama base URL

Supports container deployments where Ollama runs on a Docker network host
(e.g. http://ollama:11434) without requiring config.toml changes.

Includes regression test ensuring the environment override works.

* fix(clippy): replace Default::default() with ProviderRuntimeOptions::default()

---------

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 18:24:37 -04:00
Argenis
87cf6b0e93
feat(gateway): add dynamic node discovery and capability advertisement (#3448)
Add a WebSocket endpoint at /ws/nodes where external processes and
devices can connect and advertise their capabilities at runtime.
The gateway tracks connected nodes in a NodeRegistry and exposes
their capabilities as dynamically available tools via NodeTool.

- Add src/gateway/nodes.rs: WebSocket endpoint, NodeRegistry, protocol
- Add src/tools/node_tool.rs: Tool trait wrapper for node capabilities
- Add NodesConfig to config schema (disabled by default)
- Wire /ws/nodes route into gateway router
- Add NodeRegistry to AppState and all test constructions
- Re-export NodesConfig and NodeTool from module roots

Closes #3093
2026-03-13 18:23:48 -04:00
Marcelo Correa
2e2c1da4fa
fix(cron): skip unparseable job rows instead of aborting the scheduler (#3405)
A single cron job with a malformed `next_run` timestamp in the database
was silently stopping all scheduled jobs. The `due_jobs` query matched
rows whose `next_run` was lexicographically past-due (including
non-RFC3339 values like "2026-03-12 03:11:13" which sort before valid
RFC3339 strings), then `map_cron_job_row` failed to parse the timestamp,
the `row?` propagation caused `due_jobs` to return `Err`, and the
scheduler marked itself as `error` and skipped every subsequent tick —
taking down all other healthy jobs with it.

The fix changes the row iteration in `due_jobs` to log a warning and
skip unparseable rows rather than aborting the entire result set. Valid
jobs continue to fire; the broken row is surfaced in the logs without
collateral damage to the scheduler.

Co-authored-by: ZeroClaw <zeroclaw@users.noreply.github.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 18:17:08 -04:00
SimianAstronaut7
736347c71b
fix(workflows): use RELEASE_TOKEN for beta release tag creation (#3366)
The default GITHUB_TOKEN cannot bypass the "Release Tags - Restricted
Operators" ruleset, causing beta releases to fail with a 422 validation
error. Switch to a PAT stored as RELEASE_TOKEN that has bypass permissions.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 18:09:03 -04:00
Argenis
c384c34c31
feat(provider): support custom API path suffix for custom: endpoints (#3447)
* feat(provider): support custom API path suffix for custom: endpoints

Allow users to configure a custom API path for custom/compatible
providers instead of hardcoding /v1/chat/completions. Some self-hosted
LLM servers use different API paths.

Adds an optional `api_path` field to:
- Config (top-level and model_providers profile)
- ProviderRuntimeOptions
- OpenAiCompatibleProvider

When set, the custom path is appended to base_url instead of the
default /chat/completions suffix.

Closes #3125

* fix: add missing api_path field to test ModelProviderConfig initializers
2026-03-13 17:54:21 -04:00
Argenis
4ca5fa500b
feat(web): preserve message draft in agent chat across view switches (#3443)
Add an in-memory DraftContext that persists textarea content when the
AgentChat component unmounts due to route navigation. The draft is
restored when the user returns to the chat view. The store is
session-scoped (not localStorage) so drafts are cleared on page reload.

Closes #3129
2026-03-13 17:40:23 -04:00
Argenis
1a0441a006
feat(web): electric blue dashboard restyle with animations and logo (#3445)
Restyle the entire web dashboard with an electric blue theme featuring
glassmorphism cards, smooth animations, and the ZeroClaw logo. Remove
duplicate Vite dev server infrastructure to ensure a single gateway.

- Add electric blue color palette and glassmorphism styling system
- Add 10+ keyframe animations (fade, slide, pulse-glow, shimmer, float)
- Restyle all 10 pages with glass cards and electric components
- Add ZeroClaw logo to sidebar, pairing screen, and favicon
- Remove Vite dev/preview scripts and proxy config (build-only now)
- Update pairing dialog with ambient glow and animated elements

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:27:41 -04:00
Argenis
ef770f15b9
feat(tool): on-demand MCP tool loading via tool_search (#3446)
Add deferred MCP tool activation to reduce context window waste.
When mcp.deferred_loading is true (the default), MCP tool schemas
are not eagerly included in the LLM context. Instead, only tool
names appear in an <available-deferred-tools> system prompt section,
and the LLM calls the built-in tool_search tool to fetch full schemas
on demand. Setting deferred_loading to false preserves the existing
eager behavior.

Closes #3095
2026-03-13 17:25:19 -04:00
Argenis
05a0cdf6f4
feat(tools): add Windows support for shell tool_call execution (#3442)
Use `cmd.exe /C` instead of `sh -c` on Windows via cfg(target_os).
Make the shell allowlist, forbidden paths, env vars, risk classification,
and path detection platform-aware so the shell tool works correctly on
Windows without changing Unix behavior.

Closes #3327

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:12:16 -04:00
Argenis
fc1b555b31
feat(matrix): add read markers and typing notifications (#3441)
Send a read receipt after receiving each message, start a typing
notification while processing, and stop it before sending the response.
This gives Matrix users visual feedback that the bot has seen their
message and is working on a reply.

Closes #3357

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:06:48 -04:00
Argenis
b8ebe7bcd3
feat(gateway): add cron run history API and dashboard panel (#3440)
Add GET /api/cron/{id}/runs?limit=N endpoint that returns recent stored
runs for a cron job, with server-side limit clamping to 1-100 (default 20).

Frontend adds a CronRun type, API client function, and an expandable
run history panel on the Cron page showing status, timestamps, duration,
and output for each run, with loading, empty, error, and refresh states.

Closes #3299

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:06:44 -04:00
Argenis
049edf4eec
feat(channel): add WeCom (WeChat Enterprise) Bot Webhook channel (#3439)
Implement the Channel trait for WeCom Bot Webhook, supporting
outbound text messages via the WeCom webhook API. The channel
is send-only; inbound messages can be routed through the gateway
webhook subsystem.

Closes #3396
2026-03-13 16:44:34 -04:00
Argenis
856a651dd1
feat(channels): add ack_reactions config to disable channel reactions (#3438)
Users can now set `ack_reactions = false` in `[channels_config]` to
suppress the 👀//⚠️ acknowledgement reactions on incoming messages.
The option defaults to `true`, preserving existing behavior.

Closes #3403
2026-03-13 16:43:47 -04:00
Argenis
fd3b17edc1
feat(docker): add Debian-based container variant with shell tools (#3437)
The default distroless image has no shell, preventing the agent from
using shell-based tools (pwd, ls, git, etc.). Add Dockerfile.debian
that uses debian:bookworm-slim as the runtime base and includes bash,
git, curl, and ca-certificates. The existing distroless Dockerfile
remains unchanged for security-conscious deployments.

Closes #3359
2026-03-13 16:40:29 -04:00
Argenis
a9c7697c6b
fix(slack): subscribe to thread message events in polling mode (#3435)
The polling-based Slack listener only called conversations.history, which
returns top-level channel messages but not thread replies. Users replying
inside a thread were invisible to the bot after its initial response.

Add conversations.replies polling for active threads discovered in
channel history. Track thread parents with reply_count > 0, periodically
fetch new replies, and emit them as ChannelMessage with the correct
thread_ts so the bot can continue multi-turn conversations in-thread.
Stale threads are evicted after 24 hours or when the tracker exceeds
50 entries.

Closes #3084
2026-03-13 16:33:26 -04:00
Argenis
939edf5e86
fix: expose MCP tools to delegate subagents (#3436)
MCP tools were not visible to delegate subagents because parent_tools
was a static snapshot taken before MCP tool wiring. Switch to interior
mutability (parking_lot::RwLock) so MCP wrappers pushed after
DelegateTool construction are visible at sub-agent execution time.

Closes #3069
2026-03-13 16:26:01 -04:00
Alix-007
bbc82fd4f9
fix(observability): support verbose backend selection (#3374)
Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-13 16:15:43 -04:00
Argenis
a606f308f5
fix(security): respect allowed_roots in tool-level path pre-checks (#3434)
When workspace_only=true and allowed_roots is configured, several tools
(file_read, content_search, glob_search) rejected absolute paths before
the allowed_roots allowlist was consulted. Additionally, tilde paths
(~/...) passed is_path_allowed but were then incorrectly joined with
workspace_dir as literal relative paths.

Changes:
- Add SecurityPolicy::resolve_tool_path() to properly expand tilde
  paths and handle absolute vs relative path resolution for tools
- Add SecurityPolicy::is_under_allowed_root() for tool pre-checks to
  consult the allowed_roots allowlist before rejecting absolute paths
- Update file_read to use resolve_tool_path instead of workspace_dir.join
- Update content_search and glob_search absolute-path pre-checks to
  allow paths under allowed_roots
- Add tests covering workspace_only + allowed_roots scenarios

Closes #3082
2026-03-13 16:15:30 -04:00
Argenis
1162e3adc2
fix(channel): resolve Matrix channel compilation errors with channel-matrix feature (#3433)
Add missing Relation import from ruma events::room::message, remove
unused InReplyTo import, suppress unused matrix_skip_context variable,
and fix additional clippy lints (split_once, single-char patterns,
collapsible replace, wildcard match, ignored unit pattern).

Closes #3425
2026-03-13 15:45:28 -04:00
Alix-007
bd75799644
fix(build): unblock strict 32-bit no-default-features builds (#3375)
Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-13 15:45:03 -04:00
Argenis
35217bf457
fix: use cfg-conditional AtomicU32 fallback for 32-bit targets in mcp_client (#3432)
PR #3409 fixed AtomicU64 usage on 32-bit targets in other files but
missed src/tools/mcp_client.rs. Apply the same cfg(target_has_atomic)
pattern used in channels/irc.rs to conditionally select AtomicU64 vs
AtomicU32.

Closes #3430
2026-03-13 15:33:31 -04:00
Alix-007
e5e3761020
fix(cron): support Matrix announce delivery (#3373)
* fix(cron): support Matrix announce delivery

* fix(cron): expose Matrix delivery in tool schemas
2026-03-13 15:16:10 -04:00
Vernon Stinebaker
a52446c637
feat(agent): add tool_filter_groups for per-turn MCP tool schema filtering (#3395)
* feat(agent): add tool_filter_groups for per-turn MCP tool schema filtering

Introduces per-turn MCP tool schema filtering to reduce token overhead when
many MCP tools are registered. Filtering is driven by a new config field
`agent.tool_filter_groups`, which is a list of named groups that each
specify tool glob patterns and an activation mode (`always` or `dynamic`).

Built-in (non-MCP) tools always pass through unchanged; the feature is fully
backward-compatible — an empty `tool_filter_groups` list (the default) leaves
all existing behaviour untouched.

Changes:
- src/config/schema.rs: add `ToolFilterGroupMode`, `ToolFilterGroup` types
  and `tool_filter_groups` field on `AgentConfig`
- src/config/mod.rs: re-export `ToolFilterGroup`, `ToolFilterGroupMode`
- src/agent/loop_.rs: add `glob_match()`, `filter_tool_specs_for_turn()`,
  `compute_excluded_mcp_tools()` helpers; wire call sites in both single-shot
  and interactive REPL modes; add unit tests for all three functions
- docs/reference/api/config-reference.md: document `tool_filter_groups`
  field and sub-table schema with example
- docs/i18n/el/config-reference.md: add Greek locale config-reference with
  `tool_filter_groups` section (2026-03-12 update)

* Remove accidentally committed worktree directories

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-13 14:23:57 -04:00
Vernon Stinebaker
292952e563
feat(tools/mcp): add MCP subsystem tools layer with multi-transport client (#3394)
* feat(tools/mcp): add MCP subsystem tools layer with multi-transport client

Introduces a new MCP (Model Context Protocol) subsystem to the tools layer,
providing a multi-transport client implementation (stdio, HTTP, SSE) that
allows ZeroClaw agents to connect to external MCP servers and register their
exposed tools into the runtime tool registry.

New files:
- src/tools/mcp_client.rs: McpRegistry — lifecycle manager for MCP server connections
- src/tools/mcp_protocol.rs: protocol types (request/response/notifications)
- src/tools/mcp_tool.rs: McpToolWrapper — bridges MCP tools to ZeroClaw Tool trait
- src/tools/mcp_transport.rs: transport abstraction (Stdio, Http, Sse)

Wiring changes:
- src/tools/mod.rs: pub mod + pub use for new MCP modules
- src/config/schema.rs: McpTransport, McpServerConfig, McpConfig types; mcp field
  on Config; validate_mcp_config; mcp unit tests
- src/config/mod.rs: re-exports McpConfig, McpServerConfig, McpTransport
- src/channels/mod.rs: MCP server init block in start_channels()
- src/agent/loop_.rs: MCP registry init in run() and process_message()
- src/onboard/wizard.rs: mcp: McpConfig::default() in both wizard constructors

* fix(tools/mcp): inject MCP tools after built-in tool filter, not before

MCP servers are user-declared external integrations. The built-in
agent.allowed_tools / agent.denied_tools filter (filter_primary_agent_tools_or_fail)
governs built-in tool governance only. Injecting MCP tools before that
filter would silently drop all MCP tools when a restrictive allowlist is
configured.

Add ordering comments at both call sites (run() CLI path and
process_message() path) to make this contract explicit for reviewers
and future merges.

Identified via: shady831213/zeroclaw-agent-mcp@3f90b78

* fix(tools/mcp): strip approved field from MCP tool args before forwarding

ZeroClaw's security model injects `approved: bool` into built-in tool
args for supervised-mode confirmation. MCP servers have no knowledge of
this field and reject calls that include it as an unexpected parameter.

Strip `approved` from object-typed args in McpToolWrapper::execute()
before forwarding to the MCP server. Non-object args pass through
unchanged (no silent conversion or rejection).

Add two unit tests:
- execute_strips_approved_field_from_object_args: verifies removal
- execute_handles_non_object_args_without_panic: verifies non-object
  shapes are not broken by the stripping logic

Identified via: shady831213/zeroclaw-agent-mcp@c68be01

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
2026-03-13 14:23:48 -04:00
SimianAstronaut7
d115b28a1f
fix(daemon): expand tilde to home directory in file paths (#3424)
Rust treats `~` as a literal path character, not a home directory
shorthand. Several config resolution paths used `PathBuf::from()` on
user-provided strings without expanding `~` first, causing a literal
`~` folder to be created in the working directory.

Apply `shellexpand::tilde()` to all user-facing path inputs:
- ZEROCLAW_CONFIG_DIR env var (config/schema.rs, onboard/wizard.rs)
- ZEROCLAW_WORKSPACE env var (config/schema.rs, onboard/wizard.rs,
  channels/matrix.rs)
- active_workspace.toml marker file config_dir (config/schema.rs)

The WhatsApp Web session_path was already correctly expanded via
shellexpand::tilde() in whatsapp_web.rs.

Closes #3417

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 14:22:57 -04:00
Jacobinwwey
b563f5954e
fix(llamacpp): send responses fallback history in llama.cpp-compatible item shape (#3391)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 14:21:17 -04:00
SimianAstronaut7
e3e711073a
feat(providers): support custom HTTP headers for LLM API requests (#3423)
Add `extra_headers` config field and `ZEROCLAW_EXTRA_HEADERS` env var
support so users can specify custom HTTP headers for provider API
requests. This enables connecting to providers that require specific
headers (e.g., User-Agent, HTTP-Referer, X-Title) without a reverse
proxy.

Config file headers serve as the base; env var headers override them.
Format: `Key:Value,Key2:Value2`

Closes #3189

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-13 14:15:42 -04:00
SimianAstronaut7
1033287f38
fix(gateway): skip pairing dialog when require_pairing is disabled (#3422)
When `require_pairing = false` in config, the dashboard showed the
pairing dialog even though no pairing code exists, creating a deadlock.

Add `requiresPairing` field to AuthState (defaults to `true` as a safe
fallback) and update it from the `/health` endpoint response. Gate the
pairing dialog in App.tsx on both `!isAuthenticated` and
`requiresPairing` so the dashboard loads directly when pairing is
disabled.

Closes #3267

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 14:08:59 -04:00
Argenis
6a4ccaeb73
fix: strip stale tool_result from conversation history and memory context (#3418)
Prevent orphan `<tool_result>` blocks from leaking into LLM sessions:

- Strip `<tool_result>` blocks from cached prior turns in
  `process_channel_message` so the LLM never sees a tool result
  without a preceding tool call (Case A — in-memory accumulation).
- Skip memory entries containing `<tool_result` in both
  `should_skip_memory_context_entry` (channel path) and
  `build_context` (agent path) so SQLite-recalled tool output
  is never injected as memory context (Case B — post-restart).

Closes #3402
2026-03-13 09:55:57 -04:00
Argenis
4aead04916
fix: skip documentation URLs in cloudflare tunnel URL parser (#3416)
The URL parser captured the first https:// URL found in cloudflared
stderr output. When cloudflared emits a quic-go UDP buffer warning
containing a github.com link, that documentation URL was incorrectly
captured as the tunnel's public URL.

Extract URL parsing into a testable helper function that skips known
documentation domains (github.com, cloudflare.com/docs,
developers.cloudflare.com) and recognises tunnel-specific log prefixes
("Visit it at", "Route at", "Registered tunnel connection") and the
.trycloudflare.com domain.

Closes #3413
2026-03-13 09:40:02 -04:00
Argenis
7b23c8934c
docs: clarify master-only branch policy and clean up stale references (#3415)
Add a prominent migration notice to CONTRIBUTING.md with explicit
instructions for contributors who still have local or forked main
branches. Fix the last remaining main branch reference in
python/pyproject.toml. Stale merged branches and main-related remote
branches have been deleted.

Refs: #2929, #3061
2026-03-13 09:38:11 -04:00
Argenis
5d1543100d
fix: support Linq 2026-02-03 webhook payload shape (#3337) (#3410)
Closes #3337

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:31:53 -04:00
Argenis
e3a91bc805
fix: gate prometheus and fix AtomicU64 for 32-bit targets (#3409)
* fix: gate prometheus and fix AtomicU64 for 32-bit targets (#3335)

Closes #3335

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: fix import ordering for cfg-gated atomics

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:31:25 -04:00
Argenis
833fdefbe5
fix: restore MCP support missing from master branch (#3412)
MCP (Model Context Protocol) config and tool modules were added on the
old `main` branch but never made it to `master`. This restores the full
MCP subsystem: config schema, transport layer (stdio/HTTP/SSE), client
registry, tool wrapper, config validation, and channel wiring.

Closes #3379

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:20:37 -04:00
Argenis
13f74f0ecc
fix: restore web dashboard by auto-building frontend in build.rs (#3408)
The build.rs was reduced to only creating an empty web/dist/ directory,
which meant rust-embed would embed no files and the SPA fallback handler
would return 404 for every request including `/`. This is a regression
from v0.1.8 where web/dist/ was still tracked in git.

Update build.rs to detect when web/dist/index.html is missing and
automatically run `npm ci && npm run build` if npm is available. The
build is best-effort: when Node.js is absent the Rust build still
succeeds with an empty dist directory (release workflows pre-build the
frontend separately).

Closes #3386

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:20:34 -04:00
Argenis
9ff045d2e9
fix: resolve install.sh prebuilt download 404 by querying releases API (#3406)
The /releases/latest/download/ URL only resolves to the latest non-prerelease,
non-draft release. When that release has no binary assets (e.g. v0.1.9a),
--prebuilt-only fails with a 404. This adds resolve_asset_url() which queries
the GitHub releases API for the newest release (including prereleases) that
actually contains the requested asset, falling back to /releases/latest/ if
the API call fails.

Closes #3389

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:20:31 -04:00
Argenis
6fe8e3a5bb
fix: gracefully handle reasoning_enabled for unsupported Ollama models (#3411)
When reasoning_enabled is configured, the Ollama provider sends
think=true to all models. Models that don't support the think parameter
(e.g. qwen3.5:0.8b) cause request failures that the reliable provider
classifies as retryable, leading to an infinite retry loop.

Fix: when a request with think=true fails, automatically retry once
with think omitted. This lets the call succeed on models that lack
reasoning support while preserving thinking for capable models.

Closes #3183
Related #850

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:16:03 -04:00
Argenis
5dc1750df7
fix: add crypto.randomUUID fallback for older browsers (#3407)
Replace direct `crypto.randomUUID()` calls in the web dashboard with a
`generateUUID()` utility that falls back to a manual UUID v4 implementation
using `crypto.getRandomValues()` when `randomUUID` is unavailable (older
Safari, some Electron builds, Raspberry Pi browsers).

Closes #3303
Closes #3261

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 09:16:00 -04:00
SimianAstronaut7
b40c9e77af
Merge pull request #3365 from zeroclaw-labs/ci/fix-glibc-cache-mismatch
ci: pin release workflows to ubuntu-latest to fix glibc cache mismatch
2026-03-12 17:44:42 -04:00
simianastronaut
34cac3d9dd ci: pin release workflows to ubuntu-latest to fix glibc cache mismatch
CI workflows use ubuntu-latest (24.04, glibc 2.39) while release
workflows used ubuntu-22.04 (glibc 2.35). Swatinem/rust-cache keys
on runner.os ("Linux"), not the specific version, so cached build
scripts compiled on 24.04 would fail on 22.04 with GLIBC_2.39 not
found errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 17:37:31 -04:00
SimianAstronaut7
badf96dcab
Merge pull request #3363 from zeroclaw-labs/ci/faster-apple-build
ci: use thin LTO profile for faster CI builds
2026-03-12 17:31:29 -04:00
simianastronaut
c1e1228fb0 ci: use thin LTO profile for faster CI builds
The release profile uses fat LTO + codegen-units=1, which is
optimal for distribution binaries but unnecessarily slow for CI
validation builds. Add a dedicated `ci` profile with thin LTO and
codegen-units=16, and use it in both CI workflows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 17:18:36 -04:00
Alix-007
04ea5093d4 fix(config): log existing config as initialized 2026-03-13 02:41:39 +08:00
SimianAstronaut7
d2b923ae07
Merge pull request #3322 from zeroclaw-labs/work-issues/2984-fix-cli-chinese-input-crash
fix(agent): use byte-level stdin reads to prevent CJK input crash
2026-03-12 16:58:46 +00:00
SimianAstronaut7
21fdef95f4
Merge pull request #3324 from zeroclaw-labs/work-issues/2907-channel-send-message
feat(channel): add `channel send` CLI command for outbound messages
2026-03-12 16:58:44 +00:00
SimianAstronaut7
d02fbf2d76
Merge pull request #3326 from zeroclaw-labs/work-issues/2978-tool-call-dedup-exempt
feat(agent): add tool_call_dedup_exempt config to bypass within-turn dedup
2026-03-12 16:58:41 +00:00
SimianAstronaut7
05cede29a8
Merge pull request #3328 from zeroclaw-labs/fix/2926-configurable-provider-timeout
feat(provider): make HTTP request timeout configurable
2026-03-12 16:58:38 +00:00
SimianAstronaut7
d34a2e6d3f
Merge pull request #3329 from zeroclaw-labs/work-issues/2443-approval-manager-shadowed-binding
fix(channel): remove shadowed variable bindings in test functions
2026-03-12 16:58:35 +00:00
SimianAstronaut7
576d22fedd
Merge pull request #3330 from zeroclaw-labs/work-issues/2884-ws-token-query-param
fix(gateway): restore multi-source WebSocket auth token extraction
2026-03-12 16:58:32 +00:00
SimianAstronaut7
d5455c694c
Merge pull request #3332 from zeroclaw-labs/work-issues/2896-discord-ws-silent-stop
fix(channel): handle websocket Ping frames and read errors in Discord gateway
2026-03-12 16:58:30 +00:00
SimianAstronaut7
90275b057e
Merge pull request #3339 from zeroclaw-labs/work-issues/2880-fix-workspace-path-blocked
fix(security): allow absolute paths within workspace when workspace_only is set
2026-03-12 16:58:27 +00:00
SimianAstronaut7
d46b4f29d2
Merge pull request #3341 from zeroclaw-labs/work-issues/2403-telegram-photo-duplicate
fix(channel): prevent first-turn photo duplication in memory context
2026-03-12 16:58:23 +00:00
simianastronaut
f25835f98c fix(channel): prevent first-turn photo duplication in memory context (#2403)
When auto_save is enabled and a photo is sent on the first turn of a
Telegram session, the [IMAGE:] marker was duplicated because:

1. auto_save stores the photo message (including the marker) to memory
2. build_memory_context recalls the just-saved entry as relevant context
3. The recalled marker is prepended to the original message content

Fix: skip memory context entries containing [IMAGE:] markers in
should_skip_memory_context_entry so auto-saved photo messages are not
re-injected through memory context enrichment.

Closes #2403

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 12:03:29 -04:00
simianastronaut
376579f9fa fix(security): allow absolute paths within workspace when workspace_only is set (#2880)
When workspace_only=true, is_path_allowed() blanket-rejected all
absolute paths.  This blocked legitimate tool calls that referenced
files inside the workspace using an absolute path (e.g. saving a
screenshot to /home/user/.zeroclaw/workspace/images/example.png).

The fix checks whether an absolute path falls within workspace_dir or
any configured allowed_root before rejecting it, mirroring the priority
order already used by is_resolved_path_allowed().  Paths outside the
workspace and allowed roots are still blocked, and the forbidden-paths
list continues to apply to all other absolute paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:59:35 -04:00
simianastronaut
b620fd6bba fix(channel): handle websocket Ping frames and read errors in Discord gateway
The Discord gateway event loop silently dropped websocket Ping frames
(via a catch-all `_ => continue`) without responding with Pong. After
splitting the websocket stream into read/write halves, automatic
Ping/Pong handling is disabled, so the server-side (Cloudflare/Discord)
eventually considers the client unresponsive and stops sending events.

Additionally, websocket read errors (`Some(Err(_))`) were silently
swallowed by the same catch-all, preventing reconnection on transient
failures.

This patch:
- Responds to `Message::Ping` with `Message::Pong` to maintain the
  websocket keepalive contract
- Breaks the event loop on `Some(Err(_))` with a warning log, allowing
  the supervisor to reconnect

Closes #2896

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:15:53 -04:00
simianastronaut
98d6c5af9e fix(gateway): restore multi-source WebSocket auth token extraction (#2884)
The Electric Blue dashboard (PR #2804) sends the pairing token as a
?token= query parameter, but the WS handler only checked that single
source. Earlier PR #2193 had established a three-source precedence
chain (header > subprotocol > query param) which was lost.

Add extract_ws_token() with the documented precedence:
  1. Authorization: Bearer <token> header
  2. Sec-WebSocket-Protocol: bearer.<token> subprotocol
  3. ?token=<token> query parameter

This ensures browser-based clients (which cannot set custom headers)
can authenticate via query param or subprotocol, while non-browser
clients can use the standard Authorization header.

Includes 9 unit tests covering each source, precedence ordering,
and empty-value fallthrough.

Closes #2884

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:01:26 -04:00
simianastronaut
c51ca19dc1 fix(channel): remove shadowed variable bindings in test functions (#2443)
Rename shadowed `histories` and `store` bindings in three test functions
to eliminate variable shadows that are flagged under stricter lint
configurations (clippy::shadow_unrelated). The initial bindings are
consumed by struct initialization; the second bindings that lock the
mutex guard are now named distinctly (`locked_histories`, `cleanup_store`).

Closes #2443

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:00:31 -04:00
simianastronaut
ea6abc9f42 feat(provider): make HTTP request timeout configurable (#2926)
The provider HTTP request timeout was hardcoded at 120 seconds in
`OpenAiCompatibleProvider::http_client()`. This makes it configurable
via the `provider_timeout_secs` config key and the
`ZEROCLAW_PROVIDER_TIMEOUT_SECS` environment variable, defaulting
to 120s for backward compatibility.

Changes:
- Add `provider_timeout_secs` field to Config with serde default
- Add `ZEROCLAW_PROVIDER_TIMEOUT_SECS` env var override
- Add `timeout_secs` field and `with_timeout_secs()` builder on
  `OpenAiCompatibleProvider`
- Add `provider_timeout_secs` to `ProviderRuntimeOptions`
- Thread config value through agent loop, channels, gateway, and tools
- Use `compat()` closure in provider factory to apply timeout to all
  compatible providers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:40:18 -04:00
simianastronaut
e2f6f20bfb feat(agent): add tool_call_dedup_exempt config to bypass within-turn dedup (#2978)
Add `agent.tool_call_dedup_exempt` config key (list of tool names) to
allow specific tools to bypass the within-turn identical-signature
deduplication check in run_tool_call_loop. This fixes the browser
snapshot polling use case where repeated calls with identical arguments
are legitimate and should not be suppressed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:28:42 -04:00
simianastronaut
88df3d4b2e feat(channel): add channel send CLI command for outbound messages (#2907)
Add a `zeroclaw channel send` subcommand that sends a one-off message
through a configured channel without starting the full agent loop.
This enables hardware sensor triggers (e.g., range sensors on
Raspberry Pi) to push notifications to Telegram and other platforms.

Usage:
  zeroclaw channel send 'Alert!' --channel-id telegram --recipient <chat_id>

Supported channels: telegram, discord, slack.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:18:04 -04:00
simianastronaut
0dba55959d fix(agent): use byte-level stdin reads to prevent CJK input crash
When running through a PTY chain (kubectl exec, SSH, remote terminals),
the transport layer may split data frames at space (0x20) boundaries,
interrupting multi-byte UTF-8 characters mid-sequence. Rust's
BufRead::read_line requires valid UTF-8 and returns InvalidData
immediately, crashing the interactive agent loop.

Replace stdin().read_line() with byte-level read_until(b'\n') followed
by String::from_utf8_lossy() in both the main input loop and the
/clear confirmation prompt. This reads raw bytes without UTF-8
validation during transport, then does lossy conversion (replacing any
truly invalid bytes with U+FFFD instead of crashing).

Also set ENV LANG=C.UTF-8 in both Dockerfile stages as defense-in-depth
to ensure the container locale defaults to UTF-8.

Closes #2984

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:08:49 -04:00
SimianAstronaut7
893788f04d
fix(security): strip URLs before high-entropy token extraction (#3064) (#3321)
The credential leak detector's check_high_entropy_tokens would
false-positive on URL path segments (e.g. long alphanumeric filenames)
because extract_candidate_tokens included '/' in the token character
set, creating long mixed-alpha-digit tokens that exceeded the Shannon
entropy threshold.

Fix: strip URLs from content before extracting candidate tokens for
entropy analysis. Structural pattern checks (API keys, JWTs, AWS
credentials) use dedicated regexes and are unaffected.

Closes #3064

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:53:38 +00:00
SimianAstronaut7
0fea62d114
fix(tool): resolve Brave API key lazily with decryption support (#3078) (#3320)
WebSearchTool previously stored the Brave API key once at boot and never
re-read it. This caused three failures: (1) keys set after boot via
web_search_config were ignored, (2) encrypted keys passed as raw enc2:
blobs to the Brave API, and (3) keys absent at startup left the tool
permanently broken.

The fix adds lazy key resolution at execution time. A fast path returns
the boot-time key when it is plaintext and non-empty. When the boot key
is missing or still encrypted, the tool re-reads config.toml, decrypts
the value through SecretStore, and uses the result. This also means
runtime config updates (e.g. `web_search_config set brave_api_key=...`)
are picked up on the next search invocation.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:53:35 +00:00
SimianAstronaut7
cca3cf8f84
fix(agent): use char-boundary-safe slicing in scrub_credentials (#3024) (#3319)
Replace byte-level `&val[..4]` slice with `char_indices().nth(4)` to
prevent a panic when the captured credential value contains multi-byte
UTF-8 characters (e.g. Chinese text).  Adds a regression test with
CJK input.

Closes #3024

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:53:32 +00:00
683 changed files with 158344 additions and 24518 deletions

12
.cargo/audit.toml Normal file
View File

@ -0,0 +1,12 @@
# cargo-audit configuration
# https://rustsec.org/
[advisories]
ignore = [
# wasmtime vulns via extism 1.13.0 — no upstream fix; plugins feature-gated
"RUSTSEC-2026-0006", # wasmtime f64.copysign segfault on x86-64
"RUSTSEC-2026-0020", # WASI guest-controlled resource exhaustion
"RUSTSEC-2026-0021", # WASI http fields panic
# instant crate unmaintained — transitive dep via nostr; no upstream fix
"RUSTSEC-2024-0384",
]

View File

@ -2,7 +2,7 @@
rustflags = ["-C", "link-arg=-static"]
[target.aarch64-unknown-linux-musl]
rustflags = ["-C", "link-arg=-static"]
rustflags = ["-C", "link-arg=-static", "-C", "link-arg=-Wl,-z,stack-size=8388608"]
# Android targets (NDK toolchain)
[target.armv7-linux-androideabi]
@ -10,3 +10,4 @@ linker = "armv7a-linux-androideabi21-clang"
[target.aarch64-linux-android]
linker = "aarch64-linux-android21-clang"
rustflags = ["-C", "link-arg=-Wl,-z,stack-size=8388608"]

View File

@ -53,7 +53,7 @@ If the user hasn't set up ZeroClaw yet (no `~/.zeroclaw/config.toml` exists), gu
```bash
zeroclaw onboard # Quick mode — defaults to OpenRouter
zeroclaw onboard --provider anthropic # Use Anthropic directly
zeroclaw onboard --interactive # Step-by-step wizard
zeroclaw onboard # Guided wizard (default)
```
After onboarding, verify everything works:

View File

@ -50,7 +50,7 @@ First-time setup or reconfiguration.
```bash
zeroclaw onboard # Quick mode (default: openrouter)
zeroclaw onboard --provider anthropic # Quick mode with specific provider
zeroclaw onboard --interactive # Interactive wizard
zeroclaw onboard # Guided wizard (default)
zeroclaw onboard --memory sqlite # Set memory backend
zeroclaw onboard --force # Overwrite existing config
zeroclaw onboard --channels-only # Repair channels only
@ -62,7 +62,7 @@ zeroclaw onboard --channels-only # Repair channels only
- `--memory <backend>` — sqlite, markdown, lucid, none
- `--force` — overwrite existing config.toml
- `--channels-only` — only repair channel configuration
- `--interactive` — step-by-step wizard
- `--reinit` — start fresh (backs up existing config)
Creates `~/.zeroclaw/config.toml` with `0600` permissions.

View File

@ -64,3 +64,8 @@ LICENSE
*.profdata
coverage
lcov.info
# Application and script directories (not needed for Docker runtime)
apps/
python/
scripts/

View File

@ -1,3 +1,44 @@
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
# All files
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
# Rust files - match rustfmt.toml
[*.rs]
indent_size = 4
max_line_length = 100
# Markdown files
[*.md]
trim_trailing_whitespace = false
max_line_length = 80
# TOML files
[*.toml]
indent_size = 2
# YAML files
[*.{yml,yaml}]
indent_size = 2
# Python files
[*.py]
indent_size = 4
max_line_length = 100
# Shell scripts
[*.{sh,bash}]
indent_size = 2
# JSON files
[*.json]
indent_size = 2

View File

@ -118,3 +118,7 @@ PROVIDER=openrouter
# Optional: Brave Search (requires API key from https://brave.com/search/api)
# WEB_SEARCH_PROVIDER=brave
# BRAVE_API_KEY=your-brave-search-api-key
#
# Optional: SearXNG (self-hosted, requires instance URL)
# WEB_SEARCH_PROVIDER=searxng
# SEARXNG_INSTANCE_URL=https://searx.example.com

60
.gitattributes vendored
View File

@ -1 +1,61 @@
# Git attributes for ZeroClaw
# https://git-scm.com/docs/gitattributes
# Auto detect text files and perform LF normalization
* text=auto
# Source code
*.rs text eol=lf linguist-language=Rust
*.toml text eol=lf linguist-language=TOML
*.py text eol=lf linguist-language=Python
*.js text eol=lf linguist-language=JavaScript
*.ts text eol=lf linguist-language=TypeScript
*.html text eol=lf linguist-language=HTML
*.css text eol=lf linguist-language=CSS
*.scss text eol=lf linguist-language=SCSS
*.json text eol=lf linguist-language=JSON
*.yaml text eol=lf linguist-language=YAML
*.yml text eol=lf linguist-language=YAML
*.md text eol=lf linguist-language=Markdown
*.sh text eol=lf linguist-language=Shell
*.bash text eol=lf linguist-language=Shell
*.ps1 text eol=crlf linguist-language=PowerShell
# Documentation
*.txt text eol=lf
LICENSE* text eol=lf
# Configuration files
.editorconfig text eol=lf
.gitattributes text eol=lf
.gitignore text eol=lf
.dockerignore text eol=lf
# Rust-specific
Cargo.lock text eol=lf linguist-generated
Cargo.toml text eol=lf
# Declare files that will always have CRLF line endings on checkout
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.svg text
*.wasm binary
*.woff binary
*.woff2 binary
*.ttf binary
*.eot binary
*.mp3 binary
*.mp4 binary
*.webm binary
*.zip binary
*.tar binary
*.gz binary
*.bz2 binary
*.7z binary
*.db binary

View File

@ -63,7 +63,7 @@ body:
label: Steps to reproduce
description: Please provide exact commands/config.
placeholder: |
1. zeroclaw onboard --interactive
1. zeroclaw onboard
2. zeroclaw daemon
3. Observe crash in logs
render: bash

BIN
.github/assets/show-tool-calls-after.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

301
.github/labeler.yml vendored
View File

@ -36,6 +36,145 @@
- any-glob-to-any-file:
- "src/channels/**"
"channel:bluesky":
- changed-files:
- any-glob-to-any-file:
- "src/channels/bluesky.rs"
"channel:clawdtalk":
- changed-files:
- any-glob-to-any-file:
- "src/channels/clawdtalk.rs"
"channel:cli":
- changed-files:
- any-glob-to-any-file:
- "src/channels/cli.rs"
"channel:dingtalk":
- changed-files:
- any-glob-to-any-file:
- "src/channels/dingtalk.rs"
"channel:discord":
- changed-files:
- any-glob-to-any-file:
- "src/channels/discord.rs"
- "src/channels/discord_history.rs"
"channel:email":
- changed-files:
- any-glob-to-any-file:
- "src/channels/email_channel.rs"
- "src/channels/gmail_push.rs"
"channel:imessage":
- changed-files:
- any-glob-to-any-file:
- "src/channels/imessage.rs"
"channel:irc":
- changed-files:
- any-glob-to-any-file:
- "src/channels/irc.rs"
"channel:lark":
- changed-files:
- any-glob-to-any-file:
- "src/channels/lark.rs"
"channel:linq":
- changed-files:
- any-glob-to-any-file:
- "src/channels/linq.rs"
"channel:matrix":
- changed-files:
- any-glob-to-any-file:
- "src/channels/matrix.rs"
"channel:mattermost":
- changed-files:
- any-glob-to-any-file:
- "src/channels/mattermost.rs"
"channel:mochat":
- changed-files:
- any-glob-to-any-file:
- "src/channels/mochat.rs"
"channel:mqtt":
- changed-files:
- any-glob-to-any-file:
- "src/channels/mqtt.rs"
"channel:nextcloud-talk":
- changed-files:
- any-glob-to-any-file:
- "src/channels/nextcloud_talk.rs"
"channel:nostr":
- changed-files:
- any-glob-to-any-file:
- "src/channels/nostr.rs"
"channel:notion":
- changed-files:
- any-glob-to-any-file:
- "src/channels/notion.rs"
"channel:qq":
- changed-files:
- any-glob-to-any-file:
- "src/channels/qq.rs"
"channel:reddit":
- changed-files:
- any-glob-to-any-file:
- "src/channels/reddit.rs"
"channel:signal":
- changed-files:
- any-glob-to-any-file:
- "src/channels/signal.rs"
"channel:slack":
- changed-files:
- any-glob-to-any-file:
- "src/channels/slack.rs"
"channel:telegram":
- changed-files:
- any-glob-to-any-file:
- "src/channels/telegram.rs"
"channel:twitter":
- changed-files:
- any-glob-to-any-file:
- "src/channels/twitter.rs"
"channel:wati":
- changed-files:
- any-glob-to-any-file:
- "src/channels/wati.rs"
"channel:webhook":
- changed-files:
- any-glob-to-any-file:
- "src/channels/webhook.rs"
"channel:wecom":
- changed-files:
- any-glob-to-any-file:
- "src/channels/wecom.rs"
"channel:whatsapp":
- changed-files:
- any-glob-to-any-file:
- "src/channels/whatsapp.rs"
- "src/channels/whatsapp_storage.rs"
- "src/channels/whatsapp_web.rs"
"gateway":
- changed-files:
- any-glob-to-any-file:
@ -101,6 +240,73 @@
- any-glob-to-any-file:
- "src/providers/**"
"provider:anthropic":
- changed-files:
- any-glob-to-any-file:
- "src/providers/anthropic.rs"
"provider:azure-openai":
- changed-files:
- any-glob-to-any-file:
- "src/providers/azure_openai.rs"
"provider:bedrock":
- changed-files:
- any-glob-to-any-file:
- "src/providers/bedrock.rs"
"provider:claude-code":
- changed-files:
- any-glob-to-any-file:
- "src/providers/claude_code.rs"
"provider:compatible":
- changed-files:
- any-glob-to-any-file:
- "src/providers/compatible.rs"
"provider:copilot":
- changed-files:
- any-glob-to-any-file:
- "src/providers/copilot.rs"
"provider:gemini":
- changed-files:
- any-glob-to-any-file:
- "src/providers/gemini.rs"
- "src/providers/gemini_cli.rs"
"provider:glm":
- changed-files:
- any-glob-to-any-file:
- "src/providers/glm.rs"
"provider:kilocli":
- changed-files:
- any-glob-to-any-file:
- "src/providers/kilocli.rs"
"provider:ollama":
- changed-files:
- any-glob-to-any-file:
- "src/providers/ollama.rs"
"provider:openai":
- changed-files:
- any-glob-to-any-file:
- "src/providers/openai.rs"
- "src/providers/openai_codex.rs"
"provider:openrouter":
- changed-files:
- any-glob-to-any-file:
- "src/providers/openrouter.rs"
"provider:telnyx":
- changed-files:
- any-glob-to-any-file:
- "src/providers/telnyx.rs"
"service":
- changed-files:
- any-glob-to-any-file:
@ -121,6 +327,101 @@
- any-glob-to-any-file:
- "src/tools/**"
"tool:browser":
- changed-files:
- any-glob-to-any-file:
- "src/tools/browser.rs"
- "src/tools/browser_delegate.rs"
- "src/tools/browser_open.rs"
- "src/tools/text_browser.rs"
- "src/tools/screenshot.rs"
"tool:composio":
- changed-files:
- any-glob-to-any-file:
- "src/tools/composio.rs"
"tool:cron":
- changed-files:
- any-glob-to-any-file:
- "src/tools/cron_add.rs"
- "src/tools/cron_list.rs"
- "src/tools/cron_remove.rs"
- "src/tools/cron_run.rs"
- "src/tools/cron_runs.rs"
- "src/tools/cron_update.rs"
"tool:file":
- changed-files:
- any-glob-to-any-file:
- "src/tools/file_edit.rs"
- "src/tools/file_read.rs"
- "src/tools/file_write.rs"
- "src/tools/glob_search.rs"
- "src/tools/content_search.rs"
"tool:google-workspace":
- changed-files:
- any-glob-to-any-file:
- "src/tools/google_workspace.rs"
"tool:mcp":
- changed-files:
- any-glob-to-any-file:
- "src/tools/mcp_client.rs"
- "src/tools/mcp_deferred.rs"
- "src/tools/mcp_protocol.rs"
- "src/tools/mcp_tool.rs"
- "src/tools/mcp_transport.rs"
"tool:memory":
- changed-files:
- any-glob-to-any-file:
- "src/tools/memory_forget.rs"
- "src/tools/memory_recall.rs"
- "src/tools/memory_store.rs"
"tool:microsoft365":
- changed-files:
- any-glob-to-any-file:
- "src/tools/microsoft365/**"
"tool:shell":
- changed-files:
- any-glob-to-any-file:
- "src/tools/shell.rs"
- "src/tools/node_tool.rs"
- "src/tools/cli_discovery.rs"
"tool:sop":
- changed-files:
- any-glob-to-any-file:
- "src/tools/sop_advance.rs"
- "src/tools/sop_approve.rs"
- "src/tools/sop_execute.rs"
- "src/tools/sop_list.rs"
- "src/tools/sop_status.rs"
"tool:web":
- changed-files:
- any-glob-to-any-file:
- "src/tools/web_fetch.rs"
- "src/tools/web_search_tool.rs"
- "src/tools/web_search_provider_routing.rs"
- "src/tools/http_request.rs"
"tool:security":
- changed-files:
- any-glob-to-any-file:
- "src/tools/security_ops.rs"
- "src/tools/verifiable_intent.rs"
"tool:cloud":
- changed-files:
- any-glob-to-any-file:
- "src/tools/cloud_ops.rs"
- "src/tools/cloud_patterns.rs"
"tunnel":
- changed-files:
- any-glob-to-any-file:

View File

@ -77,6 +77,8 @@ jobs:
target: x86_64-unknown-linux-gnu
- os: macos-14
target: aarch64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
@ -84,6 +86,7 @@ jobs:
toolchain: 1.92.0
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
if: runner.os != 'Windows'
- name: Install mold linker
if: runner.os == 'Linux'
@ -92,11 +95,12 @@ jobs:
sudo apt-get install -y mold
- name: Ensure web/dist placeholder exists
shell: bash
run: mkdir -p web/dist && touch web/dist/.gitkeep
- name: Build release
shell: bash
run: cargo build --release --locked --target ${{ matrix.target }}
run: cargo build --profile ci --locked --target ${{ matrix.target }}
env:
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: clang
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: "-C link-arg=-fuse-ld=mold"

View File

@ -7,7 +7,7 @@ on:
branches: [master]
concurrency:
group: ci-${{ github.event.pull_request.number || github.sha }}
group: ci-${{ github.event.pull_request.number || 'push-master' }}
cancel-in-progress: true
permissions:
@ -105,6 +105,8 @@ jobs:
target: x86_64-unknown-linux-gnu
- os: macos-14
target: aarch64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
@ -112,6 +114,7 @@ jobs:
toolchain: 1.92.0
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
if: runner.os != 'Windows'
- name: Install mold linker
if: runner.os == 'Linux'
@ -120,15 +123,39 @@ jobs:
sudo apt-get install -y mold
- name: Ensure web/dist placeholder exists
shell: bash
run: mkdir -p web/dist && touch web/dist/.gitkeep
- name: Build release
shell: bash
run: cargo build --release --locked --target ${{ matrix.target }}
run: cargo build --profile ci --locked --target ${{ matrix.target }}
env:
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: clang
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: "-C link-arg=-fuse-ld=mold"
check-all-features:
name: Check (all features)
runs-on: ubuntu-latest
timeout-minutes: 20
needs: [lint]
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
toolchain: 1.92.0
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
- name: Install system dependencies
run: sudo apt-get update -qq && sudo apt-get install -y libudev-dev
- name: Ensure web/dist placeholder exists
run: mkdir -p web/dist && touch web/dist/.gitkeep
- name: Check all features
run: cargo check --features ci-all --locked
docs-quality:
name: Docs Quality
runs-on: ubuntu-latest
@ -153,7 +180,7 @@ jobs:
gate:
name: CI Required Gate
if: always()
needs: [lint, lint-strict-delta, test, build, docs-quality]
needs: [lint, lint-strict-delta, test, build, docs-quality, check-all-features]
runs-on: ubuntu-latest
steps:
- name: Check upstream job results

View File

@ -44,6 +44,11 @@ jobs:
cross_compiler: gcc-aarch64-linux-gnu
linker_env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER
linker: aarch64-linux-gnu-gcc
- os: ubuntu-latest
target: armv7-unknown-linux-gnueabihf
cross_compiler: gcc-arm-linux-gnueabihf
linker_env: CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER
linker: arm-linux-gnueabihf-gcc
- os: macos-15-intel
target: x86_64-apple-darwin
- os: windows-latest
@ -74,4 +79,4 @@ jobs:
if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then
export "${{ matrix.linker_env }}=${{ matrix.linker }}"
fi
cargo build --release --locked --target ${{ matrix.target }}
cargo build --release --locked --features channel-matrix,channel-lark,memory-postgres --target ${{ matrix.target }}

View File

@ -81,7 +81,7 @@ Current maintainers with PR approval authority: `theonlyhennygod`, `JordanTheJet
| `aarch64-unknown-linux-gnu` | | ✓ | ✓ | ✓ |
| `aarch64-apple-darwin` | ✓ | | ✓ | ✓ |
| `x86_64-apple-darwin` | | ✓ | | |
| `x86_64-pc-windows-msvc` | | ✓ | ✓ | ✓ |
| `x86_64-pc-windows-msvc` | | ✓ | ✓ | ✓ |
## Mermaid Diagrams

19
.github/workflows/pr-path-labeler.yml vendored Normal file
View File

@ -0,0 +1,19 @@
name: PR Path Labeler
on:
pull_request_target:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
jobs:
label:
name: Apply path labels
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5
with:
sync-labels: true

181
.github/workflows/pub-aur.yml vendored Normal file
View File

@ -0,0 +1,181 @@
name: Pub AUR Package
on:
workflow_call:
inputs:
release_tag:
description: "Existing release tag (vX.Y.Z)"
required: true
type: string
dry_run:
description: "Generate PKGBUILD only (no push)"
required: false
default: false
type: boolean
secrets:
AUR_SSH_KEY:
required: false
workflow_dispatch:
inputs:
release_tag:
description: "Existing release tag (vX.Y.Z)"
required: true
type: string
dry_run:
description: "Generate PKGBUILD only (no push)"
required: false
default: true
type: boolean
concurrency:
group: aur-publish-${{ github.run_id }}
cancel-in-progress: false
permissions:
contents: read
jobs:
publish-aur:
name: Update AUR Package
runs-on: ubuntu-latest
env:
RELEASE_TAG: ${{ inputs.release_tag }}
DRY_RUN: ${{ inputs.dry_run }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate and compute metadata
id: meta
shell: bash
run: |
set -euo pipefail
if [[ ! "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::release_tag must be vX.Y.Z format."
exit 1
fi
version="${RELEASE_TAG#v}"
tarball_url="https://github.com/${GITHUB_REPOSITORY}/archive/refs/tags/${RELEASE_TAG}.tar.gz"
tarball_sha="$(curl -fsSL "$tarball_url" | sha256sum | awk '{print $1}')"
if [[ -z "$tarball_sha" ]]; then
echo "::error::Could not compute SHA256 for source tarball."
exit 1
fi
{
echo "version=$version"
echo "tarball_url=$tarball_url"
echo "tarball_sha=$tarball_sha"
} >> "$GITHUB_OUTPUT"
{
echo "### AUR Package Metadata"
echo "- version: \`${version}\`"
echo "- tarball_url: \`${tarball_url}\`"
echo "- tarball_sha: \`${tarball_sha}\`"
} >> "$GITHUB_STEP_SUMMARY"
- name: Generate PKGBUILD
id: pkgbuild
shell: bash
env:
VERSION: ${{ steps.meta.outputs.version }}
TARBALL_SHA: ${{ steps.meta.outputs.tarball_sha }}
run: |
set -euo pipefail
pkgbuild_file="$(mktemp)"
sed -e "s/^pkgver=.*/pkgver=${VERSION}/" \
-e "s/^sha256sums=.*/sha256sums=('${TARBALL_SHA}')/" \
dist/aur/PKGBUILD > "$pkgbuild_file"
echo "pkgbuild_file=$pkgbuild_file" >> "$GITHUB_OUTPUT"
echo "### Generated PKGBUILD" >> "$GITHUB_STEP_SUMMARY"
echo '```bash' >> "$GITHUB_STEP_SUMMARY"
cat "$pkgbuild_file" >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
- name: Generate .SRCINFO
id: srcinfo
shell: bash
env:
VERSION: ${{ steps.meta.outputs.version }}
TARBALL_SHA: ${{ steps.meta.outputs.tarball_sha }}
run: |
set -euo pipefail
srcinfo_file="$(mktemp)"
sed -e "s/pkgver = .*/pkgver = ${VERSION}/" \
-e "s/sha256sums = .*/sha256sums = ${TARBALL_SHA}/" \
-e "s|zeroclaw-[0-9.]*.tar.gz|zeroclaw-${VERSION}.tar.gz|g" \
-e "s|/v[0-9.]*\.tar\.gz|/v${VERSION}.tar.gz|g" \
dist/aur/.SRCINFO > "$srcinfo_file"
echo "srcinfo_file=$srcinfo_file" >> "$GITHUB_OUTPUT"
- name: Push to AUR
if: inputs.dry_run == false
shell: bash
env:
AUR_SSH_KEY: ${{ secrets.AUR_SSH_KEY }}
PKGBUILD_FILE: ${{ steps.pkgbuild.outputs.pkgbuild_file }}
SRCINFO_FILE: ${{ steps.srcinfo.outputs.srcinfo_file }}
VERSION: ${{ steps.meta.outputs.version }}
run: |
set -euo pipefail
if [[ -z "${AUR_SSH_KEY}" ]]; then
echo "::error::Secret AUR_SSH_KEY is required for non-dry-run."
exit 1
fi
# Set up SSH key — normalize line endings and ensure trailing newline
mkdir -p ~/.ssh
chmod 700 ~/.ssh
printf '%s\n' "$AUR_SSH_KEY" | tr -d '\r' > ~/.ssh/aur
chmod 600 ~/.ssh/aur
cat > ~/.ssh/config <<'SSH_CONFIG'
Host aur.archlinux.org
IdentityFile ~/.ssh/aur
User aur
StrictHostKeyChecking accept-new
SSH_CONFIG
chmod 600 ~/.ssh/config
# Verify key is valid and print fingerprint for debugging
echo "::group::SSH key diagnostics"
ssh-keygen -l -f ~/.ssh/aur || { echo "::error::AUR_SSH_KEY is not a valid SSH private key"; exit 1; }
echo "::endgroup::"
# Test SSH connectivity before attempting clone
ssh -T -o BatchMode=yes -o ConnectTimeout=10 aur@aur.archlinux.org 2>&1 || true
tmp_dir="$(mktemp -d)"
git clone ssh://aur@aur.archlinux.org/zeroclaw.git "$tmp_dir/aur"
cp "$PKGBUILD_FILE" "$tmp_dir/aur/PKGBUILD"
cp "$SRCINFO_FILE" "$tmp_dir/aur/.SRCINFO"
cd "$tmp_dir/aur"
git config user.name "zeroclaw-bot"
git config user.email "bot@zeroclaw.dev"
git add PKGBUILD .SRCINFO
git commit -m "zeroclaw ${VERSION}"
git push origin HEAD
echo "AUR package updated to ${VERSION}"
- name: Summary
shell: bash
run: |
if [[ "$DRY_RUN" == "true" ]]; then
echo "Dry run complete: PKGBUILD generated, no push performed."
else
echo "Publish complete: AUR package pushed."
fi

228
.github/workflows/pub-homebrew-core.yml vendored Normal file
View File

@ -0,0 +1,228 @@
name: Pub Homebrew Core
on:
workflow_call:
inputs:
release_tag:
description: "Existing release tag to publish (vX.Y.Z)"
required: true
type: string
dry_run:
description: "Patch formula only (no push/PR)"
required: false
default: false
type: boolean
secrets:
HOMEBREW_UPSTREAM_PR_TOKEN:
required: false
HOMEBREW_CORE_BOT_TOKEN:
required: false
workflow_dispatch:
inputs:
release_tag:
description: "Existing release tag to publish (vX.Y.Z)"
required: true
type: string
dry_run:
description: "Patch formula only (no push/PR)"
required: false
default: true
type: boolean
concurrency:
group: homebrew-core-${{ github.run_id }}
cancel-in-progress: false
permissions:
contents: read
jobs:
publish-homebrew-core:
name: Publish Homebrew Core PR
runs-on: ubuntu-latest
env:
UPSTREAM_REPO: Homebrew/homebrew-core
FORMULA_PATH: Formula/z/zeroclaw.rb
RELEASE_TAG: ${{ inputs.release_tag }}
DRY_RUN: ${{ inputs.dry_run }}
BOT_FORK_REPO: ${{ vars.HOMEBREW_CORE_BOT_FORK_REPO }}
BOT_EMAIL: ${{ vars.HOMEBREW_CORE_BOT_EMAIL }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate release tag and version alignment
id: release_meta
shell: bash
run: |
set -euo pipefail
semver_pattern='^v[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$'
if [[ ! "$RELEASE_TAG" =~ $semver_pattern ]]; then
echo "::error::release_tag must match semver-like format (vX.Y.Z[-suffix])."
exit 1
fi
if ! git rev-parse "refs/tags/${RELEASE_TAG}" >/dev/null 2>&1; then
git fetch --tags origin
fi
tag_version="${RELEASE_TAG#v}"
cargo_version="$(git show "${RELEASE_TAG}:Cargo.toml" \
| sed -n 's/^version = "\([^"]*\)"/\1/p' | head -n1)"
if [[ -z "$cargo_version" ]]; then
echo "::error::Unable to read Cargo.toml version from tag ${RELEASE_TAG}."
exit 1
fi
if [[ "$cargo_version" != "$tag_version" ]]; then
echo "::error::Tag ${RELEASE_TAG} does not match Cargo.toml version (${cargo_version})."
exit 1
fi
tarball_url="https://github.com/${GITHUB_REPOSITORY}/archive/refs/tags/${RELEASE_TAG}.tar.gz"
tarball_sha="$(curl -fsSL "$tarball_url" | sha256sum | awk '{print $1}')"
{
echo "tag_version=$tag_version"
echo "tarball_url=$tarball_url"
echo "tarball_sha=$tarball_sha"
} >> "$GITHUB_OUTPUT"
{
echo "### Release Metadata"
echo "- release_tag: \`${RELEASE_TAG}\`"
echo "- cargo_version: \`${cargo_version}\`"
echo "- tarball_sha256: \`${tarball_sha}\`"
echo "- dry_run: ${DRY_RUN}"
} >> "$GITHUB_STEP_SUMMARY"
- name: Patch Homebrew formula
id: patch_formula
shell: bash
env:
HOMEBREW_CORE_BOT_TOKEN: ${{ secrets.HOMEBREW_UPSTREAM_PR_TOKEN || secrets.HOMEBREW_CORE_BOT_TOKEN }}
GH_TOKEN: ${{ secrets.HOMEBREW_UPSTREAM_PR_TOKEN || secrets.HOMEBREW_CORE_BOT_TOKEN }}
run: |
set -euo pipefail
tmp_repo="$(mktemp -d)"
echo "tmp_repo=$tmp_repo" >> "$GITHUB_OUTPUT"
if [[ "$DRY_RUN" == "true" ]]; then
git clone --depth=1 "https://github.com/${UPSTREAM_REPO}.git" "$tmp_repo/homebrew-core"
else
if [[ -z "${BOT_FORK_REPO}" ]]; then
echo "::error::Repository variable HOMEBREW_CORE_BOT_FORK_REPO is required when dry_run=false."
exit 1
fi
if [[ -z "${HOMEBREW_CORE_BOT_TOKEN}" ]]; then
echo "::error::Repository secret HOMEBREW_CORE_BOT_TOKEN is required when dry_run=false."
exit 1
fi
if [[ "$BOT_FORK_REPO" != */* ]]; then
echo "::error::HOMEBREW_CORE_BOT_FORK_REPO must be in owner/repo format."
exit 1
fi
if ! gh api "repos/${BOT_FORK_REPO}" >/dev/null 2>&1; then
echo "::error::HOMEBREW_CORE_BOT_TOKEN cannot access ${BOT_FORK_REPO}."
exit 1
fi
gh repo clone "${BOT_FORK_REPO}" "$tmp_repo/homebrew-core" -- --depth=1
fi
repo_dir="$tmp_repo/homebrew-core"
formula_file="$repo_dir/$FORMULA_PATH"
if [[ ! -f "$formula_file" ]]; then
echo "::error::Formula file not found: $FORMULA_PATH"
exit 1
fi
if [[ "$DRY_RUN" == "false" ]]; then
if git -C "$repo_dir" remote get-url upstream >/dev/null 2>&1; then
git -C "$repo_dir" remote set-url upstream "https://github.com/${UPSTREAM_REPO}.git"
else
git -C "$repo_dir" remote add upstream "https://github.com/${UPSTREAM_REPO}.git"
fi
if git -C "$repo_dir" ls-remote --exit-code --heads upstream main >/dev/null 2>&1; then
upstream_ref="main"
else
upstream_ref="master"
fi
git -C "$repo_dir" fetch --depth=1 upstream "$upstream_ref"
branch_name="zeroclaw-${RELEASE_TAG}-${GITHUB_RUN_ID}"
git -C "$repo_dir" checkout -B "$branch_name" "upstream/$upstream_ref"
echo "branch_name=$branch_name" >> "$GITHUB_OUTPUT"
fi
tarball_url="$(grep 'tarball_url=' "$GITHUB_OUTPUT" | head -1 | cut -d= -f2-)"
tarball_sha="$(grep 'tarball_sha=' "$GITHUB_OUTPUT" | head -1 | cut -d= -f2-)"
perl -0pi -e "s|^ url \".*\"| url \"${tarball_url}\"|m" "$formula_file"
perl -0pi -e "s|^ sha256 \".*\"| sha256 \"${tarball_sha}\"|m" "$formula_file"
perl -0pi -e "s|^ license \".*\"| license \"Apache-2.0 OR MIT\"|m" "$formula_file"
# Ensure Node.js build dependency is declared so that build.rs can
# run `npm ci && npm run build` to produce the web frontend assets.
if ! grep -q 'depends_on "node" => :build' "$formula_file"; then
perl -0pi -e 's|( depends_on "rust" => :build\n)|\1 depends_on "node" => :build\n|m' "$formula_file"
fi
git -C "$repo_dir" diff -- "$FORMULA_PATH" > "$tmp_repo/formula.diff"
if [[ ! -s "$tmp_repo/formula.diff" ]]; then
echo "::error::No formula changes generated. Nothing to publish."
exit 1
fi
{
echo "### Formula Diff"
echo '```diff'
cat "$tmp_repo/formula.diff"
echo '```'
} >> "$GITHUB_STEP_SUMMARY"
- name: Push branch and open Homebrew PR
if: inputs.dry_run == false
shell: bash
env:
GH_TOKEN: ${{ secrets.HOMEBREW_UPSTREAM_PR_TOKEN || secrets.HOMEBREW_CORE_BOT_TOKEN }}
TMP_REPO: ${{ steps.patch_formula.outputs.tmp_repo }}
BRANCH_NAME: ${{ steps.patch_formula.outputs.branch_name }}
TAG_VERSION: ${{ steps.release_meta.outputs.tag_version }}
TARBALL_URL: ${{ steps.release_meta.outputs.tarball_url }}
TARBALL_SHA: ${{ steps.release_meta.outputs.tarball_sha }}
run: |
set -euo pipefail
repo_dir="${TMP_REPO}/homebrew-core"
fork_owner="${BOT_FORK_REPO%%/*}"
bot_email="${BOT_EMAIL:-${fork_owner}@users.noreply.github.com}"
git -C "$repo_dir" config user.name "$fork_owner"
git -C "$repo_dir" config user.email "$bot_email"
git -C "$repo_dir" add "$FORMULA_PATH"
git -C "$repo_dir" commit -m "zeroclaw ${TAG_VERSION}"
gh auth setup-git
git -C "$repo_dir" push --set-upstream origin "$BRANCH_NAME"
pr_body="Automated formula bump from ZeroClaw release workflow.
- Release tag: ${RELEASE_TAG}
- Source tarball: ${TARBALL_URL}
- Source sha256: ${TARBALL_SHA}"
gh pr create \
--repo "$UPSTREAM_REPO" \
--base main \
--head "${fork_owner}:${BRANCH_NAME}" \
--title "zeroclaw ${TAG_VERSION}" \
--body "$pr_body"
- name: Summary
shell: bash
run: |
if [[ "$DRY_RUN" == "true" ]]; then
echo "Dry run complete: formula diff generated, no push/PR performed."
else
echo "Publish complete: branch pushed and PR opened from bot fork."
fi

165
.github/workflows/pub-scoop.yml vendored Normal file
View File

@ -0,0 +1,165 @@
name: Pub Scoop Manifest
on:
workflow_call:
inputs:
release_tag:
description: "Existing release tag (vX.Y.Z)"
required: true
type: string
dry_run:
description: "Generate manifest only (no push)"
required: false
default: false
type: boolean
secrets:
SCOOP_BUCKET_TOKEN:
required: false
workflow_dispatch:
inputs:
release_tag:
description: "Existing release tag (vX.Y.Z)"
required: true
type: string
dry_run:
description: "Generate manifest only (no push)"
required: false
default: true
type: boolean
concurrency:
group: scoop-publish-${{ github.run_id }}
cancel-in-progress: false
permissions:
contents: read
jobs:
publish-scoop:
name: Update Scoop Manifest
runs-on: ubuntu-latest
env:
RELEASE_TAG: ${{ inputs.release_tag }}
DRY_RUN: ${{ inputs.dry_run }}
SCOOP_BUCKET_REPO: ${{ vars.SCOOP_BUCKET_REPO }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate and compute metadata
id: meta
shell: bash
run: |
set -euo pipefail
if [[ ! "$RELEASE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::release_tag must be vX.Y.Z format."
exit 1
fi
version="${RELEASE_TAG#v}"
zip_url="https://github.com/${GITHUB_REPOSITORY}/releases/download/${RELEASE_TAG}/zeroclaw-x86_64-pc-windows-msvc.zip"
sums_url="https://github.com/${GITHUB_REPOSITORY}/releases/download/${RELEASE_TAG}/SHA256SUMS"
sha256="$(curl -fsSL "$sums_url" | grep 'zeroclaw-x86_64-pc-windows-msvc.zip' | awk '{print $1}')"
if [[ -z "$sha256" ]]; then
echo "::error::Could not find Windows binary hash in SHA256SUMS for ${RELEASE_TAG}."
exit 1
fi
{
echo "version=$version"
echo "zip_url=$zip_url"
echo "sha256=$sha256"
} >> "$GITHUB_OUTPUT"
{
echo "### Scoop Manifest Metadata"
echo "- version: \`${version}\`"
echo "- zip_url: \`${zip_url}\`"
echo "- sha256: \`${sha256}\`"
} >> "$GITHUB_STEP_SUMMARY"
- name: Generate manifest
id: manifest
shell: bash
env:
VERSION: ${{ steps.meta.outputs.version }}
ZIP_URL: ${{ steps.meta.outputs.zip_url }}
SHA256: ${{ steps.meta.outputs.sha256 }}
run: |
set -euo pipefail
manifest_file="$(mktemp)"
cat > "$manifest_file" <<MANIFEST
{
"version": "${VERSION}",
"description": "Zero overhead. Zero compromise. 100% Rust. The fastest, smallest AI assistant.",
"homepage": "https://github.com/zeroclaw-labs/zeroclaw",
"license": "MIT|Apache-2.0",
"architecture": {
"64bit": {
"url": "${ZIP_URL}",
"hash": "${SHA256}",
"bin": "zeroclaw.exe"
}
},
"checkver": {
"github": "https://github.com/zeroclaw-labs/zeroclaw"
},
"autoupdate": {
"architecture": {
"64bit": {
"url": "https://github.com/zeroclaw-labs/zeroclaw/releases/download/v\$version/zeroclaw-x86_64-pc-windows-msvc.zip"
}
},
"hash": {
"url": "https://github.com/zeroclaw-labs/zeroclaw/releases/download/v\$version/SHA256SUMS",
"regex": "([a-f0-9]{64})\\\\s+zeroclaw-x86_64-pc-windows-msvc\\\\.zip"
}
}
}
MANIFEST
jq '.' "$manifest_file" > "${manifest_file}.formatted"
mv "${manifest_file}.formatted" "$manifest_file"
echo "manifest_file=$manifest_file" >> "$GITHUB_OUTPUT"
echo "### Generated Manifest" >> "$GITHUB_STEP_SUMMARY"
echo '```json' >> "$GITHUB_STEP_SUMMARY"
cat "$manifest_file" >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
- name: Push to Scoop bucket
if: inputs.dry_run == false
shell: bash
env:
GH_TOKEN: ${{ secrets.SCOOP_BUCKET_TOKEN }}
MANIFEST_FILE: ${{ steps.manifest.outputs.manifest_file }}
VERSION: ${{ steps.meta.outputs.version }}
run: |
set -euo pipefail
if [[ -z "${SCOOP_BUCKET_REPO}" ]]; then
echo "::error::Repository variable SCOOP_BUCKET_REPO is required (e.g. zeroclaw-labs/scoop-zeroclaw)."
exit 1
fi
tmp_dir="$(mktemp -d)"
gh repo clone "${SCOOP_BUCKET_REPO}" "$tmp_dir/bucket" -- --depth=1
mkdir -p "$tmp_dir/bucket/bucket"
cp "$MANIFEST_FILE" "$tmp_dir/bucket/bucket/zeroclaw.json"
cd "$tmp_dir/bucket"
git config user.name "zeroclaw-bot"
git config user.email "bot@zeroclaw.dev"
git add bucket/zeroclaw.json
git commit -m "zeroclaw ${VERSION}"
gh auth setup-git
git push origin HEAD
echo "Scoop manifest updated to ${VERSION}"

View File

@ -0,0 +1,160 @@
name: Auto-sync crates.io
on:
push:
branches: [master]
paths:
- "Cargo.toml"
concurrency:
group: publish-crates-auto
cancel-in-progress: false
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
detect-version-change:
name: Detect Version Bump
if: github.repository == 'zeroclaw-labs/zeroclaw'
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.check.outputs.changed }}
version: ${{ steps.check.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Check if version changed
id: check
shell: bash
run: |
set -euo pipefail
current=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
previous=$(git show HEAD~1:Cargo.toml 2>/dev/null | sed -n 's/^version = "\([^"]*\)"/\1/p' | head -1 || echo "")
echo "Current version: ${current}"
echo "Previous version: ${previous}"
# Skip if stable release workflow will handle this version
# (indicated by an existing or imminent stable tag)
if git ls-remote --exit-code --tags origin "refs/tags/v${current}" >/dev/null 2>&1; then
echo "Stable tag v${current} exists — stable release workflow handles crates.io"
echo "changed=false" >> "$GITHUB_OUTPUT"
exit 0
fi
if [[ "$current" != "$previous" && -n "$current" ]]; then
echo "changed=true" >> "$GITHUB_OUTPUT"
echo "version=${current}" >> "$GITHUB_OUTPUT"
echo "Version bumped from ${previous} to ${current} — will publish"
else
echo "changed=false" >> "$GITHUB_OUTPUT"
echo "Version unchanged (${current}) — skipping publish"
fi
check-registry:
name: Check if Already Published
needs: [detect-version-change]
if: needs.detect-version-change.outputs.changed == 'true'
runs-on: ubuntu-latest
outputs:
should_publish: ${{ steps.check.outputs.should_publish }}
steps:
- name: Check crates.io for existing version
id: check
shell: bash
env:
VERSION: ${{ needs.detect-version-change.outputs.version }}
run: |
set -euo pipefail
status=$(curl -s -o /dev/null -w "%{http_code}" \
"https://crates.io/api/v1/crates/zeroclawlabs/${VERSION}")
if [[ "$status" == "200" ]]; then
echo "Version ${VERSION} already exists on crates.io — skipping"
echo "should_publish=false" >> "$GITHUB_OUTPUT"
else
echo "Version ${VERSION} not yet published — proceeding"
echo "should_publish=true" >> "$GITHUB_OUTPUT"
fi
publish:
name: Publish to crates.io
needs: [detect-version-change, check-registry]
if: needs.check-registry.outputs.should_publish == 'true'
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.92.0
- uses: Swatinem/rust-cache@v2
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: web/package-lock.json
- name: Build web dashboard
run: cd web && npm ci && npm run build
- name: Clean web build artifacts
run: rm -rf web/node_modules web/src web/package.json web/package-lock.json web/tsconfig*.json web/vite.config.ts web/index.html
- name: Publish aardvark-sys to crates.io
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
OUTPUT=$(cargo publish --locked --allow-dirty --no-verify -p aardvark-sys 2>&1) && exit 0
echo "$OUTPUT"
if echo "$OUTPUT" | grep -q 'already exists'; then
echo "::notice::aardvark-sys already on crates.io — skipping"
exit 0
fi
exit 1
- name: Wait for aardvark-sys to index
run: sleep 15
- name: Publish to crates.io
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
VERSION: ${{ needs.detect-version-change.outputs.version }}
run: |
# Publish to crates.io; treat "already exists" as success
# (manual publish or stable workflow may have already published)
OUTPUT=$(cargo publish --locked --allow-dirty --no-verify 2>&1) && exit 0
echo "$OUTPUT"
if echo "$OUTPUT" | grep -q 'already exists'; then
echo "::notice::zeroclawlabs@${VERSION} already on crates.io — skipping"
exit 0
fi
exit 1
- name: Verify published
shell: bash
env:
VERSION: ${{ needs.detect-version-change.outputs.version }}
run: |
echo "Waiting for crates.io to index..."
sleep 15
status=$(curl -s -o /dev/null -w "%{http_code}" \
"https://crates.io/api/v1/crates/zeroclawlabs/${VERSION}")
if [[ "$status" == "200" ]]; then
echo "zeroclawlabs v${VERSION} is live on crates.io"
echo "Install: cargo install zeroclawlabs"
else
echo "::warning::Version may still be indexing — check https://crates.io/crates/zeroclawlabs"
fi

108
.github/workflows/publish-crates.yml vendored Normal file
View File

@ -0,0 +1,108 @@
name: Publish to crates.io
on:
workflow_dispatch:
inputs:
version:
description: "Version to publish (e.g. 0.2.0) — must match Cargo.toml"
required: true
type: string
dry_run:
description: "Dry run (validate without publishing)"
required: false
type: boolean
default: false
concurrency:
group: publish-crates
cancel-in-progress: false
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
jobs:
validate:
name: Validate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check version matches Cargo.toml
shell: bash
env:
INPUT_VERSION: ${{ inputs.version }}
run: |
set -euo pipefail
cargo_version=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
if [[ "$cargo_version" != "$INPUT_VERSION" ]]; then
echo "::error::Cargo.toml version (${cargo_version}) does not match input (${INPUT_VERSION})"
exit 1
fi
publish:
name: Publish to crates.io
needs: [validate]
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.92.0
- uses: Swatinem/rust-cache@v2
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: web/package-lock.json
- name: Build web dashboard
run: cd web && npm ci && npm run build
- name: Clean web build artifacts
run: rm -rf web/node_modules web/src web/package.json web/package-lock.json web/tsconfig*.json web/vite.config.ts web/index.html
- name: Publish aardvark-sys to crates.io
if: "!inputs.dry_run"
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
OUTPUT=$(cargo publish --locked --allow-dirty --no-verify -p aardvark-sys 2>&1) && exit 0
echo "$OUTPUT"
if echo "$OUTPUT" | grep -q 'already exists'; then
echo "::notice::aardvark-sys already on crates.io — skipping"
exit 0
fi
exit 1
- name: Wait for aardvark-sys to index
if: "!inputs.dry_run"
run: sleep 15
- name: Publish (dry run)
if: inputs.dry_run
run: cargo publish --dry-run --locked --allow-dirty --no-verify
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
- name: Publish to crates.io
if: "!inputs.dry_run"
shell: bash
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
VERSION: ${{ inputs.version }}
run: |
# Publish to crates.io; treat "already exists" as success
OUTPUT=$(cargo publish --locked --allow-dirty --no-verify 2>&1) && exit 0
echo "$OUTPUT"
if echo "$OUTPUT" | grep -q 'already exists'; then
echo "::notice::zeroclawlabs@${VERSION} already on crates.io — skipping"
exit 0
fi
exit 1

View File

@ -5,8 +5,8 @@ on:
branches: [master]
concurrency:
group: release
cancel-in-progress: false
group: release-beta
cancel-in-progress: true
permissions:
contents: write
@ -16,29 +16,145 @@ env:
CARGO_TERM_COLOR: always
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
RELEASE_CARGO_FEATURES: channel-matrix,channel-lark,memory-postgres
jobs:
version:
name: Resolve Version
if: github.repository == 'zeroclaw-labs/zeroclaw'
runs-on: ubuntu-latest
outputs:
version: ${{ steps.ver.outputs.version }}
tag: ${{ steps.ver.outputs.tag }}
skip: ${{ steps.ver.outputs.skip }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 2
- name: Compute beta version
id: ver
shell: bash
run: |
set -euo pipefail
base_version=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
# Skip beta if this is a version bump commit (stable release handles it)
commit_msg=$(git log -1 --pretty=format:"%s")
if [[ "$commit_msg" =~ ^chore:\ bump\ version ]]; then
echo "Version bump commit detected — skipping beta release"
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
fi
# Skip beta if a stable tag already exists for this version
if git ls-remote --exit-code --tags origin "refs/tags/v${base_version}" >/dev/null 2>&1; then
echo "Stable tag v${base_version} exists — skipping beta release"
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
fi
beta_tag="v${base_version}-beta.${GITHUB_RUN_NUMBER}"
echo "version=${base_version}" >> "$GITHUB_OUTPUT"
echo "tag=${beta_tag}" >> "$GITHUB_OUTPUT"
echo "skip=false" >> "$GITHUB_OUTPUT"
echo "Beta release: ${beta_tag}"
release-notes:
name: Generate Release Notes
needs: [version]
if: github.repository == 'zeroclaw-labs/zeroclaw' && needs.version.outputs.skip != 'true'
runs-on: ubuntu-latest
outputs:
notes: ${{ steps.notes.outputs.body }}
features: ${{ steps.notes.outputs.features }}
contributors: ${{ steps.notes.outputs.contributors }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- name: Build release notes
id: notes
shell: bash
run: |
set -euo pipefail
# Use a wider range — find the previous stable tag to capture all
# contributors across the full release cycle, not just one beta bump
PREV_TAG=$(git tag --sort=-creatordate \
| grep -vE '\-beta\.' \
| head -1 || echo "")
if [ -z "$PREV_TAG" ]; then
RANGE="HEAD"
else
RANGE="${PREV_TAG}..HEAD"
fi
# Extract features only (feat commits) — skip bug fixes for clean notes
FEATURES=$(git log "$RANGE" --pretty=format:"%s" --no-merges \
| grep -iE '^feat(\(|:)' \
| sed 's/^feat(\([^)]*\)): /\1: /' \
| sed 's/^feat: //' \
| sed 's/ (#[0-9]*)$//' \
| sort -uf \
| while IFS= read -r line; do echo "- ${line}"; done || true)
if [ -z "$FEATURES" ]; then
FEATURES="- Incremental improvements and polish"
fi
# Collect ALL unique contributors: git authors + Co-Authored-By
GIT_AUTHORS=$(git log "$RANGE" --pretty=format:"%an" --no-merges | sort -uf || true)
CO_AUTHORS=$(git log "$RANGE" --pretty=format:"%b" --no-merges \
| grep -ioE 'Co-Authored-By: *[^<]+' \
| sed 's/Co-Authored-By: *//i' \
| sed 's/ *$//' \
| sort -uf || true)
# Merge, deduplicate, and filter out bots
ALL_CONTRIBUTORS=$(printf "%s\n%s" "$GIT_AUTHORS" "$CO_AUTHORS" \
| sort -uf \
| grep -v '^$' \
| grep -viE '\[bot\]$|^dependabot|^github-actions|^copilot|^ZeroClaw Bot|^ZeroClaw Runner|^ZeroClaw Agent|^blacksmith' \
| while IFS= read -r name; do echo "- ${name}"; done || true)
# Build release body
BODY=$(cat <<NOTES_EOF
## What's New
${FEATURES}
## Contributors
${ALL_CONTRIBUTORS}
---
*Full changelog: ${PREV_TAG}...HEAD*
NOTES_EOF
)
# Output multiline values
{
echo "body<<BODY_EOF"
echo "$BODY"
echo "BODY_EOF"
} >> "$GITHUB_OUTPUT"
{
echo "features<<FEAT_EOF"
echo "$FEATURES"
echo "FEAT_EOF"
} >> "$GITHUB_OUTPUT"
{
echo "contributors<<CONTRIB_EOF"
echo "$ALL_CONTRIBUTORS"
echo "CONTRIB_EOF"
} >> "$GITHUB_OUTPUT"
web:
name: Build Web Dashboard
needs: [version]
if: github.repository == 'zeroclaw-labs/zeroclaw' && needs.version.outputs.skip != 'true'
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
@ -65,6 +181,8 @@ jobs:
fail-fast: false
matrix:
include:
# Use ubuntu-22.04 for Linux builds to link against glibc 2.35,
# ensuring compatibility with Ubuntu 22.04+ (#3573).
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
artifact: zeroclaw
@ -76,10 +194,22 @@ jobs:
cross_compiler: gcc-aarch64-linux-gnu
linker_env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER
linker: aarch64-linux-gnu-gcc
- os: ubuntu-22.04
target: armv7-unknown-linux-gnueabihf
artifact: zeroclaw
ext: tar.gz
cross_compiler: gcc-arm-linux-gnueabihf
linker_env: CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER
linker: arm-linux-gnueabihf-gcc
- os: macos-14
target: aarch64-apple-darwin
artifact: zeroclaw
ext: tar.gz
- os: ubuntu-latest
target: aarch64-linux-android
artifact: zeroclaw
ext: tar.gz
ndk: true
- os: windows-latest
target: x86_64-pc-windows-msvc
artifact: zeroclaw.exe
@ -92,6 +222,8 @@ jobs:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
if: runner.os != 'Windows'
with:
prefix-key: ${{ matrix.os }}-${{ matrix.target }}
- uses: actions/download-artifact@v4
with:
@ -104,13 +236,17 @@ jobs:
sudo apt-get update -qq
sudo apt-get install -y ${{ matrix.cross_compiler }}
- name: Setup Android NDK
if: matrix.ndk
run: echo "$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin" >> "$GITHUB_PATH"
- name: Build release
shell: bash
run: |
if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then
export "${{ matrix.linker_env }}=${{ matrix.linker }}"
fi
cargo build --release --locked --target ${{ matrix.target }}
cargo build --release --locked --features "${{ env.RELEASE_CARGO_FEATURES }}" --target ${{ matrix.target }}
- name: Package (Unix)
if: runner.os != 'Windows'
@ -130,9 +266,65 @@ jobs:
path: zeroclaw-${{ matrix.target }}.${{ matrix.ext }}
retention-days: 7
build-desktop:
name: Build Desktop App (macOS Universal)
needs: [version]
if: needs.version.outputs.skip != 'true'
runs-on: macos-14
timeout-minutes: 40
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
toolchain: 1.92.0
targets: aarch64-apple-darwin,x86_64-apple-darwin
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
with:
prefix-key: macos-tauri
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Tauri CLI
run: cargo install tauri-cli --locked
- name: Sync Tauri version with Cargo.toml
shell: bash
run: |
VERSION=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
cd apps/tauri
if command -v jq >/dev/null 2>&1; then
jq --arg v "$VERSION" '.version = $v' tauri.conf.json > tmp.json && mv tmp.json tauri.conf.json
else
sed -i '' "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" tauri.conf.json
fi
echo "Tauri version set to: $VERSION"
- name: Build Tauri app (universal binary)
working-directory: apps/tauri
run: cargo tauri build --target universal-apple-darwin
- name: Prepare desktop release assets
run: |
mkdir -p desktop-assets
find target -name '*.dmg' -exec cp {} desktop-assets/ZeroClaw.dmg \; 2>/dev/null || true
find target -name '*.app.tar.gz' -exec cp {} desktop-assets/ZeroClaw-macos.app.tar.gz \; 2>/dev/null || true
find target -name '*.app.tar.gz.sig' -exec cp {} desktop-assets/ZeroClaw-macos.app.tar.gz.sig \; 2>/dev/null || true
echo "--- Desktop assets ---"
ls -lh desktop-assets/
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: desktop-macos
path: desktop-assets/*
retention-days: 7
publish:
name: Publish Beta Release
needs: [version, build]
needs: [version, release-notes, build, build-desktop]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
@ -142,32 +334,98 @@ jobs:
pattern: zeroclaw-*
path: artifacts
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: desktop-macos
path: artifacts/desktop-macos
- name: Generate checksums
run: |
cd artifacts
find . -type f \( -name '*.tar.gz' -o -name '*.zip' \) -exec sha256sum {} + | sed 's| \./[^/]*/| |' > SHA256SUMS
find . -type f \( -name '*.tar.gz' -o -name '*.zip' -o -name '*.dmg' \) -exec sha256sum {} + | sed 's| \./[^/]*/| |' > SHA256SUMS
cat SHA256SUMS
- name: Create GitHub Release
uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
with:
tag_name: ${{ needs.version.outputs.tag }}
name: ${{ needs.version.outputs.tag }}
prerelease: true
generate_release_notes: true
files: |
artifacts/**/*
- name: Collect release assets
run: |
mkdir -p release-assets
find artifacts -type f \( -name '*.tar.gz' -o -name '*.zip' -o -name '*.dmg' -o -name 'SHA256SUMS' \) -exec cp {} release-assets/ \;
cp install.sh release-assets/
echo "--- Assets ---"
ls -lh release-assets/
- name: Write release notes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NOTES: ${{ needs.release-notes.outputs.notes }}
run: printf '%s\n' "$NOTES" > release-notes.md
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
TAG: ${{ needs.version.outputs.tag }}
run: |
gh release create "$TAG" release-assets/* \
--repo "${{ github.repository }}" \
--title "$TAG" \
--notes-file release-notes.md \
--prerelease
redeploy-website:
name: Trigger Website Redeploy
needs: [publish]
runs-on: ubuntu-latest
steps:
- name: Trigger website redeploy
env:
PAT: ${{ secrets.WEBSITE_REPO_PAT }}
run: |
curl -fsSL -X POST \
-H "Authorization: token $PAT" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/zeroclaw-labs/zeroclaw-website/dispatches \
-d '{"event_type":"new-release","client_payload":{"install_script_url":"https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh"}}'
docker:
name: Push Docker Image
needs: [version, build]
runs-on: ubuntu-latest
timeout-minutes: 30
timeout-minutes: 15
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: zeroclaw-x86_64-unknown-linux-gnu
path: artifacts/
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: zeroclaw-aarch64-unknown-linux-gnu
path: artifacts/
- name: Prepare Docker context with pre-built binaries
run: |
mkdir -p docker-ctx/bin/amd64 docker-ctx/bin/arm64
tar xzf artifacts/zeroclaw-x86_64-unknown-linux-gnu.tar.gz -C docker-ctx/bin/amd64
tar xzf artifacts/zeroclaw-aarch64-unknown-linux-gnu.tar.gz -C docker-ctx/bin/arm64
mkdir -p docker-ctx/zeroclaw-data/.zeroclaw docker-ctx/zeroclaw-data/workspace
printf '%s\n' \
'workspace_dir = "/zeroclaw-data/workspace"' \
'config_path = "/zeroclaw-data/.zeroclaw/config.toml"' \
'api_key = ""' \
'default_provider = "openrouter"' \
'default_model = "anthropic/claude-sonnet-4-20250514"' \
'default_temperature = 0.7' \
'' \
'[gateway]' \
'port = 42617' \
'host = "[::]"' \
'allow_public_bind = true' \
> docker-ctx/zeroclaw-data/.zeroclaw/config.toml
cp Dockerfile.ci docker-ctx/Dockerfile
cp Dockerfile.debian.ci docker-ctx/Dockerfile.debian
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
@ -179,11 +437,22 @@ jobs:
- name: Build and push
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: .
context: docker-ctx
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.version.outputs.tag }}
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:beta
platforms: linux/amd64,linux/arm64
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Build and push Debian compatibility image
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: docker-ctx
file: docker-ctx/Dockerfile.debian
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.version.outputs.tag }}-debian
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:beta-debian
platforms: linux/amd64,linux/arm64
# Tweet removed — only stable releases should tweet (see tweet-release.yml).

View File

@ -1,6 +1,9 @@
name: Release Stable
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+" # stable tags only (no -beta suffix)
workflow_dispatch:
inputs:
version:
@ -20,6 +23,7 @@ env:
CARGO_TERM_COLOR: always
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
RELEASE_CARGO_FEATURES: channel-matrix,channel-lark,memory-postgres
jobs:
validate:
@ -32,11 +36,22 @@ jobs:
- name: Validate semver and Cargo.toml match
id: check
shell: bash
env:
INPUT_VERSION: ${{ inputs.version || '' }}
REF_NAME: ${{ github.ref_name }}
EVENT_NAME: ${{ github.event_name }}
run: |
set -euo pipefail
input_version="${{ inputs.version }}"
cargo_version=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
# Resolve version from tag push or manual input
if [[ "$EVENT_NAME" == "push" ]]; then
# Tag push: extract version from tag name (v0.5.9 -> 0.5.9)
input_version="${REF_NAME#v}"
else
input_version="$INPUT_VERSION"
fi
if [[ ! "$input_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::Version must be semver (X.Y.Z). Got: ${input_version}"
exit 1
@ -48,9 +63,13 @@ jobs:
fi
tag="v${input_version}"
if git ls-remote --exit-code --tags origin "refs/tags/${tag}" >/dev/null 2>&1; then
echo "::error::Tag ${tag} already exists."
exit 1
# Only check tag existence for manual dispatch (tag push means it already exists)
if [[ "$EVENT_NAME" != "push" ]]; then
if git ls-remote --exit-code --tags origin "refs/tags/${tag}" >/dev/null 2>&1; then
echo "::error::Tag ${tag} already exists."
exit 1
fi
fi
echo "tag=${tag}" >> "$GITHUB_OUTPUT"
@ -74,6 +93,79 @@ jobs:
path: web/dist/
retention-days: 1
release-notes:
name: Generate Release Notes
runs-on: ubuntu-latest
outputs:
notes: ${{ steps.notes.outputs.body }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- name: Build release notes
id: notes
shell: bash
env:
INPUT_VERSION: ${{ inputs.version }}
run: |
set -euo pipefail
# Find the previous stable tag (exclude beta tags)
PREV_TAG=$(git tag --sort=-creatordate | grep -vE '\-beta\.' | grep -v "^v${INPUT_VERSION}$" | head -1 || echo "")
if [ -z "$PREV_TAG" ]; then
RANGE="HEAD"
else
RANGE="${PREV_TAG}..HEAD"
fi
# Extract features only — skip bug fixes for clean release notes
FEATURES=$(git log "$RANGE" --pretty=format:"%s" --no-merges \
| grep -iE '^feat(\(|:)' \
| sed 's/^feat(\([^)]*\)): /\1: /' \
| sed 's/^feat: //' \
| sed 's/ (#[0-9]*)$//' \
| sort -uf \
| while IFS= read -r line; do echo "- ${line}"; done || true)
if [ -z "$FEATURES" ]; then
FEATURES="- Incremental improvements and polish"
fi
# Collect ALL unique contributors: git authors + Co-Authored-By
GIT_AUTHORS=$(git log "$RANGE" --pretty=format:"%an" --no-merges | sort -uf || true)
CO_AUTHORS=$(git log "$RANGE" --pretty=format:"%b" --no-merges \
| grep -ioE 'Co-Authored-By: *[^<]+' \
| sed 's/Co-Authored-By: *//i' \
| sed 's/ *$//' \
| sort -uf || true)
# Merge, deduplicate, and filter out bots
ALL_CONTRIBUTORS=$(printf "%s\n%s" "$GIT_AUTHORS" "$CO_AUTHORS" \
| sort -uf \
| grep -v '^$' \
| grep -viE '\[bot\]$|^dependabot|^github-actions|^copilot|^ZeroClaw Bot|^ZeroClaw Runner|^ZeroClaw Agent|^blacksmith' \
| while IFS= read -r name; do echo "- ${name}"; done || true)
BODY=$(cat <<NOTES_EOF
## What's New
${FEATURES}
## Contributors
${ALL_CONTRIBUTORS}
---
*Full changelog: ${PREV_TAG}...v${INPUT_VERSION}*
NOTES_EOF
)
{
echo "body<<BODY_EOF"
echo "$BODY"
echo "BODY_EOF"
} >> "$GITHUB_OUTPUT"
build:
name: Build ${{ matrix.target }}
needs: [validate, web]
@ -83,6 +175,8 @@ jobs:
fail-fast: false
matrix:
include:
# Use ubuntu-22.04 for Linux builds to link against glibc 2.35,
# ensuring compatibility with Ubuntu 22.04+ (#3573).
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
artifact: zeroclaw
@ -94,10 +188,31 @@ jobs:
cross_compiler: gcc-aarch64-linux-gnu
linker_env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER
linker: aarch64-linux-gnu-gcc
- os: ubuntu-22.04
target: armv7-unknown-linux-gnueabihf
artifact: zeroclaw
ext: tar.gz
cross_compiler: gcc-arm-linux-gnueabihf
linker_env: CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER
linker: arm-linux-gnueabihf-gcc
skip_prometheus: true
- os: ubuntu-22.04
target: arm-unknown-linux-gnueabihf
artifact: zeroclaw
ext: tar.gz
cross_compiler: gcc-arm-linux-gnueabihf
linker_env: CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER
linker: arm-linux-gnueabihf-gcc
skip_prometheus: true
- os: macos-14
target: aarch64-apple-darwin
artifact: zeroclaw
ext: tar.gz
- os: ubuntu-latest
target: aarch64-linux-android
artifact: zeroclaw
ext: tar.gz
ndk: true
- os: windows-latest
target: x86_64-pc-windows-msvc
artifact: zeroclaw.exe
@ -110,6 +225,8 @@ jobs:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
if: runner.os != 'Windows'
with:
prefix-key: ${{ matrix.os }}-${{ matrix.target }}
- uses: actions/download-artifact@v4
with:
@ -122,13 +239,21 @@ jobs:
sudo apt-get update -qq
sudo apt-get install -y ${{ matrix.cross_compiler }}
- name: Setup Android NDK
if: matrix.ndk
run: echo "$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin" >> "$GITHUB_PATH"
- name: Build release
shell: bash
run: |
if [ -n "${{ matrix.linker_env || '' }}" ] && [ -n "${{ matrix.linker || '' }}" ]; then
export "${{ matrix.linker_env }}=${{ matrix.linker }}"
fi
cargo build --release --locked --target ${{ matrix.target }}
if [ "${{ matrix.skip_prometheus || 'false' }}" = "true" ]; then
cargo build --release --locked --no-default-features --features "${{ env.RELEASE_CARGO_FEATURES }},channel-nostr,skill-creation" --target ${{ matrix.target }}
else
cargo build --release --locked --features "${{ env.RELEASE_CARGO_FEATURES }}" --target ${{ matrix.target }}
fi
- name: Package (Unix)
if: runner.os != 'Windows'
@ -148,9 +273,64 @@ jobs:
path: zeroclaw-${{ matrix.target }}.${{ matrix.ext }}
retention-days: 14
build-desktop:
name: Build Desktop App (macOS Universal)
needs: [validate]
runs-on: macos-14
timeout-minutes: 40
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
toolchain: 1.92.0
targets: aarch64-apple-darwin,x86_64-apple-darwin
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
with:
prefix-key: macos-tauri
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Tauri CLI
run: cargo install tauri-cli --locked
- name: Sync Tauri version with Cargo.toml
shell: bash
run: |
VERSION=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
cd apps/tauri
if command -v jq >/dev/null 2>&1; then
jq --arg v "$VERSION" '.version = $v' tauri.conf.json > tmp.json && mv tmp.json tauri.conf.json
else
sed -i '' "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" tauri.conf.json
fi
echo "Tauri version set to: $VERSION"
- name: Build Tauri app (universal binary)
working-directory: apps/tauri
run: cargo tauri build --target universal-apple-darwin
- name: Prepare desktop release assets
run: |
mkdir -p desktop-assets
find target -name '*.dmg' -exec cp {} desktop-assets/ZeroClaw.dmg \; 2>/dev/null || true
find target -name '*.app.tar.gz' -exec cp {} desktop-assets/ZeroClaw-macos.app.tar.gz \; 2>/dev/null || true
find target -name '*.app.tar.gz.sig' -exec cp {} desktop-assets/ZeroClaw-macos.app.tar.gz.sig \; 2>/dev/null || true
echo "--- Desktop assets ---"
ls -lh desktop-assets/
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: desktop-macos
path: desktop-assets/*
retention-days: 14
publish:
name: Publish Stable Release
needs: [validate, build]
needs: [validate, release-notes, build, build-desktop]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
@ -160,32 +340,163 @@ jobs:
pattern: zeroclaw-*
path: artifacts
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: desktop-macos
path: artifacts/desktop-macos
- name: Generate checksums
run: |
cd artifacts
find . -type f \( -name '*.tar.gz' -o -name '*.zip' \) -exec sha256sum {} + | sed 's| \./[^/]*/| |' > SHA256SUMS
find . -type f \( -name '*.tar.gz' -o -name '*.zip' -o -name '*.dmg' \) -exec sha256sum {} + | sed 's| \./[^/]*/| |' > SHA256SUMS
cat SHA256SUMS
- name: Create GitHub Release
uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
with:
tag_name: ${{ needs.validate.outputs.tag }}
name: ${{ needs.validate.outputs.tag }}
prerelease: false
generate_release_notes: true
files: |
artifacts/**/*
- name: Collect release assets
run: |
mkdir -p release-assets
find artifacts -type f \( -name '*.tar.gz' -o -name '*.zip' -o -name '*.dmg' -o -name 'SHA256SUMS' \) -exec cp {} release-assets/ \;
cp install.sh release-assets/
echo "--- Assets ---"
ls -lh release-assets/
- name: Write release notes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NOTES: ${{ needs.release-notes.outputs.notes }}
run: printf '%s\n' "$NOTES" > release-notes.md
- name: Create tag if manual dispatch
if: github.event_name == 'workflow_dispatch'
env:
TAG: ${{ needs.validate.outputs.tag }}
run: |
git tag -a "$TAG" -m "zeroclaw $TAG"
git push origin "$TAG"
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
TAG: ${{ needs.validate.outputs.tag }}
run: |
gh release create "$TAG" release-assets/* \
--repo "${{ github.repository }}" \
--title "$TAG" \
--notes-file release-notes.md \
--latest
crates-io:
name: Publish to crates.io
needs: [validate, publish]
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.92.0
- uses: Swatinem/rust-cache@v2
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: web/package-lock.json
- name: Build web dashboard
run: cd web && npm ci && npm run build
- name: Clean web build artifacts
run: rm -rf web/node_modules web/src web/package.json web/package-lock.json web/tsconfig*.json web/vite.config.ts web/index.html
- name: Publish aardvark-sys to crates.io
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
OUTPUT=$(cargo publish --locked --allow-dirty --no-verify -p aardvark-sys 2>&1) && exit 0
echo "$OUTPUT"
if echo "$OUTPUT" | grep -q 'already exists'; then
echo "::notice::aardvark-sys already on crates.io — skipping"
exit 0
fi
exit 1
- name: Wait for aardvark-sys to index
run: sleep 15
- name: Publish to crates.io
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
VERSION: ${{ inputs.version }}
run: |
# Publish to crates.io; treat "already exists" as success
# (auto-publish workflow may have already published this version)
CRATE_NAME=$(sed -n 's/^name = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
OUTPUT=$(cargo publish --locked --allow-dirty --no-verify 2>&1) && exit 0
echo "$OUTPUT"
if echo "$OUTPUT" | grep -q 'already exists'; then
echo "::notice::${CRATE_NAME}@${VERSION} already on crates.io — skipping"
exit 0
fi
exit 1
redeploy-website:
name: Trigger Website Redeploy
needs: [publish]
runs-on: ubuntu-latest
steps:
- name: Trigger website redeploy
env:
PAT: ${{ secrets.WEBSITE_REPO_PAT }}
run: |
curl -fsSL -X POST \
-H "Authorization: token $PAT" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/zeroclaw-labs/zeroclaw-website/dispatches \
-d '{"event_type":"new-release","client_payload":{"install_script_url":"https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh"}}'
docker:
name: Push Docker Image
needs: [validate, build]
runs-on: ubuntu-latest
timeout-minutes: 30
timeout-minutes: 15
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: zeroclaw-x86_64-unknown-linux-gnu
path: artifacts/
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: zeroclaw-aarch64-unknown-linux-gnu
path: artifacts/
- name: Prepare Docker context with pre-built binaries
run: |
mkdir -p docker-ctx/bin/amd64 docker-ctx/bin/arm64
tar xzf artifacts/zeroclaw-x86_64-unknown-linux-gnu.tar.gz -C docker-ctx/bin/amd64
tar xzf artifacts/zeroclaw-aarch64-unknown-linux-gnu.tar.gz -C docker-ctx/bin/arm64
mkdir -p docker-ctx/zeroclaw-data/.zeroclaw docker-ctx/zeroclaw-data/workspace
printf '%s\n' \
'workspace_dir = "/zeroclaw-data/workspace"' \
'config_path = "/zeroclaw-data/.zeroclaw/config.toml"' \
'api_key = ""' \
'default_provider = "openrouter"' \
'default_model = "anthropic/claude-sonnet-4-20250514"' \
'default_temperature = 0.7' \
'' \
'[gateway]' \
'port = 42617' \
'host = "[::]"' \
'allow_public_bind = true' \
> docker-ctx/zeroclaw-data/.zeroclaw/config.toml
cp Dockerfile.ci docker-ctx/Dockerfile
cp Dockerfile.debian.ci docker-ctx/Dockerfile.debian
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
@ -197,11 +508,63 @@ jobs:
- name: Build and push
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: .
context: docker-ctx
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.validate.outputs.tag }}
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
platforms: linux/amd64,linux/arm64
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Build and push Debian compatibility image
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: docker-ctx
file: docker-ctx/Dockerfile.debian
push: true
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.validate.outputs.tag }}-debian
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:debian
platforms: linux/amd64,linux/arm64
# ── Post-publish: package manager auto-sync ─────────────────────────
scoop:
name: Update Scoop Manifest
needs: [validate, publish]
if: ${{ !cancelled() && needs.publish.result == 'success' }}
uses: ./.github/workflows/pub-scoop.yml
with:
release_tag: ${{ needs.validate.outputs.tag }}
dry_run: false
secrets: inherit
aur:
name: Update AUR Package
needs: [validate, publish]
if: ${{ !cancelled() && needs.publish.result == 'success' }}
uses: ./.github/workflows/pub-aur.yml
with:
release_tag: ${{ needs.validate.outputs.tag }}
dry_run: false
secrets: inherit
homebrew:
name: Update Homebrew Core
needs: [validate, publish]
if: ${{ !cancelled() && needs.publish.result == 'success' }}
uses: ./.github/workflows/pub-homebrew-core.yml
with:
release_tag: ${{ needs.validate.outputs.tag }}
dry_run: false
secrets: inherit
# ── Post-publish: tweet after release + website are live ──────────────
# Docker push can be slow; don't let it block the tweet.
tweet:
name: Tweet Release
needs: [validate, publish, redeploy-website]
if: ${{ !cancelled() && needs.publish.result == 'success' }}
uses: ./.github/workflows/tweet-release.yml
with:
release_tag: ${{ needs.validate.outputs.tag }}
release_url: https://github.com/zeroclaw-labs/zeroclaw/releases/tag/${{ needs.validate.outputs.tag }}
secrets: inherit

308
.github/workflows/tweet-release.yml vendored Normal file
View File

@ -0,0 +1,308 @@
name: Tweet Release
on:
# Called by release workflows AFTER all publish steps (docker, crates, website) complete.
workflow_call:
inputs:
release_tag:
description: "Stable release tag (e.g. v0.3.0)"
required: true
type: string
release_url:
description: "GitHub Release URL"
required: true
type: string
secrets:
TWITTER_CONSUMER_API_KEY:
required: false
TWITTER_CONSUMER_API_SECRET_KEY:
required: false
TWITTER_ACCESS_TOKEN:
required: false
TWITTER_ACCESS_TOKEN_SECRET:
required: false
workflow_dispatch:
inputs:
tweet_text:
description: "Custom tweet text (include emojis, keep it punchy)"
required: true
type: string
image_url:
description: "Optional image URL to attach (png/jpg)"
required: false
type: string
jobs:
tweet:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- name: Check for new features
id: check
shell: bash
env:
RELEASE_TAG: ${{ inputs.release_tag || '' }}
MANUAL_TEXT: ${{ inputs.tweet_text || '' }}
run: |
# Manual dispatch always proceeds
if [ -n "$MANUAL_TEXT" ]; then
echo "skip=false" >> "$GITHUB_OUTPUT"
exit 0
fi
# Stable releases (no -beta suffix) always tweet — they represent
# the full release cycle, so skipping them loses visibility.
if [[ ! "$RELEASE_TAG" =~ -beta\. ]]; then
echo "Stable release ${RELEASE_TAG} — always tweet"
echo "skip=false" >> "$GITHUB_OUTPUT"
exit 0
fi
# Find the previous STABLE release tag (exclude betas) to check for new features
PREV_TAG=$(git tag --sort=-creatordate \
| grep -v "^${RELEASE_TAG}$" \
| grep -vE '\-beta\.' \
| head -1 || echo "")
if [ -z "$PREV_TAG" ]; then
echo "skip=false" >> "$GITHUB_OUTPUT"
exit 0
fi
# Count new feat() OR fix() commits since the previous release
NEW_CHANGES=$(git log "${PREV_TAG}..${RELEASE_TAG}" --pretty=format:"%s" --no-merges \
| grep -ciE '^(feat|fix)(\(|:)' || echo "0")
if [ "$NEW_CHANGES" -eq 0 ]; then
echo "No new features or fixes since ${PREV_TAG} — skipping tweet"
echo "skip=true" >> "$GITHUB_OUTPUT"
else
echo "${NEW_CHANGES} new change(s) since ${PREV_TAG} — tweeting"
echo "skip=false" >> "$GITHUB_OUTPUT"
fi
- name: Build tweet text
id: tweet
if: steps.check.outputs.skip != 'true'
shell: bash
env:
RELEASE_TAG: ${{ inputs.release_tag || '' }}
RELEASE_URL: ${{ inputs.release_url || '' }}
MANUAL_TEXT: ${{ inputs.tweet_text || '' }}
run: |
set -euo pipefail
if [ -n "$MANUAL_TEXT" ]; then
TWEET="$MANUAL_TEXT"
else
# Diff against the last STABLE release (exclude betas) to capture
# ALL features accumulated across the full beta cycle
PREV_STABLE=$(git tag --sort=-creatordate \
| grep -v "^${RELEASE_TAG}$" \
| grep -vE '\-beta\.' \
| head -1 || echo "")
RANGE="${PREV_STABLE:+${PREV_STABLE}..}${RELEASE_TAG}"
# Extract ALL features since the last stable release
FEATURES=$(git log "$RANGE" --pretty=format:"%s" --no-merges \
| grep -iE '^feat(\(|:)' \
| sed 's/^feat(\([^)]*\)): /\1: /' \
| sed 's/^feat: //' \
| sed 's/ (#[0-9]*)$//' \
| sort -uf || true)
FEAT_COUNT=$(echo "$FEATURES" | grep -c . || echo "0")
# Format top features with rocket emoji (limit to 6 for tweet space)
FEAT_LIST=$(echo "$FEATURES" \
| head -6 \
| while IFS= read -r line; do echo "🚀 ${line}"; done || true)
if [ -z "$FEAT_LIST" ]; then
FEAT_LIST="🚀 Incremental improvements and polish"
fi
# Build tweet — feature-focused style
TWEET=$(printf "🦀 ZeroClaw %s\n\n%s\n\nZero overhead. Zero compromise. 100%% Rust.\n\n#zeroclaw #rust #ai #opensource" \
"$RELEASE_TAG" "$FEAT_LIST")
fi
# X/Twitter counts any URL as 23 chars (t.co shortening).
# Extract the URL (if present), truncate the BODY to fit, then
# re-append the URL so it is never chopped.
URL=""
BODY="$TWEET"
# Pull URL out of existing tweet text or use RELEASE_URL
FOUND_URL=$(echo "$TWEET" | grep -oE 'https?://[^ ]+' | tail -1 || true)
if [ -n "$FOUND_URL" ]; then
URL="$FOUND_URL"
BODY=$(echo "$TWEET" | sed "s|${URL}||" | sed -e 's/[[:space:]]*$//')
elif [ -n "$RELEASE_URL" ]; then
URL="$RELEASE_URL"
fi
if [ -n "$URL" ]; then
# URL counts as 23 chars on X + 2 chars for \n\n separator = 25
MAX_BODY=$((280 - 25))
if [ ${#BODY} -gt $MAX_BODY ]; then
BODY="${BODY:0:$((MAX_BODY - 3))}..."
fi
TWEET=$(printf "%s\n\n%s" "$BODY" "$URL")
else
if [ ${#TWEET} -gt 280 ]; then
TWEET="${TWEET:0:277}..."
fi
fi
echo "--- Tweet preview ---"
echo "$TWEET"
echo "--- ${#TWEET} chars ---"
{
echo "text<<TWEET_EOF"
echo "$TWEET"
echo "TWEET_EOF"
} >> "$GITHUB_OUTPUT"
- name: Check for duplicate tweet
id: dedup
if: steps.check.outputs.skip != 'true'
shell: bash
env:
TWEET_TEXT: ${{ steps.tweet.outputs.text }}
run: |
# Hash the tweet content (ignore whitespace differences)
TWEET_HASH=$(echo "$TWEET_TEXT" | tr -s '[:space:]' | sha256sum | cut -d' ' -f1)
echo "hash=${TWEET_HASH}" >> "$GITHUB_OUTPUT"
# Check if we already have a cache hit for this exact tweet
MARKER_FILE="/tmp/tweet-dedup-${TWEET_HASH}"
echo "$TWEET_HASH" > "$MARKER_FILE"
- uses: actions/cache@v4
if: steps.check.outputs.skip != 'true'
id: tweet-cache
with:
path: /tmp/tweet-dedup-${{ steps.dedup.outputs.hash }}
key: tweet-${{ steps.dedup.outputs.hash }}
- name: Skip duplicate tweet
if: steps.check.outputs.skip != 'true' && steps.tweet-cache.outputs.cache-hit == 'true'
run: |
echo "::warning::Duplicate tweet detected (hash=${{ steps.dedup.outputs.hash }}) — skipping"
echo "This exact tweet was already posted in a previous run."
- name: Post to X
if: steps.check.outputs.skip != 'true' && steps.tweet-cache.outputs.cache-hit != 'true'
shell: bash
env:
TWITTER_CONSUMER_KEY: ${{ secrets.TWITTER_CONSUMER_API_KEY }}
TWITTER_CONSUMER_SECRET: ${{ secrets.TWITTER_CONSUMER_API_SECRET_KEY }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
TWEET_TEXT: ${{ steps.tweet.outputs.text }}
IMAGE_URL: ${{ inputs.image_url || '' }}
run: |
set -euo pipefail
# Skip if Twitter secrets are not configured
if [ -z "$TWITTER_CONSUMER_KEY" ] || [ -z "$TWITTER_ACCESS_TOKEN" ]; then
echo "::warning::Twitter secrets not configured — skipping tweet"
exit 0
fi
pip install requests requests-oauthlib --quiet
python3 - <<'PYEOF'
import os, sys, time
from requests_oauthlib import OAuth1Session
consumer_key = os.environ["TWITTER_CONSUMER_KEY"]
consumer_secret = os.environ["TWITTER_CONSUMER_SECRET"]
access_token = os.environ["TWITTER_ACCESS_TOKEN"]
access_token_secret = os.environ["TWITTER_ACCESS_TOKEN_SECRET"]
tweet_text = os.environ["TWEET_TEXT"]
image_url = os.environ.get("IMAGE_URL", "")
oauth = OAuth1Session(
consumer_key,
client_secret=consumer_secret,
resource_owner_key=access_token,
resource_owner_secret=access_token_secret,
)
media_id = None
# Upload image if provided
if image_url:
import requests
print(f"Downloading image: {image_url}")
img_resp = requests.get(image_url, timeout=30)
img_resp.raise_for_status()
content_type = img_resp.headers.get("content-type", "image/png")
init_resp = oauth.post(
"https://upload.twitter.com/1.1/media/upload.json",
data={
"command": "INIT",
"total_bytes": len(img_resp.content),
"media_type": content_type,
},
)
if init_resp.status_code != 202:
print(f"Media INIT failed: {init_resp.status_code} {init_resp.text}", file=sys.stderr)
sys.exit(1)
media_id = init_resp.json()["media_id_string"]
append_resp = oauth.post(
"https://upload.twitter.com/1.1/media/upload.json",
data={"command": "APPEND", "media_id": media_id, "segment_index": 0},
files={"media_data": img_resp.content},
)
if append_resp.status_code not in (200, 204):
print(f"Media APPEND failed: {append_resp.status_code} {append_resp.text}", file=sys.stderr)
sys.exit(1)
fin_resp = oauth.post(
"https://upload.twitter.com/1.1/media/upload.json",
data={"command": "FINALIZE", "media_id": media_id},
)
if fin_resp.status_code not in (200, 201):
print(f"Media FINALIZE failed: {fin_resp.status_code} {fin_resp.text}", file=sys.stderr)
sys.exit(1)
state = fin_resp.json().get("processing_info", {}).get("state")
while state == "pending" or state == "in_progress":
wait = fin_resp.json().get("processing_info", {}).get("check_after_secs", 2)
time.sleep(wait)
status_resp = oauth.get(
"https://upload.twitter.com/1.1/media/upload.json",
params={"command": "STATUS", "media_id": media_id},
)
state = status_resp.json().get("processing_info", {}).get("state")
fin_resp = status_resp
print(f"Image uploaded: media_id={media_id}")
# Post tweet
payload = {"text": tweet_text}
if media_id:
payload["media"] = {"media_ids": [media_id]}
resp = oauth.post("https://api.x.com/2/tweets", json=payload)
if resp.status_code == 201:
data = resp.json()
tweet_id = data["data"]["id"]
print(f"Tweet posted: https://x.com/zeroclawlabs/status/{tweet_id}")
else:
print(f"Failed to post tweet: {resp.status_code}", file=sys.stderr)
print(resp.text, file=sys.stderr)
sys.exit(1)
PYEOF

10
.gitignore vendored
View File

@ -1,6 +1,8 @@
/target
/target-*/
firmware/*/target
web/dist/
web/dist/*
!web/dist/.gitkeep
*.db
*.db-journal
.DS_Store
@ -41,3 +43,9 @@ credentials.json
# Coverage artifacts
lcov.info
# IDE's stuff
.idea
# Wrangler cache
.wrangler/

View File

@ -1 +0,0 @@
CLAUDE.md

92
AGENTS.md Normal file
View File

@ -0,0 +1,92 @@
# AGENTS.md — ZeroClaw
Cross-tool agent instructions for any AI coding assistant working on this repository.
## Commands
```bash
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test
```
Full pre-PR validation (recommended):
```bash
./dev/ci.sh all
```
Docs-only changes: run markdown lint and link-integrity checks. If touching bootstrap scripts: `bash -n install.sh`.
## Project Snapshot
ZeroClaw is a Rust-first autonomous agent runtime optimized for performance, efficiency, stability, extensibility, sustainability, and security.
Core architecture is trait-driven and modular. Extend by implementing traits and registering in factory modules.
Key extension points:
- `src/providers/traits.rs` (`Provider`)
- `src/channels/traits.rs` (`Channel`)
- `src/tools/traits.rs` (`Tool`)
- `src/memory/traits.rs` (`Memory`)
- `src/observability/traits.rs` (`Observer`)
- `src/runtime/traits.rs` (`RuntimeAdapter`)
- `src/peripherals/traits.rs` (`Peripheral`) — hardware boards (STM32, RPi GPIO)
## Repository Map
- `src/main.rs` — CLI entrypoint and command routing
- `src/lib.rs` — module exports and shared command enums
- `src/config/` — schema + config loading/merging
- `src/agent/` — orchestration loop
- `src/gateway/` — webhook/gateway server
- `src/security/` — policy, pairing, secret store
- `src/memory/` — markdown/sqlite memory backends + embeddings/vector merge
- `src/providers/` — model providers and resilient wrapper
- `src/channels/` — Telegram/Discord/Slack/etc channels
- `src/tools/` — tool execution surface (shell, file, memory, browser)
- `src/peripherals/` — hardware peripherals (STM32, RPi GPIO)
- `src/runtime/` — runtime adapters (currently native)
- `docs/` — topic-based documentation (setup-guides, reference, ops, security, hardware, contributing, maintainers)
- `.github/` — CI, templates, automation workflows
## Risk Tiers
- **Low risk**: docs/chore/tests-only changes
- **Medium risk**: most `src/**` behavior changes without boundary/security impact
- **High risk**: `src/security/**`, `src/runtime/**`, `src/gateway/**`, `src/tools/**`, `.github/workflows/**`, access-control boundaries
When uncertain, classify as higher risk.
## Workflow
1. **Read before write** — inspect existing module, factory wiring, and adjacent tests before editing.
2. **One concern per PR** — avoid mixed feature+refactor+infra patches.
3. **Implement minimal patch** — no speculative abstractions, no config keys without a concrete use case.
4. **Validate by risk tier** — docs-only: lightweight checks. Code changes: full relevant checks.
5. **Document impact** — update PR notes for behavior, risk, side effects, and rollback.
6. **Queue hygiene** — stacked PR: declare `Depends on #...`. Replacing old PR: declare `Supersedes #...`.
Branch/commit/PR rules:
- Work from a non-`master` branch. Open a PR to `master`; do not push directly.
- Use conventional commit titles. Prefer small PRs (`size: XS/S/M`).
- Follow `.github/pull_request_template.md` fully.
- Never commit secrets, personal data, or real identity information (see `@docs/contributing/pr-discipline.md`).
## Anti-Patterns
- Do not add heavy dependencies for minor convenience.
- Do not silently weaken security policy or access constraints.
- Do not add speculative config/feature flags "just in case".
- Do not mix massive formatting-only changes with functional changes.
- Do not modify unrelated modules "while here".
- Do not bypass failing checks without explicit explanation.
- Do not hide behavior-changing side effects in refactor commits.
- Do not include personal identity or sensitive information in test data, examples, docs, or commits.
## Linked References
- `@docs/contributing/change-playbooks.md` — adding providers, channels, tools, peripherals; security/gateway changes; architecture boundaries
- `@docs/contributing/pr-discipline.md` — privacy rules, superseded-PR attribution/templates, handoff template
- `@docs/contributing/docs-contract.md` — docs system contract, i18n rules, locale parity

View File

@ -1,90 +1,16 @@
# CLAUDE.md — ZeroClaw
# CLAUDE.md — ZeroClaw (Claude Code)
## Commands
> **Shared instructions live in [`AGENTS.md`](./AGENTS.md).**
> This file contains only Claude Code-specific directives.
```bash
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test
```
## Claude Code Settings
Full pre-PR validation (recommended):
Claude Code should read and follow all instructions in `AGENTS.md` at the repository root for project conventions, commands, risk tiers, workflow rules, and anti-patterns.
```bash
./dev/ci.sh all
```
## Hooks
Docs-only changes: run markdown lint and link-integrity checks. If touching bootstrap scripts: `bash -n install.sh`.
_No custom hooks defined yet._
## Project Snapshot
## Slash Commands
ZeroClaw is a Rust-first autonomous agent runtime optimized for performance, efficiency, stability, extensibility, sustainability, and security.
Core architecture is trait-driven and modular. Extend by implementing traits and registering in factory modules.
Key extension points:
- `src/providers/traits.rs` (`Provider`)
- `src/channels/traits.rs` (`Channel`)
- `src/tools/traits.rs` (`Tool`)
- `src/memory/traits.rs` (`Memory`)
- `src/observability/traits.rs` (`Observer`)
- `src/runtime/traits.rs` (`RuntimeAdapter`)
- `src/peripherals/traits.rs` (`Peripheral`) — hardware boards (STM32, RPi GPIO)
## Repository Map
- `src/main.rs` — CLI entrypoint and command routing
- `src/lib.rs` — module exports and shared command enums
- `src/config/` — schema + config loading/merging
- `src/agent/` — orchestration loop
- `src/gateway/` — webhook/gateway server
- `src/security/` — policy, pairing, secret store
- `src/memory/` — markdown/sqlite memory backends + embeddings/vector merge
- `src/providers/` — model providers and resilient wrapper
- `src/channels/` — Telegram/Discord/Slack/etc channels
- `src/tools/` — tool execution surface (shell, file, memory, browser)
- `src/peripherals/` — hardware peripherals (STM32, RPi GPIO)
- `src/runtime/` — runtime adapters (currently native)
- `docs/` — topic-based documentation (setup-guides, reference, ops, security, hardware, contributing, maintainers)
- `.github/` — CI, templates, automation workflows
## Risk Tiers
- **Low risk**: docs/chore/tests-only changes
- **Medium risk**: most `src/**` behavior changes without boundary/security impact
- **High risk**: `src/security/**`, `src/runtime/**`, `src/gateway/**`, `src/tools/**`, `.github/workflows/**`, access-control boundaries
When uncertain, classify as higher risk.
## Workflow
1. **Read before write** — inspect existing module, factory wiring, and adjacent tests before editing.
2. **One concern per PR** — avoid mixed feature+refactor+infra patches.
3. **Implement minimal patch** — no speculative abstractions, no config keys without a concrete use case.
4. **Validate by risk tier** — docs-only: lightweight checks. Code changes: full relevant checks.
5. **Document impact** — update PR notes for behavior, risk, side effects, and rollback.
6. **Queue hygiene** — stacked PR: declare `Depends on #...`. Replacing old PR: declare `Supersedes #...`.
Branch/commit/PR rules:
- Work from a non-`master` branch. Open a PR to `master`; do not push directly.
- Use conventional commit titles. Prefer small PRs (`size: XS/S/M`).
- Follow `.github/pull_request_template.md` fully.
- Never commit secrets, personal data, or real identity information (see `@docs/contributing/pr-discipline.md`).
## Anti-Patterns
- Do not add heavy dependencies for minor convenience.
- Do not silently weaken security policy or access constraints.
- Do not add speculative config/feature flags "just in case".
- Do not mix massive formatting-only changes with functional changes.
- Do not modify unrelated modules "while here".
- Do not bypass failing checks without explicit explanation.
- Do not hide behavior-changing side effects in refactor commits.
- Do not include personal identity or sensitive information in test data, examples, docs, or commits.
## Linked References
- `@docs/contributing/change-playbooks.md` — adding providers, channels, tools, peripherals; security/gateway changes; architecture boundaries
- `@docs/contributing/pr-discipline.md` — privacy rules, superseded-PR attribution/templates, handoff template
- `@docs/contributing/docs-contract.md` — docs system contract, i18n rules, locale parity
_No custom slash commands defined yet._

View File

@ -2,20 +2,41 @@
Thanks for your interest in contributing to ZeroClaw! This guide will help you get started.
---
## ⚠️ Branch Migration Notice (March 2026)
**`master` is the ONLY default branch. The `main` branch no longer exists.**
If you have an existing fork or local clone that tracks `main`, you **must** update it:
```bash
# Update your local clone to track master
git checkout master
git branch -D main 2>/dev/null # delete local main if it exists
git remote set-head origin master
git fetch origin --prune # remove stale remote refs
# If your fork still has a main branch, delete it
git push origin --delete main 2>/dev/null
```
All PRs must target **`master`**. PRs targeting `main` will be rejected.
**Background:** ZeroClaw previously used `main` in some documentation and scripts, which caused 404 errors, broken CI refs, and contributor confusion (see [#2929](https://github.com/zeroclaw-labs/zeroclaw/issues/2929), [#3061](https://github.com/zeroclaw-labs/zeroclaw/issues/3061), [#3194](https://github.com/zeroclaw-labs/zeroclaw/pull/3194)). As of March 2026, all references have been corrected, stale branches cleaned up, and the `main` branch permanently deleted.
---
## Branching Model
> **Important — `master` is the default branch.**
>
> ZeroClaw uses **`master`** as its single source-of-truth branch. The `main` branch has been removed.
>
> Previously, some documentation and scripts referenced a `main` branch, which caused 404 errors and contributor confusion (see [#2929](https://github.com/zeroclaw-labs/zeroclaw/issues/2929), [#3061](https://github.com/zeroclaw-labs/zeroclaw/issues/3061), [#3194](https://github.com/zeroclaw-labs/zeroclaw/pull/3194)). As of March 2026, all references have been corrected and the `main` branch deleted.
> **`master`** is the single source-of-truth branch.
>
> **How contributors should work:**
> 1. Fork the repository
> 2. Create a `feat/*` or `fix/*` branch from `master`
> 3. Open a PR targeting `master`
>
> Do **not** create or push to a `main` branch.
> Do **not** create or push to a `main` branch. There is no `main` branch — it will not work.
## First-Time Contributors
@ -559,4 +580,3 @@ Recommended scope keys in commit titles:
## License
By contributing, you agree that your contributions will be licensed under the MIT License.
# Contributing Guide Update

4982
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
[workspace]
members = [".", "crates/robot-kit"]
members = [".", "crates/robot-kit", "crates/aardvark-sys", "apps/tauri"]
resolver = "2"
[package]
name = "zeroclaw"
version = "0.1.9"
name = "zeroclawlabs"
version = "0.6.1"
edition = "2021"
authors = ["theonlyhennygod"]
license = "MIT OR Apache-2.0"
@ -14,6 +14,24 @@ readme = "README.md"
keywords = ["ai", "agent", "cli", "assistant", "chatbot"]
categories = ["command-line-utilities", "api-bindings"]
rust-version = "1.87"
include = [
"/src/**/*",
"/build.rs",
"/Cargo.toml",
"/Cargo.lock",
"/LICENSE*",
"/README.md",
"/web/dist/**/*",
"/tool_descriptions/**/*",
]
[[bin]]
name = "zeroclaw"
path = "src/main.rs"
[lib]
name = "zeroclaw"
path = "src/lib.rs"
[dependencies]
# CLI - minimal and fast
@ -35,6 +53,7 @@ matrix-sdk = { version = "0.16", optional = true, default-features = false, feat
serde = { version = "1.0", default-features = false, features = ["derive"] }
serde_json = { version = "1.0", default-features = false, features = ["std"] }
serde_ignored = "0.1"
serde_yaml = "0.9"
# Config
directories = "6.0"
@ -48,8 +67,8 @@ schemars = "1.2"
tracing = { version = "0.1", default-features = false }
tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt", "ansi", "env-filter"] }
# Observability - Prometheus metrics
prometheus = { version = "0.14", default-features = false }
# Observability - Prometheus metrics (optional; requires AtomicU64, unavailable on 32-bit)
prometheus = { version = "0.14", default-features = false, optional = true }
# Base64 encoding (screenshots, image data)
base64 = "0.22"
@ -64,10 +83,22 @@ nanohtml2text = "0.2"
# Optional Rust-native browser automation backend
fantoccini = { version = "0.22.1", optional = true, default-features = false, features = ["rustls-tls"] }
# Progress bars (update pipeline)
indicatif = "0.18"
# Temp files (update pipeline rollback)
tempfile = "3.26"
# Zip extraction for ClawhHub / OpenClaw registry installers
zip = { version = "8.1", default-features = false, features = ["deflate"] }
# Error handling
anyhow = "1.0"
thiserror = "2.0"
# Aardvark I2C/SPI/GPIO USB adapter (Total Phase) — stub when SDK absent
aardvark-sys = { path = "crates/aardvark-sys", version = "0.1.0" }
# UUID generation
uuid = { version = "1.22", default-features = false, features = ["v4", "std"] }
@ -82,12 +113,12 @@ hex = "0.4"
# CSPRNG for secure token generation
rand = "0.10"
# Portable atomic fallbacks for targets without native 64-bit atomics
portable-atomic = "1"
# serde-big-array for wa-rs storage (large array serialization)
serde-big-array = { version = "0.5", optional = true }
# Portable atomic fallbacks for 32-bit targets (no native 64-bit atomics)
portable-atomic = { version = "1", optional = true }
# Fast mutexes that don't poison on panic
parking_lot = "0.12"
@ -118,7 +149,8 @@ glob = "0.3"
which = "8.0"
# WebSocket client channels (Discord/Lark/DingTalk/Nostr)
tokio-tungstenite = { version = "0.28", features = ["rustls-tls-webpki-roots"] }
tokio-tungstenite = { version = "0.29", features = ["rustls-tls-webpki-roots"] }
tokio-socks = "0.5"
futures-util = { version = "0.3", default-features = false, features = ["sink"] }
nostr-sdk = { version = "0.44", default-features = false, features = ["nip04", "nip59"], optional = true }
regex = "1.10"
@ -165,6 +197,12 @@ probe-rs = { version = "0.31", optional = true }
# PDF extraction for datasheet RAG (optional, enable with --features rag-pdf)
pdf-extract = { version = "0.10", optional = true }
# WASM plugin runtime (extism)
extism = { version = "1.20", optional = true }
# Cross-platform audio capture for voice wake word detection (optional, enable with --features voice-wake)
cpal = { version = "0.15", optional = true }
# Terminal QR rendering for WhatsApp Web pairing flow.
qrcode = { version = "0.14", optional = true }
@ -187,13 +225,14 @@ landlock = { version = "0.4", optional = true }
libc = "0.2"
[features]
default = ["channel-nostr"]
default = ["observability-prometheus", "channel-nostr", "channel-lark", "skill-creation"]
channel-nostr = ["dep:nostr-sdk"]
hardware = ["nusb", "tokio-serial"]
channel-matrix = ["dep:matrix-sdk"]
channel-lark = ["dep:prost"]
channel-feishu = ["channel-lark"] # Alias for Feishu users (Lark and Feishu are the same platform)
memory-postgres = ["dep:postgres"]
observability-prometheus = ["dep:prometheus"]
observability-otel = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:opentelemetry-otlp"]
peripheral-rpi = ["rppal"]
# Browser backend feature alias used by cfg(feature = "browser-native")
@ -205,12 +244,40 @@ sandbox-landlock = ["dep:landlock"]
sandbox-bubblewrap = []
# Backward-compatible alias for older invocations
landlock = ["sandbox-landlock"]
# Prometheus metrics observer (requires 64-bit atomics; disable on 32-bit targets)
metrics = ["observability-prometheus"]
# probe = probe-rs for Nucleo memory read (adds ~50 deps; optional)
probe = ["dep:probe-rs"]
# rag-pdf = PDF ingestion for datasheet RAG
rag-pdf = ["dep:pdf-extract"]
# skill-creation = Autonomous skill creation from successful multi-step tasks
skill-creation = []
# whatsapp-web = Native WhatsApp Web client with custom rusqlite storage backend
whatsapp-web = ["dep:wa-rs", "dep:wa-rs-core", "dep:wa-rs-binary", "dep:wa-rs-proto", "dep:wa-rs-ureq-http", "dep:wa-rs-tokio-transport", "dep:serde-big-array", "dep:prost", "dep:qrcode"]
# voice-wake = Voice wake word detection via microphone (cpal)
voice-wake = ["dep:cpal"]
# WASM plugin system (extism-based)
plugins-wasm = ["dep:extism"]
# Meta-feature for CI: all features except those requiring system C libraries
# not available on standard CI runners (e.g., voice-wake needs libasound2-dev).
ci-all = [
"channel-nostr",
"hardware",
"channel-matrix",
"channel-lark",
"memory-postgres",
"observability-prometheus",
"observability-otel",
"peripheral-rpi",
"browser-native",
"sandbox-landlock",
"sandbox-bubblewrap",
"probe",
"rag-pdf",
"skill-creation",
"whatsapp-web",
"plugins-wasm",
]
[profile.release]
opt-level = "z" # Optimize for size
@ -225,6 +292,11 @@ inherits = "release"
codegen-units = 8 # Parallel codegen for faster builds on powerful machines (16GB+ RAM recommended)
# Use: cargo build --profile release-fast
[profile.ci]
inherits = "release"
lto = "thin" # Much faster than fat LTO; still catches release-mode issues
codegen-units = 16 # Full parallelism for CI runners
[profile.dist]
inherits = "release"
opt-level = "z"

View File

@ -1,9 +1,18 @@
# syntax=docker/dockerfile:1.7
# ── Stage 0: Frontend build ─────────────────────────────────────
FROM node:22-alpine AS web-builder
WORKDIR /web
COPY web/package.json web/package-lock.json* ./
RUN npm ci --ignore-scripts 2>/dev/null || npm install --ignore-scripts
COPY web/ .
RUN npm run build
# ── Stage 1: Build ────────────────────────────────────────────
FROM rust:1.93-slim@sha256:9663b80a1621253d30b146454f903de48f0af925c967be48c84745537cd35d8b AS builder
FROM rust:1.94-slim@sha256:da9dab7a6b8dd428e71718402e97207bb3e54167d37b5708616050b1e8f60ed6 AS builder
WORKDIR /app
ARG ZEROCLAW_CARGO_FEATURES="memory-postgres,channel-lark"
# Install build dependencies
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
@ -14,47 +23,47 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
# 1. Copy manifests to cache dependencies
COPY Cargo.toml Cargo.lock ./
COPY crates/robot-kit/Cargo.toml crates/robot-kit/Cargo.toml
# Include every workspace member: Cargo.lock is generated for the full workspace.
# Previously we used sed to drop `crates/robot-kit`, which made the manifest disagree
# with the lockfile and caused `cargo --locked` to fail (Cargo refused to rewrite the lock).
COPY crates/robot-kit/ crates/robot-kit/
COPY crates/aardvark-sys/ crates/aardvark-sys/
# Create dummy targets declared in Cargo.toml so manifest parsing succeeds.
RUN mkdir -p src benches crates/robot-kit/src \
RUN mkdir -p src benches \
&& echo "fn main() {}" > src/main.rs \
&& echo "fn main() {}" > benches/agent_benchmarks.rs \
&& echo "pub fn placeholder() {}" > crates/robot-kit/src/lib.rs
&& echo "" > src/lib.rs \
&& echo "fn main() {}" > benches/agent_benchmarks.rs
RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \
--mount=type=cache,id=zeroclaw-cargo-git,target=/usr/local/cargo/git,sharing=locked \
--mount=type=cache,id=zeroclaw-target,target=/app/target,sharing=locked \
cargo build --release --locked
RUN rm -rf src benches crates/robot-kit/src
if [ -n "$ZEROCLAW_CARGO_FEATURES" ]; then \
cargo build --release --locked --features "$ZEROCLAW_CARGO_FEATURES"; \
else \
cargo build --release --locked; \
fi
RUN rm -rf src benches
# 2. Copy only build-relevant source paths (avoid cache-busting on docs/tests/scripts)
COPY src/ src/
COPY benches/ benches/
COPY crates/ crates/
COPY firmware/ firmware/
COPY web/ web/
# Keep release builds resilient when frontend dist assets are not prebuilt in Git.
RUN mkdir -p web/dist && \
if [ ! -f web/dist/index.html ]; then \
printf '%s\n' \
'<!doctype html>' \
'<html lang="en">' \
' <head>' \
' <meta charset="utf-8" />' \
' <meta name="viewport" content="width=device-width,initial-scale=1" />' \
' <title>ZeroClaw Dashboard</title>' \
' </head>' \
' <body>' \
' <h1>ZeroClaw Dashboard Unavailable</h1>' \
' <p>Frontend assets are not bundled in this build. Build the web UI to populate <code>web/dist</code>.</p>' \
' </body>' \
'</html>' > web/dist/index.html; \
fi
COPY --from=web-builder /web/dist web/dist
COPY *.rs .
RUN touch src/main.rs
RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \
--mount=type=cache,id=zeroclaw-cargo-git,target=/usr/local/cargo/git,sharing=locked \
--mount=type=cache,id=zeroclaw-target,target=/app/target,sharing=locked \
cargo build --release --locked && \
rm -rf target/release/.fingerprint/zeroclawlabs-* \
target/release/deps/zeroclawlabs-* \
target/release/incremental/zeroclawlabs-* && \
if [ -n "$ZEROCLAW_CARGO_FEATURES" ]; then \
cargo build --release --locked --features "$ZEROCLAW_CARGO_FEATURES"; \
else \
cargo build --release --locked; \
fi && \
cp target/release/zeroclaw /app/zeroclaw && \
strip /app/zeroclaw
RUN size=$(stat -c%s /app/zeroclaw) && \
if [ "$size" -lt 1000000 ]; then echo "ERROR: binary too small (${size} bytes), likely dummy build artifact" && exit 1; fi
# Prepare runtime directory structure and default config inline (no extra stage)
RUN mkdir -p /zeroclaw-data/.zeroclaw /zeroclaw-data/workspace && \
@ -70,6 +79,10 @@ RUN mkdir -p /zeroclaw-data/.zeroclaw /zeroclaw-data/workspace && \
'port = 42617' \
'host = "[::]"' \
'allow_public_bind = true' \
'' \
'[autonomy]' \
'level = "supervised"' \
'auto_approve = ["file_read", "file_write", "file_edit", "memory_recall", "memory_store", "web_search_tool", "web_fetch", "calculator", "glob_search", "content_search", "image_info", "weather", "git_operations"]' \
> /zeroclaw-data/.zeroclaw/config.toml && \
chown -R 65534:65534 /zeroclaw-data
@ -90,6 +103,8 @@ COPY dev/config.template.toml /zeroclaw-data/.zeroclaw/config.toml
RUN chown 65534:65534 /zeroclaw-data/.zeroclaw/config.toml
# Environment setup
# Ensure UTF-8 locale so CJK / multibyte input is handled correctly
ENV LANG=C.UTF-8
# Use consistent workspace path
ENV ZEROCLAW_WORKSPACE=/zeroclaw-data/workspace
ENV HOME=/zeroclaw-data
@ -104,8 +119,10 @@ ENV ZEROCLAW_GATEWAY_PORT=42617
WORKDIR /zeroclaw-data
USER 65534:65534
EXPOSE 42617
HEALTHCHECK --interval=60s --timeout=10s --retries=3 --start-period=10s \
CMD ["zeroclaw", "status", "--format=exit-code"]
ENTRYPOINT ["zeroclaw"]
CMD ["gateway"]
CMD ["daemon"]
# ── Stage 3: Production Runtime (Distroless) ─────────────────
FROM gcr.io/distroless/cc-debian13:nonroot@sha256:84fcd3c223b144b0cb6edc5ecc75641819842a9679a3a58fd6294bec47532bf7 AS release
@ -114,6 +131,8 @@ COPY --from=builder /app/zeroclaw /usr/local/bin/zeroclaw
COPY --from=builder /zeroclaw-data /zeroclaw-data
# Environment setup
# Ensure UTF-8 locale so CJK / multibyte input is handled correctly
ENV LANG=C.UTF-8
ENV ZEROCLAW_WORKSPACE=/zeroclaw-data/workspace
ENV HOME=/zeroclaw-data
# Default provider and model are set in config.toml, not here,
@ -126,5 +145,7 @@ ENV ZEROCLAW_GATEWAY_PORT=42617
WORKDIR /zeroclaw-data
USER 65534:65534
EXPOSE 42617
HEALTHCHECK --interval=60s --timeout=10s --retries=3 --start-period=10s \
CMD ["zeroclaw", "status", "--format=exit-code"]
ENTRYPOINT ["zeroclaw"]
CMD ["gateway"]
CMD ["daemon"]

25
Dockerfile.ci Normal file
View File

@ -0,0 +1,25 @@
# Dockerfile.ci — CI/release image using pre-built binaries.
# Used by release workflows to skip the ~60 min Rust compilation.
# The main Dockerfile is still used for local dev builds.
# ── Runtime (Distroless) ─────────────────────────────────────
FROM gcr.io/distroless/cc-debian13:nonroot@sha256:84fcd3c223b144b0cb6edc5ecc75641819842a9679a3a58fd6294bec47532bf7
ARG TARGETARCH
# Copy the pre-built binary for this platform (amd64 or arm64)
COPY bin/${TARGETARCH}/zeroclaw /usr/local/bin/zeroclaw
# Runtime directory structure and default config
COPY --chown=65534:65534 zeroclaw-data/ /zeroclaw-data/
ENV LANG=C.UTF-8
ENV ZEROCLAW_WORKSPACE=/zeroclaw-data/workspace
ENV HOME=/zeroclaw-data
ENV ZEROCLAW_GATEWAY_PORT=42617
WORKDIR /zeroclaw-data
USER 65534:65534
EXPOSE 42617
ENTRYPOINT ["zeroclaw"]
CMD ["gateway"]

130
Dockerfile.debian Normal file
View File

@ -0,0 +1,130 @@
# syntax=docker/dockerfile:1.7
# ── Stage 0: Frontend build ─────────────────────────────────────
FROM node:22-alpine AS web-builder
WORKDIR /web
COPY web/package.json web/package-lock.json* ./
RUN npm ci --ignore-scripts 2>/dev/null || npm install --ignore-scripts
COPY web/ .
RUN npm run build
# Dockerfile.debian — Shell-equipped variant of the ZeroClaw container.
#
# The default Dockerfile produces a distroless "release" image with no shell,
# which is ideal for minimal attack surface but prevents the agent from using
# shell-based tools (pwd, ls, git, curl, etc.).
#
# This variant uses debian:bookworm-slim as the runtime base and ships
# essential CLI tools so the agent can operate as a full coding assistant.
#
# Build:
# docker build -f Dockerfile.debian -t zeroclaw:debian .
#
# Or with docker compose:
# docker compose -f docker-compose.yml -f docker-compose.debian.yml up
# ── Stage 1: Build (match runtime glibc baseline) ───────────
FROM rust:1.94-bookworm AS builder
WORKDIR /app
ARG ZEROCLAW_CARGO_FEATURES="memory-postgres,channel-lark"
# Install build dependencies
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
apt-get update && apt-get install -y \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
# 1. Copy manifests to cache dependencies
COPY Cargo.toml Cargo.lock ./
# Include every workspace member: Cargo.lock is generated for the full workspace.
# Previously we used sed to drop `crates/robot-kit`, which made the manifest disagree
# with the lockfile and caused `cargo --locked` to fail (Cargo refused to rewrite the lock).
COPY crates/robot-kit/ crates/robot-kit/
# Create dummy targets declared in Cargo.toml so manifest parsing succeeds.
RUN mkdir -p src benches \
&& echo "fn main() {}" > src/main.rs \
&& echo "" > src/lib.rs \
&& echo "fn main() {}" > benches/agent_benchmarks.rs
RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \
--mount=type=cache,id=zeroclaw-cargo-git,target=/usr/local/cargo/git,sharing=locked \
--mount=type=cache,id=zeroclaw-target,target=/app/target,sharing=locked \
if [ -n "$ZEROCLAW_CARGO_FEATURES" ]; then \
cargo build --release --locked --features "$ZEROCLAW_CARGO_FEATURES"; \
else \
cargo build --release --locked; \
fi
RUN rm -rf src benches
# 2. Copy only build-relevant source paths (avoid cache-busting on docs/tests/scripts)
COPY src/ src/
COPY benches/ benches/
COPY --from=web-builder /web/dist web/dist
RUN touch src/main.rs
RUN --mount=type=cache,id=zeroclaw-cargo-registry,target=/usr/local/cargo/registry,sharing=locked \
--mount=type=cache,id=zeroclaw-cargo-git,target=/usr/local/cargo/git,sharing=locked \
--mount=type=cache,id=zeroclaw-target,target=/app/target,sharing=locked \
if [ -n "$ZEROCLAW_CARGO_FEATURES" ]; then \
cargo build --release --locked --features "$ZEROCLAW_CARGO_FEATURES"; \
else \
cargo build --release --locked; \
fi && \
cp target/release/zeroclaw /app/zeroclaw && \
strip /app/zeroclaw
RUN size=$(stat -c%s /app/zeroclaw) && \
if [ "$size" -lt 1000000 ]; then echo "ERROR: binary too small (${size} bytes), likely dummy build artifact" && exit 1; fi
# Prepare runtime directory structure and default config inline (no extra stage)
RUN mkdir -p /zeroclaw-data/.zeroclaw /zeroclaw-data/workspace && \
printf '%s\n' \
'workspace_dir = "/zeroclaw-data/workspace"' \
'config_path = "/zeroclaw-data/.zeroclaw/config.toml"' \
'api_key = ""' \
'default_provider = "openrouter"' \
'default_model = "anthropic/claude-sonnet-4-20250514"' \
'default_temperature = 0.7' \
'' \
'[gateway]' \
'port = 42617' \
'host = "[::]"' \
'allow_public_bind = true' \
'' \
'[autonomy]' \
'level = "supervised"' \
'auto_approve = ["file_read", "file_write", "file_edit", "memory_recall", "memory_store", "web_search_tool", "web_fetch", "calculator", "glob_search", "content_search", "image_info", "weather", "git_operations"]' \
> /zeroclaw-data/.zeroclaw/config.toml && \
chown -R 65534:65534 /zeroclaw-data
# ── Stage 2: Runtime (Debian with shell) ─────────────────────
FROM debian:bookworm-slim AS runtime
# Install essential tools for agent shell operations
RUN apt-get update && apt-get install -y --no-install-recommends \
bash \
ca-certificates \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/zeroclaw /usr/local/bin/zeroclaw
COPY --from=builder /zeroclaw-data /zeroclaw-data
# Environment setup
# Ensure UTF-8 locale so CJK / multibyte input is handled correctly
ENV LANG=C.UTF-8
ENV ZEROCLAW_WORKSPACE=/zeroclaw-data/workspace
ENV HOME=/zeroclaw-data
# Default provider and model are set in config.toml, not here,
# so config file edits are not silently overridden
ENV ZEROCLAW_GATEWAY_PORT=42617
# API_KEY must be provided at runtime!
WORKDIR /zeroclaw-data
USER 65534:65534
EXPOSE 42617
HEALTHCHECK --interval=60s --timeout=10s --retries=3 --start-period=10s \
CMD ["zeroclaw", "status", "--format=exit-code"]
ENTRYPOINT ["zeroclaw"]
CMD ["daemon"]

34
Dockerfile.debian.ci Normal file
View File

@ -0,0 +1,34 @@
# Dockerfile.debian.ci — CI/release Debian image using pre-built binaries.
# Mirrors Dockerfile.ci but uses debian:bookworm-slim with shell tools
# so the agent can use shell-based tools (pwd, ls, git, curl, etc.).
# Used by release workflows to skip ~60 min QEMU cross-compilation.
# ── Runtime (Debian with shell) ────────────────────────────────
FROM debian:bookworm-slim
ARG TARGETARCH
# Install essential tools for agent shell operations
RUN apt-get update && apt-get install -y --no-install-recommends \
bash \
ca-certificates \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
# Copy the pre-built binary for this platform (amd64 or arm64)
COPY bin/${TARGETARCH}/zeroclaw /usr/local/bin/zeroclaw
# Runtime directory structure and default config
COPY --chown=65534:65534 zeroclaw-data/ /zeroclaw-data/
ENV LANG=C.UTF-8
ENV ZEROCLAW_WORKSPACE=/zeroclaw-data/workspace
ENV HOME=/zeroclaw-data
ENV ZEROCLAW_GATEWAY_PORT=42617
WORKDIR /zeroclaw-data
USER 65534:65534
EXPOSE 42617
ENTRYPOINT ["zeroclaw"]
CMD ["gateway"]

78
Justfile Normal file
View File

@ -0,0 +1,78 @@
# Justfile - Convenient command runner for ZeroClaw development
# https://github.com/casey/just
# Default recipe to display help
_default:
@just --list
# Format all code
fmt:
cargo fmt --all
# Check formatting without making changes
fmt-check:
cargo fmt --all -- --check
# Run clippy lints
lint:
cargo clippy --all-targets -- -D warnings
# Run all tests
test:
cargo test --locked
# Run only unit tests (faster)
test-lib:
cargo test --lib
# Run the full CI quality gate locally
ci: fmt-check lint test
@echo "✅ All CI checks passed!"
# Build in release mode
build:
cargo build --release --locked
# Build in debug mode
build-debug:
cargo build
# Clean build artifacts
clean:
cargo clean
# Run zeroclaw with example config (for development)
dev *ARGS:
cargo run -- {{ARGS}}
# Check code without building
check:
cargo check --all-targets
# Run cargo doc and open in browser
doc:
cargo doc --no-deps --open
# Update dependencies
update:
cargo update
# Run cargo audit to check for security vulnerabilities
audit:
cargo audit
# Run cargo deny checks
deny:
cargo deny check
# Format TOML files (requires taplo)
fmt-toml:
taplo format
# Check TOML formatting (requires taplo)
fmt-toml-check:
taplo format --check
# Run all formatting tools
fmt-all: fmt fmt-toml
@echo "✅ All formatting complete!"

15
NOTICE
View File

@ -41,3 +41,18 @@ This project uses third-party libraries and components,
each licensed under their respective terms.
See Cargo.lock for a complete dependency list.
Verifiable Intent Specification
================================
The src/verifiable_intent/ module is a Rust-native reimplementation based on
the Verifiable Intent open specification and reference implementation:
Project: Verifiable Intent (VI)
Author: agent-intent
Source: https://github.com/agent-intent/verifiable-intent
License: Apache License, Version 2.0
This implementation follows the VI specification design (SD-JWT layered
credentials, constraint model, three-layer chain). No source code was copied
from the reference implementation.

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +1,33 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — ব্যক্তিগত AI সহকারী</h1>
<p align="center">
<strong>শূন্য ওভারহেড। শূন্য আপস। 100% রাস্ট। 100% অজ্ঞেয়বাদী।</strong><br>
⚡️ <strong>$10 হার্ডওয়্যারে <5MB RAM িয় চল: এটি OpenClaw 99% কম ি এব Mac mini 98% সস্ত!</strong>
<strong>শূন্য ওভারহেড। শূন্য আপস। 100% Rust। 100% অজ্ঞেয়বাদী।</strong><br>
⚡️ <strong>$10 হার্ডওয়্যারে <5MB RAM িয় চল: এটি OpenClaw 99% কম ি এব Mac mini 98% সস্ত!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
🌐 <strong>ভাষা:</strong>
Harvard, MIT, এবং Sundai.Club সম্প্রদায়ের ছাত্র ও সদস্যদের দ্বারা নির্মিত।
</p>
<p align="center">
🌐 <strong>ভাষাসমূহ:</strong>
<a href="README.md">🇺🇸 English</a> ·
<a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
<a href="README.ja.md">🇯🇵 日本語</a> ·
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw একটি ব্যক্তিগত AI সহকারী যা আপনি আপনার নিজের ডিভাইসে চালান। এটি আপনাকে সেই চ্যানেলগুলোতে উত্তর দেয় যা আপনি ইতিমধ্যে ব্যবহার করেন (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, এবং আরও)। এতে রিয়েল-টাইম নিয়ন্ত্রণের জন্য একটি ওয়েব ড্যাশবোর্ড আছে এবং এটি হার্ডওয়্যার পেরিফেরালের (ESP32, STM32, Arduino, Raspberry Pi) সাথে সংযোগ করতে পারে। Gateway শুধুমাত্র কন্ট্রোল প্লেন — পণ্যটি হল সহকারী।
## ZeroClaw কী?
আপনি যদি একটি ব্যক্তিগত, একক-ব্যবহারকারী সহকারী চান যা স্থানীয়, দ্রুত এবং সর্বদা চালু মনে হয়, এটাই সেটি।
ZeroClaw হল একটি হালকা, মিউটেবল এবং এক্সটেনসিবল AI অ্যাসিস্ট্যান্ট ইনফ্রাস্ট্রাকচার যা রাস্টে তৈরি। এটি বিভিন্ন LLM প্রদানকারীদের (Anthropic, OpenAI, Google, Ollama, ইত্যাদি) একটি ইউনিফাইড ইন্টারফেসের মাধ্যমে সংযুক্ত করে এবং একাধিক চ্যানেল (Telegram, Matrix, CLI, ইত্যাদি) সমর্থন করে।
<p align="center">
<a href="https://zeroclawlabs.ai">ওয়েবসাইট</a> ·
<a href="docs/README.md">ডকুমেন্টেশন</a> ·
<a href="docs/architecture.md">আর্কিটেকচার</a> ·
<a href="#দ্রুত-শুরু">শুরু করুন</a> ·
<a href="#openclaw-থেকে-মাইগ্রেশন">OpenClaw থেকে মাইগ্রেশন</a> ·
<a href="docs/ops/troubleshooting.md">সমস্যা সমাধান</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### মূল বৈশিষ্ট্যসমূহ
> **পছন্দের সেটআপ:** আপনার টার্মিনালে `zeroclaw onboard` চালান। ZeroClaw Onboard আপনাকে gateway, workspace, channels, এবং provider সেট আপ করতে ধাপে ধাপে গাইড করে। এটি প্রস্তাবিত সেটআপ পথ এবং macOS, Linux, এবং Windows (WSL2 এর মাধ্যমে) এ কাজ করে। নতুন ইনস্টল? এখানে শুরু করুন: [শুরু করুন](#দ্রুত-শুরু)
- **🦀 রাস্টে লেখা**: উচ্চ পারফরম্যান্স, মেমোরি নিরাপত্তা, এবং জিরো-কস্ট অ্যাবস্ট্রাকশন
- **🔌 প্রদানকারী-অজ্ঞেয়বাদী**: OpenAI, Anthropic, Google Gemini, Ollama, এবং অন্যান্য সমর্থন
- **📱 মাল্টি-চ্যানেল**: Telegram, Matrix (E2EE সহ), CLI, এবং অন্যান্য
- **🧠 প্লাগেবল মেমোরি**: SQLite এবং Markdown ব্যাকএন্ড
- **🛠️ এক্সটেন্সিবল টুলস**: সহজেই কাস্টম টুল যোগ করুন
- **🔒 নিরাপত্তা-প্রথম**: রিভার্স-প্রক্সি, গোপনীয়তা-প্রথম ডিজাইন
### সাবস্ক্রিপশন অথ (OAuth)
---
- **OpenAI Codex** (ChatGPT সাবস্ক্রিপশন)
- **Gemini** (Google OAuth)
- **Anthropic** (API key বা auth token)
## দ্রুত শুরু
মডেল নোট: যদিও অনেক প্রদানকারী/মডেল সমর্থিত, সেরা অভিজ্ঞতার জন্য আপনার কাছে উপলব্ধ সবচেয়ে শক্তিশালী সর্বশেষ প্রজন্মের মডেল ব্যবহার করুন। দেখুন [অনবোর্ডিং](#দ্রুত-শুরু)।
### প্রয়োজনীয়তা
মডেল কনফিগ + CLI: [প্রদানকারী রেফারেন্স](docs/reference/api/providers-reference.md)
অথ প্রোফাইল রোটেশন (OAuth বনাম API keys) + ফেইলওভার: [মডেল ফেইলওভার](docs/reference/api/providers-reference.md)
- রাস্ট 1.70+
- একটি LLM প্রদানকারী API কী (Anthropic, OpenAI, ইত্যাদি)
## ইনস্টল (প্রস্তাবিত)
### ইনস্টলেশন
রানটাইম: Rust স্থিতিশীল টুলচেইন। একক বাইনারি, কোনো রানটাইম নির্ভরতা নেই।
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### এক-ক্লিক বুটস্ট্র্যাপ
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` ইনস্টলের পরে স্বয়ংক্রিয়ভাবে চলে আপনার workspace এবং provider কনফিগার করতে।
## দ্রুত শুরু (TL;DR)
সম্পূর্ণ শিক্ষানবিশ গাইড (অথ, পেয়ারিং, চ্যানেল): [শুরু করুন](docs/setup-guides/one-click-bootstrap.md)
```bash
# Install + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Start the gateway (webhook server + web dashboard)
zeroclaw gateway # default: 127.0.0.1:42617
zeroclaw gateway --port 0 # random port (security hardened)
# Talk to the assistant
zeroclaw agent -m "Hello, ZeroClaw!"
# Interactive mode
zeroclaw agent
# Start full autonomous runtime (gateway + channels + cron + hands)
zeroclaw daemon
# Check status
zeroclaw status
# Run diagnostics
zeroclaw doctor
```
আপগ্রেড করছেন? আপডেটের পরে `zeroclaw doctor` চালান।
### সোর্স থেকে (ডেভেলপমেন্ট)
```bash
# রিপোজিটরি ক্লোন করুন
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# বিল্ড করুন
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# চালান
cargo run --release
zeroclaw onboard
```
### Docker দিয়ে
> **ডেভ ফলব্যাক (কোনো গ্লোবাল ইনস্টল নেই):** কমান্ডের আগে `cargo run --release --` যোগ করুন (উদাহরণ: `cargo run --release -- status`)।
## OpenClaw থেকে মাইগ্রেশন
ZeroClaw আপনার OpenClaw workspace, মেমোরি, এবং কনফিগারেশন আমদানি করতে পারে:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Preview what will be migrated (safe, read-only)
zeroclaw migrate openclaw --dry-run
# Run the migration
zeroclaw migrate openclaw
```
---
এটি আপনার মেমোরি এন্ট্রি, workspace ফাইল, এবং কনফিগারেশন `~/.openclaw/` থেকে `~/.zeroclaw/` তে মাইগ্রেট করে। কনফিগ স্বয়ংক্রিয়ভাবে JSON থেকে TOML এ রূপান্তরিত হয়।
## নিরাপত্তা ডিফল্ট (DM অ্যাক্সেস)
ZeroClaw প্রকৃত মেসেজিং সারফেসের সাথে সংযোগ করে। ইনবাউন্ড DM গুলোকে অবিশ্বস্ত ইনপুট হিসেবে বিবেচনা করুন।
সম্পূর্ণ নিরাপত্তা গাইড: [SECURITY.md](SECURITY.md)
সকল চ্যানেলে ডিফল্ট আচরণ:
- **DM পেয়ারিং** (ডিফল্ট): অজানা প্রেরকরা একটি সংক্ষিপ্ত পেয়ারিং কোড পায় এবং বট তাদের বার্তা প্রক্রিয়া করে না।
- এর মাধ্যমে অনুমোদন করুন: `zeroclaw pairing approve <channel> <code>` (তারপর প্রেরক স্থানীয় অনুমতি তালিকায় যুক্ত হয়)।
- পাবলিক ইনবাউন্ড DM এর জন্য `config.toml` এ স্পষ্ট অপ্ট-ইন প্রয়োজন।
- ঝুঁকিপূর্ণ বা ভুল কনফিগার করা DM নীতি প্রকাশ করতে `zeroclaw doctor` চালান।
**স্বায়ত্তশাসন স্তর:**
| স্তর | আচরণ |
|-------|----------|
| `ReadOnly` | এজেন্ট পর্যবেক্ষণ করতে পারে কিন্তু কাজ করতে পারে না |
| `Supervised` (ডিফল্ট) | এজেন্ট মাঝারি/উচ্চ ঝুঁকি অপারেশনের জন্য অনুমোদন সহ কাজ করে |
| `Full` | এজেন্ট নীতি সীমার মধ্যে স্বায়ত্তশাসিতভাবে কাজ করে |
**স্যান্ডবক্সিং স্তর:** workspace আইসোলেশন, পাথ ট্রাভার্সাল ব্লকিং, কমান্ড অনুমতি তালিকা, নিষিদ্ধ পাথ (`/etc`, `/root`, `~/.ssh`), রেট লিমিটিং (সর্বোচ্চ কার্য/ঘণ্টা, খরচ/দিন সীমা)।
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 ঘোষণা
গুরুত্বপূর্ণ নোটিশের (ব্রেকিং পরিবর্তন, নিরাপত্তা পরামর্শ, রক্ষণাবেক্ষণ উইন্ডো, এবং রিলিজ ব্লকার) জন্য এই বোর্ড ব্যবহার করুন।
| তারিখ (UTC) | স্তর | নোটিশ | পদক্ষেপ |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _জটিল_ | আমরা `openagen/zeroclaw`, `zeroclaw.org` বা `zeroclaw.net` এর সাথে **সম্পর্কিত নই**`zeroclaw.org` এবং `zeroclaw.net` ডোমেইনগুলো বর্তমানে `openagen/zeroclaw` ফর্কের দিকে নির্দেশ করে, এবং সেই ডোমেইন/রিপোজিটরি আমাদের অফিসিয়াল ওয়েবসাইট/প্রকল্পের ছদ্মবেশ ধারণ করছে। | সেই উৎসগুলো থেকে তথ্য, বাইনারি, তহবিল সংগ্রহ, বা ঘোষণায় বিশ্বাস করবেন না। শুধুমাত্র [এই রিপোজিটরি](https://github.com/zeroclaw-labs/zeroclaw) এবং আমাদের যাচাইকৃত সোশ্যাল অ্যাকাউন্ট ব্যবহার করুন। |
| 2026-02-21 | _গুরুত্বপূর্ণ_ | আমাদের অফিসিয়াল ওয়েবসাইট এখন লাইভ: [zeroclawlabs.ai](https://zeroclawlabs.ai)। লঞ্চ প্রস্তুত করার সময় আপনার ধৈর্যের জন্য ধন্যবাদ। আমরা এখনও ছদ্মবেশ প্রচেষ্টা দেখছি, তাই কোনো বিনিয়োগ বা তহবিল সংগ্রহ কার্যকলাপে **যোগ দেবেন না** যা ZeroClaw নাম দাবি করে যদি না এটি আমাদের অফিসিয়াল চ্যানেলের মাধ্যমে প্রকাশিত হয়। | [এই রিপোজিটরি](https://github.com/zeroclaw-labs/zeroclaw) কে সত্যের একক উৎস হিসেবে ব্যবহার করুন। অফিসিয়াল আপডেটের জন্য [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs), এবং [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) অনুসরণ করুন। |
| 2026-02-19 | _গুরুত্বপূর্ণ_ | Anthropic 2026-02-19 তে Authentication and Credential Use শর্তাবলী আপডেট করেছে। Claude Code OAuth টোকেন (Free, Pro, Max) একচেটিয়াভাবে Claude Code এবং Claude.ai এর জন্য; Claude Free/Pro/Max থেকে OAuth টোকেন অন্য কোনো পণ্য, টুল, বা সেবায় (Agent SDK সহ) ব্যবহার অনুমোদিত নয় এবং Consumer Terms of Service লঙ্ঘন করতে পারে। | সম্ভাব্য ক্ষতি রোধ করতে অনুগ্রহ করে Claude Code OAuth ইন্টিগ্রেশন সাময়িকভাবে এড়িয়ে চলুন। মূল ধারা: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use)। |
## প্রধান বৈশিষ্ট্য
- **ডিফল্টভাবে হালকা রানটাইম** — সাধারণ CLI এবং স্ট্যাটাস ওয়ার্কফ্লো রিলিজ বিল্ডে কয়েক-মেগাবাইট মেমোরি এনভেলপে চলে।
- **খরচ-সাশ্রয়ী ডিপ্লয়মেন্ট** — $10 বোর্ড এবং ছোট ক্লাউড ইনস্ট্যান্সের জন্য ডিজাইন করা, কোনো ভারী রানটাইম নির্ভরতা নেই।
- **দ্রুত কোল্ড স্টার্ট** — একক-বাইনারি Rust রানটাইম কমান্ড এবং ডেমন স্টার্টআপ প্রায় তাৎক্ষণিক রাখে।
- **পোর্টেবল আর্কিটেকচার** — ARM, x86, এবং RISC-V জুড়ে একটি বাইনারি যার সাথে বিনিময়যোগ্য প্রদানকারী/চ্যানেল/টুল।
- **লোকাল-ফার্স্ট Gateway** — সেশন, চ্যানেল, টুল, cron, SOPs, এবং ইভেন্টের জন্য একক কন্ট্রোল প্লেন।
- **মাল্টি-চ্যানেল ইনবক্স** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket, এবং আরও।
- **মাল্টি-এজেন্ট অর্কেস্ট্রেশন (Hands)** — স্বায়ত্তশাসিত এজেন্ট সোয়ার্ম যা সময়সূচী অনুযায়ী চলে এবং সময়ের সাথে আরও স্মার্ট হয়।
- **স্ট্যান্ডার্ড অপারেটিং প্রসিডিউর (SOPs)** — MQTT, webhook, cron, এবং পেরিফেরাল ট্রিগার সহ ইভেন্ট-চালিত ওয়ার্কফ্লো অটোমেশন।
- **ওয়েব ড্যাশবোর্ড** — React 19 + Vite ওয়েব UI যাতে রিয়েল-টাইম চ্যাট, মেমোরি ব্রাউজার, কনফিগ এডিটর, cron ম্যানেজার, এবং টুল ইন্সপেক্টর আছে।
- **হার্ডওয়্যার পেরিফেরাল**`Peripheral` trait এর মাধ্যমে ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO।
- **প্রথম-শ্রেণীর টুল** — shell, ফাইল I/O, browser, git, ওয়েব fetch/search, MCP, Jira, Notion, Google Workspace, এবং 70+ আরও।
- **লাইফসাইকেল হুক** — প্রতিটি পর্যায়ে LLM কল, টুল এক্সিকিউশন, এবং বার্তা ইন্টারসেপ্ট ও পরিবর্তন করুন।
- **স্কিল প্ল্যাটফর্ম** — নিরাপত্তা অডিটিং সহ বান্ডেল, সম্প্রদায়, এবং workspace স্কিল।
- **টানেল সাপোর্ট** — রিমোট অ্যাক্সেসের জন্য Cloudflare, Tailscale, ngrok, OpenVPN, এবং কাস্টম টানেল।
### দলগুলো কেন ZeroClaw বেছে নেয়
- **ডিফল্টভাবে হালকা:** ছোট Rust বাইনারি, দ্রুত স্টার্টআপ, কম মেমোরি ফুটপ্রিন্ট।
- **ডিজাইনে নিরাপদ:** পেয়ারিং, কঠোর স্যান্ডবক্সিং, স্পষ্ট অনুমতি তালিকা, workspace স্কোপিং।
- **সম্পূর্ণ বিনিময়যোগ্য:** মূল সিস্টেমগুলো traits (providers, channels, tools, memory, tunnels)।
- **কোনো লক-ইন নেই:** OpenAI-সামঞ্জস্যপূর্ণ প্রদানকারী সমর্থন + প্লাগেবল কাস্টম এন্ডপয়েন্ট।
## বেঞ্চমার্ক স্ন্যাপশট (ZeroClaw বনাম OpenClaw, পুনরুৎপাদনযোগ্য)
স্থানীয় মেশিন দ্রুত বেঞ্চমার্ক (macOS arm64, ফেব্রুয়ারি 2026) 0.8GHz এজ হার্ডওয়্যারের জন্য স্বাভাবিকীকৃত।
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **ভাষা** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **স্টার্টআপ (0.8GHz কোর)** | > 500s | > 30s | < 1s | **< 10ms** |
| **বাইনারি আকার** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **খরচ** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **যেকোনো হার্ডওয়্যার $10** |
> নোট: ZeroClaw ফলাফল `/usr/bin/time -l` ব্যবহার করে রিলিজ বিল্ডে পরিমাপ করা হয়েছে। OpenClaw এর Node.js রানটাইম প্রয়োজন (সাধারণত ~390MB অতিরিক্ত মেমোরি ওভারহেড), যেখানে NanoBot এর Python রানটাইম প্রয়োজন। PicoClaw এবং ZeroClaw স্ট্যাটিক বাইনারি। উপরের RAM পরিসংখ্যান রানটাইম মেমোরি; বিল্ড-টাইম কম্পাইলেশন প্রয়োজনীয়তা বেশি।
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### পুনরুৎপাদনযোগ্য স্থানীয় পরিমাপ
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## এখন পর্যন্ত আমরা যা তৈরি করেছি
### কোর প্ল্যাটফর্ম
- Gateway HTTP/WS/SSE কন্ট্রোল প্লেন যাতে সেশন, উপস্থিতি, কনফিগ, cron, webhooks, ওয়েব ড্যাশবোর্ড, এবং পেয়ারিং আছে।
- CLI সারফেস: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`
- এজেন্ট অর্কেস্ট্রেশন লুপ যাতে টুল ডিসপ্যাচ, প্রম্পট নির্মাণ, বার্তা শ্রেণীবিভাগ, এবং মেমোরি লোডিং আছে।
- নিরাপত্তা নীতি প্রয়োগ, স্বায়ত্তশাসন স্তর, এবং অনুমোদন গেটিং সহ সেশন মডেল।
- 20+ LLM ব্যাকএন্ড জুড়ে ফেইলওভার, রিট্রাই, এবং মডেল রাউটিং সহ রেজিলিয়েন্ট প্রদানকারী র‍্যাপার।
### চ্যানেল
চ্যানেল: WhatsApp (নেটিভ), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk।
ফিচার-গেটেড: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`)।
### ওয়েব ড্যাশবোর্ড
React 19 + Vite 6 + Tailwind CSS 4 ওয়েব ড্যাশবোর্ড সরাসরি Gateway থেকে পরিবেশিত:
- **ড্যাশবোর্ড** — সিস্টেম ওভারভিউ, স্বাস্থ্য অবস্থা, আপটাইম, খরচ ট্র্যাকিং
- **এজেন্ট চ্যাট** — এজেন্টের সাথে ইন্টারেক্টিভ চ্যাট
- **মেমোরি** — মেমোরি এন্ট্রি ব্রাউজ ও পরিচালনা
- **কনফিগ** — কনফিগারেশন দেখুন ও সম্পাদনা করুন
- **Cron** — নির্ধারিত কাজ পরিচালনা
- **টুলস** — উপলব্ধ টুল ব্রাউজ করুন
- **লগস** — এজেন্ট কার্যকলাপ লগ দেখুন
- **খরচ** — টোকেন ব্যবহার এবং খরচ ট্র্যাকিং
- **ডক্টর** — সিস্টেম স্বাস্থ্য ডায়াগনস্টিকস
- **ইন্টিগ্রেশন** — ইন্টিগ্রেশন অবস্থা এবং সেটআপ
- **পেয়ারিং** — ডিভাইস পেয়ারিং পরিচালনা
### ফার্মওয়্যার টার্গেট
| টার্গেট | প্ল্যাটফর্ম | উদ্দেশ্য |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | ওয়্যারলেস পেরিফেরাল এজেন্ট |
| ESP32-UI | ESP32 + Display | ভিজ্যুয়াল ইন্টারফেস সহ এজেন্ট |
| STM32 Nucleo | STM32 (ARM Cortex-M) | ইন্ডাস্ট্রিয়াল পেরিফেরাল |
| Arduino | Arduino | বেসিক সেন্সর/অ্যাকচুয়েটর ব্রিজ |
| Uno Q Bridge | Arduino Uno | এজেন্টের জন্য সিরিয়াল ব্রিজ |
### টুল + অটোমেশন
- **কোর:** shell, ফাইল read/write/edit, git অপারেশন, glob search, content search
- **ওয়েব:** ব্রাউজার নিয়ন্ত্রণ, web fetch, web search, screenshot, image info, PDF read
- **ইন্টিগ্রেশন:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol টুল র‍্যাপার + ডিফার্ড টুল সেট
- **শিডিউলিং:** cron add/remove/update/run, schedule tool
- **মেমোরি:** recall, store, forget, knowledge, project intel
- **উন্নত:** delegate (এজেন্ট-টু-এজেন্ট), swarm, model switch/routing, security ops, cloud ops
- **হার্ডওয়্যার:** board info, memory map, memory read (ফিচার-গেটেড)
### রানটাইম + নিরাপত্তা
- **স্বায়ত্তশাসন স্তর:** ReadOnly, Supervised (ডিফল্ট), Full।
- **স্যান্ডবক্সিং:** workspace আইসোলেশন, পাথ ট্রাভার্সাল ব্লকিং, কমান্ড অনুমতি তালিকা, নিষিদ্ধ পাথ, Landlock (Linux), Bubblewrap।
- **রেট লিমিটিং:** প্রতি ঘণ্টায় সর্বোচ্চ কার্য, প্রতি দিনে সর্বোচ্চ খরচ (কনফিগারযোগ্য)।
- **অনুমোদন গেটিং:** মাঝারি/উচ্চ ঝুঁকি অপারেশনের জন্য ইন্টারেক্টিভ অনুমোদন।
- **ই-স্টপ:** জরুরি শাটডাউন ক্ষমতা।
- **129+ নিরাপত্তা পরীক্ষা** স্বয়ংক্রিয় CI তে।
### অপস + প্যাকেজিং
- ওয়েব ড্যাশবোর্ড সরাসরি Gateway থেকে পরিবেশিত।
- টানেল সাপোর্ট: Cloudflare, Tailscale, ngrok, OpenVPN, কাস্টম কমান্ড।
- কন্টেইনারাইজড এক্সিকিউশনের জন্য Docker রানটাইম অ্যাডাপ্টার।
- CI/CD: বেটা (পুশে অটো) → স্টেবল (ম্যানুয়াল ডিসপ্যাচ) → Docker, crates.io, Scoop, AUR, Homebrew, টুইট।
- Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64) এর জন্য প্রি-বিল্ট বাইনারি।
## কনফিগারেশন
ZeroClaw একটি YAML কনফিগারেশন ফাইল ব্যবহার করে। ডিফল্টরূপে, এটি `config.yaml` দেখে।
ন্যূনতম `~/.zeroclaw/config.toml`:
```yaml
# ডিফল্ট প্রদানকারী
provider: anthropic
# প্রদানকারী কনফিগারেশন
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# মেমোরি কনফিগারেশন
memory:
backend: sqlite
path: data/memory.db
# চ্যানেল কনফিগারেশন
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
সম্পূর্ণ কনফিগারেশন রেফারেন্স: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)।
### চ্যানেল কনফিগারেশন
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### টানেল কনফিগারেশন
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
বিস্তারিত: [চ্যানেল রেফারেন্স](docs/reference/api/channels-reference.md) · [কনফিগ রেফারেন্স](docs/reference/api/config-reference.md)
### রানটাইম সাপোর্ট (বর্তমান)
- **`native`** (ডিফল্ট) — সরাসরি প্রসেস এক্সিকিউশন, দ্রুততম পথ, বিশ্বস্ত পরিবেশের জন্য আদর্শ।
- **`docker`** — সম্পূর্ণ কন্টেইনার আইসোলেশন, প্রয়োগকৃত নিরাপত্তা নীতি, Docker প্রয়োজন।
কঠোর স্যান্ডবক্সিং বা নেটওয়ার্ক আইসোলেশনের জন্য `runtime.kind = "docker"` সেট করুন।
## সাবস্ক্রিপশন অথ (OpenAI Codex / Claude Code / Gemini)
ZeroClaw সাবস্ক্রিপশন-নেটিভ অথ প্রোফাইল সমর্থন করে (মাল্টি-অ্যাকাউন্ট, বিশ্রামে এনক্রিপ্টেড)।
- স্টোর ফাইল: `~/.zeroclaw/auth-profiles.json`
- এনক্রিপশন কী: `~/.zeroclaw/.secret_key`
- প্রোফাইল id ফরম্যাট: `<provider>:<profile_name>` (উদাহরণ: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## এজেন্ট workspace + স্কিল
Workspace রুট: `~/.zeroclaw/workspace/` (কনফিগের মাধ্যমে কনফিগারযোগ্য)।
ইনজেক্ট করা প্রম্পট ফাইল:
- `IDENTITY.md` — এজেন্টের ব্যক্তিত্ব এবং ভূমিকা
- `USER.md` — ব্যবহারকারীর প্রসঙ্গ এবং পছন্দ
- `MEMORY.md` — দীর্ঘমেয়াদী তথ্য এবং শিক্ষা
- `AGENTS.md` — সেশন কনভেনশন এবং ইনিশিয়ালাইজেশন নিয়ম
- `SOUL.md` — মূল পরিচয় এবং পরিচালন নীতি
স্কিল: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` বা `SKILL.toml`
```bash
# List installed skills
zeroclaw skills list
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
# Remove a skill
zeroclaw skills remove my-skill
```
## CLI কমান্ড
```bash
# Workspace management
zeroclaw onboard # Guided setup wizard
zeroclaw status # Show daemon/agent status
zeroclaw doctor # Run system diagnostics
# Gateway + daemon
zeroclaw gateway # Start gateway server (127.0.0.1:42617)
zeroclaw daemon # Start full autonomous runtime
# Agent
zeroclaw agent # Interactive chat mode
zeroclaw agent -m "message" # Single message mode
# Service management
zeroclaw service install # Install as OS service (launchd/systemd)
zeroclaw service start|stop|restart|status
# Channels
zeroclaw channel list # List configured channels
zeroclaw channel doctor # Check channel health
zeroclaw channel bind-telegram 123456789
# Cron + scheduling
zeroclaw cron list # List scheduled jobs
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Memory
zeroclaw memory list # List memory entries
zeroclaw memory get <key> # Retrieve a memory
zeroclaw memory stats # Memory statistics
# Auth profiles
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Hardware peripherals
zeroclaw hardware discover # Scan for connected devices
zeroclaw peripheral list # List connected peripherals
zeroclaw peripheral flash # Flash firmware to device
# Migration
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell completions
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
সম্পূর্ণ কমান্ড রেফারেন্স: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## পূর্বশর্ত
<details>
<summary><strong>Windows</strong></summary>
#### প্রয়োজনীয়
1. **Visual Studio Build Tools** (MSVC লিঙ্কার এবং Windows SDK প্রদান করে):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
ইনস্টলেশনের সময় (বা Visual Studio Installer এর মাধ্যমে), **"Desktop development with C++"** ওয়ার্কলোড নির্বাচন করুন।
2. **Rust টুলচেইন:**
```powershell
winget install Rustlang.Rustup
```
ইনস্টলেশনের পরে, একটি নতুন টার্মিনাল খুলুন এবং `rustup default stable` চালান স্থিতিশীল টুলচেইন সক্রিয় করতে।
3. **যাচাই করুন** উভয়ই কাজ করছে:
```powershell
rustc --version
cargo --version
```
#### ঐচ্ছিক
- **Docker Desktop** — শুধুমাত্র [Docker স্যান্ডবক্সড রানটাইম](#রানটাইম-সাপোর্ট-বর্তমান) (`runtime.kind = "docker"`) ব্যবহার করলে প্রয়োজন। `winget install Docker.DockerDesktop` দিয়ে ইনস্টল করুন।
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### প্রয়োজনীয়
1. **বিল্ড এসেনশিয়ালস:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Xcode Command Line Tools ইনস্টল করুন: `xcode-select --install`
2. **Rust টুলচেইন:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
বিস্তারিতের জন্য [rustup.rs](https://rustup.rs) দেখুন।
3. **যাচাই করুন** উভয়ই কাজ করছে:
```bash
rustc --version
cargo --version
```
#### এক-লাইন ইনস্টলার
অথবা উপরের ধাপগুলো এড়িয়ে একটি কমান্ডে সবকিছু (সিস্টেম deps, Rust, ZeroClaw) ইনস্টল করুন:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### কম্পাইলেশন রিসোর্স প্রয়োজনীয়তা
সোর্স থেকে বিল্ড করতে ফলাফল বাইনারি চালানোর চেয়ে বেশি রিসোর্স প্রয়োজন:
| রিসোর্স | ন্যূনতম | প্রস্তাবিত |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **ফ্রি ডিস্ক** | 6 GB | 10 GB+ |
আপনার হোস্ট ন্যূনতমের নিচে হলে, প্রি-বিল্ট বাইনারি ব্যবহার করুন:
```bash
./install.sh --prefer-prebuilt
```
সোর্স ফলব্যাক ছাড়া শুধুমাত্র বাইনারি ইনস্টল করতে:
```bash
./install.sh --prebuilt-only
```
#### ঐচ্ছিক
- **Docker** — শুধুমাত্র [Docker স্যান্ডবক্সড রানটাইম](#রানটাইম-সাপোর্ট-বর্তমান) (`runtime.kind = "docker"`) ব্যবহার করলে প্রয়োজন। আপনার প্যাকেজ ম্যানেজার বা [docker.com](https://docs.docker.com/engine/install/) থেকে ইনস্টল করুন।
> **নোট:** ডিফল্ট `cargo build --release` পিক কম্পাইল প্রেশার কমাতে `codegen-units=1` ব্যবহার করে। শক্তিশালী মেশিনে দ্রুত বিল্ডের জন্য, `cargo build --profile release-fast` ব্যবহার করুন।
</details>
<!-- markdownlint-enable MD001 MD024 -->
### প্রি-বিল্ট বাইনারি
রিলিজ অ্যাসেট প্রকাশিত হয়:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
সর্বশেষ অ্যাসেট ডাউনলোড করুন:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## ডকুমেন্টেশন
বিস্তারিত ডকুমেন্টেশনের জন্য, দেখুন:
অনবোর্ডিং প্রবাহের পরে এবং গভীর রেফারেন্স চাইলে এগুলো ব্যবহার করুন।
- [ডকুমেন্টেশন হাব](docs/README.md)
- [কমান্ড রেফারেন্স](docs/commands-reference.md)
- [প্রদানকারী রেফারেন্স](docs/providers-reference.md)
- [চ্যানেল রেফারেন্স](docs/channels-reference.md)
- [কনফিগারেশন রেফারেন্স](docs/config-reference.md)
- নেভিগেশন এবং "কোথায় কী" এর জন্য [ডকুমেন্টেশন ইনডেক্স](docs/README.md) দিয়ে শুরু করুন।
- সম্পূর্ণ সিস্টেম মডেলের জন্য [আর্কিটেকচার ওভারভিউ](docs/architecture.md) পড়ুন।
- প্রতিটি কী এবং উদাহরণ প্রয়োজন হলে [কনফিগারেশন রেফারেন্স](docs/reference/api/config-reference.md) ব্যবহার করুন।
- [অপারেশনাল রানবুক](docs/ops/operations-runbook.md) অনুযায়ী Gateway চালান।
- গাইডেড সেটআপের জন্য [ZeroClaw Onboard](#দ্রুত-শুরু) অনুসরণ করুন।
- [সমস্যা সমাধান গাইড](docs/ops/troubleshooting.md) দিয়ে সাধারণ ব্যর্থতা ডিবাগ করুন।
- কিছু এক্সপোজ করার আগে [নিরাপত্তা নির্দেশনা](docs/security/README.md) পর্যালোচনা করুন।
---
### রেফারেন্স ডকুমেন্টেশন
- ডকুমেন্টেশন হাব: [docs/README.md](docs/README.md)
- একীভূত ডকুমেন্টেশন TOC: [docs/SUMMARY.md](docs/SUMMARY.md)
- কমান্ড রেফারেন্স: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- কনফিগ রেফারেন্স: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- প্রদানকারী রেফারেন্স: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- চ্যানেল রেফারেন্স: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- অপারেশনস রানবুক: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- সমস্যা সমাধান: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### সহযোগিতা ডকুমেন্টেশন
- অবদান গাইড: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR ওয়ার্কফ্লো নীতি: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI ওয়ার্কফ্লো গাইড: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- পর্যালোচক প্লেবুক: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- নিরাপত্তা প্রকাশ নীতি: [SECURITY.md](SECURITY.md)
- ডকুমেন্টেশন টেমপ্লেট: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### ডিপ্লয়মেন্ট + অপারেশন
- নেটওয়ার্ক ডিপ্লয়মেন্ট গাইড: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- প্রক্সি এজেন্ট প্লেবুক: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- হার্ডওয়্যার গাইড: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw smooth crab 🦀 এর জন্য তৈরি হয়েছিল, একটি দ্রুত এবং দক্ষ AI সহকারী। Argenis De La Rosa এবং সম্প্রদায় দ্বারা নির্মিত।
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## ZeroClaw সমর্থন করুন
ZeroClaw আপনার কাজে সাহায্য করলে এবং আপনি চলমান উন্নয়ন সমর্থন করতে চাইলে, এখানে দান করতে পারেন:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 বিশেষ ধন্যবাদ
যে সম্প্রদায় এবং প্রতিষ্ঠানগুলো এই ওপেন-সোর্স কাজকে অনুপ্রাণিত এবং শক্তি দেয় তাদের প্রতি আন্তরিক ধন্যবাদ:
- **Harvard University** — বৌদ্ধিক কৌতূহল লালন এবং সম্ভাবনার সীমানা প্রসারিত করার জন্য।
- **MIT** — খোলা জ্ঞান, ওপেন সোর্স, এবং প্রযুক্তি সবার জন্য অ্যাক্সেসযোগ্য হওয়া উচিত এই বিশ্বাসের চ্যাম্পিয়ন হওয়ার জন্য।
- **Sundai Club** — সম্প্রদায়, শক্তি, এবং গুরুত্বপূর্ণ জিনিস তৈরির অদম্য চেষ্টার জন্য।
- **বিশ্ব এবং তার বাইরে** 🌍✨ — প্রতিটি অবদানকারী, স্বপ্নদ্রষ্টা, এবং নির্মাতার জন্য যারা ওপেন সোর্সকে ভালোর শক্তি বানাচ্ছে। এটি আপনার জন্য।
আমরা খোলামেলাভাবে তৈরি করছি কারণ সেরা ধারণাগুলো সর্বত্র থেকে আসে। আপনি যদি এটি পড়ছেন, আপনি এর অংশ। স্বাগতম। 🦀❤️
## অবদান
অবদান স্বাগত! অনুগ্রহ করে [অবদান গাইড](CONTRIBUTING.md) পড়ুন।
ZeroClaw এ নতুন? [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) লেবেলযুক্ত ইস্যু খুঁজুন — কিভাবে শুরু করতে হয় তা জানতে আমাদের [অবদান গাইড](CONTRIBUTING.md#first-time-contributors) দেখুন। AI/vibe-coded PR স্বাগত! 🤖
[CONTRIBUTING.md](CONTRIBUTING.md) এবং [CLA.md](docs/contributing/cla.md) দেখুন। একটি trait বাস্তবায়ন করুন, PR জমা দিন:
- CI ওয়ার্কফ্লো গাইড: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- নতুন `Provider``src/providers/`
- নতুন `Channel``src/channels/`
- নতুন `Observer``src/observability/`
- নতুন `Tool``src/tools/`
- নতুন `Memory``src/memory/`
- নতুন `Tunnel``src/tunnel/`
- নতুন `Peripheral``src/peripherals/`
- নতুন `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ অফিসিয়াল রিপোজিটরি এবং ছদ্মবেশ সতর্কতা
**এটিই একমাত্র অফিসিয়াল ZeroClaw রিপোজিটরি:**
> https://github.com/zeroclaw-labs/zeroclaw
অন্য কোনো রিপোজিটরি, সংগঠন, ডোমেইন, বা প্যাকেজ যা "ZeroClaw" বলে দাবি করে বা ZeroClaw Labs এর সাথে সংযুক্তি ইঙ্গিত করে তা **অননুমোদিত এবং এই প্রকল্পের সাথে সম্পর্কিত নয়**। পরিচিত অননুমোদিত ফর্ক [TRADEMARK.md](docs/maintainers/trademark.md) তে তালিকাভুক্ত করা হবে।
আপনি ছদ্মবেশ বা ট্রেডমার্ক অপব্যবহারের সম্মুখীন হলে, অনুগ্রহ করে [একটি ইস্যু খুলুন](https://github.com/zeroclaw-labs/zeroclaw/issues)।
---
## লাইসেন্স
এই প্রজেক্টটি ডুয়াল লাইসেন্সপ্রাপ্ত:
ZeroClaw সর্বোচ্চ উন্মুক্ততা এবং অবদানকারী সুরক্ষার জন্য দ্বৈত-লাইসেন্সপ্রাপ্ত:
- MIT লাইসেন্স
- Apache লাইসেন্স, সংস্করণ 2.0
| লাইসেন্স | ব্যবহারের ক্ষেত্র |
|---|---|
| [MIT](LICENSE-MIT) | ওপেন-সোর্স, গবেষণা, একাডেমিক, ব্যক্তিগত ব্যবহার |
| [Apache 2.0](LICENSE-APACHE) | পেটেন্ট সুরক্ষা, প্রাতিষ্ঠানিক, বাণিজ্যিক ডিপ্লয়মেন্ট |
বিস্তারিতের জন্য [LICENSE-APACHE](LICENSE-APACHE) এবং [LICENSE-MIT](LICENSE-MIT) দেখুন।
আপনি যেকোনো লাইসেন্স বেছে নিতে পারেন। **অবদানকারীরা স্বয়ংক্রিয়ভাবে উভয়ের অধীনে অধিকার প্রদান করে** — সম্পূর্ণ অবদানকারী চুক্তির জন্য [CLA.md](docs/contributing/cla.md) দেখুন।
### ট্রেডমার্ক
**ZeroClaw** নাম এবং লোগো ZeroClaw Labs এর ট্রেডমার্ক। এই লাইসেন্স সমর্থন বা সংযুক্তি ইঙ্গিত করতে এগুলো ব্যবহারের অনুমতি দেয় না। অনুমোদিত এবং নিষিদ্ধ ব্যবহারের জন্য [TRADEMARK.md](docs/maintainers/trademark.md) দেখুন।
### অবদানকারী সুরক্ষা
- আপনি আপনার অবদানের **কপিরাইট ধরে রাখেন**
- **পেটেন্ট অনুদান** (Apache 2.0) আপনাকে অন্যান্য অবদানকারীদের পেটেন্ট দাবি থেকে রক্ষা করে
- আপনার অবদান কমিট ইতিহাস এবং [NOTICE](NOTICE) এ **স্থায়ীভাবে বিশেষিত**
- অবদান করে কোনো ট্রেডমার্ক অধিকার হস্তান্তরিত হয় না
---
## কমিউনিটি
**ZeroClaw** — শূন্য ওভারহেড। শূন্য আপস। যেকোনো জায়গায় ডিপ্লয় করুন। যেকিছু বিনিময় করুন। 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## অবদানকারীরা
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## স্পনসর
এই তালিকা GitHub অবদানকারী গ্রাফ থেকে তৈরি হয় এবং স্বয়ংক্রিয়ভাবে আপডেট হয়।
যদি ZeroClaw আপনার জন্য উপযোগী হয়, তবে অনুগ্রহ করে আমাদের একটি কফি কিনতে বিবেচনা করুন:
## স্টার ইতিহাস
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Personlig AI-assistent</h1>
<p align="center">
<strong>Nul overhead. Nul kompromis. 100% Rust. 100% Agnostisk.</strong><br>
⚡️ <strong>Kører på $10 hardware med <5MB RAM: Det er 99% mindre hukommelse end OpenClaw og 98% billigere end en Mac mini!</strong>
⚡️ <strong>Korer pa $10 hardware med <5MB RAM: Det er 99% mindre hukommelse end OpenClaw og 98% billigere end en Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Bygget af studerende og medlemmer af Harvard-, MIT- og Sundai.Club-faellesskaberne.
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw er en personlig AI-assistent, du korer pa dine egne enheder. Den svarer dig pa de kanaler, du allerede bruger (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work og flere). Den har et web-dashboard til realtidsstyring og kan forbindes til hardware-periferier (ESP32, STM32, Arduino, Raspberry Pi). Gateway'en er blot kontrolplanet — produktet er assistenten.
## Hvad er ZeroClaw?
Hvis du vil have en personlig, enkeltbruger-assistent der foeles lokal, hurtig og altid taendt, er dette den.
ZeroClaw er en letvægts, foranderlig og udvidbar AI-assistent-infrastruktur bygget i Rust. Den forbinder forskellige LLM-udbydere (Anthropic, OpenAI, Google, Ollama osv.) via en samlet grænseflade og understøtter flere kanaler (Telegram, Matrix, CLI osv.).
<p align="center">
<a href="https://zeroclawlabs.ai">Hjemmeside</a> ·
<a href="docs/README.md">Dokumentation</a> ·
<a href="docs/architecture.md">Arkitektur</a> ·
<a href="#hurtig-start-tldr">Kom i gang</a> ·
<a href="#migrering-fra-openclaw">Migrering fra OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Fejlsoegning</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Nøglefunktioner
> **Anbefalet opsaetning:** kor `zeroclaw onboard` i din terminal. ZeroClaw Onboard guider dig trin for trin gennem opsaetning af gateway, arbejdsomrade, kanaler og udbyder. Det er den anbefalede opsaetningssti og virker pa macOS, Linux og Windows (via WSL2). Ny installation? Start her: [Kom i gang](#hurtig-start-tldr)
- **🦀 Skrevet i Rust**: Høj ydeevne, hukommelsessikkerhed og nul-omkostningsabstraktioner
- **🔌 Udbyder-agnostisk**: Understøtter OpenAI, Anthropic, Google Gemini, Ollama og andre
- **📱 Multi-kanal**: Telegram, Matrix (med E2EE), CLI og andre
- **🧠 Pluggbar hukommelse**: SQLite og Markdown-backends
- **🛠️ Udvidbare værktøjer**: Tilføj brugerdefinerede værktøjer nemt
- **🔒 Sikkerhed først**: Omvendt proxy, privatlivs-først design
### Abonnementsgodkendelse (OAuth)
---
- **OpenAI Codex** (ChatGPT-abonnement)
- **Gemini** (Google OAuth)
- **Anthropic** (API-noegle eller godkendelsestoken)
## Hurtig Start
Modelnotat: selvom mange udbydere/modeller understoettes, brug den staerkeste nyeste-generations model tilgaengelig for dig for den bedste oplevelse. Se [Onboarding](#hurtig-start-tldr).
### Krav
Modelkonfiguration + CLI: [Udbyderreference](docs/reference/api/providers-reference.md)
Auth-profilrotation (OAuth vs API-noegler) + failover: [Model-failover](docs/reference/api/providers-reference.md)
- Rust 1.70+
- En LLM-udbyder API-nøgle (Anthropic, OpenAI osv.)
## Installation (anbefalet)
### Installation
Koerselsmiljoe: Rust stable toolchain. Enkelt binaer, ingen koerselsmiljoafhaengigheder.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Et-klik-installation
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` koerer automatisk efter installation for at konfigurere dit arbejdsomrade og din udbyder.
## Hurtig start (TL;DR)
Fuld begynderguide (godkendelse, parring, kanaler): [Kom i gang](docs/setup-guides/one-click-bootstrap.md)
```bash
# Installation + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Start gateway'en (webhook-server + web-dashboard)
zeroclaw gateway # standard: 127.0.0.1:42617
zeroclaw gateway --port 0 # tilfaeldig port (sikkerhedshaerdet)
# Tal med assistenten
zeroclaw agent -m "Hello, ZeroClaw!"
# Interaktiv tilstand
zeroclaw agent
# Start fuld autonom koersel (gateway + kanaler + cron + hands)
zeroclaw daemon
# Tjek status
zeroclaw status
# Koer diagnostik
zeroclaw doctor
```
Opgradering? Koer `zeroclaw doctor` efter opdatering.
### Fra kildekode (udvikling)
```bash
# Klon repository
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Byg
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Kør
cargo run --release
zeroclaw onboard
```
### Med Docker
> **Udviklingsfallback (ingen global installation):** praefikser kommandoer med `cargo run --release --` (eksempel: `cargo run --release -- status`).
## Migrering fra OpenClaw
ZeroClaw kan importere dit OpenClaw-arbejdsomrade, hukommelse og konfiguration:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Forhaandsvisning af hvad der vil blive migreret (sikkert, skrivebeskyttet)
zeroclaw migrate openclaw --dry-run
# Koer migreringen
zeroclaw migrate openclaw
```
---
Dette migrerer dine hukommelsesposter, arbejdsomradefiler og konfiguration fra `~/.openclaw/` til `~/.zeroclaw/`. Konfiguration konverteres automatisk fra JSON til TOML.
## Sikkerhedsstandarder (DM-adgang)
ZeroClaw forbinder til rigtige beskedplatforme. Behandl indgaaende DM'er som utrovaerdigt input.
Fuld sikkerhedsguide: [SECURITY.md](SECURITY.md)
Standardadfaerd pa alle kanaler:
- **DM-parring** (standard): ukendte afsendere modtager en kort parringskode, og botten behandler ikke deres besked.
- Godkend med: `zeroclaw pairing approve <channel> <code>` (derefter tilfojes afsenderen til en lokal godkendelsesliste).
- Offentlige indgaaende DM'er kraever et eksplicit opt-in i `config.toml`.
- Koer `zeroclaw doctor` for at afsloere risikable eller forkert konfigurerede DM-politikker.
**Autonominiveauer:**
| Niveau | Adfaerd |
|--------|---------|
| `ReadOnly` | Agenten kan observere men ikke handle |
| `Supervised` (standard) | Agenten handler med godkendelse for mellem/hoej risiko-operationer |
| `Full` | Agenten handler autonomt inden for politikgraenser |
**Sandboxing-lag:** arbejdsomradeisolering, sti-traverseringsblokering, kommandogodkendelseslister, forbudte stier (`/etc`, `/root`, `~/.ssh`), hastighedsbegraensning (maks handlinger/time, omkostninger/dag-lofter).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Meddelelser
Brug dette board til vigtige meddelelser (aendringsbrydende aendringer, sikkerhedsraadgivning, vedligeholdelsesperioder og udgivelsesblokkeringer).
| Dato (UTC) | Niveau | Meddelelse | Handling |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritisk_ | Vi er **ikke tilknyttet** `openagen/zeroclaw`, `zeroclaw.org` eller `zeroclaw.net`. Domaenerne `zeroclaw.org` og `zeroclaw.net` peger i oejeblikket pa `openagen/zeroclaw`-forken, og det domaene/repository udgiver sig for at vaere vores officielle hjemmeside/projekt. | Stol ikke pa information, binaerfiler, fundraising eller meddelelser fra disse kilder. Brug kun [dette repository](https://github.com/zeroclaw-labs/zeroclaw) og vores verificerede sociale konti. |
| 2026-02-21 | _Vigtigt_ | Vores officielle hjemmeside er nu live: [zeroclawlabs.ai](https://zeroclawlabs.ai). Tak for din talmodighed, mens vi forberedte lanceringen. Vi ser stadig identitetstyveriforsoeg, sa **tilslut dig ikke** nogen investerings- eller fundraisingaktivitet, der haevder ZeroClaw-navnet, medmindre det er offentliggjort via vores officielle kanaler. | Brug [dette repository](https://github.com/zeroclaw-labs/zeroclaw) som den eneste kilde til sandhed. Foelg [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) og [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) for officielle opdateringer. |
| 2026-02-19 | _Vigtigt_ | Anthropic opdaterede vilkaarene for Godkendelse og Legitimationsoplysningsbrug den 2026-02-19. Claude Code OAuth-tokens (Free, Pro, Max) er udelukkende beregnet til Claude Code og Claude.ai; brug af OAuth-tokens fra Claude Free/Pro/Max i ethvert andet produkt, vaerktoej eller tjeneste (inklusive Agent SDK) er ikke tilladt og kan overtraede forbrugervilkaarene. | Undga venligst midlertidigt Claude Code OAuth-integrationer for at forebygge potentielt tab. Original klausul: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Hoejdepunkter
- **Let koerselsmiljoe som standard** — almindelige CLI- og statusarbejdsgange koerer i et hukommelsesfodaftryk pa faa megabytes i release-builds.
- **Omkostningseffektiv udrulning** — designet til $10-kort og smaa cloud-instanser, ingen tunge koerselsmiljoafhaengigheder.
- **Hurtige koldstarter** — enkelt-binaer Rust-koerselsmiljoe holder kommando- og daemon-opstart naesten oejeblikkelig.
- **Portabel arkitektur** — en binaer pa tvaers af ARM, x86 og RISC-V med udskiftelige udbydere/kanaler/vaerktoejer.
- **Lokalt-foerst Gateway** — enkelt kontrolplan for sessioner, kanaler, vaerktoejer, cron, SOPs og haendelser.
- **Multikanal-indbakke** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket og flere.
- **Multi-agent-orkestrering (Hands)** — autonome agentsvaerme, der koerer efter tidsplan og bliver klogere over tid.
- **Standardoperationsprocedurer (SOPs)** — haendelsesdrevet workflowautomatisering med MQTT, webhook, cron og periferitriggere.
- **Web-dashboard** — React 19 + Vite web-UI med realtidschat, hukommelsesbrowser, konfigurationseditor, cron-manager og vaerktoejsinspektoer.
- **Hardware-periferier** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO via `Peripheral`-trait'et.
- **Foersteklasses vaerktoejer** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace og 70+ flere.
- **Livscyklushooks** — opfang og modificer LLM-kald, vaerktoejsudfoerelser og beskeder pa hvert trin.
- **Faerdighedsplatform** — medfoelgende, faellesskabs- og arbejdsomraadefaerdigheder med sikkerhedsauditering.
- **Tunnelsupport** — Cloudflare, Tailscale, ngrok, OpenVPN og brugerdefinerede tunneler til fjernadgang.
### Hvorfor hold vaelger ZeroClaw
- **Let som standard:** lille Rust-binaer, hurtig opstart, lavt hukommelsesfodaftryk.
- **Sikkert fra design:** parring, streng sandboxing, eksplicitte godkendelseslister, arbejdsomradeafgraensning.
- **Fuldt udskifteligt:** kernesystemer er traits (providers, channels, tools, memory, tunnels).
- **Ingen laasning:** OpenAI-kompatibel udbydersupport + tilslutbare brugerdefinerede endepunkter.
## Benchmark-overblik (ZeroClaw vs OpenClaw, Reproducerbart)
Lokal maskinens hurtige benchmark (macOS arm64, feb. 2026) normaliseret for 0.8GHz edge-hardware.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Sprog** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Opstart (0.8GHz core)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Binaerstaerrelse** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Omkostning** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Enhver hardware $10** |
> Notat: ZeroClaw-resultater er maalt pa release-builds ved brug af `/usr/bin/time -l`. OpenClaw kraever Node.js-koerselsmiljoe (typisk ~390MB ekstra hukommelsesoverhead), mens NanoBot kraever Python-koerselsmiljoe. PicoClaw og ZeroClaw er statiske binaerer. RAM-tallene ovenfor er koerselstidshukommelse; kompileringstidskrav er hoejere.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Reproducerbar lokal maaling
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## Alt vi har bygget indtil nu
### Kerneplatform
- Gateway HTTP/WS/SSE-kontrolplan med sessioner, tilstedevaerelse, konfiguration, cron, webhooks, web-dashboard og parring.
- CLI-overflade: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Agent-orkestreringsloekke med vaerktoejsafsendelse, prompt-konstruktion, beskedklassificering og hukommelsesindlaesning.
- Sessionsmodel med sikkerhedspolitikhaandhaeveelse, autonominiveauer og godkendelsesportering.
- Robust udbyderindpakning med failover, genforsoeg og modelrutering pa tvaers af 20+ LLM-backends.
### Kanaler
Kanaler: WhatsApp (native), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
Feature-gated: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Web-dashboard
React 19 + Vite 6 + Tailwind CSS 4 web-dashboard serveret direkte fra Gateway'en:
- **Dashboard** — systemoversigt, sundhedsstatus, oppetid, omkostningsovervaagning
- **Agent Chat** — interaktiv chat med agenten
- **Memory** — gennemse og administrer hukommelsesposter
- **Config** — vis og rediger konfiguration
- **Cron** — administrer planlagte opgaver
- **Tools** — gennemse tilgaengelige vaerktoejer
- **Logs** — vis agentaktivitetslogge
- **Cost** — tokenforbrug og omkostningsovervaagning
- **Doctor** — systemsundhedsdiagnostik
- **Integrations** — integrationsstatus og opsaetning
- **Pairing** — enhedsparringsstyring
### Firmware-maal
| Maal | Platform | Formaal |
|------|----------|---------|
| ESP32 | Espressif ESP32 | Tradloes periferiagent |
| ESP32-UI | ESP32 + Display | Agent med visuel graenseflade |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Industriel periferi |
| Arduino | Arduino | Basis sensor-/aktuatorbro |
| Uno Q Bridge | Arduino Uno | Seriel bro til agent |
### Vaerktoejer + automatisering
- **Kerne:** shell, file read/write/edit, git operations, glob search, content search
- **Web:** browser control, web fetch, web search, screenshot, image info, PDF read
- **Integrationer:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **Planlaegning:** cron add/remove/update/run, schedule tool
- **Hukommelse:** recall, store, forget, knowledge, project intel
- **Avanceret:** delegate (agent-to-agent), swarm, model switch/routing, security ops, cloud ops
- **Hardware:** board info, memory map, memory read (feature-gated)
### Koerselsmiljoe + sikkerhed
- **Autonominiveauer:** ReadOnly, Supervised (standard), Full.
- **Sandboxing:** arbejdsomradeisolering, sti-traverseringsblokering, kommandogodkendelseslister, forbudte stier, Landlock (Linux), Bubblewrap.
- **Hastighedsbegraensning:** maks handlinger pr. time, maks omkostninger pr. dag (konfigurerbart).
- **Godkendelsesportering:** interaktiv godkendelse for mellem/hoej risiko-operationer.
- **E-stop:** noedstopkapabilitet.
- **129+ sikkerhedstests** i automatiseret CI.
### Drift + pakning
- Web-dashboard serveret direkte fra Gateway'en.
- Tunnelsupport: Cloudflare, Tailscale, ngrok, OpenVPN, brugerdefineret kommando.
- Docker-koerselsmiljoetilpasning til containeriseret udfoersel.
- CI/CD: beta (auto on push) → stable (manual dispatch) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Forhaandsbyggede binaerer til Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Konfiguration
ZeroClaw bruger en YAML-konfigurationsfil. Som standard leder den efter `config.yaml`.
Minimal `~/.zeroclaw/config.toml`:
```yaml
# Standardudbyder
provider: anthropic
# Udbyderkonfiguration
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# Hukommelseskonfiguration
memory:
backend: sqlite
path: data/memory.db
# Kanalkonfiguration
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
Fuld konfigurationsreference: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Kanalkonfiguration
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Tunnelkonfiguration
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
Detaljer: [Kanalreference](docs/reference/api/channels-reference.md) · [Konfigurationsreference](docs/reference/api/config-reference.md)
### Koerselsmiljoestoette (aktuel)
- **`native`** (standard) — direkte procesudfoersel, hurtigste sti, ideel til betroede miljoeer.
- **`docker`** — fuld containerisolering, haandhaevede sikkerhedspolitikker, kraever Docker.
Saet `runtime.kind = "docker"` for streng sandboxing eller netvaerksisolering.
## Abonnementsgodkendelse (OpenAI Codex / Claude Code / Gemini)
ZeroClaw understoetter abonnements-native godkendelsesprofiler (flere konti, krypteret i hvile).
- Lagerfil: `~/.zeroclaw/auth-profiles.json`
- Krypteringsnoegle: `~/.zeroclaw/.secret_key`
- Profil-id-format: `<provider>:<profile_name>` (eksempel: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Agent-arbejdsomrade + faerdigheder
Arbejdsomraderod: `~/.zeroclaw/workspace/` (konfigurerbart via config).
Injicerede promptfiler:
- `IDENTITY.md` — agentens personlighed og rolle
- `USER.md` — brugerkontekst og praeferencer
- `MEMORY.md` — langsigtede fakta og laerdommer
- `AGENTS.md` — sessionskonventioner og initialiseringsregler
- `SOUL.md` — kerneidentitet og driftsprincipper
Faerdigheder: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` eller `SKILL.toml`.
```bash
# List installed skills
zeroclaw skills list
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
# Remove a skill
zeroclaw skills remove my-skill
```
## CLI-kommandoer
```bash
# Arbejdsomraadestyring
zeroclaw onboard # Guidet opsaetningsguide
zeroclaw status # Vis daemon/agent-status
zeroclaw doctor # Koer systemdiagnostik
# Gateway + daemon
zeroclaw gateway # Start gateway-server (127.0.0.1:42617)
zeroclaw daemon # Start fuld autonom koersel
# Agent
zeroclaw agent # Interaktiv chattilstand
zeroclaw agent -m "message" # Enkeltbeskedtilstand
# Servicestyring
zeroclaw service install # Installer som OS-service (launchd/systemd)
zeroclaw service start|stop|restart|status
# Kanaler
zeroclaw channel list # List konfigurerede kanaler
zeroclaw channel doctor # Tjek kanalsundhed
zeroclaw channel bind-telegram 123456789
# Cron + planlaegning
zeroclaw cron list # List planlagte opgaver
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Hukommelse
zeroclaw memory list # List hukommelsesposter
zeroclaw memory get <key> # Hent en hukommelse
zeroclaw memory stats # Hukommelsesstatistik
# Godkendelsesprofiler
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Hardware-periferier
zeroclaw hardware discover # Skan efter tilsluttede enheder
zeroclaw peripheral list # List tilsluttede periferier
zeroclaw peripheral flash # Flash firmware til enhed
# Migrering
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell-fuldfoerelser
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Fuld kommandoreference: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Forudsaetninger
<details>
<summary><strong>Windows</strong></summary>
#### Paakraevet
1. **Visual Studio Build Tools** (giver MSVC-linker og Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Under installation (eller via Visual Studio Installer) vaelg workloaden **"Desktop development with C++"**.
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
Efter installation, aabn en ny terminal og koer `rustup default stable` for at sikre, at den stabile toolchain er aktiv.
3. **Verificer**, at begge virker:
```powershell
rustc --version
cargo --version
```
#### Valgfrit
- **Docker Desktop** — paakraevet kun ved brug af [Docker sandboxed runtime](#koerselsmiljoestoette-aktuel) (`runtime.kind = "docker"`). Installer via `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Paakraevet
1. **Byggevaerktoejer:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Installer Xcode Command Line Tools: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Se [rustup.rs](https://rustup.rs) for detaljer.
3. **Verificer**, at begge virker:
```bash
rustc --version
cargo --version
```
#### En-linje-installationsprogram
Eller spring trinnene ovenfor over og installer alt (systemafhaengigheder, Rust, ZeroClaw) med en enkelt kommando:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Kompileringsressourcekrav
Bygning fra kildekode kraever flere ressourcer end at koere den resulterende binaer:
| Ressource | Minimum | Anbefalet |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Ledig disk** | 6 GB | 10 GB+ |
Hvis din vaert er under minimum, brug forhaandsbyggede binaerer:
```bash
./install.sh --prefer-prebuilt
```
For kun-binaer-installation uden kildekodefallback:
```bash
./install.sh --prebuilt-only
```
#### Valgfrit
- **Docker** — paakraevet kun ved brug af [Docker sandboxed runtime](#koerselsmiljoestoette-aktuel) (`runtime.kind = "docker"`). Installer via din pakkehaandtering eller [docker.com](https://docs.docker.com/engine/install/).
> **Notat:** Standard `cargo build --release` bruger `codegen-units=1` for at reducere spidskompileringspresset. For hurtigere builds pa kraftige maskiner, brug `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Forhaandsbyggede binaerer
Udgivelsesaktiver udgives for:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Download de seneste aktiver fra:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Dokumentation
For detaljeret dokumentation, se:
Brug disse, naar du er forbi onboarding-flowet og vil have den dybere reference.
- [Dokumentationshub](docs/README.md)
- [Kommandoreference](docs/commands-reference.md)
- [Udbyderreference](docs/providers-reference.md)
- [Kanalreference](docs/channels-reference.md)
- [Konfigurationsreference](docs/config-reference.md)
- Start med [dokumentationsindekset](docs/README.md) til navigation og "hvad er hvor."
- Laes [arkitekturoversigten](docs/architecture.md) for den fulde systemmodel.
- Brug [konfigurationsreferencen](docs/reference/api/config-reference.md), naar du har brug for hver noegle og eksempel.
- Koer Gateway'en efter bogen med [driftsrunbooken](docs/ops/operations-runbook.md).
- Foelg [ZeroClaw Onboard](#hurtig-start-tldr) for en guidet opsaetning.
- Fejlsoeg almindelige fejl med [fejlsoegningsguiden](docs/ops/troubleshooting.md).
- Gennemgaa [sikkerhedsvejledning](docs/security/README.md) foer du eksponerer noget.
---
### Referencedokumentation
- Dokumentationscentral: [docs/README.md](docs/README.md)
- Samlet indholdsfortegnelse: [docs/SUMMARY.md](docs/SUMMARY.md)
- Kommandoreference: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Konfigurationsreference: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Udbyderreference: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Kanalreference: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Driftsrunbook: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Fejlsoegning: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### Samarbejdsdokumentation
- Bidragsguide: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR-arbejdsgangspolitik: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI-arbejdsgangsguide: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Anmelderhaandbog: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Sikkerhedsoplysningspolitik: [SECURITY.md](SECURITY.md)
- Dokumentationsskabelon: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Udrulning + drift
- Netvaerksudrulningsguide: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Proxy-agent-haandbog: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Hardwareguider: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw blev bygget til smooth crab 🦀, en hurtig og effektiv AI-assistent. Bygget af Argenis De La Rosa og faellesskabet.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Stoet ZeroClaw
Hvis ZeroClaw hjaelper dit arbejde, og du vil stoette den igangvaerende udvikling, kan du donere her:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Saerlig tak
En hjertelig tak til de faellesskaber og institutioner, der inspirerer og naerer dette open source-arbejde:
- **Harvard University** — for at fremme intellektuel nysgerrighed og skubbe graenserne for hvad der er muligt.
- **MIT** — for at kaempe for aben viden, open source og troen pa, at teknologi skal vaere tilgaengelig for alle.
- **Sundai Club** — for faellesskabet, energien og den utraettelige drift til at bygge ting, der betyder noget.
- **Verden & Hinsides** 🌍✨ — til enhver bidragyder, droommer og bygger derude, der goer open source til en kraft for det gode. Dette er for dig.
Vi bygger i det aabne, fordi de bedste ideer kommer fra alle steder. Hvis du laeser dette, er du en del af det. Velkommen. 🦀❤️
## Bidrag
Bidrag er velkomne! Læs venligst [Bidragsguiden](CONTRIBUTING.md).
Ny til ZeroClaw? Kig efter issues maerket [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — se vores [Bidragsguide](CONTRIBUTING.md#first-time-contributors) for at komme i gang. AI/vibe-kodede PR'er velkomne! 🤖
Se [CONTRIBUTING.md](CONTRIBUTING.md) og [CLA.md](docs/contributing/cla.md). Implementer et trait, indsend en PR:
- CI-arbejdsgangsguide: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Ny `Provider``src/providers/`
- Ny `Channel``src/channels/`
- Ny `Observer``src/observability/`
- Nyt `Tool``src/tools/`
- Ny `Memory``src/memory/`
- Ny `Tunnel``src/tunnel/`
- Ny `Peripheral``src/peripherals/`
- Ny `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Officielt repository og advarsel om identitetstyveri
**Dette er det eneste officielle ZeroClaw-repository:**
> https://github.com/zeroclaw-labs/zeroclaw
Ethvert andet repository, organisation, domaene eller pakke, der haevder at vaere "ZeroClaw" eller antyder tilknytning til ZeroClaw Labs, er **uautoriseret og ikke tilknyttet dette projekt**. Kendte uautoriserede forks vil blive opfoert i [TRADEMARK.md](docs/maintainers/trademark.md).
Hvis du stoeder pa identitetstyveri eller varemaerkemisbrug, bedes du [aabne et issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Licens
Dette projekt er dobbelt-licenseret:
ZeroClaw er dobbeltlicenseret for maksimal aabenhed og bidragyderbeskyttelse:
- MIT License
- Apache License, version 2.0
| Licens | Anvendelse |
|---|---|
| [MIT](LICENSE-MIT) | Open source, forskning, akademisk, personligt brug |
| [Apache 2.0](LICENSE-APACHE) | Patentbeskyttelse, institutionel, kommerciel udrulning |
Se [LICENSE-APACHE](LICENSE-APACHE) og [LICENSE-MIT](LICENSE-MIT) for detaljer.
Du kan vaelge enten licens. **Bidragydere giver automatisk rettigheder under begge** — se [CLA.md](docs/contributing/cla.md) for den fulde bidragsaftale.
### Varemaerke
Navnet **ZeroClaw** og logoet er varemaerker tilhoerende ZeroClaw Labs. Denne licens giver ikke tilladelse til at bruge dem til at antyde stoette eller tilknytning. Se [TRADEMARK.md](docs/maintainers/trademark.md) for tilladte og forbudte anvendelser.
### Bidragyderbeskyttelser
- Du **beholder ophavsretten** til dine bidrag
- **Patentbevilling** (Apache 2.0) beskytter dig mod patentkrav fra andre bidragydere
- Dine bidrag er **permanent attribueret** i commit-historik og [NOTICE](NOTICE)
- Ingen varemaerkerettigheder overfoeres ved at bidrage
---
## Fællesskab
**ZeroClaw** — Nul overhead. Nul kompromis. Udrulning overalt. Udskift hvad som helst. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Bidragydere
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## Sponsorer
Denne liste genereres fra GitHub-bidragydergrafiken og opdateres automatisk.
Hvis ZeroClaw er nyttigt for dig, overvej venligst at købe os en kaffe:
## Stjernehistorik
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Προσωπικός Βοηθός Τεχνητής Νοημοσύνης</h1>
<p align="center">
<strong>Μηδενικό overhead. Μηδενικός συμβιβασμός. 100% Rust. 100% Αγνωστικιστικό.</strong><br>
⚡️ <strong>Εκτελείται σε hardware $10 με <5MB RAM: Αυτό είναι 99% λιγότερη μνήμη από το OpenClaw και 98% φθηνότερο από ένα Mac mini!</strong>
<strong>Μηδενική επιβάρυνση. Μηδενικοί συμβιβασμοί. 100% Rust. 100% Αγνωστικός.</strong><br>
⚡️ <strong>Τρέχει σε υλικό $10 με <5MB RAM: Αυτό σημαίνει 99% λιγότερη μνήμη από το OpenClaw και 98% φθηνότερο από ένα Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Δημιουργήθηκε από φοιτητές και μέλη των κοινοτήτων Harvard, MIT και Sundai.Club.
</p>
<p align="center">
@ -52,127 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
Το ZeroClaw είναι ένας προσωπικός βοηθός τεχνητής νοημοσύνης που τρέχει στις δικές σας συσκευές. Σας απαντά στα κανάλια που ήδη χρησιμοποιείτε (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work και περισσότερα). Διαθέτει πίνακα ελέγχου web για έλεγχο σε πραγματικό χρόνο και μπορεί να συνδεθεί με περιφερειακά υλικού (ESP32, STM32, Arduino, Raspberry Pi). Το Gateway είναι απλώς το επίπεδο ελέγχου — το προϊόν είναι ο βοηθός.
> **📝 Σημείωση:** Αυτό είναι ένα συνοπτικό README στα ελληνικά. Για πλήρη τεκμηρίωση, ανατρέξτε στο [αγγλικό README](README.md). Οι σύνδεσμοι τεκμηρίωσης παραπέμπουν στην αγγλική τεκμηρίωση.
Αν θέλετε έναν προσωπικό βοηθό ενός χρήστη που αισθάνεται τοπικός, γρήγορος και πάντα ενεργός, αυτό είναι.
## Τι είναι το ZeroClaw;
<p align="center">
<a href="https://zeroclawlabs.ai">Ιστοσελίδα</a> ·
<a href="docs/README.md">Τεκμηρίωση</a> ·
<a href="docs/architecture.md">Αρχιτεκτονική</a> ·
<a href="#γρήγορη-εκκίνηση-tldr">Ξεκινήστε</a> ·
<a href="#μετεγκατάσταση-από-openclaw">Μετεγκατάσταση από OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Αντιμετώπιση προβλημάτων</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
Το ZeroClaw είναι μια ελαφριά, μεταβλητή και επεκτάσιμη υποδομή AI βοηθού χτισμένη σε Rust. Συνδέει διάφορους παρόχους LLM (Anthropic, OpenAI, Google, Ollama, κλπ.) μέσω μιας ενοποιημένης διεπαφής και υποστηρίζει πολλαπλά κανάλια (Telegram, Matrix, CLI, κλπ.).
> **Προτεινόμενη ρύθμιση:** εκτελέστε `zeroclaw onboard` στο τερματικό σας. Το ZeroClaw Onboard σας καθοδηγεί βήμα προς βήμα στη ρύθμιση του gateway, του χώρου εργασίας, των καναλιών και του παρόχου. Είναι η συνιστώμενη διαδρομή ρύθμισης και λειτουργεί σε macOS, Linux και Windows (μέσω WSL2). Νέα εγκατάσταση; Ξεκινήστε εδώ: [Ξεκινήστε](#γρήγορη-εκκίνηση-tldr)
### Κύρια Χαρακτηριστικά
### Πιστοποίηση Συνδρομής (OAuth)
- **🦀 Γραμμένο σε Rust**: Υψηλή απόδοση, ασφάλεια μνήμης και αφαιρέσεις μηδενικού κόστους
- **🔌 Αγνωστικιστικό προς παρόχους**: Υποστηρίζει OpenAI, Anthropic, Google Gemini, Ollama και άλλους
- **📱 Πολυκάναλο**: Telegram, Matrix (με E2EE), CLI και άλλα
- **🧠 Προσαρμόσιμη μνήμη**: SQLite και Markdown backends
- **🛠️ Επεκτάσιμα εργαλεία**: Προσθέστε εύκολα προσαρμοσμένα εργαλεία
- **🔒 Ασφάλεια πρώτα**: Αντίστροφος proxy, σχεδιασμός προσανατολισμένος στο απόρρητο
- **OpenAI Codex** (συνδρομή ChatGPT)
- **Gemini** (Google OAuth)
- **Anthropic** (κλειδί API ή token πιστοποίησης)
---
Σημείωση μοντέλου: ενώ υποστηρίζονται πολλοί πάροχοι/μοντέλα, για την καλύτερη εμπειρία χρησιμοποιήστε το ισχυρότερο μοντέλο τελευταίας γενιάς που έχετε στη διάθεσή σας. Δείτε [Onboarding](#γρήγορη-εκκίνηση-tldr).
## Γρήγορη Εκκίνηση
Ρύθμιση μοντέλων + CLI: [Αναφορά παρόχων](docs/reference/api/providers-reference.md)
Εναλλαγή προφίλ πιστοποίησης (OAuth vs κλειδιά API) + failover: [Failover μοντέλων](docs/reference/api/providers-reference.md)
### Απαιτήσεις
## Εγκατάσταση (συνιστάται)
- Rust 1.70+
- Ένα κλειδί API παρόχου LLM (Anthropic, OpenAI, κλπ.)
Χρόνος εκτέλεσης: Rust stable toolchain. Ένα μόνο δυαδικό αρχείο, χωρίς εξαρτήσεις χρόνου εκτέλεσης.
### Εγκατάσταση
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Εγκατάσταση με ένα κλικ
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
Το `zeroclaw onboard` εκτελείται αυτόματα μετά την εγκατάσταση για τη ρύθμιση του χώρου εργασίας και του παρόχου.
## Γρήγορη εκκίνηση (TL;DR)
Πλήρης οδηγός για αρχάριους (πιστοποίηση, σύζευξη, κανάλια): [Ξεκινήστε](docs/setup-guides/one-click-bootstrap.md)
```bash
# Εγκατάσταση + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Εκκίνηση του gateway (webhook server + web dashboard)
zeroclaw gateway # προεπιλογή: 127.0.0.1:42617
zeroclaw gateway --port 0 # τυχαία θύρα (ενισχυμένη ασφάλεια)
# Μιλήστε στον βοηθό
zeroclaw agent -m "Hello, ZeroClaw!"
# Διαδραστική λειτουργία
zeroclaw agent
# Εκκίνηση πλήρους αυτόνομου χρόνου εκτέλεσης (gateway + κανάλια + cron + hands)
zeroclaw daemon
# Έλεγχος κατάστασης
zeroclaw status
# Εκτέλεση διαγνωστικών
zeroclaw doctor
```
Αναβάθμιση; Εκτελέστε `zeroclaw doctor` μετά την ενημέρωση.
### Από πηγαίο κώδικα (ανάπτυξη)
```bash
# Κλωνοποιήστε το repository
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Κατασκευή
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Εκτέλεση
cargo run --release
zeroclaw onboard
```
### Με Docker
> **Εναλλακτική ανάπτυξης (χωρίς καθολική εγκατάσταση):** προθέστε τις εντολές με `cargo run --release --` (παράδειγμα: `cargo run --release -- status`).
## Μετεγκατάσταση από OpenClaw
Το ZeroClaw μπορεί να εισάγει τον χώρο εργασίας, τη μνήμη και τη ρύθμιση παραμέτρων του OpenClaw:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Προεπισκόπηση τι θα μετεγκατασταθεί (ασφαλές, μόνο ανάγνωση)
zeroclaw migrate openclaw --dry-run
# Εκτέλεση της μετεγκατάστασης
zeroclaw migrate openclaw
```
---
Αυτό μετεγκαθιστά τις εγγραφές μνήμης, τα αρχεία χώρου εργασίας και τη ρύθμιση παραμέτρων από `~/.openclaw/` σε `~/.zeroclaw/`. Η ρύθμιση μετατρέπεται αυτόματα από JSON σε TOML.
## Ρύθμιση
## Προεπιλογές ασφάλειας (πρόσβαση DM)
Το ZeroClaw χρησιμοποιεί ένα αρχείο ρύθμισης YAML. Από προεπιλογή, αναζητά το `config.yaml`.
Το ZeroClaw συνδέεται σε πραγματικές επιφάνειες μηνυμάτων. Αντιμετωπίστε τα εισερχόμενα DM ως μη αξιόπιστη είσοδο.
```yaml
# Προεπιλεγμένος πάροχος
provider: anthropic
Πλήρης οδηγός ασφάλειας: [SECURITY.md](SECURITY.md)
# Ρύθμιση παρόχων
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
Προεπιλεγμένη συμπεριφορά σε όλα τα κανάλια:
# Ρύθμιση μνήμης
memory:
backend: sqlite
path: data/memory.db
- **Σύζευξη DM** (προεπιλογή): οι άγνωστοι αποστολείς λαμβάνουν έναν σύντομο κωδικό σύζευξης και ο bot δεν επεξεργάζεται το μήνυμά τους.
- Εγκρίνετε με: `zeroclaw pairing approve <channel> <code>` (τότε ο αποστολέας προστίθεται σε τοπική λίστα επιτρεπόμενων).
- Τα δημόσια εισερχόμενα DM απαιτούν ρητή ενεργοποίηση στο `config.toml`.
- Εκτελέστε `zeroclaw doctor` για να εντοπίσετε επικίνδυνες ή εσφαλμένες πολιτικές DM.
# Ρύθμιση καναλιών
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
**Επίπεδα αυτονομίας:**
| Επίπεδο | Συμπεριφορά |
|---------|-------------|
| `ReadOnly` | Ο πράκτορας μπορεί να παρατηρεί αλλά όχι να ενεργεί |
| `Supervised` (προεπιλογή) | Ο πράκτορας ενεργεί με έγκριση για λειτουργίες μεσαίου/υψηλού κινδύνου |
| `Full` | Ο πράκτορας ενεργεί αυτόνομα εντός ορίων πολιτικής |
**Επίπεδα sandboxing:** απομόνωση χώρου εργασίας, αποκλεισμός διέλευσης διαδρομής, λίστες επιτρεπόμενων εντολών, απαγορευμένες διαδρομές (`/etc`, `/root`, `~/.ssh`), περιορισμός ρυθμού (μέγιστες ενέργειες/ώρα, όρια κόστους/ημέρα).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Ανακοινώσεις
Χρησιμοποιήστε αυτόν τον πίνακα για σημαντικές ειδοποιήσεις (αλλαγές που σπάνε τη συμβατότητα, συμβουλές ασφαλείας, παράθυρα συντήρησης και αποκλεισμοί έκδοσης).
| Ημερομηνία (UTC) | Επίπεδο | Ειδοποίηση | Ενέργεια |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Κρίσιμο_ | **Δεν** είμαστε συνδεδεμένοι με `openagen/zeroclaw`, `zeroclaw.org` ή `zeroclaw.net`. Οι τομείς `zeroclaw.org` και `zeroclaw.net` δείχνουν αυτή τη στιγμή στο fork `openagen/zeroclaw`, και αυτός ο τομέας/αποθετήριο υποδύονται τον επίσημο ιστότοπο/έργο μας. | Μην εμπιστεύεστε πληροφορίες, δυαδικά αρχεία, εκστρατείες χρηματοδότησης ή ανακοινώσεις από αυτές τις πηγές. Χρησιμοποιήστε μόνο [αυτό το αποθετήριο](https://github.com/zeroclaw-labs/zeroclaw) και τους επαληθευμένους λογαριασμούς μας στα μέσα κοινωνικής δικτύωσης. |
| 2026-02-21 | _Σημαντικό_ | Ο επίσημος ιστότοπός μας είναι πλέον ζωντανός: [zeroclawlabs.ai](https://zeroclawlabs.ai). Ευχαριστούμε για την υπομονή σας ενώ ετοιμάζαμε την εκκίνηση. Εξακολουθούμε να βλέπουμε απόπειρες πλαστοπροσωπίας, οπότε **μην** συμμετέχετε σε καμία επενδυτική ή χρηματοδοτική δραστηριότητα που ισχυρίζεται το όνομα ZeroClaw εκτός αν δημοσιεύεται μέσω των επίσημων καναλιών μας. | Χρησιμοποιήστε [αυτό το αποθετήριο](https://github.com/zeroclaw-labs/zeroclaw) ως τη μοναδική πηγή αλήθειας. Ακολουθήστε [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) και [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) για επίσημες ενημερώσεις. |
| 2026-02-19 | _Σημαντικό_ | Η Anthropic ενημέρωσε τους Όρους Πιστοποίησης και Χρήσης Διαπιστευτηρίων στις 2026-02-19. Τα OAuth tokens του Claude Code (Free, Pro, Max) προορίζονται αποκλειστικά για το Claude Code και το Claude.ai· η χρήση OAuth tokens από Claude Free/Pro/Max σε οποιοδήποτε άλλο προϊόν, εργαλείο ή υπηρεσία (συμπεριλαμβανομένου του Agent SDK) δεν επιτρέπεται και ενδέχεται να παραβιάζει τους Όρους Χρήσης Καταναλωτή. | Παρακαλούμε αποφύγετε προσωρινά τις ενσωματώσεις Claude Code OAuth για να αποτρέψετε πιθανή απώλεια. Αρχική ρήτρα: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Χαρακτηριστικά
- **Ελαφρύς χρόνος εκτέλεσης από προεπιλογή**οι συνήθεις ροές εργασίας CLI και κατάστασης τρέχουν σε φάκελο μνήμης λίγων megabyte σε release builds.
- **Οικονομική ανάπτυξη** — σχεδιασμένο για πλακέτες $10 και μικρές cloud instances, χωρίς βαριές εξαρτήσεις χρόνου εκτέλεσης.
- **Γρήγορες κρύες εκκινήσεις**ο χρόνος εκτέλεσης Rust με ένα δυαδικό αρχείο κρατά την εκκίνηση εντολών και daemon σχεδόν στιγμιαία.
- **Φορητή αρχιτεκτονική** — ένα δυαδικό αρχείο σε ARM, x86 και RISC-V με εναλλάξιμους παρόχους/κανάλια/εργαλεία.
- **Τοπικό-πρώτα Gateway** — ένα μόνο επίπεδο ελέγχου για sessions, κανάλια, εργαλεία, cron, SOPs και events.
- **Εισερχόμενα πολλαπλών καναλιών** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket και περισσότερα.
- **Ενορχήστρωση πολλαπλών πρακτόρων (Hands)** — αυτόνομα σμήνη πρακτόρων που τρέχουν σε πρόγραμμα και γίνονται πιο έξυπνα με τον χρόνο.
- **Τυπικές Διαδικασίες Λειτουργίας (SOPs)** — αυτοματοποίηση ροών εργασίας βάσει γεγονότων με MQTT, webhook, cron και triggers περιφερειακών.
- **Πίνακας ελέγχου Web** — React 19 + Vite web UI με συνομιλία σε πραγματικό χρόνο, περιηγητή μνήμης, επεξεργαστή ρυθμίσεων, διαχειριστή cron και επιθεωρητή εργαλείων.
- **Περιφερειακά υλικού** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO μέσω του trait `Peripheral`.
- **Εργαλεία πρώτης κατηγορίας** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace και 70+ ακόμη.
- **Hooks κύκλου ζωής** — παρεμβολή και τροποποίηση κλήσεων LLM, εκτελέσεων εργαλείων και μηνυμάτων σε κάθε στάδιο.
- **Πλατφόρμα δεξιοτήτων** — ενσωματωμένες, κοινοτικές και δεξιότητες χώρου εργασίας με έλεγχο ασφαλείας.
- **Υποστήριξη tunnel** — Cloudflare, Tailscale, ngrok, OpenVPN και custom tunnels για απομακρυσμένη πρόσβαση.
### Γιατί οι ομάδες επιλέγουν το ZeroClaw
- **Ελαφρύ από προεπιλογή:** μικρό δυαδικό αρχείο Rust, γρήγορη εκκίνηση, χαμηλό αποτύπωμα μνήμης.
- **Ασφαλές από σχεδιασμό:** σύζευξη, αυστηρό sandboxing, ρητές λίστες επιτρεπόμενων, οριοθέτηση χώρου εργασίας.
- **Πλήρως εναλλάξιμο:** τα βασικά συστήματα είναι traits (providers, channels, tools, memory, tunnels).
- **Χωρίς εγκλωβισμό:** υποστήριξη παρόχου συμβατού με OpenAI + pluggable custom endpoints.
## Στιγμιότυπο Benchmark (ZeroClaw vs OpenClaw, Αναπαραγώγιμο)
Γρήγορο benchmark τοπικού μηχανήματος (macOS arm64, Φεβ 2026) κανονικοποιημένο για υλικό edge 0.8GHz.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Γλώσσα** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Εκκίνηση (0.8GHz core)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Μέγεθος δυαδικού** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Κόστος** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Οποιοδήποτε υλικό $10** |
> Σημειώσεις: Τα αποτελέσματα του ZeroClaw μετρήθηκαν σε release builds χρησιμοποιώντας `/usr/bin/time -l`. Το OpenClaw απαιτεί Node.js runtime (τυπικά ~390MB επιπλέον επιβάρυνση μνήμης), ενώ το NanoBot απαιτεί Python runtime. Τα PicoClaw και ZeroClaw είναι στατικά δυαδικά. Τα στοιχεία RAM παραπάνω αφορούν μνήμη χρόνου εκτέλεσης· οι απαιτήσεις μεταγλώττισης κατά τον χρόνο κατασκευής είναι υψηλότερες.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Αναπαραγώγιμη τοπική μέτρηση
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
---
## Όλα όσα δημιουργήσαμε μέχρι τώρα
### Βασική πλατφόρμα
- Επίπεδο ελέγχου Gateway HTTP/WS/SSE με sessions, παρουσία, ρύθμιση, cron, webhooks, web dashboard και σύζευξη.
- Επιφάνεια CLI: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Βρόχος ενορχήστρωσης πράκτορα με αποστολή εργαλείων, κατασκευή prompt, ταξινόμηση μηνυμάτων και φόρτωση μνήμης.
- Μοντέλο session με επιβολή πολιτικής ασφάλειας, επίπεδα αυτονομίας και πύλη έγκρισης.
- Ανθεκτικό περιτύλιγμα παρόχου με failover, retry και δρομολόγηση μοντέλων σε 20+ backends LLM.
### Κανάλια
Κανάλια: WhatsApp (native), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
Με feature-gate: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Πίνακας ελέγχου Web
Πίνακας ελέγχου web React 19 + Vite 6 + Tailwind CSS 4 που εξυπηρετείται απευθείας από το Gateway:
- **Dashboard** — επισκόπηση συστήματος, κατάσταση υγείας, uptime, παρακολούθηση κόστους
- **Agent Chat** — διαδραστική συνομιλία με τον πράκτορα
- **Memory** — περιήγηση και διαχείριση εγγραφών μνήμης
- **Config** — προβολή και επεξεργασία ρυθμίσεων
- **Cron** — διαχείριση προγραμματισμένων εργασιών
- **Tools** — περιήγηση διαθέσιμων εργαλείων
- **Logs** — προβολή αρχείων καταγραφής δραστηριότητας πράκτορα
- **Cost** — χρήση tokens και παρακολούθηση κόστους
- **Doctor** — διαγνωστικά υγείας συστήματος
- **Integrations** — κατάσταση ενσωμάτωσης και ρύθμιση
- **Pairing** — διαχείριση σύζευξης συσκευών
### Στόχοι firmware
| Στόχος | Πλατφόρμα | Σκοπός |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | Ασύρματος περιφερειακός πράκτορας |
| ESP32-UI | ESP32 + Display | Πράκτορας με οπτική διεπαφή |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Βιομηχανικό περιφερειακό |
| Arduino | Arduino | Βασική γέφυρα αισθητήρα/ενεργοποιητή |
| Uno Q Bridge | Arduino Uno | Σειριακή γέφυρα προς τον πράκτορα |
### Εργαλεία + αυτοματοποίηση
- **Βασικά:** shell, file read/write/edit, git operations, glob search, content search
- **Web:** browser control, web fetch, web search, screenshot, image info, PDF read
- **Ενσωματώσεις:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **Προγραμματισμός:** cron add/remove/update/run, schedule tool
- **Μνήμη:** recall, store, forget, knowledge, project intel
- **Προηγμένα:** delegate (agent-to-agent), swarm, model switch/routing, security ops, cloud ops
- **Υλικό:** board info, memory map, memory read (feature-gated)
### Χρόνος εκτέλεσης + ασφάλεια
- **Επίπεδα αυτονομίας:** ReadOnly, Supervised (προεπιλογή), Full.
- **Sandboxing:** απομόνωση χώρου εργασίας, αποκλεισμός διέλευσης διαδρομής, λίστες επιτρεπόμενων εντολών, απαγορευμένες διαδρομές, Landlock (Linux), Bubblewrap.
- **Περιορισμός ρυθμού:** μέγιστες ενέργειες ανά ώρα, μέγιστο κόστος ανά ημέρα (ρυθμιζόμενο).
- **Πύλη έγκρισης:** διαδραστική έγκριση για λειτουργίες μεσαίου/υψηλού κινδύνου.
- **E-stop:** δυνατότητα έκτακτης διακοπής.
- **129+ τεστ ασφαλείας** σε αυτοματοποιημένο CI.
### Λειτουργίες + πακετάρισμα
- Πίνακας ελέγχου web που εξυπηρετείται απευθείας από το Gateway.
- Υποστήριξη tunnel: Cloudflare, Tailscale, ngrok, OpenVPN, custom command.
- Docker runtime adapter για containerized εκτέλεση.
- CI/CD: beta (auto on push) → stable (manual dispatch) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Προκατασκευασμένα δυαδικά για Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Ρύθμιση παραμέτρων
Ελάχιστο `~/.zeroclaw/config.toml`:
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
Πλήρης αναφορά ρύθμισης: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Ρύθμιση καναλιών
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Ρύθμιση tunnel
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
Λεπτομέρειες: [Αναφορά καναλιών](docs/reference/api/channels-reference.md) · [Αναφορά ρυθμίσεων](docs/reference/api/config-reference.md)
### Υποστήριξη χρόνου εκτέλεσης (τρέχουσα)
- **`native`** (προεπιλογή) — άμεση εκτέλεση διεργασίας, ταχύτερη διαδρομή, ιδανική για αξιόπιστα περιβάλλοντα.
- **`docker`** — πλήρης απομόνωση container, επιβαλλόμενες πολιτικές ασφάλειας, απαιτεί Docker.
Ορίστε `runtime.kind = "docker"` για αυστηρό sandboxing ή απομόνωση δικτύου.
## Πιστοποίηση Συνδρομής (OpenAI Codex / Claude Code / Gemini)
Το ZeroClaw υποστηρίζει native προφίλ πιστοποίησης συνδρομής (πολλαπλοί λογαριασμοί, κρυπτογραφημένα σε αδράνεια).
- Αρχείο αποθήκευσης: `~/.zeroclaw/auth-profiles.json`
- Κλειδί κρυπτογράφησης: `~/.zeroclaw/.secret_key`
- Μορφή αναγνωριστικού προφίλ: `<provider>:<profile_name>` (παράδειγμα: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Χώρος εργασίας πράκτορα + δεξιότητες
Ρίζα χώρου εργασίας: `~/.zeroclaw/workspace/` (ρυθμιζόμενο μέσω config).
Ενσωματωμένα αρχεία prompt:
- `IDENTITY.md` — προσωπικότητα και ρόλος πράκτορα
- `USER.md` — πλαίσιο χρήστη και προτιμήσεις
- `MEMORY.md` — μακροπρόθεσμα γεγονότα και μαθήματα
- `AGENTS.md` — συμβάσεις session και κανόνες αρχικοποίησης
- `SOUL.md` — βασική ταυτότητα και αρχές λειτουργίας
Δεξιότητες: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` ή `SKILL.toml`.
```bash
# List installed skills
zeroclaw skills list
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
# Remove a skill
zeroclaw skills remove my-skill
```
## Εντολές CLI
```bash
# Διαχείριση χώρου εργασίας
zeroclaw onboard # Οδηγός καθοδηγούμενης ρύθμισης
zeroclaw status # Εμφάνιση κατάστασης daemon/agent
zeroclaw doctor # Εκτέλεση διαγνωστικών συστήματος
# Gateway + daemon
zeroclaw gateway # Εκκίνηση gateway server (127.0.0.1:42617)
zeroclaw daemon # Εκκίνηση πλήρους αυτόνομου χρόνου εκτέλεσης
# Πράκτορας
zeroclaw agent # Διαδραστική λειτουργία συνομιλίας
zeroclaw agent -m "message" # Λειτουργία μεμονωμένου μηνύματος
# Διαχείριση υπηρεσίας
zeroclaw service install # Εγκατάσταση ως υπηρεσία OS (launchd/systemd)
zeroclaw service start|stop|restart|status
# Κανάλια
zeroclaw channel list # Λίστα ρυθμισμένων καναλιών
zeroclaw channel doctor # Έλεγχος υγείας καναλιών
zeroclaw channel bind-telegram 123456789
# Cron + προγραμματισμός
zeroclaw cron list # Λίστα προγραμματισμένων εργασιών
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Μνήμη
zeroclaw memory list # Λίστα εγγραφών μνήμης
zeroclaw memory get <key> # Ανάκτηση μνήμης
zeroclaw memory stats # Στατιστικά μνήμης
# Προφίλ πιστοποίησης
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Περιφερειακά υλικού
zeroclaw hardware discover # Σάρωση για συνδεδεμένες συσκευές
zeroclaw peripheral list # Λίστα συνδεδεμένων περιφερειακών
zeroclaw peripheral flash # Flash firmware σε συσκευή
# Μετεγκατάσταση
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Συμπληρώσεις shell
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Πλήρης αναφορά εντολών: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Προαπαιτούμενα
<details>
<summary><strong>Windows</strong></summary>
#### Απαιτούμενα
1. **Visual Studio Build Tools** (παρέχει τον MSVC linker και το Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Κατά την εγκατάσταση (ή μέσω του Visual Studio Installer), επιλέξτε το workload **"Desktop development with C++"**.
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
Μετά την εγκατάσταση, ανοίξτε ένα νέο τερματικό και εκτελέστε `rustup default stable` για να βεβαιωθείτε ότι είναι ενεργό το stable toolchain.
3. **Επαλήθευση** ότι λειτουργούν και τα δύο:
```powershell
rustc --version
cargo --version
```
#### Προαιρετικά
- **Docker Desktop** — απαιτείται μόνο αν χρησιμοποιείτε τον [Docker sandboxed runtime](#υποστήριξη-χρόνου-εκτέλεσης-τρέχουσα) (`runtime.kind = "docker"`). Εγκατάσταση μέσω `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Απαιτούμενα
1. **Βασικά εργαλεία κατασκευής:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Εγκαταστήστε Xcode Command Line Tools: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Δείτε [rustup.rs](https://rustup.rs) για λεπτομέρειες.
3. **Επαλήθευση** ότι λειτουργούν και τα δύο:
```bash
rustc --version
cargo --version
```
#### Εγκατάσταση με μία εντολή
Ή παραλείψτε τα παραπάνω βήματα και εγκαταστήστε τα πάντα (εξαρτήσεις συστήματος, Rust, ZeroClaw) με μία εντολή:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Απαιτήσεις πόρων μεταγλώττισης
Η κατασκευή από πηγαίο κώδικα χρειάζεται περισσότερους πόρους από την εκτέλεση του τελικού δυαδικού:
| Πόρος | Ελάχιστο | Συνιστώμενο |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Ελεύθερος δίσκος** | 6 GB | 10 GB+ |
Αν ο host σας είναι κάτω από το ελάχιστο, χρησιμοποιήστε προκατασκευασμένα δυαδικά:
```bash
./install.sh --prefer-prebuilt
```
Για εγκατάσταση αποκλειστικά δυαδικού χωρίς εναλλακτική πηγαίου κώδικα:
```bash
./install.sh --prebuilt-only
```
#### Προαιρετικά
- **Docker** — απαιτείται μόνο αν χρησιμοποιείτε τον [Docker sandboxed runtime](#υποστήριξη-χρόνου-εκτέλεσης-τρέχουσα) (`runtime.kind = "docker"`). Εγκατάσταση μέσω του package manager σας ή [docker.com](https://docs.docker.com/engine/install/).
> **Σημείωση:** Η προεπιλεγμένη `cargo build --release` χρησιμοποιεί `codegen-units=1` για μείωση της μέγιστης πίεσης μεταγλώττισης. Για ταχύτερες κατασκευές σε ισχυρά μηχανήματα, χρησιμοποιήστε `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Προκατασκευασμένα δυαδικά
Τα assets έκδοσης δημοσιεύονται για:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Κατεβάστε τα τελευταία assets από:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Τεκμηρίωση
Για λεπτομερή τεκμηρίωση, δείτε:
Χρησιμοποιήστε τα όταν έχετε ολοκληρώσει τη ροή onboarding και θέλετε τη βαθύτερη αναφορά.
- [Κόμβος Τεκμηρίωσης](docs/README.md)
- [Αναφορά Εντολών](docs/commands-reference.md)
- [Αναφορά Παρόχων](docs/providers-reference.md)
- [Αναφορά Καναλιών](docs/channels-reference.md)
- [Αναφορά Ρυθμίσεων](docs/config-reference.md)
- Ξεκινήστε με το [ευρετήριο τεκμηρίωσης](docs/README.md) για πλοήγηση και "τι βρίσκεται πού."
- Διαβάστε την [επισκόπηση αρχιτεκτονικής](docs/architecture.md) για το πλήρες μοντέλο συστήματος.
- Χρησιμοποιήστε την [αναφορά ρυθμίσεων](docs/reference/api/config-reference.md) όταν χρειάζεστε κάθε κλειδί και παράδειγμα.
- Εκτελέστε το Gateway σύμφωνα με το βιβλίο με το [εγχειρίδιο λειτουργίας](docs/ops/operations-runbook.md).
- Ακολουθήστε [ZeroClaw Onboard](#γρήγορη-εκκίνηση-tldr) για καθοδηγούμενη ρύθμιση.
- Αντιμετωπίστε κοινά σφάλματα με τον [οδηγό αντιμετώπισης προβλημάτων](docs/ops/troubleshooting.md).
- Ελέγξτε τις [οδηγίες ασφάλειας](docs/security/README.md) πριν εκθέσετε οτιδήποτε.
---
### Αναφορά τεκμηρίωσης
- Κόμβος τεκμηρίωσης: [docs/README.md](docs/README.md)
- Ενοποιημένος πίνακας περιεχομένων: [docs/SUMMARY.md](docs/SUMMARY.md)
- Αναφορά εντολών: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Αναφορά ρυθμίσεων: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Αναφορά παρόχων: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Αναφορά καναλιών: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Εγχειρίδιο λειτουργίας: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Αντιμετώπιση προβλημάτων: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### Τεκμηρίωση συνεργασίας
- Οδηγός συνεισφοράς: [CONTRIBUTING.md](CONTRIBUTING.md)
- Πολιτική ροής εργασίας PR: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- Οδηγός ροής εργασίας CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Εγχειρίδιο αξιολογητή: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Πολιτική αποκάλυψης ασφάλειας: [SECURITY.md](SECURITY.md)
- Πρότυπο τεκμηρίωσης: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Ανάπτυξη + λειτουργίες
- Οδηγός ανάπτυξης δικτύου: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Εγχειρίδιο proxy agent: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Οδηγοί υλικού: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
Το ZeroClaw δημιουργήθηκε για τον smooth crab 🦀, έναν γρήγορο και αποδοτικό βοηθό AI. Δημιουργήθηκε από τον Argenis De La Rosa και την κοινότητα.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Υποστήριξη ZeroClaw
Αν το ZeroClaw βοηθά τη δουλειά σας και θέλετε να υποστηρίξετε τη συνεχιζόμενη ανάπτυξη, μπορείτε να κάνετε δωρεά εδώ:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Ειδικές Ευχαριστίες
Ένα εγκάρδιο ευχαριστώ στις κοινότητες και τα ιδρύματα που εμπνέουν και τροφοδοτούν αυτό το έργο ανοιχτού κώδικα:
- **Harvard University**για την καλλιέργεια πνευματικής περιέργειας και την ώθηση των ορίων του εφικτού.
- **MIT**για την υπεράσπιση της ανοιχτής γνώσης, του ανοιχτού κώδικα και της πεποίθησης ότι η τεχνολογία πρέπει να είναι προσβάσιμη σε όλους.
- **Sundai Club**για την κοινότητα, την ενέργεια και την ακατάπαυστη επιθυμία να χτίζουμε πράγματα που έχουν σημασία.
- **Ο Κόσμος & Πέρα** 🌍✨ — σε κάθε συνεισφέροντα, ονειροπόλο και δημιουργό εκεί έξω που κάνει τον ανοιχτό κώδικα δύναμη για το καλό. Αυτό είναι για εσένα.
Χτίζουμε ανοιχτά γιατί οι καλύτερες ιδέες έρχονται από παντού. Αν διαβάζεις αυτό, είσαι μέρος του. Καλωσήρθες. 🦀❤️
## Συνεισφορά
Οι συνεισφορές είναι ευπρόσδεκτες! Παρακαλώ διαβάστε τον [Οδηγό Συνεισφοράς](CONTRIBUTING.md).
Νέος στο ZeroClaw; Ψάξτε για issues με ετικέτα [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — δείτε τον [Οδηγό Συνεισφοράς](CONTRIBUTING.md#first-time-contributors) για το πώς να ξεκινήσετε. PR με AI/vibe-coding καλοδεχούμενα! 🤖
Δείτε [CONTRIBUTING.md](CONTRIBUTING.md) και [CLA.md](docs/contributing/cla.md). Υλοποιήστε ένα trait, υποβάλετε ένα PR:
- Οδηγός ροής εργασίας CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Νέο `Provider``src/providers/`
- Νέο `Channel``src/channels/`
- Νέο `Observer``src/observability/`
- Νέο `Tool``src/tools/`
- Νέο `Memory``src/memory/`
- Νέο `Tunnel``src/tunnel/`
- Νέο `Peripheral``src/peripherals/`
- Νέο `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Επίσημο Αποθετήριο & Προειδοποίηση Πλαστοπροσωπίας
**Αυτό είναι το μόνο επίσημο αποθετήριο ZeroClaw:**
> https://github.com/zeroclaw-labs/zeroclaw
Οποιοδήποτε άλλο αποθετήριο, οργανισμός, τομέας ή πακέτο που ισχυρίζεται ότι είναι "ZeroClaw" ή υπονοεί σχέση με τα ZeroClaw Labs είναι **μη εξουσιοδοτημένο και δεν σχετίζεται με αυτό το έργο**. Τα γνωστά μη εξουσιοδοτημένα forks θα αναφέρονται στο [TRADEMARK.md](docs/maintainers/trademark.md).
Αν αντιμετωπίσετε πλαστοπροσωπία ή κατάχρηση εμπορικού σήματος, παρακαλούμε [ανοίξτε ένα issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Άδεια
Αυτό το έργο έχει διπλή άδεια:
Το ZeroClaw έχει διπλή άδεια για μέγιστη ανοιχτότητα και προστασία συνεισφερόντων:
- MIT License
- Apache License, έκδοση 2.0
| Άδεια | Περίπτωση χρήσης |
|---|---|
| [MIT](LICENSE-MIT) | Ανοιχτός κώδικας, έρευνα, ακαδημαϊκή, προσωπική χρήση |
| [Apache 2.0](LICENSE-APACHE) | Προστασία πατεντών, θεσμική, εμπορική ανάπτυξη |
Δείτε τα [LICENSE-APACHE](LICENSE-APACHE) και [LICENSE-MIT](LICENSE-MIT) για λεπτομέρειες.
Μπορείτε να επιλέξετε οποιαδήποτε άδεια. **Οι συνεισφέροντες παρέχουν αυτόματα δικαιώματα και στις δύο** — δείτε [CLA.md](docs/contributing/cla.md) για την πλήρη συμφωνία συνεισφοράς.
### Εμπορικό σήμα
Το όνομα **ZeroClaw** και το λογότυπο είναι εμπορικά σήματα της ZeroClaw Labs. Αυτή η άδεια δεν παρέχει δικαίωμα χρήσης τους για να υπονοήσετε υποστήριξη ή σχέση. Δείτε [TRADEMARK.md](docs/maintainers/trademark.md) για επιτρεπόμενες και απαγορευμένες χρήσεις.
### Προστασίες Συνεισφερόντων
- **Διατηρείτε τα πνευματικά δικαιώματα** των συνεισφορών σας
- **Χορήγηση πατεντών** (Apache 2.0) σας προστατεύει από αξιώσεις πατεντών άλλων συνεισφερόντων
- Οι συνεισφορές σας **αποδίδονται μόνιμα** στο ιστορικό commit και στο [NOTICE](NOTICE)
- Δεν μεταβιβάζονται δικαιώματα εμπορικού σήματος με τη συνεισφορά
---
## Κοινότητα
**ZeroClaw** — Μηδενική επιβάρυνση. Μηδενικοί συμβιβασμοί. Ανάπτυξη οπουδήποτε. Εναλλαγή οτιδήποτε. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Συνεισφέροντες
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## Χορηγοί
Αυτή η λίστα δημιουργείται από το γράφημα συνεισφερόντων του GitHub και ενημερώνεται αυτόματα.
Αν το ZeroClaw είναι χρήσιμο για εσάς, παρακαλώ σκεφτείτε να μας αγοράσετε έναν καφέ:
## Ιστορικό Αστεριών
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Henkilokohtainen tekoalyavustaja</h1>
<p align="center">
<strong>Noll overhead. Noll kompromissi. 100% Rust. 100% Agnostinen.</strong><br>
⚡️ <strong>Ajaa $10 laitteistolla <5MB RAM:lla: Tämä on 99% vähemmän muistia kuin OpenClaw ja 98% halvempi kuin Mac mini!</strong>
<strong>Nolla ylimaaraa. Nolla kompromisseja. 100% Rust. 100% Agnostinen.</strong><br>
⚡️ <strong>Toimii $10 laitteistolla alle 5MB RAM:lla: Se on 99% vahemman muistia kuin OpenClaw ja 98% halvempaa kuin Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Rakennettu Harvardin, MIT:n ja Sundai.Club-yhteisöjen opiskelijoiden ja jasenien toimesta.
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw on henkilokohtainen tekoalyavustaja, jota kaytat omilla laitteillasi. Se vastaa sinulle jo kayttamillasi kanavilla (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work ja muut). Silla on web-hallintapaneeli reaaliaikaiseen ohjaukseen ja se voi yhdistaa laitteistoperiferioihin (ESP32, STM32, Arduino, Raspberry Pi). Gateway on vain ohjaustaaso — tuote on avustaja.
## Mikä on ZeroClaw?
Jos haluat henkilokohtaisen, yhden kayttajan avustajan, joka tuntuu paikalliselta, nopealta ja aina paalla olevalta, tama on se.
ZeroClaw on kevyt, muokattava ja laajennettava AI-assistentti-infrastruktuuri, joka on rakennettu Rustilla. Se yhdistää eri LLM-palveluntarjoajat (Anthropic, OpenAI, Google, Ollama jne.) yhtenäisen käyttöliittymän kautta ja tukee useita kanavia (Telegram, Matrix, CLI jne.).
<p align="center">
<a href="https://zeroclawlabs.ai">Verkkosivusto</a> ·
<a href="docs/README.md">Dokumentaatio</a> ·
<a href="docs/architecture.md">Arkkitehtuuri</a> ·
<a href="#pikaaloitus-tldr">Aloita</a> ·
<a href="#siirtyminen-openclawsta">Siirtyminen OpenClawsta</a> ·
<a href="docs/ops/troubleshooting.md">Vianetsinta</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Keskeiset Ominaisuudet
> **Suositeltu asennus:** suorita `zeroclaw onboard` terminaalissasi. ZeroClaw Onboard opastaa sinut vaihe vaiheelta gatewayn, tyotilan, kanavien ja palveluntarjoajan asennuksessa. Se on suositeltu asennuspolku ja toimii macOS:lla, Linuxilla ja Windowsilla (WSL2:n kautta). Uusi asennus? Aloita tasta: [Aloita](#pikaaloitus-tldr)
- **🦀 Kirjoitettu Rustilla**: Korkea suorituskyky, muistiturvallisuus ja nollakustannus-abstraktiot
- **🔌 Palveluntarjoaja-agnostinen**: Tukee OpenAI, Anthropic, Google Gemini, Ollama ja muita
- **📱 Monikanavainen**: Telegram, Matrix (E2EE:llä), CLI ja muut
- **🧠 Pluggaava muisti**: SQLite ja Markdown-backendit
- **🛠️ Laajennettavat työkalut**: Lisää mukautettuja työkaluja helposti
- **🔒 Turvallisuus edellä**: Käänteinen proxy, yksityisyys-edellä-suunnittelu
### Tilaustunnistautuminen (OAuth)
---
- **OpenAI Codex** (ChatGPT-tilaus)
- **Gemini** (Google OAuth)
- **Anthropic** (API-avain tai tunnistautumistokeni)
## Pika-aloitus
Mallien huomautus: vaikka monia palveluntarjoajia/malleja tuetaan, parhaan kokemuksen saamiseksi kayta vahvinta saatavilla olevaa uusimman sukupolven mallia. Katso [Onboarding](#pikaaloitus-tldr).
### Vaatimukset
Mallien konfiguraatio + CLI: [Palveluntarjoajien viite](docs/reference/api/providers-reference.md)
Tunnistautumisprofiilin kierto (OAuth vs API-avaimet) + failover: [Mallien failover](docs/reference/api/providers-reference.md)
- Rust 1.70+
- LLM-palveluntarjoajan API-avain (Anthropic, OpenAI jne.)
## Asennus (suositeltu)
### Asennus
Ajoymparisto: Rust stable toolchain. Yksi binaari, ei ajoympariston riippuvuuksia.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Yhden napsautuksen asennus
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` suoritetaan automaattisesti asennuksen jalkeen tyotilan ja palveluntarjoajan konfiguroimiseksi.
## Pikaaloitus (TL;DR)
Taysi aloittelijan opas (tunnistautuminen, paritus, kanavat): [Aloita](docs/setup-guides/one-click-bootstrap.md)
```bash
# Asennus + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Kaynnista gateway (webhook-palvelin + web-hallintapaneeli)
zeroclaw gateway # oletus: 127.0.0.1:42617
zeroclaw gateway --port 0 # satunnainen portti (turvallisuuskovennettu)
# Puhu avustajalle
zeroclaw agent -m "Hello, ZeroClaw!"
# Interaktiivinen tila
zeroclaw agent
# Kaynnista taysi autonominen ajoymparisto (gateway + kanavat + cron + hands)
zeroclaw daemon
# Tarkista tila
zeroclaw status
# Suorita diagnostiikka
zeroclaw doctor
```
Paivitat? Suorita `zeroclaw doctor` paivityksen jalkeen.
### Lahdekoodista (kehitys)
```bash
# Kloonaa repository
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Rakenna
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Aja
cargo run --release
zeroclaw onboard
```
### Dockerilla
> **Kehitysvaihtoehto (ei globaalia asennusta):** lisaa komentoihin etuliite `cargo run --release --` (esimerkki: `cargo run --release -- status`).
## Siirtyminen OpenClawsta
ZeroClaw voi tuoda OpenClaw-tyotilasi, muistisi ja maaritykset:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Esikatsele mita siirretaan (turvallinen, vain luku)
zeroclaw migrate openclaw --dry-run
# Suorita siirto
zeroclaw migrate openclaw
```
---
Tama siirtaa muistimerkinnot, tyotilan tiedostot ja maaritykset hakemistosta `~/.openclaw/` hakemistoon `~/.zeroclaw/`. Maaritykset muunnetaan automaattisesti JSON:sta TOML:ksi.
## Konfiguraatio
## Turvallisuuden oletusasetukset (DM-paasy)
ZeroClaw käyttää YAML-konfiguraatiotiedostoa. Oletuksena se etsii `config.yaml`.
ZeroClaw yhdistaa todellisiin viestintapintoihin. Kasittele saapuvia DM-viesteja luottamattomana syotteena.
```yaml
# Oletuspalveluntarjoaja
provider: anthropic
Taysi turvallisuusopas: [SECURITY.md](SECURITY.md)
# Palveluntarjoajien konfiguraatio
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
Oletuskayttaytyminen kaikilla kanavilla:
# Muistin konfiguraatio
memory:
backend: sqlite
path: data/memory.db
- **DM-paritus** (oletus): tuntemattomat lahettajat saavat lyhyen parituskoodin ja botti ei kasittele heidan viestiaan.
- Hyvaksy komennolla: `zeroclaw pairing approve <channel> <code>` (jonka jalkeen lahettaja lisataan paikalliselle sallittujen listalle).
- Julkiset saapuvat DM:t vaativat nimenomaisen opt-in-asetuksen `config.toml`-tiedostossa.
- Suorita `zeroclaw doctor` tunnistaaksesi riskilliset tai vaarinkonfiguroidut DM-kaytannot.
# Kanavien konfiguraatio
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
**Autonomiatasot:**
| Taso | Kayttaytyminen |
|------|----------------|
| `ReadOnly` | Agentti voi tarkkailla mutta ei toimia |
| `Supervised` (oletus) | Agentti toimii hyvaksynnalla keskitason/korkean riskin toiminnoissa |
| `Full` | Agentti toimii itsenaisesti kaytantorajojen sisalla |
**Sandboxing-kerrokset:** tyotilan eristys, polun lapikulun esto, komentojen sallittujen listat, kielletyt polut (`/etc`, `/root`, `~/.ssh`), nopeusrajoitus (max toiminnot/tunti, kustannus/paiva-rajoitukset).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Ilmoitukset
Kayta tata taulua tarkeisiin ilmoituksiin (yhteensopivuutta rikkovat muutokset, turvallisuustiedotteet, yllapitoikkunat ja julkaisun estajat).
| Paivamaara (UTC) | Taso | Ilmoitus | Toimenpide |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kriittinen_ | **Emme** ole yhteydessa `openagen/zeroclaw`-, `zeroclaw.org`- tai `zeroclaw.net`-sivustoihin. `zeroclaw.org`- ja `zeroclaw.net`-verkkotunnukset osoittavat talla hetkella `openagen/zeroclaw`-haaraan, ja tuo verkkotunnus/varasto esiintyy virallisen verkkosivustomme/projektimme nimissa. | Ala luota naista lahteista perasin oleviin tietoihin, binaareihin, varainkeruuseen tai ilmoituksiin. Kayta vain [tata varastoa](https://github.com/zeroclaw-labs/zeroclaw) ja vahvistettuja sosiaalisen median tilejamme. |
| 2026-02-21 | _Tarkea_ | Virallinen verkkosivustomme on nyt toiminnassa: [zeroclawlabs.ai](https://zeroclawlabs.ai). Kiitos karsivallisyydestanne julkaisun valmistelun aikana. Nakemme edelleen esiintymisyrityksia, joten **ala** liity mihinkaan sijoitus- tai varainkeruutoimintaan, joka vaittaa ZeroClaw-nimea, ellei se ole julkaistu virallisten kanaviemme kautta. | Kayta [tata varastoa](https://github.com/zeroclaw-labs/zeroclaw) ainoana totuuden lahteena. Seuraa [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) ja [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) virallisia paivityksia varten. |
| 2026-02-19 | _Tarkea_ | Anthropic paivitti tunnistautumis- ja tunnistetietojen kaytonehdat 2026-02-19. Claude Code OAuth -tokenit (Free, Pro, Max) on tarkoitettu yksinomaan Claude Codelle ja Claude.ai:lle; OAuth-tokenien kayttaminen Claude Free/Pro/Max -palvelusta missaan muussa tuotteessa, tyokalussa tai palvelussa (mukaan lukien Agent SDK) ei ole sallittua ja voi rikkoa kuluttajakayttoehtoja. | Ole hyva ja valta valikaisesti Claude Code OAuth -integraatioita mahdollisen menetyksen estamiseksi. Alkuperainen lauseke: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Kohokodat
- **Kevyt ajoymparisto oletuksena** — tavalliset CLI- ja tilatyonkulut toimivat muutaman megatavun muistibudjetissa release-buildeissa.
- **Kustannustehokas kayttoönotto** — suunniteltu $10-korteille ja pienille pilvi-instansseille, ilman raskaita ajoympariston riippuvuuksia.
- **Nopeat kylmakaunnistykset** — yhden binaarin Rust-ajoymparisto pitaa komento- ja daemon-kaynnistyksen lahes valittomana.
- **Siirrettava arkkitehtuuri** — yksi binaari ARM-, x86- ja RISC-V-alustoilla vaihdettavilla palveluntarjoajilla/kanavilla/tyokaluilla.
- **Paikallinen-ensin Gateway** — yksi ohjaustaaso istunnoille, kanaville, tyokaluille, cronille, SOP:ille ja tapahtumille.
- **Monikanavainen saapuva** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket ja muut.
- **Moniagentin orkestrointi (Hands)** — autonomiset agenttiparvet, jotka toimivat aikataulutettusti ja alykkyytyvat ajan myota.
- **Vakiotoimintamenettelyt (SOPs)** — tapahtumapohjainen tyonkulun automatisointi MQTT-, webhook-, cron- ja periferia-laukaisijoilla.
- **Web-hallintapaneeli** — React 19 + Vite web-kayttoliittyma reaaliaikaisella chatilla, muistiselaimella, maaritysten muokkaimella, cron-hallinnalla ja tyokalujen tarkastimella.
- **Laitteistoperiferiat** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO `Peripheral`-traitin kautta.
- **Ensiluokkaiset tyokalut** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace ja 70+ lisaa.
- **Elinkaarikoukut** — LLM-kutsujen, tyokalujen suoritusten ja viestien sieppaus ja muokkaus joka vaiheessa.
- **Taitoplattformi** — sisaanrakennetut, yhteison ja tyotilan taidot turvallisuustarkastuksella.
- **Tunnelituki** — Cloudflare, Tailscale, ngrok, OpenVPN ja mukautetut tunnelit etapaasyyn.
### Miksi tiimit valitsevat ZeroClaw:n
- **Kevyt oletuksena:** pieni Rust-binaari, nopea kaynnistys, alhainen muistijalanjalki.
- **Turvallinen suunnittelulla:** paritus, tiukka sandboxing, nimenomaiset sallittujen listat, tyotilan rajaus.
- **Taysin vaihdettava:** ydinjarjestelmat ovat traiteja (providers, channels, tools, memory, tunnels).
- **Ei lukkiutumista:** OpenAI-yhteensopiva palveluntarjoajatuki + liitettavat mukautetut paatepisteet.
## Vertailun tilannekuva (ZeroClaw vs OpenClaw, Toistettava)
Paikallisen koneen pikavertailu (macOS arm64, helmi 2026) normalisoitu 0.8GHz reunalaitteistolle.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Kieli** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Kaynnistys (0.8GHz core)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Binaarin koko** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Kustannus** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Mika tahansa laitteisto $10** |
> Huomautukset: ZeroClaw-tulokset mitattu release-buildeilla kayttaen `/usr/bin/time -l`. OpenClaw vaatii Node.js-ajoympariston (tyypillisesti ~390MB ylimaaraista muistikuormaa), kun taas NanoBot vaatii Python-ajoympariston. PicoClaw ja ZeroClaw ovat staattisia binaareja. Yllaolevat RAM-luvut ovat ajoaikaista muistia; kaannosaikaiset vaatimukset ovat korkeammat.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Toistettava paikallinen mittaus
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
---
## Kaikki mita olemme rakentaneet tahan mennessa
### Ydinplattformi
- Gateway HTTP/WS/SSE -ohjaustaaso istunnoilla, lasnaololla, maarityksilla, cronilla, webhookeilla, web-hallintapaneelilla ja parituksella.
- CLI-pinta: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Agentin orkestroinnin silmukka tyokalujen lahettamisella, kehotteen rakentamisella, viestien luokittelulla ja muistin lataamisella.
- Istuntomalli turvallisuuskaytannon noudattamisella, autonomiatasoilla ja hyvaksyntaporttauksella.
- Kestava palveluntarjoajan kapselointi failoverilla, uudelleenyrityksella ja mallien reitityksella 20+ LLM-taustalle.
### Kanavat
Kanavat: WhatsApp (native), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
Feature-gated: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Web-hallintapaneeli
React 19 + Vite 6 + Tailwind CSS 4 web-hallintapaneeli, jota tarjoillaan suoraan Gatewaysta:
- **Dashboard** — jarjestelman yleiskatsaus, terveydentila, kaynnissaoloaika, kustannusten seuranta
- **Agent Chat** — interaktiivinen keskustelu agentin kanssa
- **Memory** — muistimerkintöjen selaus ja hallinta
- **Config** — maaritysten katselu ja muokkaus
- **Cron** — ajastettujen tehtavien hallinta
- **Tools** — kaytettavissa olevien tyokalujen selaus
- **Logs** — agentin toimintalokien katselu
- **Cost** — tokenien kaytto ja kustannusten seuranta
- **Doctor** — jarjestelman terveysdiagnostiikka
- **Integrations** — integraatioiden tila ja asennus
- **Pairing** — laiteparituksen hallinta
### Firmware-kohteet
| Kohde | Alusta | Tarkoitus |
|-------|--------|-----------|
| ESP32 | Espressif ESP32 | Langaton periferia-agentti |
| ESP32-UI | ESP32 + Display | Agentti visuaalisella kayttoliittymalla |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Teollinen periferia |
| Arduino | Arduino | Perusanturi-/toimilaitesilta |
| Uno Q Bridge | Arduino Uno | Sarjasilta agenttiin |
### Tyokalut + automatisointi
- **Ydin:** shell, file read/write/edit, git operations, glob search, content search
- **Web:** browser control, web fetch, web search, screenshot, image info, PDF read
- **Integraatiot:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **Ajastus:** cron add/remove/update/run, schedule tool
- **Muisti:** recall, store, forget, knowledge, project intel
- **Edistyneet:** delegate (agent-to-agent), swarm, model switch/routing, security ops, cloud ops
- **Laitteisto:** board info, memory map, memory read (feature-gated)
### Ajoymparisto + turvallisuus
- **Autonomiatasot:** ReadOnly, Supervised (oletus), Full.
- **Sandboxing:** tyotilan eristys, polun lapikulun esto, komentojen sallittujen listat, kielletyt polut, Landlock (Linux), Bubblewrap.
- **Nopeusrajoitus:** max toiminnot tunnissa, max kustannus paivassa (konfiguroitavissa).
- **Hyvaksyntaporttaus:** interaktiivinen hyvaksynta keskitason/korkean riskin toiminnoille.
- **E-stop:** hatapysaytysmahdollisuus.
- **129+ turvallisuustestia** automatisoidussa CI:ssa.
### Toiminnot + paketointi
- Web-hallintapaneeli tarjoillaan suoraan Gatewaysta.
- Tunnelituki: Cloudflare, Tailscale, ngrok, OpenVPN, mukautettu komento.
- Docker runtime -adapteri konttiin ajettuun suoritukseen.
- CI/CD: beta (auto on push) → stable (manual dispatch) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Valmiit binaarit Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Maaritykset
Minimaalinen `~/.zeroclaw/config.toml`:
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
Taysi maaritysviite: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Kanavan maaritys
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Tunnelin maaritys
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
Lisatietoja: [Kanavaviite](docs/reference/api/channels-reference.md) · [Maaritysviite](docs/reference/api/config-reference.md)
### Ajoymparistotuki (nykyinen)
- **`native`** (oletus) — suora prosessin suoritus, nopein polku, ihanteellinen luotetuissa ymparistoissa.
- **`docker`** — taysi konttieristys, pakotetut turvallisuuskaytannot, vaatii Dockerin.
Aseta `runtime.kind = "docker"` tiukkaan sandboxingiin tai verkon eristykseen.
## Tilaustunnistautuminen (OpenAI Codex / Claude Code / Gemini)
ZeroClaw tukee tilausnatiiveja tunnistautumisprofiileja (useita tileja, salattu levossa).
- Tallennustiedosto: `~/.zeroclaw/auth-profiles.json`
- Salausavain: `~/.zeroclaw/.secret_key`
- Profiilin tunnistemuoto: `<provider>:<profile_name>` (esimerkki: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Agentin tyotila + taidot
Tyotilan juuri: `~/.zeroclaw/workspace/` (konfiguroitavissa maaritysten kautta).
Injektoidut kehotetiedostot:
- `IDENTITY.md` — agentin persoona ja rooli
- `USER.md` — kayttajan konteksti ja mieltymykset
- `MEMORY.md` — pitkaaikaiset tosiasiat ja opit
- `AGENTS.md` — istuntokonventiot ja alustussaannot
- `SOUL.md` — ydinidentiteetti ja toimintaperiaatteet
Taidot: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` tai `SKILL.toml`.
```bash
# List installed skills
zeroclaw skills list
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
# Remove a skill
zeroclaw skills remove my-skill
```
## CLI-komennot
```bash
# Tyotilan hallinta
zeroclaw onboard # Opastettu asennusvelho
zeroclaw status # Nayta daemon/agentin tila
zeroclaw doctor # Suorita jarjestelman diagnostiikka
# Gateway + daemon
zeroclaw gateway # Kaynnista gateway-palvelin (127.0.0.1:42617)
zeroclaw daemon # Kaynnista taysi autonominen ajoymparisto
# Agentti
zeroclaw agent # Interaktiivinen keskustelutila
zeroclaw agent -m "message" # Yksittaisen viestin tila
# Palvelun hallinta
zeroclaw service install # Asenna OS-palveluna (launchd/systemd)
zeroclaw service start|stop|restart|status
# Kanavat
zeroclaw channel list # Listaa konfiguroidut kanavat
zeroclaw channel doctor # Tarkista kanavien terveys
zeroclaw channel bind-telegram 123456789
# Cron + ajastus
zeroclaw cron list # Listaa ajastetut tehtavat
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Muisti
zeroclaw memory list # Listaa muistimerkinnot
zeroclaw memory get <key> # Hae muisti
zeroclaw memory stats # Muistin tilastot
# Tunnistautumisprofiilit
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Laitteistoperiferiat
zeroclaw hardware discover # Etsi yhdistettuja laitteita
zeroclaw peripheral list # Listaa yhdistetyt periferiat
zeroclaw peripheral flash # Flash-ohjelma laitteeseen
# Siirto
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell-taydennykset
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Taysi komentoreferenssi: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Esivaatimukset
<details>
<summary><strong>Windows</strong></summary>
#### Vaaditut
1. **Visual Studio Build Tools** (tarjoaa MSVC-linkerin ja Windows SDK:n):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Asennuksen aikana (tai Visual Studio Installerin kautta) valitse **"Desktop development with C++"** -tyokuorma.
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
Asennuksen jalkeen avaa uusi terminaali ja suorita `rustup default stable` varmistaaksesi, etta vakaa toolchain on aktiivinen.
3. **Vahvista**, etta molemmat toimivat:
```powershell
rustc --version
cargo --version
```
#### Valinnainen
- **Docker Desktop** — vaaditaan vain kaytettaessa [Docker sandboxed runtime](#ajoymparistotuki-nykyinen) (`runtime.kind = "docker"`). Asenna komennolla `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Vaaditut
1. **Kaannostyokalut:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Asenna Xcode Command Line Tools: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Katso [rustup.rs](https://rustup.rs) lisatietoja varten.
3. **Vahvista**, etta molemmat toimivat:
```bash
rustc --version
cargo --version
```
#### Yhden rivin asentaja
Tai ohita yllaolevat vaiheet ja asenna kaikki (jarjestelmariippuvuudet, Rust, ZeroClaw) yhdella komennolla:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Kaannosresurssivaatimukset
Lahdekoodista rakentaminen vaatii enemman resursseja kuin tuloksena olevan binaarin suorittaminen:
| Resurssi | Vahimmais | Suositeltu |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Vapaa levy** | 6 GB | 10 GB+ |
Jos isantasi on vahimmaisvaatimuksen alla, kayta valmiita binaareja:
```bash
./install.sh --prefer-prebuilt
```
Pelkan binaarin asennukseen ilman lahdekoodi-vaihtoehtoa:
```bash
./install.sh --prebuilt-only
```
#### Valinnainen
- **Docker** — vaaditaan vain kaytettaessa [Docker sandboxed runtime](#ajoymparistotuki-nykyinen) (`runtime.kind = "docker"`). Asenna paketinhallintasi kautta tai [docker.com](https://docs.docker.com/engine/install/).
> **Huomautus:** Oletus `cargo build --release` kayttaa `codegen-units=1` kaannoshuippupaineen vahentamiseksi. Nopeampiin kaanntöihin tehokkailla koneilla kayta `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Valmiit binaarit
Julkaisuresurssit julkaistaan seuraaville:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Lataa uusimmat resurssit osoitteesta:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Dokumentaatio
Yksityiskohtaista dokumentaatiota varten katso:
Kayta naita, kun olet ohittanut onboarding-kulun ja haluat syvemman viitteen.
- [Dokumentaatiokeskus](docs/README.md)
- [Komentojen Viite](docs/commands-reference.md)
- [Palveluntarjoajien Viite](docs/providers-reference.md)
- [Kanavien Viite](docs/channels-reference.md)
- [Konfiguraation Viite](docs/config-reference.md)
- Aloita [dokumentaatioindeksista](docs/README.md) navigointiin ja "mika on missa" -tietoon.
- Lue [arkkitehtuurin yleiskatsaus](docs/architecture.md) taydelliseen jarjestelmamalliin.
- Kayta [maaritysviitetta](docs/reference/api/config-reference.md), kun tarvitset jokaisen avaimen ja esimerkin.
- Suorita Gateway kirjan mukaan [kayttokirjalla](docs/ops/operations-runbook.md).
- Noudata [ZeroClaw Onboard](#pikaaloitus-tldr) -palvelua opastettuun asennukseen.
- Korjaa yleisia vikoja [vianetsintaoppaalla](docs/ops/troubleshooting.md).
- Tarkista [turvallisuusohjeet](docs/security/README.md) ennen kuin paljastat mitaan.
---
### Viitedokumentaatio
- Dokumentaatiokeskus: [docs/README.md](docs/README.md)
- Yhtenaistetty sisallysluettelo: [docs/SUMMARY.md](docs/SUMMARY.md)
- Komentoreferenssi: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Maaritysviite: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Palveluntarjoajien viite: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Kanavaviite: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Kayttokirja: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Vianetsinta: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### Yhteistyodokumentaatio
- Osallistumisopas: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR-tyonkulun kaytanto: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI-tyonkulun opas: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Arvioijan kasikirja: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Turvallisuuden julkistuskaytanto: [SECURITY.md](SECURITY.md)
- Dokumentaatiomalli: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Kayttoönotto + toiminnot
- Verkkokayyttoönotto-opas: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Proxy-agentin kasikirja: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Laitteisto-oppaat: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw rakennettiin smooth crab 🦀 -kaveria varten, nopea ja tehokas tekoalyavustaja. Rakennettu Argenis De La Rosan ja yhteison toimesta.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Tue ZeroClaw:ta
Jos ZeroClaw auttaa tyossasi ja haluat tukea jatkuvaa kehitysta, voit lahjoittaa tassa:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Erityiskiitokset
Sydamellinen kiitos yhteisöille ja instituutioille, jotka inspiroivat ja ruokkivat tata avoimen lahdekoodin tyota:
- **Harvard University** — alyllisen uteliaisuuden edistamisesta ja mahdollisuuksien rajojen tyontamisesta.
- **MIT** — avoimen tiedon, avoimen lahdekoodin ja uskon puolustamisesta, etta teknologian tulisi olla kaikkien saatavilla.
- **Sundai Club** — yhteisosta, energiasta ja leppymattomasta halusta rakentaa tarkeita asioita.
- **Maailma ja sen tuolla puolen** 🌍✨ — jokaiselle osallistujalle, haaveilijalle ja rakentajalle, joka tekee avoimesta lahdekoodista hyvan voiman. Tama on sinulle.
Rakennamme avoimesti, koska parhaat ideat tulevat kaikkialta. Jos luet taman, olet osa sita. Tervetuloa. 🦀❤️
## Osallistuminen
Osallistumiset ovat tervetulleita! Lue [Osallistumisopas](CONTRIBUTING.md).
Uusi ZeroClaw:ssa? Etsi issueita merkinnalla [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — katso [Osallistumisoppaamme](CONTRIBUTING.md#first-time-contributors) aloittaaksesi. AI/vibe-koodatut PR:t tervetulleita! 🤖
Katso [CONTRIBUTING.md](CONTRIBUTING.md) ja [CLA.md](docs/contributing/cla.md). Toteuta trait, laheta PR:
- CI-tyonkulun opas: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Uusi `Provider``src/providers/`
- Uusi `Channel``src/channels/`
- Uusi `Observer``src/observability/`
- Uusi `Tool``src/tools/`
- Uusi `Memory``src/memory/`
- Uusi `Tunnel``src/tunnel/`
- Uusi `Peripheral``src/peripherals/`
- Uusi `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Virallinen varasto ja esiintymisvaroitus
**Tama on ainoa virallinen ZeroClaw-varasto:**
> https://github.com/zeroclaw-labs/zeroclaw
Mika tahansa muu varasto, organisaatio, verkkotunnus tai paketti, joka vaittaa olevansa "ZeroClaw" tai viittaa yhteyteen ZeroClaw Labsin kanssa, on **luvaton eika liity tahan projektiin**. Tunnetut luvattomat forkit listataan [TRADEMARK.md](docs/maintainers/trademark.md)-tiedostossa.
Jos kohtaat esiintymista tai tavaramerkin vaarinkayttoa, ole hyva ja [avaa issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Lisenssi
Tämä projekti on kaksoislisensoitu:
ZeroClaw on kaksoislisenssoitu maksimaalisen avoimuuden ja osallistujien suojan takaamiseksi:
- MIT License
- Apache License, versio 2.0
| Lisenssi | Kayttotapaus |
|---|---|
| [MIT](LICENSE-MIT) | Avoin lahdekoodi, tutkimus, akateeminen, henkilokohtainen kaytto |
| [Apache 2.0](LICENSE-APACHE) | Patenttisuoja, institutionaalinen, kaupallinen kayttoönotto |
Katso [LICENSE-APACHE](LICENSE-APACHE) ja [LICENSE-MIT](LICENSE-MIT) yksityiskohdille.
Voit valita kumman tahansa lisenssin. **Osallistujat myontavat automaattisesti oikeudet molempien alla** — katso [CLA.md](docs/contributing/cla.md) tayden osallistujasopimuksen.
### Tavaramerkki
**ZeroClaw**-nimi ja logo ovat ZeroClaw Labsin tavaramerkkeja. Tama lisenssi ei anna lupaa kayttaa niita tuen tai yhteyden vihjamiseen. Katso [TRADEMARK.md](docs/maintainers/trademark.md) sallittujen ja kiellettyjen kayttojen osalta.
### Osallistujien suojat
- **Sailytat tekijanoikeuden** osallistumisiisi
- **Patenttimyonnos** (Apache 2.0) suojaa sinua muiden osallistujien patenttivaatimuksilta
- Osallistumisesi ovat **pysyvasti attribuoitu** commit-historiassa ja [NOTICE](NOTICE)-tiedostossa
- Tavaramerkkioikeuksia ei siirreta osallistumalla
---
## Yhteisö
**ZeroClaw** — Nolla ylimaaraa. Nolla kompromisseja. Kayttoönotto minne tahansa. Vaihda mita tahansa. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Osallistujat
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## Sponsorit
Tama lista luodaan GitHubin osallistujakaaviosta ja paivittyy automaattisesti.
Jos ZeroClaw on hyödyllinen sinulle, harkitse kahvin ostamista meille:
## Tahtihistoria
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +1,32 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — עוזר AI אישי</h1>
<p align="center" dir="rtl">
<strong>תקורת אפס. אין פשרות. 100% Rust. 100% אגנוסטי.</strong><br>
⚡️ <strong>פועל על חומרה ב-$10 עם <5MB זיכרון: זה 99% פחות זיכרון מ-OpenClaw ו-98% זול יותר מ-Mac mini!</strong>
<p align="center">
<strong>אפס תקורה. אפס פשרות. 100% Rust. 100% אגנוסטי.</strong><br>
⚡️ <strong>רץ על חומרה של $10 עם פחות מ-5MB RAM: זה 99% פחות זיכרון מ-OpenClaw ו-98% זול יותר מ-Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center" dir="rtl">
<p align="center">
נבנה על ידי סטודנטים וחברים מקהילות Harvard, MIT ו-Sundai.Club.
</p>
<p align="center">
🌐 <strong>שפות:</strong>
<a href="README.md">🇺🇸 English</a> ·
<a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
@ -55,143 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw הוא עוזר AI אישי שאתה מריץ על המכשירים שלך. הוא עונה לך בערוצים שאתה כבר משתמש בהם (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, ועוד). יש לו לוח בקרה אינטרנטי לשליטה בזמן אמת ויכול להתחבר להתקנים היקפיים (ESP32, STM32, Arduino, Raspberry Pi). ה-Gateway הוא רק מישור הבקרה — המוצר הוא העוזר.
## מה זה ZeroClaw?
אם אתה רוצה עוזר אישי למשתמש יחיד שמרגיש מקומי, מהיר ותמיד פעיל, זה הוא.
<p align="center" dir="rtl">
ZeroClaw הוא תשתית עוזר AI קלת משקל, מוטטבילית וניתנת להרחבה שנבנתה ב-Rust. היא מחברת ספקי LLM שונים (Anthropic, OpenAI, Google, Ollama, וכו') דרך ממשק מאוחד ותומכת בערוצים מרובים (Telegram, Matrix, CLI, וכו').
<p align="center">
<a href="https://zeroclawlabs.ai">אתר</a> ·
<a href="docs/README.md">תיעוד</a> ·
<a href="docs/architecture.md">ארכיטקטורה</a> ·
<a href="#התחלה-מהירה">התחלה</a> ·
<a href="#מיגרציה-מ-openclaw">מיגרציה מ-OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">פתרון בעיות</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### תכונות עיקריות
> **הגדרה מועדפת:** הרץ `zeroclaw onboard` בטרמינל שלך. ZeroClaw Onboard מנחה אותך שלב אחר שלב בהגדרת ה-gateway, סביבת העבודה, הערוצים והספק. זהו נתיב ההגדרה המומלץ ועובד על macOS, Linux ו-Windows (דרך WSL2). התקנה חדשה? התחל כאן: [התחלה](#התחלה-מהירה)
<p align="center" dir="rtl">
- **🦀 נכתב ב-Rust**: ביצועים גבוהים, אבטחת זיכרון, ואבסטרקציות ללא עלות
- **🔌 אגנוסטי לספקים**: תמיכה ב-OpenAI, Anthropic, Google Gemini, Ollama, ואחרים
- **📱 ערוצים מרובים**: Telegram, Matrix (עם E2EE), CLI, ואחרים
- **🧠 זיכרון ניתן להחלפה**: Backend של SQLite ו-Markdown
- **🛠️ כלים ניתנים להרחבה**: הוסף כלים מותאמים אישית בקלות
- **🔒 אבטחה תחילה**: פרוקסי הפוך, עיצוב מותחל על פרטיות
</p>
### אימות מנוי (OAuth)
---
- **OpenAI Codex** (מנוי ChatGPT)
- **Gemini** (Google OAuth)
- **Anthropic** (מפתח API או אסימון אימות)
## התחלה מהירה
הערה על מודלים: בעוד שספקים/מודלים רבים נתמכים, לחוויה הטובה ביותר השתמש במודל הדור האחרון החזק ביותר הזמין לך. ראה [הכניסה](#התחלה-מהירה).
### דרישות מוקדמות
הגדרות מודלים + CLI: [מדריך ספקים](docs/reference/api/providers-reference.md)
רוטציית פרופיל אימות (OAuth מול מפתחות API) + מעבר בכשל: [מעבר מודלים בכשל](docs/reference/api/providers-reference.md)
<p align="center" dir="rtl">
- Rust 1.70+
- מפתח API של ספק LLM (Anthropic, OpenAI, וכו')
</p>
## התקנה (מומלץ)
### התקנה
סביבת ריצה: שרשרת כלים יציבה של Rust. בינארי יחיד, ללא תלויות סביבת ריצה.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### התקנה בלחיצה אחת
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` רץ אוטומטית לאחר ההתקנה כדי להגדיר את סביבת העבודה והספק שלך.
## התחלה מהירה (TL;DR)
מדריך מתחילים מלא (אימות, צימוד, ערוצים): [התחלה](docs/setup-guides/one-click-bootstrap.md)
```bash
# Install + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Start the gateway (webhook server + web dashboard)
zeroclaw gateway # default: 127.0.0.1:42617
zeroclaw gateway --port 0 # random port (security hardened)
# Talk to the assistant
zeroclaw agent -m "Hello, ZeroClaw!"
# Interactive mode
zeroclaw agent
# Start full autonomous runtime (gateway + channels + cron + hands)
zeroclaw daemon
# Check status
zeroclaw status
# Run diagnostics
zeroclaw doctor
```
משדרג? הרץ `zeroclaw doctor` לאחר העדכון.
### מקוד מקור (פיתוח)
```bash
# שכפל את המאגר
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# בנה
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# הפעל
cargo run --release
zeroclaw onboard
```
### עם Docker
> **חלופת פיתוח (ללא התקנה גלובלית):** הוסף `cargo run --release --` לפני פקודות (דוגמה: `cargo run --release -- status`).
## מיגרציה מ-OpenClaw
ZeroClaw יכול לייבא את סביבת העבודה, הזיכרון וההגדרות של OpenClaw שלך:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Preview what will be migrated (safe, read-only)
zeroclaw migrate openclaw --dry-run
# Run the migration
zeroclaw migrate openclaw
```
---
זה מעביר את רשומות הזיכרון, קבצי סביבת העבודה וההגדרות מ-`~/.openclaw/` ל-`~/.zeroclaw/`. ההגדרות מומרות אוטומטית מ-JSON ל-TOML.
## קונפיגורציה
## ברירות מחדל אבטחה (גישת DM)
<p align="center" dir="rtl">
ZeroClaw משתמש בקובץ קונפיגורציה YAML. כברירת מחדל, הוא מחפש `config.yaml`.
ZeroClaw מתחבר למשטחי הודעות אמיתיים. התייחס ל-DM נכנסים כקלט לא מהימן.
מדריך אבטחה מלא: [SECURITY.md](SECURITY.md)
התנהגות ברירת מחדל בכל הערוצים:
- **צימוד DM** (ברירת מחדל): שולחים לא מוכרים מקבלים קוד צימוד קצר והבוט לא מעבד את ההודעה שלהם.
- אשר עם: `zeroclaw pairing approve <channel> <code>` (ואז השולח נוסף לרשימת היתרים מקומית).
- DM נכנסים ציבוריים דורשים הסכמה מפורשת ב-`config.toml`.
- הרץ `zeroclaw doctor` כדי לחשוף מדיניות DM מסוכנת או שגויה.
**רמות אוטונומיה:**
| רמה | התנהגות |
|------|----------|
| `ReadOnly` | הסוכן יכול לצפות אבל לא לפעול |
| `Supervised` (ברירת מחדל) | הסוכן פועל עם אישור לפעולות בסיכון בינוני/גבוה |
| `Full` | הסוכן פועל באופן אוטונומי בגבולות המדיניות |
**שכבות ארגז חול:** בידוד סביבת עבודה, חסימת מעבר נתיבים, רשימות היתר לפקודות, נתיבים אסורים (`/etc`, `/root`, `~/.ssh`), הגבלת קצב (מקסימום פעולות/שעה, מגבלות עלות/יום).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 הודעות
השתמש בלוח זה להודעות חשובות (שינויים שוברים, ייעוץ אבטחה, חלונות תחזוקה וחוסמי שחרור).
| תאריך (UTC) | רמה | הודעה | פעולה |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _קריטי_ | אנחנו **לא מזוהים** עם `openagen/zeroclaw`, `zeroclaw.org` או `zeroclaw.net`. הדומיינים `zeroclaw.org` ו-`zeroclaw.net` מפנים כרגע ל-fork `openagen/zeroclaw`, ואותו דומיין/מאגר מתחזים לאתר/פרויקט הרשמי שלנו. | אל תסמוך על מידע, בינאריים, גיוס כספים או הודעות ממקורות אלה. השתמש רק ב[מאגר זה](https://github.com/zeroclaw-labs/zeroclaw) ובחשבונות החברתיים המאומתים שלנו. |
| 2026-02-21 | _חשוב_ | האתר הרשמי שלנו כעת פעיל: [zeroclawlabs.ai](https://zeroclawlabs.ai). תודה על הסבלנות בזמן שהכנו את ההשקה. אנחנו עדיין רואים ניסיונות התחזות, לכן **אל** תצטרפו לפעילות השקעה או גיוס כספים הטוענת לשם ZeroClaw אלא אם היא מפורסמת דרך הערוצים הרשמיים שלנו. | השתמש ב[מאגר זה](https://github.com/zeroclaw-labs/zeroclaw) כמקור האמת היחיד. עקוב אחרי [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) ו-[Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) לעדכונים רשמיים. |
| 2026-02-19 | _חשוב_ | Anthropic עדכנה את תנאי Authentication and Credential Use ב-2026-02-19. אסימוני Claude Code OAuth (Free, Pro, Max) מיועדים אך ורק ל-Claude Code ול-Claude.ai; שימוש באסימוני OAuth מ-Claude Free/Pro/Max בכל מוצר, כלי או שירות אחר (כולל Agent SDK) אינו מותר ועלול להפר את תנאי השירות לצרכן. | אנא הימנעו זמנית מאינטגרציות Claude Code OAuth כדי למנוע אובדן פוטנציאלי. סעיף מקורי: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## יתרונות עיקריים
- **סביבת ריצה קלה כברירת מחדל** — תהליכי CLI וסטטוס שגרתיים רצים במעטפת זיכרון של כמה מגה-בייט על בנייות שחרור.
- **פריסה חסכונית** — מתוכנן ללוחות של $10 ומופעי ענן קטנים, ללא תלויות סביבת ריצה כבדות.
- **התחלה קרה מהירה** — סביבת ריצה Rust בבינארי יחיד שומרת על הפעלת פקודות ודמון כמעט מיידית.
- **ארכיטקטורה ניידת** — בינארי אחד על ARM, x86 ו-RISC-V עם ספקים/ערוצים/כלים להחלפה.
- **Gateway מקומי-תחילה** — מישור בקרה יחיד לסשנים, ערוצים, כלים, cron, SOPs ואירועים.
- **תיבת דואר רב-ערוצית** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket, ועוד.
- **תזמור רב-סוכנים (Hands)** — נחילי סוכנים אוטונומיים הפועלים לפי לוח זמנים ומשתפרים עם הזמן.
- **נהלי הפעלה סטנדרטיים (SOPs)** — אוטומציית תהליכי עבודה מונעת אירועים עם MQTT, webhook, cron וטריגרים של התקנים היקפיים.
- **לוח בקרה אינטרנטי** — ממשק משתמש React 19 + Vite עם צ'אט בזמן אמת, דפדפן זיכרון, עורך הגדרות, מנהל cron ומפקח כלים.
- **התקנים היקפיים** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO דרך trait `Peripheral`.
- **כלים מדרגה ראשונה** — shell, קריאה/כתיבה/עריכת קבצים, git, שליפת/חיפוש אינטרנט, MCP, Jira, Notion, Google Workspace, ו-70+ נוספים.
- **הוקים של מחזור חיים** — יירוט ושינוי קריאות LLM, הרצות כלים והודעות בכל שלב.
- **פלטפורמת מיומנויות** — מיומנויות מובנות, קהילתיות וסביבת עבודה עם ביקורת אבטחה.
- **תמיכה במנהרות** — Cloudflare, Tailscale, ngrok, OpenVPN ומנהרות מותאמות לגישה מרחוק.
### למה צוותים בוחרים ב-ZeroClaw
- **קל כברירת מחדל:** בינארי Rust קטן, הפעלה מהירה, טביעת רגל זיכרון נמוכה.
- **מאובטח מהתכנון:** צימוד, ארגז חול מחמיר, רשימות היתר מפורשות, תיחום סביבת עבודה.
- **ניתן להחלפה מלאה:** מערכות ליבה הן traits (ספקים, ערוצים, כלים, זיכרון, מנהרות).
- **ללא נעילת ספק:** תמיכה בספקים תואמי OpenAI + נקודות קצה מותאמות הניתנות לחיבור.
## תמונת מצב של ביצועים (ZeroClaw מול OpenClaw, ניתן לשחזור)
מדד מהיר על מכונה מקומית (macOS arm64, פברואר 2026) מנורמל לחומרת edge בתדר 0.8GHz.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **שפה** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **הפעלה (ליבת 0.8GHz)** | > 500s | > 30s | < 1s | **< 10ms** |
| **גודל בינארי** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **עלות** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **כל חומרה $10** |
> הערות: תוצאות ZeroClaw נמדדו על בנייות שחרור באמצעות `/usr/bin/time -l`. OpenClaw דורש סביבת ריצה Node.js (בדרך כלל ~390MB תקורת זיכרון נוספת), בעוד NanoBot דורש סביבת ריצה Python. PicoClaw ו-ZeroClaw הם בינאריים סטטיים. נתוני ה-RAM למעלה הם זיכרון סביבת ריצה; דרישות קומפילציה בזמן בנייה גבוהות יותר.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
```yaml
# ספק ברירת מחדל
provider: anthropic
### מדידה מקומית ניתנת לשחזור
# קונפיגורציית ספקים
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
```bash
cargo build --release
ls -lh target/release/zeroclaw
# קונפיגורציית זיכרון
memory:
backend: sqlite
path: data/memory.db
# קונפיגורציית ערוצים
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
---
## כל מה שבנינו עד כה
### פלטפורמת ליבה
- Gateway HTTP/WS/SSE מישור בקרה עם סשנים, נוכחות, הגדרות, cron, webhooks, לוח בקרה אינטרנטי וצימוד.
- משטח CLI: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- לולאת תזמור סוכן עם שליחת כלים, בניית פרומפט, סיווג הודעות וטעינת זיכרון.
- מודל סשנים עם אכיפת מדיניות אבטחה, רמות אוטונומיה ושער אישור.
- מעטפת ספק עמידה עם מעבר בכשל, ניסיון חוזר וניתוב מודלים על פני 20+ ממשקי LLM.
### ערוצים
ערוצים: WhatsApp (מקורי), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
מוגבלי-תכונה: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### לוח בקרה אינטרנטי
לוח בקרה React 19 + Vite 6 + Tailwind CSS 4 מוגש ישירות מה-Gateway:
- **לוח בקרה** — סקירת מערכת, מצב בריאות, זמן פעילות, מעקב עלויות
- **צ'אט סוכן** — צ'אט אינטראקטיבי עם הסוכן
- **זיכרון** — דפדוף וניהול רשומות זיכרון
- **הגדרות** — צפייה ועריכת הגדרות
- **Cron** — ניהול משימות מתוזמנות
- **כלים** — דפדוף בכלים זמינים
- **יומנים** — צפייה ביומני פעילות הסוכן
- **עלות** — שימוש בטוקנים ומעקב עלויות
- **דוקטור** — אבחון בריאות המערכת
- **אינטגרציות** — מצב אינטגרציות והגדרה
- **צימוד** — ניהול צימוד מכשירים
### יעדי קושחה
| יעד | פלטפורמה | מטרה |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | סוכן היקפי אלחוטי |
| ESP32-UI | ESP32 + Display | סוכן עם ממשק חזותי |
| STM32 Nucleo | STM32 (ARM Cortex-M) | התקן היקפי תעשייתי |
| Arduino | Arduino | גשר חיישן/מפעיל בסיסי |
| Uno Q Bridge | Arduino Uno | גשר סריאלי לסוכן |
### כלים + אוטומציה
- **ליבה:** shell, קריאה/כתיבה/עריכת קבצים, פעולות git, חיפוש glob, חיפוש תוכן
- **אינטרנט:** שליטה בדפדפן, web fetch, web search, צילום מסך, מידע תמונה, קריאת PDF
- **אינטגרציות:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** מעטפת כלי Model Context Protocol + סטים של כלים מושהים
- **תזמון:** cron add/remove/update/run, כלי תזמון
- **זיכרון:** recall, store, forget, knowledge, project intel
- **מתקדם:** delegate (סוכן-לסוכן), swarm, החלפת/ניתוב מודל, פעולות אבטחה, פעולות ענן
- **חומרה:** מידע לוח, מפת זיכרון, קריאת זיכרון (מוגבל-תכונה)
### סביבת ריצה + אבטחה
- **רמות אוטונומיה:** ReadOnly, Supervised (ברירת מחדל), Full.
- **ארגז חול:** בידוד סביבת עבודה, חסימת מעבר נתיבים, רשימות היתר לפקודות, נתיבים אסורים, Landlock (Linux), Bubblewrap.
- **הגבלת קצב:** מקסימום פעולות בשעה, מקסימום עלות ביום (ניתן להגדרה).
- **שער אישור:** אישור אינטראקטיבי לפעולות בסיכון בינוני/גבוה.
- **עצירת חירום:** יכולת כיבוי חירום.
- **129+ מבחני אבטחה** ב-CI אוטומטי.
### תפעול + אריזה
- לוח בקרה אינטרנטי מוגש ישירות מה-Gateway.
- תמיכה במנהרות: Cloudflare, Tailscale, ngrok, OpenVPN, פקודה מותאמת.
- מתאם סביבת ריצה Docker להרצה בקונטיינרים.
- CI/CD: בטא (אוטומטי בדחיפה) → יציב (שליחה ידנית) → Docker, crates.io, Scoop, AUR, Homebrew, ציוץ.
- בינאריים מוכנים מראש ל-Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## הגדרות
מינימלי `~/.zeroclaw/config.toml`:
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
מדריך הגדרות מלא: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### הגדרת ערוצים
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### הגדרת מנהרות
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
פרטים: [מדריך ערוצים](docs/reference/api/channels-reference.md) · [מדריך הגדרות](docs/reference/api/config-reference.md)
### תמיכה בסביבת ריצה (נוכחי)
- **`native`** (ברירת מחדל) — הרצת תהליך ישירה, הנתיב המהיר ביותר, אידיאלי לסביבות מהימנות.
- **`docker`** — בידוד קונטיינר מלא, מדיניות אבטחה נאכפת, דורש Docker.
הגדר `runtime.kind = "docker"` לארגז חול מחמיר או בידוד רשת.
## אימות מנוי (OpenAI Codex / Claude Code / Gemini)
ZeroClaw תומך בפרופילי אימות מקוריים למנוי (רב-חשבוני, מוצפן במנוחה).
- קובץ אחסון: `~/.zeroclaw/auth-profiles.json`
- מפתח הצפנה: `~/.zeroclaw/.secret_key`
- פורמט מזהה פרופיל: `<provider>:<profile_name>` (דוגמה: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## סביבת עבודה של הסוכן + מיומנויות
שורש סביבת עבודה: `~/.zeroclaw/workspace/` (ניתן להגדרה דרך ההגדרות).
קבצי פרומפט מוזרקים:
- `IDENTITY.md` — אישיות ותפקיד הסוכן
- `USER.md` — הקשר והעדפות המשתמש
- `MEMORY.md` — עובדות ולקחים לטווח ארוך
- `AGENTS.md` — מוסכמות סשן וכללי אתחול
- `SOUL.md` — זהות ליבה ועקרונות הפעלה
מיומנויות: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` או `SKILL.toml`.
```bash
# List installed skills
zeroclaw skills list
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
# Remove a skill
zeroclaw skills remove my-skill
```
## פקודות CLI
```bash
# Workspace management
zeroclaw onboard # Guided setup wizard
zeroclaw status # Show daemon/agent status
zeroclaw doctor # Run system diagnostics
# Gateway + daemon
zeroclaw gateway # Start gateway server (127.0.0.1:42617)
zeroclaw daemon # Start full autonomous runtime
# Agent
zeroclaw agent # Interactive chat mode
zeroclaw agent -m "message" # Single message mode
# Service management
zeroclaw service install # Install as OS service (launchd/systemd)
zeroclaw service start|stop|restart|status
# Channels
zeroclaw channel list # List configured channels
zeroclaw channel doctor # Check channel health
zeroclaw channel bind-telegram 123456789
# Cron + scheduling
zeroclaw cron list # List scheduled jobs
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Memory
zeroclaw memory list # List memory entries
zeroclaw memory get <key> # Retrieve a memory
zeroclaw memory stats # Memory statistics
# Auth profiles
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Hardware peripherals
zeroclaw hardware discover # Scan for connected devices
zeroclaw peripheral list # List connected peripherals
zeroclaw peripheral flash # Flash firmware to device
# Migration
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell completions
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
מדריך פקודות מלא: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## דרישות מקדימות
<details>
<summary><strong>Windows</strong></summary>
#### נדרש
1. **Visual Studio Build Tools** (מספק את מקשר MSVC ו-Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
במהלך ההתקנה (או דרך Visual Studio Installer), בחר את עומס העבודה **"Desktop development with C++"**.
2. **שרשרת כלים Rust:**
```powershell
winget install Rustlang.Rustup
```
לאחר ההתקנה, פתח טרמינל חדש והרץ `rustup default stable` כדי לוודא ששרשרת הכלים היציבה פעילה.
3. **אמת** ששניהם עובדים:
```powershell
rustc --version
cargo --version
```
#### אופציונלי
- **Docker Desktop** — נדרש רק אם משתמשים ב[סביבת ריצה Docker בארגז חול](#תמיכה-בסביבת-ריצה-נוכחי) (`runtime.kind = "docker"`). התקן דרך `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### נדרש
1. **כלי בנייה:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** התקן Xcode Command Line Tools: `xcode-select --install`
2. **שרשרת כלים Rust:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
ראה [rustup.rs](https://rustup.rs) לפרטים.
3. **אמת** ששניהם עובדים:
```bash
rustc --version
cargo --version
```
#### מתקין בשורה אחת
או דלג על השלבים למעלה והתקן הכל (תלויות מערכת, Rust, ZeroClaw) בפקודה אחת:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### דרישות משאבי קומפילציה
בנייה מקוד מקור דורשת יותר משאבים מהרצת הבינארי המתקבל:
| משאב | מינימום | מומלץ |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **דיסק פנוי** | 6 GB | 10 GB+ |
אם המארח שלך מתחת למינימום, השתמש בבינאריים מוכנים מראש:
```bash
./install.sh --prefer-prebuilt
```
כדי לדרוש התקנת בינארי בלבד ללא חלופת מקור:
```bash
./install.sh --prebuilt-only
```
#### אופציונלי
- **Docker** — נדרש רק אם משתמשים ב[סביבת ריצה Docker בארגז חול](#תמיכה-בסביבת-ריצה-נוכחי) (`runtime.kind = "docker"`). התקן דרך מנהל החבילות שלך או [docker.com](https://docs.docker.com/engine/install/).
> **הערה:** ברירת המחדל `cargo build --release` משתמשת ב-`codegen-units=1` כדי להפחית לחץ קומפילציה שיא. לבנייות מהירות יותר על מכונות חזקות, השתמש ב-`cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### בינאריים מוכנים מראש
נכסי שחרור מפורסמים עבור:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
הורד את הנכסים האחרונים מ:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## תיעוד
<p align="center" dir="rtl">
לתיעוד מפורט, ראה:
</p>
השתמש באלה כשעברת את תהליך ההכניסה ורוצה את המדריך המעמיק יותר.
- [מרכז התיעוד](docs/README.md)
- [הפניה לפקודות](docs/commands-reference.md)
- [הפניה לספקים](docs/providers-reference.md)
- [הפניה לערוצים](docs/channels-reference.md)
- [הפניה לקונפיגורציה](docs/config-reference.md)
- התחל עם [אינדקס התיעוד](docs/README.md) לניווט ו"מה נמצא איפה."
- קרא את [סקירת הארכיטקטורה](docs/architecture.md) למודל המערכת המלא.
- השתמש ב[מדריך ההגדרות](docs/reference/api/config-reference.md) כשאתה צריך כל מפתח ודוגמה.
- הפעל את ה-Gateway לפי הספר עם [מדריך התפעול](docs/ops/operations-runbook.md).
- עקוב אחרי [ZeroClaw Onboard](#התחלה-מהירה) להגדרה מונחית.
- אבחן כשלים נפוצים עם [מדריך פתרון בעיות](docs/ops/troubleshooting.md).
- סקור את [הנחיות האבטחה](docs/security/README.md) לפני חשיפת משהו.
---
### תיעוד מדריכים
## תרומות
- מרכז תיעוד: [docs/README.md](docs/README.md)
- תוכן עניינים מאוחד: [docs/SUMMARY.md](docs/SUMMARY.md)
- מדריך פקודות: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- מדריך הגדרות: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- מדריך ספקים: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- מדריך ערוצים: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- מדריך תפעול: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- פתרון בעיות: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
<p align="center" dir="rtl">
תרומות מוזמנות! אנא קרא את [מדריך התרומות](CONTRIBUTING.md).
</p>
### תיעוד שיתוף פעולה
- מדריך תרומה: [CONTRIBUTING.md](CONTRIBUTING.md)
- מדיניות תהליך PR: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- מדריך תהליך CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- מדריך סוקר: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- מדיניות חשיפת אבטחה: [SECURITY.md](SECURITY.md)
- תבנית תיעוד: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### פריסה + תפעול
- מדריך פריסת רשת: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- מדריך סוכן פרוקסי: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- מדריכי חומרה: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw נבנה עבור ה-smooth crab 🦀, עוזר AI מהיר ויעיל. נבנה על ידי Argenis De La Rosa והקהילה.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## תמוך ב-ZeroClaw
אם ZeroClaw עוזר לעבודה שלך ואתה רוצה לתמוך בפיתוח המתמשך, אתה יכול לתרום כאן:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 תודה מיוחדת
תודה מכל הלב לקהילות ולמוסדות שמעוררים השראה ומניעים את עבודת הקוד הפתוח הזו:
- **Harvard University** — על טיפוח סקרנות אינטלקטואלית ודחיפת גבולות האפשרי.
- **MIT** — על קידום ידע פתוח, קוד פתוח והאמונה שטכנולוגיה צריכה להיות נגישה לכולם.
- **Sundai Club** — על הקהילה, האנרגיה והמאמץ הבלתי פוסק לבנות דברים שחשובים.
- **העולם ומעבר** 🌍✨ — לכל תורם, חולם ובונה שם שהופך קוד פתוח לכוח לטובה. זה בשבילכם.
אנחנו בונים בגלוי כי הרעיונות הטובים ביותר מגיעים מכל מקום. אם אתה קורא את זה, אתה חלק מזה. ברוך הבא. 🦀❤️
## תרומה
חדש ב-ZeroClaw? חפש בעיות עם התווית [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — ראה את [מדריך התרומה](CONTRIBUTING.md#first-time-contributors) שלנו כדי להתחיל. PR של AI/vibe-coded מתקבלים בברכה! 🤖
ראה [CONTRIBUTING.md](CONTRIBUTING.md) ו-[CLA.md](docs/contributing/cla.md). ממש trait, שלח PR:
- מדריך תהליך CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- `Provider` חדש → `src/providers/`
- `Channel` חדש → `src/channels/`
- `Observer` חדש → `src/observability/`
- `Tool` חדש → `src/tools/`
- `Memory` חדש → `src/memory/`
- `Tunnel` חדש → `src/tunnel/`
- `Peripheral` חדש → `src/peripherals/`
- `Skill` חדש → `~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ מאגר רשמי ואזהרת התחזות
**זהו מאגר ZeroClaw הרשמי היחיד:**
> https://github.com/zeroclaw-labs/zeroclaw
כל מאגר, ארגון, דומיין או חבילה אחרים הטוענים להיות "ZeroClaw" או מרמזים על שיוך ל-ZeroClaw Labs הם **לא מורשים ולא מזוהים עם פרויקט זה**. פורקים לא מורשים ידועים ירשמו ב-[TRADEMARK.md](docs/maintainers/trademark.md).
אם אתה נתקל בהתחזות או שימוש לרעה בסימן מסחרי, אנא [פתח issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## רישיון
<p align="center" dir="rtl">
פרויקט זה מורשה ברישיון כפול:
</p>
ZeroClaw מורשה ברישיון כפול לפתיחות מקסימלית והגנה על תורמים:
- MIT License
- Apache License, גרסה 2.0
| רישיון | מקרה שימוש |
|---|---|
| [MIT](LICENSE-MIT) | קוד פתוח, מחקר, אקדמי, שימוש אישי |
| [Apache 2.0](LICENSE-APACHE) | הגנת פטנטים, מוסדי, פריסה מסחרית |
<p align="center" dir="rtl">
ראה [LICENSE-APACHE](LICENSE-APACHE) ו-[LICENSE-MIT](LICENSE-MIT) לפרטים.
</p>
אתה יכול לבחור כל רישיון. **תורמים מעניקים זכויות באופן אוטומטי תחת שניהם** — ראה [CLA.md](docs/contributing/cla.md) להסכם התורם המלא.
### סימן מסחרי
השם והלוגו של **ZeroClaw** הם סימנים מסחריים של ZeroClaw Labs. רישיון זה אינו מעניק הרשאה להשתמש בהם כדי לרמוז על תמיכה או שיוך. ראה [TRADEMARK.md](docs/maintainers/trademark.md) לשימושים מותרים ואסורים.
### הגנות על תורמים
- אתה **שומר על זכויות יוצרים** על תרומותיך
- **הענקת פטנט** (Apache 2.0) מגנה עליך מתביעות פטנט של תורמים אחרים
- תרומותיך **מיוחסות באופן קבוע** בהיסטוריית הקומיטים וב-[NOTICE](NOTICE)
- לא מועברות זכויות סימן מסחרי על ידי תרומה
---
## קהילה
**ZeroClaw** — אפס תקורה. אפס פשרות. פרוס בכל מקום. החלף הכל. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## תורמים
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## נותני חסות
רשימה זו נוצרת מגרף התורמים של GitHub ומתעדכנת אוטומטית.
<p align="center" dir="rtl">
אם ZeroClaw שימושי עבורך, אנא שקול לקנות לנו קפה:
## היסטוריית כוכבים
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — व्यक्तिगत AI सहायक</h1>
<p align="center">
<strong>शून्य ओवरहेड। शून्य समझौता। 100% रस्ट। 100% अज्ञेयवादी।</strong><br>
⚡️ <strong>$10 हार्डवेयर पर <5MB RAM के चलत है: यह OpenClaw से 99% कम मेम और Mac mini से 98% सस्त है!</strong>
<strong>शून्य ओवरहेड। शून्य समझौता। 100% Rust। 100% अज्ञेयवादी।</strong><br>
⚡️ <strong>$10 के हार्डवेयर पर <5MB RAM के चलत है: यह OpenClaw से 99% कम मेम और Mac mini से 98% सस्त है!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Harvard, MIT, और Sundai.Club समुदायों के छात्रों और सदस्यों द्वारा निर्मित।
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw एक व्यक्तिगत AI सहायक है जिसे आप अपने उपकरणों पर चलाते हैं। यह आपको उन चैनलों पर जवाब देता है जो आप पहले से उपयोग करते हैं (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, और अन्य)। इसमें रियल-टाइम नियंत्रण के लिए एक वेब डैशबोर्ड है और यह हार्डवेयर पेरीफेरल (ESP32, STM32, Arduino, Raspberry Pi) से जुड़ सकता है। Gateway केवल कंट्रोल प्लेन है — उत्पाद सहायक है।
## ZeroClaw क्या है?
यदि आप एक व्यक्तिगत, एकल-उपयोगकर्ता सहायक चाहते हैं जो स्थानीय, तेज़ और हमेशा चालू महसूस हो, तो यह है।
ZeroClaw एक हल्का, म्यूटेबल और एक्स्टेंसिबल AI असिस्टेंट इन्फ्रास्ट्रक्चर है जो रस्ट में बनाया गया है। यह विभिन्न LLM प्रदाताओं (Anthropic, OpenAI, Google, Ollama, आदि) को एक एकीकृत इंटरफेस के माध्यम से कनेक्ट करता है और कई चैनलों (Telegram, Matrix, CLI, आदि) का समर्थन करता है।
<p align="center">
<a href="https://zeroclawlabs.ai">वेबसाइट</a> ·
<a href="docs/README.md">दस्तावेज़</a> ·
<a href="docs/architecture.md">आर्किटेक्चर</a> ·
<a href="#त्वरित-शुरुआत">शुरू करें</a> ·
<a href="#openclaw-से-माइग्रेशन">OpenClaw से माइग्रेशन</a> ·
<a href="docs/ops/troubleshooting.md">समस्या निवारण</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### मुख्य विशेषताएं
> **पसंदीदा सेटअप:** अपने टर्मिनल में `zeroclaw onboard` चलाएँ। ZeroClaw Onboard आपको gateway, workspace, channels, और provider सेट करने में कदम-दर-कदम मार्गदर्शन करता है। यह अनुशंसित सेटअप पथ है और macOS, Linux, और Windows (WSL2 के माध्यम से) पर काम करता है। नया इंस्टॉल? यहाँ से शुरू करें: [शुरू करें](#त्वरित-शुरुआत)
- **🦀 रस्ट में लिखा गया**: उच्च प्रदर्शन, मेमोरी सुरक्षा, और शून्य-लागत एब्सट्रैक्शन
- **🔌 प्रदाता-अज्ञेयवादी**: OpenAI, Anthropic, Google Gemini, Ollama, और अन्य का समर्थन
- **📱 बहु-चैनल**: Telegram, Matrix (E2EE के साथ), CLI, और अन्य
- **🧠 प्लगेबल मेमोरी**: SQLite और Markdown बैकएंड
- **🛠️ विस्तार योग्य टूल**: आसानी से कस्टम टूल जोड़ें
- **🔒 सुरक्षा-पहले**: रिवर्स-प्रॉक्सी, गोपनीयता-पहले डिज़ाइन
### सब्सक्रिप्शन ऑथ (OAuth)
---
- **OpenAI Codex** (ChatGPT सब्सक्रिप्शन)
- **Gemini** (Google OAuth)
- **Anthropic** (API key या auth token)
## त्वरित शुरुआत
मॉडल नोट: जबकि कई प्रदाताओं/मॉडलों का समर्थन किया जाता है, सर्वोत्तम अनुभव के लिए अपने पास उपलब्ध सबसे मजबूत नवीनतम पीढ़ी के मॉडल का उपयोग करें। देखें [ऑनबोर्डिंग](#त्वरित-शुरुआत)।
### आवश्यकताएं
मॉडल कॉन्फ़िग + CLI: [प्रदाता संदर्भ](docs/reference/api/providers-reference.md)
ऑथ प्रोफ़ाइल रोटेशन (OAuth बनाम API keys) + फ़ेलओवर: [मॉडल फ़ेलओवर](docs/reference/api/providers-reference.md)
- रस्ट 1.70+
- एक LLM प्रदाता API कुंजी (Anthropic, OpenAI, आदि)
## इंस्टॉल (अनुशंसित)
### इंस्टॉलेशन
रनटाइम: Rust स्थिर टूलचेन। एकल बाइनरी, कोई रनटाइम निर्भरता नहीं।
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### एक-क्लिक बूटस्ट्रैप
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` इंस्टॉल के बाद स्वचालित रूप से चलता है ताकि आपका workspace और provider कॉन्फ़िगर हो सके।
## त्वरित शुरुआत (TL;DR)
पूर्ण शुरुआती गाइड (ऑथ, पेयरिंग, चैनल): [शुरू करें](docs/setup-guides/one-click-bootstrap.md)
```bash
# Install + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Start the gateway (webhook server + web dashboard)
zeroclaw gateway # default: 127.0.0.1:42617
zeroclaw gateway --port 0 # random port (security hardened)
# Talk to the assistant
zeroclaw agent -m "Hello, ZeroClaw!"
# Interactive mode
zeroclaw agent
# Start full autonomous runtime (gateway + channels + cron + hands)
zeroclaw daemon
# Check status
zeroclaw status
# Run diagnostics
zeroclaw doctor
```
अपग्रेड कर रहे हैं? अपडेट के बाद `zeroclaw doctor` चलाएँ।
### स्रोत से (विकास)
```bash
# रिपॉजिटरी क्लोन करें
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# बिल्ड करें
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# चलाएं
cargo run --release
zeroclaw onboard
```
### Docker के साथ
> **विकास फ़ॉलबैक (कोई ग्लोबल इंस्टॉल नहीं):** कमांड के आगे `cargo run --release --` लगाएँ (उदाहरण: `cargo run --release -- status`)।
## OpenClaw से माइग्रेशन
ZeroClaw आपके OpenClaw workspace, मेमोरी, और कॉन्फ़िगरेशन आयात कर सकता है:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Preview what will be migrated (safe, read-only)
zeroclaw migrate openclaw --dry-run
# Run the migration
zeroclaw migrate openclaw
```
---
यह आपकी मेमोरी प्रविष्टियों, workspace फ़ाइलों, और कॉन्फ़िगरेशन को `~/.openclaw/` से `~/.zeroclaw/` में माइग्रेट करता है। कॉन्फ़िग स्वचालित रूप से JSON से TOML में परिवर्तित हो जाता है।
## सुरक्षा डिफ़ॉल्ट (DM एक्सेस)
ZeroClaw वास्तविक मैसेजिंग सतहों से जुड़ता है। इनबाउंड DMs को अविश्वसनीय इनपुट के रूप में मानें।
पूर्ण सुरक्षा गाइड: [SECURITY.md](SECURITY.md)
सभी चैनलों पर डिफ़ॉल्ट व्यवहार:
- **DM पेयरिंग** (डिफ़ॉल्ट): अज्ञात प्रेषकों को एक छोटा पेयरिंग कोड मिलता है और बॉट उनका संदेश प्रोसेस नहीं करता।
- इससे स्वीकृति दें: `zeroclaw pairing approve <channel> <code>` (फिर प्रेषक स्थानीय अनुमति सूची में जोड़ा जाता है)।
- सार्वजनिक इनबाउंड DMs के लिए `config.toml` में स्पष्ट ऑप्ट-इन आवश्यक है।
- जोखिमपूर्ण या गलत कॉन्फ़िगर DM नीतियों को सामने लाने के लिए `zeroclaw doctor` चलाएँ।
**स्वायत्तता स्तर:**
| स्तर | व्यवहार |
|-------|----------|
| `ReadOnly` | एजेंट देख सकता है लेकिन कार्य नहीं कर सकता |
| `Supervised` (डिफ़ॉल्ट) | एजेंट मध्यम/उच्च जोखिम संचालन के लिए स्वीकृति के साथ कार्य करता है |
| `Full` | एजेंट नीति सीमाओं के भीतर स्वायत्त रूप से कार्य करता है |
**सैंडबॉक्सिंग परतें:** workspace आइसोलेशन, पथ ट्रैवर्सल ब्लॉकिंग, कमांड अनुमति सूची, प्रतिबंधित पथ (`/etc`, `/root`, `~/.ssh`), दर सीमित करना (अधिकतम कार्य/घंटा, लागत/दिन सीमा)।
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 घोषणाएँ
महत्वपूर्ण सूचनाओं (ब्रेकिंग बदलाव, सुरक्षा सलाह, रखरखाव विंडो, और रिलीज़ ब्लॉकर) के लिए इस बोर्ड का उपयोग करें।
| तिथि (UTC) | स्तर | सूचना | कार्रवाई |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _गंभीर_ | हम `openagen/zeroclaw`, `zeroclaw.org` या `zeroclaw.net` से **संबद्ध नहीं** हैं। `zeroclaw.org` और `zeroclaw.net` डोमेन वर्तमान में `openagen/zeroclaw` फ़ोर्क की ओर इशारा करते हैं, और वह डोमेन/रिपॉजिटरी हमारी आधिकारिक वेबसाइट/प्रोजेक्ट का रूप धारण कर रहे हैं। | उन स्रोतों से जानकारी, बाइनरी, फंडरेजिंग, या घोषणाओं पर भरोसा न करें। केवल [यह रिपॉजिटरी](https://github.com/zeroclaw-labs/zeroclaw) और हमारे सत्यापित सोशल अकाउंट्स का उपयोग करें। |
| 2026-02-21 | _महत्वपूर्ण_ | हमारी आधिकारिक वेबसाइट अब लाइव है: [zeroclawlabs.ai](https://zeroclawlabs.ai)। लॉन्च की तैयारी करते समय आपके धैर्य के लिए धन्यवाद। हम अभी भी प्रतिरूपण प्रयास देख रहे हैं, इसलिए किसी भी निवेश या फंडरेजिंग गतिविधि में **शामिल न हों** जो ZeroClaw नाम का दावा करती है जब तक कि यह हमारे आधिकारिक चैनलों के माध्यम से प्रकाशित न हो। | [यह रिपॉजिटरी](https://github.com/zeroclaw-labs/zeroclaw) को सत्य के एकमात्र स्रोत के रूप में उपयोग करें। आधिकारिक अपडेट के लिए [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs), और [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) को फ़ॉलो करें। |
| 2026-02-19 | _महत्वपूर्ण_ | Anthropic ने 2026-02-19 को Authentication and Credential Use शर्तें अपडेट कीं। Claude Code OAuth टोकन (Free, Pro, Max) विशेष रूप से Claude Code और Claude.ai के लिए हैं; Claude Free/Pro/Max से OAuth टोकन का किसी अन्य उत्पाद, उपकरण, या सेवा (Agent SDK सहित) में उपयोग अनुमत नहीं है और उपभोक्ता सेवा की शर्तों का उल्लंघन हो सकता है। | संभावित नुकसान को रोकने के लिए कृपया Claude Code OAuth एकीकरण से अस्थायी रूप से बचें। मूल खंड: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use)। |
## मुख्य विशेषताएँ
- **डिफ़ॉल्ट रूप से हल्का रनटाइम** — सामान्य CLI और स्थिति वर्कफ़्लो रिलीज़ बिल्ड पर कुछ-मेगाबाइट मेमोरी एन्वेलप में चलते हैं।
- **लागत-कुशल डिप्लॉयमेंट** — $10 बोर्ड और छोटे क्लाउड इंस्टेंस के लिए डिज़ाइन किया गया, कोई भारी रनटाइम निर्भरता नहीं।
- **तेज़ कोल्ड स्टार्ट** — एकल-बाइनरी Rust रनटाइम कमांड और डेमन स्टार्टअप को लगभग तत्काल रखता है।
- **पोर्टेबल आर्किटेक्चर** — ARM, x86, और RISC-V पर एक बाइनरी जिसमें स्वैपेबल प्रदाता/चैनल/उपकरण हैं।
- **लोकल-फर्स्ट Gateway** — सेशन, चैनल, टूल, cron, SOPs, और इवेंट के लिए एकल कंट्रोल प्लेन।
- **मल्टी-चैनल इनबॉक्स** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket, और अन्य।
- **मल्टी-एजेंट ऑर्केस्ट्रेशन (Hands)** — स्वायत्त एजेंट स्वार्म जो शेड्यूल पर चलते हैं और समय के साथ स्मार्ट होते जाते हैं।
- **मानक संचालन प्रक्रियाएँ (SOPs)** — MQTT, webhook, cron, और पेरीफेरल ट्रिगर के साथ इवेंट-ड्रिवन वर्कफ़्लो ऑटोमेशन।
- **वेब डैशबोर्ड** — React 19 + Vite वेब UI जिसमें रियल-टाइम चैट, मेमोरी ब्राउज़र, कॉन्फ़िग एडिटर, cron मैनेजर, और टूल इंस्पेक्टर है।
- **हार्डवेयर पेरीफेरल**`Peripheral` trait के माध्यम से ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO।
- **प्रथम-श्रेणी उपकरण** — shell, फ़ाइल I/O, browser, git, वेब fetch/search, MCP, Jira, Notion, Google Workspace, और 70+ अन्य।
- **लाइफसाइकल हुक** — हर चरण पर LLM कॉल, टूल निष्पादन, और संदेशों को इंटरसेप्ट और संशोधित करें।
- **स्किल प्लेटफ़ॉर्म** — बंडल, समुदाय, और workspace स्किल जिनमें सुरक्षा ऑडिटिंग है।
- **टनल सपोर्ट** — रिमोट एक्सेस के लिए Cloudflare, Tailscale, ngrok, OpenVPN, और कस्टम टनल।
### टीमें ZeroClaw क्यों चुनती हैं
- **डिफ़ॉल्ट रूप से हल्का:** छोटी Rust बाइनरी, तेज़ स्टार्टअप, कम मेमोरी फुटप्रिंट।
- **डिज़ाइन से सुरक्षित:** पेयरिंग, सख्त सैंडबॉक्सिंग, स्पष्ट अनुमति सूचियाँ, workspace स्कोपिंग।
- **पूरी तरह से स्वैपेबल:** कोर सिस्टम traits हैं (providers, channels, tools, memory, tunnels)।
- **कोई लॉक-इन नहीं:** OpenAI-संगत प्रदाता समर्थन + प्लगेबल कस्टम एंडपॉइंट।
## बेंचमार्क स्नैपशॉट (ZeroClaw बनाम OpenClaw, प्रतिलिपि योग्य)
स्थानीय मशीन त्वरित बेंचमार्क (macOS arm64, फ़रवरी 2026) 0.8GHz एज हार्डवेयर के लिए सामान्यीकृत।
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **भाषा** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **स्टार्टअप (0.8GHz कोर)** | > 500s | > 30s | < 1s | **< 10ms** |
| **बाइनरी आकार** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **लागत** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **कोई भी हार्डवेयर $10** |
> नोट: ZeroClaw परिणाम `/usr/bin/time -l` का उपयोग करके रिलीज़ बिल्ड पर मापे गए हैं। OpenClaw को Node.js रनटाइम की आवश्यकता है (आमतौर पर ~390MB अतिरिक्त मेमोरी ओवरहेड), जबकि NanoBot को Python रनटाइम की आवश्यकता है। PicoClaw और ZeroClaw स्टैटिक बाइनरी हैं। ऊपर दिए गए RAM आँकड़े रनटाइम मेमोरी हैं; बिल्ड-टाइम कंपाइलेशन आवश्यकताएँ अधिक हैं।
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### प्रतिलिपि योग्य स्थानीय माप
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## अब तक हमने जो कुछ बनाया है
### कोर प्लेटफ़ॉर्म
- Gateway HTTP/WS/SSE कंट्रोल प्लेन जिसमें सेशन, प्रेज़ेंस, कॉन्फ़िग, cron, webhooks, वेब डैशबोर्ड, और पेयरिंग है।
- CLI सरफेस: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`
- एजेंट ऑर्केस्ट्रेशन लूप जिसमें टूल डिस्पैच, प्रॉम्प्ट निर्माण, संदेश वर्गीकरण, और मेमोरी लोडिंग है।
- सुरक्षा नीति प्रवर्तन, स्वायत्तता स्तर, और अनुमोदन गेटिंग के साथ सेशन मॉडल।
- 20+ LLM बैकएंड पर फ़ेलओवर, रिट्राई, और मॉडल रूटिंग के साथ रेज़िलिएंट प्रदाता रैपर।
### चैनल
चैनल: WhatsApp (नेटिव), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk।
फ़ीचर-गेटेड: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`)।
### वेब डैशबोर्ड
React 19 + Vite 6 + Tailwind CSS 4 वेब डैशबोर्ड सीधे Gateway से सर्व किया जाता है:
- **डैशबोर्ड** — सिस्टम अवलोकन, स्वास्थ्य स्थिति, अपटाइम, लागत ट्रैकिंग
- **एजेंट चैट** — एजेंट के साथ इंटरैक्टिव चैट
- **मेमोरी** — मेमोरी प्रविष्टियाँ ब्राउज़ और प्रबंधित करें
- **कॉन्फ़िग** — कॉन्फ़िगरेशन देखें और संपादित करें
- **Cron** — शेड्यूल किए गए कार्य प्रबंधित करें
- **टूल्स** — उपलब्ध उपकरण ब्राउज़ करें
- **लॉग्स** — एजेंट गतिविधि लॉग देखें
- **लागत** — टोकन उपयोग और लागत ट्रैकिंग
- **डॉक्टर** — सिस्टम स्वास्थ्य डायग्नोस्टिक्स
- **इंटीग्रेशन** — इंटीग्रेशन स्थिति और सेटअप
- **पेयरिंग** — डिवाइस पेयरिंग प्रबंधन
### फ़र्मवेयर लक्ष्य
| लक्ष्य | प्लेटफ़ॉर्म | उद्देश्य |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | वायरलेस पेरीफेरल एजेंट |
| ESP32-UI | ESP32 + Display | विज़ुअल इंटरफ़ेस वाला एजेंट |
| STM32 Nucleo | STM32 (ARM Cortex-M) | औद्योगिक पेरीफेरल |
| Arduino | Arduino | बेसिक सेंसर/एक्चुएटर ब्रिज |
| Uno Q Bridge | Arduino Uno | एजेंट के लिए सीरियल ब्रिज |
### उपकरण + ऑटोमेशन
- **कोर:** shell, फ़ाइल read/write/edit, git ऑपरेशन, glob search, content search
- **वेब:** ब्राउज़र नियंत्रण, web fetch, web search, screenshot, image info, PDF read
- **इंटीग्रेशन:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol टूल रैपर + डिफ़र्ड टूल सेट
- **शेड्यूलिंग:** cron add/remove/update/run, schedule tool
- **मेमोरी:** recall, store, forget, knowledge, project intel
- **उन्नत:** delegate (एजेंट-टू-एजेंट), swarm, model switch/routing, security ops, cloud ops
- **हार्डवेयर:** board info, memory map, memory read (फ़ीचर-गेटेड)
### रनटाइम + सुरक्षा
- **स्वायत्तता स्तर:** ReadOnly, Supervised (डिफ़ॉल्ट), Full।
- **सैंडबॉक्सिंग:** workspace आइसोलेशन, पथ ट्रैवर्सल ब्लॉकिंग, कमांड अनुमति सूचियाँ, प्रतिबंधित पथ, Landlock (Linux), Bubblewrap।
- **दर सीमित:** प्रति घंटे अधिकतम कार्य, प्रति दिन अधिकतम लागत (कॉन्फ़िगर योग्य)।
- **अनुमोदन गेटिंग:** मध्यम/उच्च जोखिम संचालन के लिए इंटरैक्टिव अनुमोदन।
- **आपातकालीन रोक:** आपातकालीन शटडाउन क्षमता।
- **129+ सुरक्षा परीक्षण** स्वचालित CI में।
### ऑप्स + पैकेजिंग
- वेब डैशबोर्ड सीधे Gateway से सर्व किया जाता है।
- टनल सपोर्ट: Cloudflare, Tailscale, ngrok, OpenVPN, कस्टम कमांड।
- कंटेनराइज़्ड निष्पादन के लिए Docker रनटाइम एडेप्टर।
- CI/CD: बीटा (पुश पर ऑटो) → स्टेबल (मैनुअल डिस्पैच) → Docker, crates.io, Scoop, AUR, Homebrew, ट्वीट।
- Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64) के लिए प्री-बिल्ट बाइनरी।
## कॉन्फ़िगरेशन
ZeroClaw एक YAML कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है। डिफ़ॉल्ट रूप से, यह `config.yaml` देखता है।
न्यूनतम `~/.zeroclaw/config.toml`:
```yaml
# डिफ़ॉल्ट प्रदाता
provider: anthropic
# प्रदाता कॉन्फ़िगरेशन
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# मेमोरी कॉन्फ़िगरेशन
memory:
backend: sqlite
path: data/memory.db
# चैनल कॉन्फ़िगरेशन
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
पूर्ण कॉन्फ़िगरेशन संदर्भ: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)।
## दस्तावेज़ीकरण
### चैनल कॉन्फ़िगरेशन
विस्तृत दस्तावेज़ीकरण के लिए, देखें:
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
- [दस्तावेज़ीकरण हब](docs/README.md)
- [कमांड संदर्भ](docs/commands-reference.md)
- [प्रदाता संदर्भ](docs/providers-reference.md)
- [चैनल संदर्भ](docs/channels-reference.md)
- [कॉन्फ़िगरेशन संदर्भ](docs/config-reference.md)
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
---
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### टनल कॉन्फ़िगरेशन
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
विवरण: [चैनल संदर्भ](docs/reference/api/channels-reference.md) · [कॉन्फ़िग संदर्भ](docs/reference/api/config-reference.md)
### रनटाइम सपोर्ट (वर्तमान)
- **`native`** (डिफ़ॉल्ट) — सीधा प्रोसेस निष्पादन, सबसे तेज़ पथ, विश्वसनीय वातावरण के लिए आदर्श।
- **`docker`** — पूर्ण कंटेनर आइसोलेशन, लागू सुरक्षा नीतियाँ, Docker आवश्यक।
सख्त सैंडबॉक्सिंग या नेटवर्क आइसोलेशन के लिए `runtime.kind = "docker"` सेट करें।
## सब्सक्रिप्शन ऑथ (OpenAI Codex / Claude Code / Gemini)
ZeroClaw सब्सक्रिप्शन-नेटिव ऑथ प्रोफ़ाइल का समर्थन करता है (मल्टी-अकाउंट, रेस्ट पर एन्क्रिप्टेड)।
- स्टोर फ़ाइल: `~/.zeroclaw/auth-profiles.json`
- एन्क्रिप्शन कुंजी: `~/.zeroclaw/.secret_key`
- प्रोफ़ाइल id फ़ॉर्मेट: `<provider>:<profile_name>` (उदाहरण: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## एजेंट workspace + स्किल
Workspace रूट: `~/.zeroclaw/workspace/` (कॉन्फ़िग के माध्यम से कॉन्फ़िगर करने योग्य)।
इंजेक्ट किए गए प्रॉम्प्ट फ़ाइलें:
- `IDENTITY.md` — एजेंट का व्यक्तित्व और भूमिका
- `USER.md` — उपयोगकर्ता संदर्भ और प्राथमिकताएँ
- `MEMORY.md` — दीर्घकालिक तथ्य और सबक
- `AGENTS.md` — सेशन सम्मेलन और इनिशियलाइज़ेशन नियम
- `SOUL.md` — कोर पहचान और संचालन सिद्धांत
स्किल: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` या `SKILL.toml`
```bash
# List installed skills
zeroclaw skills list
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
# Remove a skill
zeroclaw skills remove my-skill
```
## CLI कमांड
```bash
# Workspace management
zeroclaw onboard # Guided setup wizard
zeroclaw status # Show daemon/agent status
zeroclaw doctor # Run system diagnostics
# Gateway + daemon
zeroclaw gateway # Start gateway server (127.0.0.1:42617)
zeroclaw daemon # Start full autonomous runtime
# Agent
zeroclaw agent # Interactive chat mode
zeroclaw agent -m "message" # Single message mode
# Service management
zeroclaw service install # Install as OS service (launchd/systemd)
zeroclaw service start|stop|restart|status
# Channels
zeroclaw channel list # List configured channels
zeroclaw channel doctor # Check channel health
zeroclaw channel bind-telegram 123456789
# Cron + scheduling
zeroclaw cron list # List scheduled jobs
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Memory
zeroclaw memory list # List memory entries
zeroclaw memory get <key> # Retrieve a memory
zeroclaw memory stats # Memory statistics
# Auth profiles
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Hardware peripherals
zeroclaw hardware discover # Scan for connected devices
zeroclaw peripheral list # List connected peripherals
zeroclaw peripheral flash # Flash firmware to device
# Migration
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell completions
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
पूर्ण कमांड संदर्भ: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## पूर्वापेक्षाएँ
<details>
<summary><strong>Windows</strong></summary>
#### आवश्यक
1. **Visual Studio Build Tools** (MSVC लिंकर और Windows SDK प्रदान करता है):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
इंस्टॉलेशन के दौरान (या Visual Studio Installer के माध्यम से), **"Desktop development with C++"** वर्कलोड चुनें।
2. **Rust टूलचेन:**
```powershell
winget install Rustlang.Rustup
```
इंस्टॉलेशन के बाद, एक नया टर्मिनल खोलें और `rustup default stable` चलाएँ ताकि स्थिर टूलचेन सक्रिय हो।
3. **सत्यापित करें** कि दोनों काम कर रहे हैं:
```powershell
rustc --version
cargo --version
```
#### वैकल्पिक
- **Docker Desktop** — केवल तभी आवश्यक जब [Docker सैंडबॉक्स्ड रनटाइम](#रनटाइम-सपोर्ट-वर्तमान) (`runtime.kind = "docker"`) का उपयोग कर रहे हों। `winget install Docker.DockerDesktop` से इंस्टॉल करें।
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### आवश्यक
1. **बिल्ड एसेंशियल:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Xcode Command Line Tools इंस्टॉल करें: `xcode-select --install`
2. **Rust टूलचेन:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
विवरण के लिए [rustup.rs](https://rustup.rs) देखें।
3. **सत्यापित करें** कि दोनों काम कर रहे हैं:
```bash
rustc --version
cargo --version
```
#### एक-पंक्ति इंस्टॉलर
या ऊपर के चरणों को छोड़ें और एक ही कमांड में सब कुछ (सिस्टम deps, Rust, ZeroClaw) इंस्टॉल करें:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### कंपाइलेशन संसाधन आवश्यकताएँ
स्रोत से बिल्ड करने के लिए परिणामी बाइनरी चलाने से अधिक संसाधनों की आवश्यकता होती है:
| संसाधन | न्यूनतम | अनुशंसित |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **खाली डिस्क** | 6 GB | 10 GB+ |
यदि आपका होस्ट न्यूनतम से नीचे है, तो प्री-बिल्ट बाइनरी का उपयोग करें:
```bash
./install.sh --prefer-prebuilt
```
बिना सोर्स फ़ॉलबैक के केवल बाइनरी इंस्टॉल की आवश्यकता के लिए:
```bash
./install.sh --prebuilt-only
```
#### वैकल्पिक
- **Docker** — केवल तभी आवश्यक जब [Docker सैंडबॉक्स्ड रनटाइम](#रनटाइम-सपोर्ट-वर्तमान) (`runtime.kind = "docker"`) का उपयोग कर रहे हों। अपने पैकेज मैनेजर या [docker.com](https://docs.docker.com/engine/install/) से इंस्टॉल करें।
> **नोट:** डिफ़ॉल्ट `cargo build --release` पीक कंपाइल प्रेशर कम करने के लिए `codegen-units=1` का उपयोग करता है। शक्तिशाली मशीनों पर तेज़ बिल्ड के लिए, `cargo build --profile release-fast` का उपयोग करें।
</details>
<!-- markdownlint-enable MD001 MD024 -->
### प्री-बिल्ट बाइनरी
रिलीज़ एसेट इसके लिए प्रकाशित किए जाते हैं:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
नवीनतम एसेट यहाँ से डाउनलोड करें:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## दस्तावेज़
इनका उपयोग तब करें जब आप ऑनबोर्डिंग प्रवाह से आगे हों और गहरा संदर्भ चाहें।
- नेविगेशन और "क्या कहाँ है" के लिए [दस्तावेज़ सूचकांक](docs/README.md) से शुरू करें।
- पूर्ण सिस्टम मॉडल के लिए [आर्किटेक्चर अवलोकन](docs/architecture.md) पढ़ें।
- जब आपको हर कुंजी और उदाहरण चाहिए तो [कॉन्फ़िगरेशन संदर्भ](docs/reference/api/config-reference.md) का उपयोग करें।
- [संचालन रनबुक](docs/ops/operations-runbook.md) के अनुसार Gateway चलाएँ।
- मार्गदर्शित सेटअप के लिए [ZeroClaw Onboard](#त्वरित-शुरुआत) का पालन करें।
- [समस्या निवारण गाइड](docs/ops/troubleshooting.md) से सामान्य विफलताओं का निदान करें।
- कुछ भी एक्सपोज़ करने से पहले [सुरक्षा मार्गदर्शन](docs/security/README.md) की समीक्षा करें।
### संदर्भ दस्तावेज़
- दस्तावेज़ हब: [docs/README.md](docs/README.md)
- एकीकृत दस्तावेज़ TOC: [docs/SUMMARY.md](docs/SUMMARY.md)
- कमांड संदर्भ: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- कॉन्फ़िग संदर्भ: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- प्रदाता संदर्भ: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- चैनल संदर्भ: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- संचालन रनबुक: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- समस्या निवारण: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### सहयोग दस्तावेज़
- योगदान गाइड: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR वर्कफ़्लो नीति: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI वर्कफ़्लो गाइड: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- समीक्षक प्लेबुक: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- सुरक्षा प्रकटीकरण नीति: [SECURITY.md](SECURITY.md)
- दस्तावेज़ टेम्पलेट: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### डिप्लॉयमेंट + संचालन
- नेटवर्क डिप्लॉयमेंट गाइड: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- प्रॉक्सी एजेंट प्लेबुक: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- हार्डवेयर गाइड: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw को smooth crab 🦀 के लिए बनाया गया था, एक तेज़ और कुशल AI सहायक। Argenis De La Rosa और समुदाय द्वारा निर्मित।
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## ZeroClaw का समर्थन करें
यदि ZeroClaw आपके काम में मदद करता है और आप चल रहे विकास का समर्थन करना चाहते हैं, तो आप यहाँ दान कर सकते हैं:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 विशेष धन्यवाद
उन समुदायों और संस्थानों को हृदय से धन्यवाद जो इस ओपन-सोर्स कार्य को प्रेरित और ईंधन देते हैं:
- **Harvard University** — बौद्धिक जिज्ञासा को बढ़ावा देने और संभावनाओं की सीमाओं को आगे बढ़ाने के लिए।
- **MIT** — खुले ज्ञान, ओपन सोर्स, और इस विश्वास का समर्थन करने के लिए कि तकनीक सभी के लिए सुलभ होनी चाहिए।
- **Sundai Club** — समुदाय, ऊर्जा, और महत्वपूर्ण चीज़ें बनाने के अथक प्रयास के लिए।
- **दुनिया और उससे परे** 🌍✨ — हर योगदानकर्ता, सपने देखने वाले, और बिल्डर के लिए जो ओपन सोर्स को भलाई की शक्ति बना रहे हैं। यह आपके लिए है।
हम खुले में बना रहे हैं क्योंकि सबसे अच्छे विचार हर जगह से आते हैं। यदि आप यह पढ़ रहे हैं, तो आप इसका हिस्सा हैं। स्वागत है। 🦀❤️
## योगदान
योगदान का स्वागत है! कृपया [योगदान गाइड](CONTRIBUTING.md) पढ़ें।
ZeroClaw में नए हैं? [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) लेबल वाले मुद्दों की तलाश करें — शुरू करने का तरीका जानने के लिए हमारा [योगदान गाइड](CONTRIBUTING.md#first-time-contributors) देखें। AI/vibe-coded PRs का स्वागत है! 🤖
[CONTRIBUTING.md](CONTRIBUTING.md) और [CLA.md](docs/contributing/cla.md) देखें। एक trait लागू करें, PR सबमिट करें:
- CI वर्कफ़्लो गाइड: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- नया `Provider``src/providers/`
- नया `Channel``src/channels/`
- नया `Observer``src/observability/`
- नया `Tool``src/tools/`
- नया `Memory``src/memory/`
- नया `Tunnel``src/tunnel/`
- नया `Peripheral``src/peripherals/`
- नया `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ आधिकारिक रिपॉजिटरी और प्रतिरूपण चेतावनी
**यह एकमात्र आधिकारिक ZeroClaw रिपॉजिटरी है:**
> https://github.com/zeroclaw-labs/zeroclaw
कोई भी अन्य रिपॉजिटरी, संगठन, डोमेन, या पैकेज जो "ZeroClaw" होने का दावा करता है या ZeroClaw Labs से संबद्धता का संकेत देता है, **अनधिकृत है और इस प्रोजेक्ट से संबद्ध नहीं है**। ज्ञात अनधिकृत फ़ोर्क [TRADEMARK.md](docs/maintainers/trademark.md) में सूचीबद्ध किए जाएँगे।
यदि आप प्रतिरूपण या ट्रेडमार्क दुरुपयोग का सामना करते हैं, तो कृपया [एक इश्यू खोलें](https://github.com/zeroclaw-labs/zeroclaw/issues)।
---
## लाइसेंस
यह प्रोजेक्ट दोहरे लाइसेंस प्राप्त है:
ZeroClaw अधिकतम खुलेपन और योगदानकर्ता सुरक्षा के लिए दोहरे-लाइसेंस प्राप्त है:
- MIT लाइसेंस
- Apache लाइसेंस, संस्करण 2.0
| लाइसेंस | उपयोग का मामला |
|---|---|
| [MIT](LICENSE-MIT) | ओपन-सोर्स, अनुसंधान, अकादमिक, व्यक्तिगत उपयोग |
| [Apache 2.0](LICENSE-APACHE) | पेटेंट सुरक्षा, संस्थागत, वाणिज्यिक डिप्लॉयमेंट |
विवरण के लिए [LICENSE-APACHE](LICENSE-APACHE) और [LICENSE-MIT](LICENSE-MIT) देखें।
आप कोई भी लाइसेंस चुन सकते हैं। **योगदानकर्ता स्वचालित रूप से दोनों के तहत अधिकार प्रदान करते हैं** — पूर्ण योगदानकर्ता समझौते के लिए [CLA.md](docs/contributing/cla.md) देखें।
### ट्रेडमार्क
**ZeroClaw** नाम और लोगो ZeroClaw Labs के ट्रेडमार्क हैं। यह लाइसेंस समर्थन या संबद्धता का संकेत देने के लिए इनका उपयोग करने की अनुमति नहीं देता। अनुमत और निषिद्ध उपयोग के लिए [TRADEMARK.md](docs/maintainers/trademark.md) देखें।
### योगदानकर्ता सुरक्षा
- आप अपने योगदान का **कॉपीराइट बनाए रखते हैं**
- **पेटेंट अनुदान** (Apache 2.0) आपको अन्य योगदानकर्ताओं द्वारा पेटेंट दावों से बचाता है
- आपके योगदान कमिट इतिहास और [NOTICE](NOTICE) में **स्थायी रूप से श्रेयित** हैं
- योगदान करने से कोई ट्रेडमार्क अधिकार स्थानांतरित नहीं होते
---
## समुदाय
**ZeroClaw** — शून्य ओवरहेड। शून्य समझौता। कहीं भी डिप्लॉय करें। कुछ भी स्वैप करें। 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## योगदानकर्ता
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## प्रायोजक
यह सूची GitHub योगदानकर्ता ग्राफ़ से उत्पन्न होती है और स्वचालित रूप से अपडेट होती है।
यदि ZeroClaw आपके लिए उपयोगी है, तो कृपया हमें एक कॉफी खरीदने पर विचार करें:
## स्टार इतिहास
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Szemelyes MI Asszisztens</h1>
<p align="center">
<strong>Nulla többletköltség. Nulla kompromisszum. 100% Rust. 100% Agnosztikus.</strong><br>
⚡️ <strong>$10-es hardveren fut <5MB RAM-mal: Ez 99%-kal kevesebb memória, mint az OpenClaw és 98%-kal olcsóbb, mint egy Mac mini!</strong>
<strong>Nulla terheles. Nulla kompromisszum. 100% Rust. 100% Agnosztikus.</strong><br>
⚡️ <strong>$10-os hardveren fut <5MB RAM-mal: Ez 99%-kal kevesebb memoria, mint az OpenClaw es 98%-kal olcsobb, mint egy Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
A Harvard, MIT es Sundai.Club kozossegek diakjai es tagjai epitettek.
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
A ZeroClaw egy szemelyes MI asszisztens, amelyet a sajat eszkozeiden futtathatsz. Valaszol a mar hasznalt csatornaidon (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work es meg tobb). Rendelkezik webes vezerlopulttal valos ideju iranyitashoz, es csatlakoztathat hardver periferiakhoz (ESP32, STM32, Arduino, Raspberry Pi). A Gateway csupan a vezerlesi sik — a termek maga az asszisztens.
## Mi az a ZeroClaw?
Ha szemelyes, egyfelhasznalos asszisztenst szeretnel, ami lokalis, gyors es mindig elerheto, ez az.
A ZeroClaw egy könnyűsúlyú, változtatható és bővíthető AI asszisztens infrastruktúra, amely Rust nyelven készült. Különböző LLM szolgáltatókat (Anthropic, OpenAI, Google, Ollama stb.) köt össze egy egységes felületen keresztül, és több csatornát támogat (Telegram, Matrix, CLI stb.).
<p align="center">
<a href="https://zeroclawlabs.ai">Weboldal</a> ·
<a href="docs/README.md">Dokumentacio</a> ·
<a href="docs/architecture.md">Architektura</a> ·
<a href="#gyors-inditas-tldr">Kezdes</a> ·
<a href="#atallas-openclawrol">Atallas OpenClawrol</a> ·
<a href="docs/ops/troubleshooting.md">Hibaelharitas</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Fő jellemzők
> **Ajanlott beallitas:** futtasd a `zeroclaw onboard` parancsot a terminalban. A ZeroClaw Onboard lepesrol lepesre vegigvezet a gateway, munkater, csatornak es szolgaltato beallitasan. Ez az ajanlott beallitasi ut, es mukodik macOS-en, Linuxon es Windowson (WSL2-n keresztul). Uj telepites? Kezdd itt: [Kezdes](#gyors-inditas-tldr)
- **🦀 Rust nyelven írva**: Magas teljesítmény, memória biztonság és null költségű absztrakciók
- **🔌 Szolgáltató-agnosztikus**: OpenAI, Anthropic, Google Gemini, Ollama és mások támogatása
- **📱 Többcsatornás**: Telegram, Matrix (E2EE-vel), CLI és mások
- **🧠 Cserélhető memória**: SQLite és Markdown backendek
- **🛠️ Bővíthető eszközök**: Egyszerűen adjon hozzá egyedi eszközöket
- **🔒 Biztonság először**: Fordított proxy, adatvédelem-elsődleges tervezés
### Elofizetes hitelesites (OAuth)
---
- **OpenAI Codex** (ChatGPT elofizetes)
- **Gemini** (Google OAuth)
- **Anthropic** (API kulcs vagy hitelesitesi token)
## Gyors Kezdés
Modell megjegyzes: bar sok szolgaltato/modell tamogatott, a legjobb elmeny erdekeben hasznald a legerosebb, legujabb generacios modellt. Lasd [Onboarding](#gyors-inditas-tldr).
### Követelmények
Modellek konfiguracio + CLI: [Szolgaltatoi referencia](docs/reference/api/providers-reference.md)
Auth profil rotacio (OAuth vs API kulcsok) + failover: [Modell failover](docs/reference/api/providers-reference.md)
- Rust 1.70+
- Egy LLM szolgáltató API kulcs (Anthropic, OpenAI stb.)
## Telepites (ajanlott)
### Telepítés
Futtato kornyezet: Rust stable toolchain. Egyetlen binaris, nincs futtatasi ideju fuggoseg.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Egy kattintasos telepites
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
A `zeroclaw onboard` automatikusan lefut a telepites utan a munkater es szolgaltato konfiguralasakor.
## Gyors inditas (TL;DR)
Teljes kezdo utmutato (hitelesites, parositas, csatornak): [Kezdes](docs/setup-guides/one-click-bootstrap.md)
```bash
# Telepites + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Gateway inditasa (webhook szerver + webes vezerlopult)
zeroclaw gateway # alapertelmezett: 127.0.0.1:42617
zeroclaw gateway --port 0 # veletlenszeru port (biztonsagi szilarditas)
# Beszelgess az asszisztenssel
zeroclaw agent -m "Hello, ZeroClaw!"
# Interaktiv mod
zeroclaw agent
# Teljes autonom futtatas inditasa (gateway + csatornak + cron + hands)
zeroclaw daemon
# Allapot ellenorzes
zeroclaw status
# Diagnosztika futtatasa
zeroclaw doctor
```
Frissites? Futtasd a `zeroclaw doctor` parancsot a frissites utan.
### Forrasbol (fejlesztes)
```bash
# Klónozza a repositoryt
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Építés
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Futtatás
cargo run --release
zeroclaw onboard
```
### Docker-rel
> **Fejlesztoi alternativa (globalis telepites nelkul):** a parancsokat prefixeld `cargo run --release --`-vel (pelda: `cargo run --release -- status`).
## Atallas OpenClawrol
A ZeroClaw importalhatja az OpenClaw munkateret, memoriat es konfiguraciot:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Elonezet az attelepitendo adatokrol (biztonsagos, csak olvasható)
zeroclaw migrate openclaw --dry-run
# Migracio futtatasa
zeroclaw migrate openclaw
```
---
Ez migralja a memoriabejegyzeseket, munkater fajlokat es konfiguraciot a `~/.openclaw/` konyvtarbol a `~/.zeroclaw/` konyvtarba. A konfiguracio automatikusan JSON-bol TOML-ra konvertalodik.
## Konfiguráció
## Biztonsagi alapertelmezesek (DM hozzaferes)
A ZeroClaw egy YAML konfigurációs fájlt használ. Alapértelmezés szerint a `config.yaml` fájlt keresi.
A ZeroClaw valos uzenetfeluletekkez csatlakozik. Kezeld a bejovo DM-eket nem megbizhato bemenetekkent.
```yaml
# Alapértelmezett szolgáltató
provider: anthropic
Teljes biztonsagi utmutato: [SECURITY.md](SECURITY.md)
# Szolgáltató konfiguráció
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
Alapertelmezett viselkedes minden csatornan:
# Memória konfiguráció
memory:
backend: sqlite
path: data/memory.db
- **DM parositas** (alapertelmezett): az ismeretlen feladok rovid parosito kodot kapnak, es a bot nem dolgozza fel az uzenetuket.
- Jovahagy paranccsal: `zeroclaw pairing approve <channel> <code>` (ezutan a felado felkerul egy lokalis engedelyezesi listara).
- A nyilvanos bejovo DM-ek kifejezett opt-in-t igenyelnek a `config.toml`-ban.
- Futtasd a `zeroclaw doctor` parancsot a kockazatos vagy rosszul konfiguralt DM szabalyzatok feltarasahoz.
# Csatorna konfiguráció
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
**Autonomia szintek:**
| Szint | Viselkedes |
|-------|------------|
| `ReadOnly` | Az agens megfigyel, de nem cselekszik |
| `Supervised` (alapertelmezett) | Az agens jovahagyassal cselekszik kozepes/magas kockazatu muveletenel |
| `Full` | Az agens autonoman cselekszik a szabalyzat hataran belul |
**Sandboxing retegek:** munkater izolalas, utvonal-atjaras blokkolas, parancs engedelyezesi listak, tiltott utvonalak (`/etc`, `/root`, `~/.ssh`), sebessegkorlatozas (max muveletek/ora, koltseg/nap korlatok).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Kozlemenyek
Hasznald ezt a tablat fontos ertesitesekhez (torekenyen kompatibilis valtozasok, biztonsagi tanacsadok, karbantartasi idosavok es kiadasi blokkolok).
| Datum (UTC) | Szint | Ertesites | Teendo |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritikus_ | **Nem** allunk kapcsolatban az `openagen/zeroclaw`, `zeroclaw.org` vagy `zeroclaw.net` oldalakkal. A `zeroclaw.org` es `zeroclaw.net` domainek jelenleg az `openagen/zeroclaw` fork-ra mutatnak, es az a domain/tarolo megszemelyesiti a hivatalos weboldalunkat/projektunket. | Ne bizz meg az ezekbol a forrasokbol szarmazo informaciokban, binarisokban, adomanygyujtesekben vagy kozlemenyekben. Kizarolag [ezt a tarolot](https://github.com/zeroclaw-labs/zeroclaw) es az ellenorzott kozossegi media fiokjainkat hasznald. |
| 2026-02-21 | _Fontos_ | A hivatalos weboldalunk most mar el: [zeroclawlabs.ai](https://zeroclawlabs.ai). Koszonjuk turelmuket, amig elokeszitettuk az inditast. Meg mindig latunk megszemelyesitesi kiserleteket, ezert **ne** csatlakozz semmilyen befektetesi vagy adomanygyujtesi tevekenyseghez, amely a ZeroClaw nevet hasznalja, hacsak nem a hivatalos csatornainkon keresztul jelenik meg. | Hasznald [ezt a tarolot](https://github.com/zeroclaw-labs/zeroclaw) egyetlen igazsagforraskent. Kovesd az [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) es [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) oldalakat a hivatalos frissitesekert. |
| 2026-02-19 | _Fontos_ | Az Anthropic frissitette a Hitelesitesi es Hitellevelek Hasznalara vonatkozo felteteleket 2026-02-19-en. A Claude Code OAuth tokenek (Free, Pro, Max) kizarolag a Claude Code es a Claude.ai szamara keszultek; az OAuth tokenek barmely mas termekben, eszkozben vagy szolgaltatasban valo hasznalata (beleertve az Agent SDK-t) nem megengedett es sertheti a Fogyasztoi Szolgaltatasi Felteteleket. | Kerlek ideiglenesen keruld a Claude Code OAuth integraciokat a potencialis veszteseg megelozese erdekeben. Eredeti kikotes: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Fobb jellemzok
- **Konnyu futtatokornyezet alapertelmezetten** — a szokasos CLI es allapot munkafolyamatok nehany megabajtos memoria burkban futnak release buildekben.
- **Koltseghatekony telepites** — $10-os kartyakhoz es kis cloud peldanyokhoz tervezve, nehez futtatokornyezeti fuggosegek nelkul.
- **Gyors hideg inditas** — az egyetlen binarisbol allo Rust futtatokornyezet szinte azonnali parancs- es daemon-inditast biztosit.
- **Hordozhato architektura** — egy binaris ARM, x86 es RISC-V rendszereken cserelheto szolgaltatok/csatornak/eszkozokkel.
- **Lokalis-eloszor Gateway** — egyetlen vezerlesi sik a munkamenetekhez, csatornakhoz, eszkozokhoz, cron-hoz, SOP-khoz es esemenyekhez.
- **Tobbcsatornas beerkeze** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket es meg tobb.
- **Tobbagens orkesztracio (Hands)** — autonom agens rajok, amelyek utemezetten futnak es idovel okosabbak lesznek.
- **Szabvanyos Muveleti Eljarasok (SOPs)** — esemenyvezeerlt munkafolyamat automatizalas MQTT, webhook, cron es periferia triggerekkel.
- **Webes vezerlopult** — React 19 + Vite webes felulet valos ideju csevegeessel, memoriaboongeszevel, konfiguracioszerkesztovel, cron kezelovel es eszkoz vizsgaloval.
- **Hardver periferiak** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO a `Peripheral` trait-en keresztul.
- **Elso osztalyu eszkozok** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace es 70+ tovabb.
- **Eletciklus hookok** — LLM hivasok, eszkozvegrehajtasok es uzenetek elfogasa es modositasa minden szinten.
- **Kepesseg platform** — beepitett, kozossegi es munkater kepessegek biztonsagi auditalassal.
- **Tunnel tamogatas** — Cloudflare, Tailscale, ngrok, OpenVPN es egyedi tunnelek tavoli hozzafereshez.
### Miert valasztjak a csapatok a ZeroClaw-t
- **Konnyu alapertelmezetten:** kis Rust binaris, gyors inditas, alacsony memoriahasznalat.
- **Biztonsagos tervezessel:** parositas, szigoru sandboxing, kifejezett engedelyezesi listak, munkater hatarolás.
- **Teljesen cserelheto:** az alaprendszerek trait-ek (providers, channels, tools, memory, tunnels).
- **Nincs bezartsag:** OpenAI-kompatibilis szolgaltatoi tamogatas + csatlakoztatható egyedi vegpontok.
## Benchmark pillanatkep (ZeroClaw vs OpenClaw, Reprodukalhato)
Lokalis gepi gyors benchmark (macOS arm64, 2026 feb.) normalizalva 0.8GHz edge hardverre.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Nyelv** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Inditas (0.8GHz core)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Binaris meret** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Koltseg** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Barmilyen hardver $10** |
> Megjegyzesek: A ZeroClaw eredmenyek release buildeken merve `/usr/bin/time -l` hasznalataval. Az OpenClaw Node.js futtatokornyezetet igenyel (tipikusan ~390MB memoria terheles), mig a NanoBot Python futtatokornyezetet. A PicoClaw es ZeroClaw statikus binarisok. A fenti RAM adatok futtatasi ideju memoriat mutatnak; a forditasi ideju kovetelmenyek magasabbak.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Reprodukalhato lokalis meres
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
---
## Minden, amit eddig epitettunk
## Dokumentáció
### Alapplatform
Részletes dokumentációért lásd:
- Gateway HTTP/WS/SSE vezerlesi sik munkamenetekkel, jelenleettel, konfiguracioval, cron-nal, webhookkal, webes vezerlopulttal es parositassal.
- CLI felulet: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Agens orkesztracios hurk eszkoz-kuldessel, prompt epitessel, uzenet osztalyozassal es memoria betoltessel.
- Munkamenet modell biztonsagi szabalyzat ervenyesitessel, autonomia szintekkel es jovahagyasi kapuval.
- Ellenallo szolgaltatoi wrapper failover-rel, ujraprobalassal es modell iranyitassal 20+ LLM backend-en.
- [Dokumentációs Központ](docs/README.md)
- [Parancs Referencia](docs/commands-reference.md)
- [Szolgáltató Referencia](docs/providers-reference.md)
- [Csatorna Referencia](docs/channels-reference.md)
- [Konfigurációs Referencia](docs/config-reference.md)
### Csatornak
---
Csatornak: WhatsApp (native), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
## Hozzájárulás
Feature-gated: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
A hozzájárulások várják! Kérjük, olvassa el a [Hozzájárulási Útmutatót](CONTRIBUTING.md).
### Webes vezerlopult
React 19 + Vite 6 + Tailwind CSS 4 webes vezerlopult, amelyet kozvetlenul a Gateway szolgaltat ki:
- **Dashboard** — rendszer attekintes, egeszsegi allapot, uzemido, koltsegkovetes
- **Agent Chat** — interaktiv csevegees az agenssel
- **Memory** — memoriabejegyzesek bongeszese es kezelese
- **Config** — konfiguracio megtekintese es szerkesztese
- **Cron** — utemezett feladatok kezelese
- **Tools** — elerheto eszkozok bongeszese
- **Logs** — agens tevekenysegnaplo megtekintese
- **Cost** — token hasznalat es koltsegkovetes
- **Doctor** — rendszer egeszseugyi diagnosztika
- **Integrations** — integracios allapot es beallitas
- **Pairing** — eszkoz parositas kezeles
### Firmware celok
| Cel | Platform | Rendeltetees |
|-----|----------|-------------|
| ESP32 | Espressif ESP32 | Vezetek nelkuli periferia agens |
| ESP32-UI | ESP32 + Display | Agens vizualis feluelettel |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Ipari periferia |
| Arduino | Arduino | Alap szenzor/aktualtor hid |
| Uno Q Bridge | Arduino Uno | Soros hid az agenshez |
### Eszkozok + automatizalas
- **Alap:** shell, file read/write/edit, git operations, glob search, content search
- **Web:** browser control, web fetch, web search, screenshot, image info, PDF read
- **Integraciok:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **Utemezes:** cron add/remove/update/run, schedule tool
- **Memoria:** recall, store, forget, knowledge, project intel
- **Halado:** delegate (agent-to-agent), swarm, model switch/routing, security ops, cloud ops
- **Hardver:** board info, memory map, memory read (feature-gated)
### Futtatokornyezet + biztonsag
- **Autonomia szintek:** ReadOnly, Supervised (alapertelmezett), Full.
- **Sandboxing:** munkater izolalas, utvonal-atjaras blokkolas, parancs engedelyezesi listak, tiltott utvonalak, Landlock (Linux), Bubblewrap.
- **Sebessegkorlatozas:** max muveletek orankent, max koltseg naponta (konfiguralhato).
- **Jovahagyasi kapu:** interaktiv jovahagy kozepes/magas kockazatu mueveletekhez.
- **E-stop:** veszleallitasi kepesseg.
- **129+ biztonsagi teszt** automatizalt CI-ben.
### Muveletek + csomagolas
- Webes vezerlopult kozvetlenul a Gateway-bol kiszolgalva.
- Tunnel tamogatas: Cloudflare, Tailscale, ngrok, OpenVPN, egyedi parancs.
- Docker runtime adapter konterizalt vegrehajtashoz.
- CI/CD: beta (auto on push) → stable (manual dispatch) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Elore elkeszitett binarisok Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64) rendszerekhez.
## Konfiguracio
Minimalis `~/.zeroclaw/config.toml`:
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
Teljes konfiguracios referencia: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Csatorna konfiguracio
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Tunnel konfiguracio
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
Reszletek: [Csatorna referencia](docs/reference/api/channels-reference.md) · [Konfiguracios referencia](docs/reference/api/config-reference.md)
### Futtatokornyezet tamogatas (aktualis)
- **`native`** (alapertelmezett) — kozvetlen folyamat vegrehajtas, leggyorsabb ut, idealis megbizhato kornyezetekhez.
- **`docker`** — teljes kontener izolalas, ervenyesitett biztonsagi szabalyzatok, Docker szukseges.
Allitsd be a `runtime.kind = "docker"` erteket a szigoru sandboxinghoz vagy halozati izolaciohoz.
## Elofizetes hitelesites (OpenAI Codex / Claude Code / Gemini)
A ZeroClaw tamogatja az elofizetes-nativ hitelesitesi profilokat (tobb fiok, titkositva tarolva).
- Tarolo fajl: `~/.zeroclaw/auth-profiles.json`
- Titkositasi kulcs: `~/.zeroclaw/.secret_key`
- Profil azonosito formatum: `<provider>:<profile_name>` (pelda: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Agens munkater + kepessegek
Munkater gyoker: `~/.zeroclaw/workspace/` (konfiguralhato a config-on keresztul).
Beinjektalt prompt fajlok:
- `IDENTITY.md` — agens szemelyiseg es szerep
- `USER.md` — felhasznaloi kontextus es prefernciak
- `MEMORY.md` — hosszu tavu tenyek es tanulsagok
- `AGENTS.md` — munkamenet konvenciok es inicializalasi szabalyok
- `SOUL.md` — alapveto identitas es mukodesi elvek
Kepessegek: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` vagy `SKILL.toml`.
```bash
# List installed skills
zeroclaw skills list
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
# Remove a skill
zeroclaw skills remove my-skill
```
## CLI parancsok
```bash
# Munkater kezeles
zeroclaw onboard # Vezerelt beallitasi varazslo
zeroclaw status # Daemon/agent allapot megjelenites
zeroclaw doctor # Rendszer diagnosztika futtatasa
# Gateway + daemon
zeroclaw gateway # Gateway szerver inditasa (127.0.0.1:42617)
zeroclaw daemon # Teljes autonom futtatas inditasa
# Agens
zeroclaw agent # Interaktiv csevegesi mod
zeroclaw agent -m "message" # Egyszeri uzenet mod
# Szolgaltatas kezeles
zeroclaw service install # Telepites OS szolgaltataskent (launchd/systemd)
zeroclaw service start|stop|restart|status
# Csatornak
zeroclaw channel list # Konfiguralt csatornak listazasa
zeroclaw channel doctor # Csatorna egeszseg ellenorzes
zeroclaw channel bind-telegram 123456789
# Cron + utemezes
zeroclaw cron list # Utemezett feladatok listazasa
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Memoria
zeroclaw memory list # Memoriabejegyzesek listazasa
zeroclaw memory get <key> # Memoria lekerese
zeroclaw memory stats # Memoria statisztikak
# Hitelesitesi profilok
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Hardver periferiak
zeroclaw hardware discover # Csatlakoztatott eszkozok keresese
zeroclaw peripheral list # Csatlakoztatott periferiak listazasa
zeroclaw peripheral flash # Firmware felirasa eszkozre
# Migracio
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell kiegeszitesek
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Teljes parancs referencia: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Elofeltetelek
<details>
<summary><strong>Windows</strong></summary>
#### Szukseges
1. **Visual Studio Build Tools** (biztositja az MSVC linkert es a Windows SDK-t):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
A telepites soran (vagy a Visual Studio Installer-en keresztul) valaszd a **"Desktop development with C++"** munkafolyamatot.
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
A telepites utan nyiss egy uj terminalt es futtasd a `rustup default stable` parancsot a stabil toolchain aktivalasahoz.
3. **Ellenorzes**, hogy mindketto mukodik:
```powershell
rustc --version
cargo --version
```
#### Opcionalis
- **Docker Desktop** — csak a [Docker sandboxed runtime](#futtatokornyezet-tamogatas-aktualis) hasznalatahoz szukseges (`runtime.kind = "docker"`). Telepites: `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Szukseges
1. **Epitesi alapeszkozok:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Telepitsd az Xcode Command Line Tools-t: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Reszletekert lasd [rustup.rs](https://rustup.rs).
3. **Ellenorzes**, hogy mindketto mukodik:
```bash
rustc --version
cargo --version
```
#### Egyvonalas telepito
Vagy hagyd ki a fenti lepeseket es telepits mindent (rendszer fuggosegek, Rust, ZeroClaw) egyetlen paranccsal:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Forditasi eroforrasigeny
A forrasbol valo epites tobb eroforras igenyel, mint az eredmeny binaris futtatasa:
| Eroforras | Minimum | Ajanlott |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Szabad lemez** | 6 GB | 10 GB+ |
Ha a gazdageped a minimum alatt van, hasznalj elore elkeszitett binarisokat:
```bash
./install.sh --prefer-prebuilt
```
Kizarolag binaris telepiteshez forras alternativa nelkul:
```bash
./install.sh --prebuilt-only
```
#### Opcionalis
- **Docker** — csak a [Docker sandboxed runtime](#futtatokornyezet-tamogatas-aktualis) hasznalatahoz szukseges (`runtime.kind = "docker"`). Telepites a csomagkezelodon keresztul vagy [docker.com](https://docs.docker.com/engine/install/).
> **Megjegyzes:** Az alapertelmezett `cargo build --release` `codegen-units=1` erteket hasznal a csucs forditasi terheles csokkenteseere. Gyorsabb epitesekhez eros gepeken hasznald a `cargo build --profile release-fast` parancsot.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Elore elkeszitett binarisok
Kiadas eszkozok az alabbi platformokra kerulnek kozetetelre:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Toltsd le a legujabb eszkozoket innen:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Dokumentacio
Hasznald ezeket, ha tuljutottal az onboarding folyamaton es melyebb referenciara van szukseged.
- Kezdd a [dokumentacios indexszel](docs/README.md) a navigaciohoz es a "mi hol talalhato" informaciohoz.
- Olvasd el az [architektura attekintest](docs/architecture.md) a teljes rendszermodellhez.
- Hasznald a [konfiguracios referenciat](docs/reference/api/config-reference.md), ha minden kulcsra es peldara szukseged van.
- Futtasd a Gateway-t a konyv szerint az [uzemeltetesi kezikonyvvel](docs/ops/operations-runbook.md).
- Kovesd a [ZeroClaw Onboard](#gyors-inditas-tldr) szolgaltatast a vezerelt beallitashoz.
- Hibakeress a gyakori problemakat a [hibaelharitasi utmutatoval](docs/ops/troubleshooting.md).
- Tekintsd at a [biztonsagi utmutatast](docs/security/README.md) mielott barmit is kiteszel.
### Referencia dokumentaciok
- Dokumentacios kozpont: [docs/README.md](docs/README.md)
- Egysegesitett tartalomjegyzek: [docs/SUMMARY.md](docs/SUMMARY.md)
- Parancs referencia: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Konfiguracios referencia: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Szolgaltatoi referencia: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Csatorna referencia: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Uzemeltetesi kezikonyv: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Hibaelharitas: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### Egyuttmukodesi dokumentaciok
- Hozzajarulasi utmutato: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR munkafolyamat szabalyzat: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI munkafolyamat utmutato: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Biraloi kezikonyv: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Biztonsagi kozzeteeteli szabalyzat: [SECURITY.md](SECURITY.md)
- Dokumentacios sablon: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Telepites + muveletek
- Halozati telepitesi utmutato: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Proxy agens kezikonyv: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Hardver utmutatok: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
A ZeroClaw a smooth crab 🦀 szamara keszult, egy gyors es hatekony MI asszisztens. Epitette Argenis De La Rosa es a kozosseg.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Tamogasd a ZeroClaw-t
Ha a ZeroClaw segiti a munkadat es tamogatni szeretned a folyamatos fejlesztest, itt adomanyozhatsz:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Kulonos koszonet
Szivbol jovo koszonet a kozossegeknek es intezmenyeknek, amelyek inspiraljak es taplaljak ezt a nyilt forrasu munkat:
- **Harvard University** — az intellektualis kivancsiság apolasaert es a lehetosegek hatarainak tolásáert.
- **MIT** — a nyilt tudas, nyilt forras es azon hit bajnokakent, hogy a technologianak mindenki szamara elerheto kell lennie.
- **Sundai Club** — a kozossegert, az energiaert es a szuntelen torekveseert, hogy fontos dolgokat epitsenek.
- **A Vilag es Azon Tul** 🌍✨ — minden hozzajarulonak, almodonak es epitonek, aki a nyilt forrast a jo erdekeben mukodo erove teszi. Ez neked szol.
Nyiltan epitunk, mert a legjobb otletek mindenhonnan jonnek. Ha ezt olvasod, a resze vagy. Udvozlunk. 🦀❤️
## Hozzajarulas
Uj vagy a ZeroClaw-ban? Keresd a [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) cimkevel ellatott issue-kat — lasd a [Hozzajarulasi utmutatot](CONTRIBUTING.md#first-time-contributors) a kezdeshez. AI/vibe-coded PR-ok szivesen latottak! 🤖
Lasd [CONTRIBUTING.md](CONTRIBUTING.md) es [CLA.md](docs/contributing/cla.md). Implementalj egy trait-et, kuuldj be egy PR-t:
- CI munkafolyamat utmutato: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Uj `Provider``src/providers/`
- Uj `Channel``src/channels/`
- Uj `Observer``src/observability/`
- Uj `Tool``src/tools/`
- Uj `Memory``src/memory/`
- Uj `Tunnel``src/tunnel/`
- Uj `Peripheral``src/peripherals/`
- Uj `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Hivatalos tarolo es megszemelyesitesi figyelmeztetes
**Ez az egyetlen hivatalos ZeroClaw tarolo:**
> https://github.com/zeroclaw-labs/zeroclaw
Barmely mas tarolo, szervezet, domain vagy csomag, amely azt allitja, hogy "ZeroClaw" vagy kapcsolatot sugall a ZeroClaw Labs-szal, **jogosulatlan es nem all kapcsolatban ezzel a projekttel**. Az ismert jogosulatlan forkok a [TRADEMARK.md](docs/maintainers/trademark.md) fajlban lesznek felsorolva.
Ha megszemelyesitessel vagy vedjeggyel valo visszaelessel talalkozol, kerlek [nyiss egy issue-t](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Licenc
Ez a projekt kettős licencelt:
A ZeroClaw kettos licenccel rendelkezik a maximalis nyitottsag es hozzajaruloi vedelem erdekeben:
- MIT License
- Apache License, 2.0 verzió
| Licenc | Felhasznalasi eset |
|---|---|
| [MIT](LICENSE-MIT) | Nyilt forras, kutatas, akademiai, szemelyes haszanalat |
| [Apache 2.0](LICENSE-APACHE) | Szabadalmi vedelem, intezmenyi, kereskedelmi telepites |
Részletekért lásd a [LICENSE-APACHE](LICENSE-APACHE) és [LICENSE-MIT](LICENSE-MIT) fájlokat.
Barmely licencet valaszthatod. **A hozzajarulok automatikusan mindketto alatt jogot biztositanak** — lasd [CLA.md](docs/contributing/cla.md) a teljes hozzajarulasi megallapodasert.
### Vedjegy
A **ZeroClaw** nev es logo a ZeroClaw Labs vedjegyei. Ez a licenc nem ad engedelyt arra, hogy tamogatast vagy kapcsolatot sugalljanak. Lasd [TRADEMARK.md](docs/maintainers/trademark.md) a megengedett es tiltott hasznalati modokert.
### Hozzajaruloi vedelmek
- **Megtartod a szerzoi jogot** a hozzajarulasaidon
- **Szabadalmi engedely** (Apache 2.0) vedi meg mas hozzajarulok szabadalmi igenyeitol
- A hozzajarulasaid **veglegesen attribulaltak** a commit tortenelben es a [NOTICE](NOTICE) fajlban
- Nem kerulnek at vedjegyjogok a hozzajarulassal
---
## Közösség
**ZeroClaw** — Nulla terheles. Nulla kompromisszum. Telepites barhova. Csere barmire. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Hozzajarulok
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## Szponzorok
Ez a lista a GitHub hozzajaruloi grafikonjabol keszul es automatikusan frissul.
Ha a ZeroClaw hasznos az Ön számára, kérjük, fontolja meg, hogy vesz nekünk egy kávét:
## Csillag tortenelem
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Asisten AI Pribadi</h1>
<p align="center">
<strong>Nol overhead. Nol kompromi. 100% Rust. 100% Agnostik.</strong><br>
⚡️ <strong>Jalan di perangkat $10 dengan <5MB RAM: Itu 99% lebih sedikit memori dari OpenClaw dan 98% lebih murah dari Mac mini!</strong>
⚡️ <strong>Berjalan di perangkat keras $10 dengan RAM <5MB: Itu 99% lebih hemat memori dari OpenClaw dan 98% lebih murah dari Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Dibangun oleh mahasiswa dan anggota komunitas Harvard, MIT, dan Sundai.Club.
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw adalah asisten AI pribadi yang Anda jalankan di perangkat sendiri. Ia menjawab Anda melalui saluran yang sudah Anda gunakan (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, dan lainnya). Ia memiliki dasbor web untuk kontrol real-time dan dapat terhubung ke periferal perangkat keras (ESP32, STM32, Arduino, Raspberry Pi). Gateway hanyalah bidang kendali — produknya adalah asisten.
## Apa itu ZeroClaw?
Jika Anda menginginkan asisten pribadi, pengguna tunggal, yang terasa lokal, cepat, dan selalu aktif, inilah solusinya.
ZeroClaw adalah infrastruktur asisten AI yang ringan, dapat diubah, dan dapat diperluas yang dibangun dengan Rust. Ini menghubungkan berbagai penyedia LLM (Anthropic, OpenAI, Google, Ollama, dll.) melalui antarmuka terpadu dan mendukung banyak saluran (Telegram, Matrix, CLI, dll.).
<p align="center">
<a href="https://zeroclawlabs.ai">Situs Web</a> ·
<a href="docs/README.md">Dokumentasi</a> ·
<a href="docs/architecture.md">Arsitektur</a> ·
<a href="#mulai-cepat">Memulai</a> ·
<a href="#migrasi-dari-openclaw">Migrasi dari OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Pemecahan Masalah</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Fitur Utama
> **Pengaturan yang disarankan:** jalankan `zeroclaw onboard` di terminal Anda. ZeroClaw Onboard memandu Anda langkah demi langkah dalam menyiapkan gateway, workspace, saluran, dan provider. Ini adalah jalur pengaturan yang disarankan dan berfungsi di macOS, Linux, dan Windows (melalui WSL2). Instalasi baru? Mulai di sini: [Memulai](#mulai-cepat)
- **🦀 Ditulis dalam Rust**: Kinerja tinggi, keamanan memori, dan abstraksi tanpa biaya
- **🔌 Agnostik penyedia**: Mendukung OpenAI, Anthropic, Google Gemini, Ollama, dan lainnya
- **📱 Multi-saluran**: Telegram, Matrix (dengan E2EE), CLI, dan lainnya
- **🧠 Memori yang dapat dipasang**: Backend SQLite dan Markdown
- **🛠️ Alat yang dapat diperluas**: Tambahkan alat kustom dengan mudah
- **🔒 Keamanan pertama**: Proxy terbalik, desain yang mengutamakan privasi
### Autentikasi Berlangganan (OAuth)
---
- **OpenAI Codex** (langganan ChatGPT)
- **Gemini** (Google OAuth)
- **Anthropic** (kunci API atau token autentikasi)
## Mulai Cepat
Catatan model: meskipun banyak provider/model didukung, untuk pengalaman terbaik gunakan model generasi terbaru terkuat yang tersedia untuk Anda. Lihat [Onboarding](#mulai-cepat).
### Persyaratan
Konfigurasi model + CLI: [Referensi Provider](docs/reference/api/providers-reference.md)
Rotasi profil autentikasi (OAuth vs kunci API) + failover: [Failover Model](docs/reference/api/providers-reference.md)
- Rust 1.70+
- Kunci API penyedia LLM (Anthropic, OpenAI, dll.)
## Instal (disarankan)
### Instalasi
Runtime: Rust stable toolchain. Biner tunggal, tanpa dependensi runtime.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Bootstrap sekali klik
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` berjalan otomatis setelah instalasi untuk mengonfigurasi workspace dan provider Anda.
## Mulai cepat (TL;DR)
Panduan lengkap pemula (autentikasi, pairing, saluran): [Memulai](docs/setup-guides/one-click-bootstrap.md)
```bash
# Instal + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Mulai gateway (server webhook + dasbor web)
zeroclaw gateway # default: 127.0.0.1:42617
zeroclaw gateway --port 0 # port acak (keamanan ditingkatkan)
# Bicara ke asisten
zeroclaw agent -m "Hello, ZeroClaw!"
# Mode interaktif
zeroclaw agent
# Mulai runtime otonom penuh (gateway + saluran + cron + hands)
zeroclaw daemon
# Periksa status
zeroclaw status
# Jalankan diagnostik
zeroclaw doctor
```
Memperbarui? Jalankan `zeroclaw doctor` setelah pembaruan.
### Dari sumber (pengembangan)
```bash
# Klon repositori
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Bangun
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Jalankan
cargo run --release
zeroclaw onboard
```
### Dengan Docker
> **Alternatif dev (tanpa instalasi global):** awali perintah dengan `cargo run --release --` (contoh: `cargo run --release -- status`).
## Migrasi dari OpenClaw
ZeroClaw dapat mengimpor workspace, memori, dan konfigurasi OpenClaw Anda:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Pratinjau apa yang akan dimigrasikan (aman, hanya-baca)
zeroclaw migrate openclaw --dry-run
# Jalankan migrasi
zeroclaw migrate openclaw
```
---
Ini memigrasikan entri memori, file workspace, dan konfigurasi Anda dari `~/.openclaw/` ke `~/.zeroclaw/`. Konfigurasi dikonversi dari JSON ke TOML secara otomatis.
## Default keamanan (akses DM)
ZeroClaw terhubung ke permukaan pesan nyata. Perlakukan DM masuk sebagai input tidak tepercaya.
Panduan keamanan lengkap: [SECURITY.md](SECURITY.md)
Perilaku default di semua saluran:
- **Pairing DM** (default): pengirim yang tidak dikenal menerima kode pairing singkat dan bot tidak memproses pesan mereka.
- Setujui dengan: `zeroclaw pairing approve <channel> <code>` (kemudian pengirim ditambahkan ke daftar izin lokal).
- DM masuk publik memerlukan opt-in eksplisit di `config.toml`.
- Jalankan `zeroclaw doctor` untuk menemukan kebijakan DM yang berisiko atau salah konfigurasi.
**Level otonomi:**
| Level | Perilaku |
|-------|----------|
| `ReadOnly` | Agen dapat mengamati tetapi tidak bertindak |
| `Supervised` (default) | Agen bertindak dengan persetujuan untuk operasi risiko menengah/tinggi |
| `Full` | Agen bertindak secara otonom dalam batas kebijakan |
**Lapisan sandboxing:** isolasi workspace, pemblokiran traversal jalur, daftar izin perintah, jalur terlarang (`/etc`, `/root`, `~/.ssh`), pembatasan laju (maksimum tindakan/jam, batas biaya/hari).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Pengumuman
Gunakan papan ini untuk pemberitahuan penting (perubahan yang merusak, saran keamanan, jendela pemeliharaan, dan pemblokir rilis).
| Tanggal (UTC) | Level | Pemberitahuan | Tindakan |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritis_ | Kami **tidak berafiliasi** dengan `openagen/zeroclaw`, `zeroclaw.org` atau `zeroclaw.net`. Domain `zeroclaw.org` dan `zeroclaw.net` saat ini mengarah ke fork `openagen/zeroclaw`, dan domain/repositori tersebut menyamar sebagai situs web/proyek resmi kami. | Jangan percaya informasi, biner, penggalangan dana, atau pengumuman dari sumber tersebut. Gunakan hanya [repositori ini](https://github.com/zeroclaw-labs/zeroclaw) dan akun sosial terverifikasi kami. |
| 2026-02-21 | _Penting_ | Situs web resmi kami sekarang aktif: [zeroclawlabs.ai](https://zeroclawlabs.ai). Terima kasih atas kesabaran Anda selama kami mempersiapkan peluncuran. Kami masih melihat upaya peniruan, jadi **jangan** bergabung dengan aktivitas investasi atau penggalangan dana yang mengklaim nama ZeroClaw kecuali dipublikasikan melalui saluran resmi kami. | Gunakan [repositori ini](https://github.com/zeroclaw-labs/zeroclaw) sebagai satu-satunya sumber kebenaran. Ikuti [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs), dan [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) untuk pembaruan resmi. |
| 2026-02-19 | _Penting_ | Anthropic memperbarui ketentuan Autentikasi dan Penggunaan Kredensial pada 2026-02-19. Token OAuth Claude Code (Free, Pro, Max) ditujukan secara eksklusif untuk Claude Code dan Claude.ai; menggunakan token OAuth dari Claude Free/Pro/Max di produk, alat, atau layanan lain (termasuk Agent SDK) tidak diizinkan dan dapat melanggar Ketentuan Layanan Konsumen. | Harap sementara hindari integrasi OAuth Claude Code untuk mencegah potensi kerugian. Klausul asli: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Sorotan
- **Runtime Ringan secara Default** — alur kerja CLI dan status umum berjalan dalam amplop memori beberapa megabyte pada build rilis.
- **Deployment Hemat Biaya** — dirancang untuk board $10 dan instans cloud kecil, tanpa dependensi runtime berat.
- **Cold Start Cepat** — runtime Rust biner tunggal menjaga startup perintah dan daemon hampir instan.
- **Arsitektur Portabel** — satu biner di ARM, x86, dan RISC-V dengan provider/saluran/alat yang dapat ditukar.
- **Gateway Lokal-Pertama** — bidang kendali tunggal untuk sesi, saluran, alat, cron, SOP, dan peristiwa.
- **Inbox multi-saluran** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket, dan lainnya.
- **Orkestrasi multi-agen (Hands)** — swarm agen otonom yang berjalan sesuai jadwal dan semakin pintar seiring waktu.
- **Standard Operating Procedures (SOP)** — otomasi alur kerja berbasis peristiwa dengan MQTT, webhook, cron, dan pemicu periferal.
- **Dasbor Web** — UI web React 19 + Vite dengan obrolan real-time, browser memori, editor konfigurasi, manajer cron, dan inspektor alat.
- **Periferal perangkat keras** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO melalui trait `Peripheral`.
- **Alat kelas satu** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace, dan 70+ lainnya.
- **Hook siklus hidup** — intersep dan modifikasi panggilan LLM, eksekusi alat, dan pesan di setiap tahap.
- **Platform skill** — skill bawaan, komunitas, dan workspace dengan audit keamanan.
- **Dukungan tunnel** — Cloudflare, Tailscale, ngrok, OpenVPN, dan tunnel kustom untuk akses jarak jauh.
### Mengapa tim memilih ZeroClaw
- **Ringan secara default:** biner Rust kecil, startup cepat, jejak memori rendah.
- **Aman secara desain:** pairing, sandboxing ketat, daftar izin eksplisit, pelingkupan workspace.
- **Sepenuhnya dapat ditukar:** sistem inti adalah trait (provider, saluran, alat, memori, tunnel).
- **Tanpa lock-in:** dukungan provider kompatibel OpenAI + endpoint kustom pluggable.
## Cuplikan Benchmark (ZeroClaw vs OpenClaw, Dapat Direproduksi)
Benchmark cepat mesin lokal (macOS arm64, Feb 2026) dinormalisasi untuk perangkat keras edge 0.8GHz.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Bahasa** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Startup (inti 0.8GHz)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Ukuran Biner** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Biaya** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Perangkat keras apa pun $10** |
> Catatan: Hasil ZeroClaw diukur pada build rilis menggunakan `/usr/bin/time -l`. OpenClaw memerlukan runtime Node.js (biasanya ~390MB overhead memori tambahan), sedangkan NanoBot memerlukan runtime Python. PicoClaw dan ZeroClaw adalah biner statis. Angka RAM di atas adalah memori runtime; kebutuhan kompilasi saat build lebih tinggi.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Pengukuran lokal yang dapat direproduksi
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## Semua yang telah kami bangun sejauh ini
### Platform inti
- Bidang kendali HTTP/WS/SSE Gateway dengan sesi, presence, konfigurasi, cron, webhook, dasbor web, dan pairing.
- Permukaan CLI: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Loop orkestrasi agen dengan dispatch alat, konstruksi prompt, klasifikasi pesan, dan pemuatan memori.
- Model sesi dengan penegakan kebijakan keamanan, level otonomi, dan gating persetujuan.
- Wrapper provider resilient dengan failover, retry, dan routing model di 20+ backend LLM.
### Saluran
Saluran: WhatsApp (native), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
Feature-gated: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Dasbor web
Dasbor web React 19 + Vite 6 + Tailwind CSS 4 yang disajikan langsung dari Gateway:
- **Dashboard** — ikhtisar sistem, status kesehatan, uptime, pelacakan biaya
- **Agent Chat** — obrolan interaktif dengan agen
- **Memory** — jelajahi dan kelola entri memori
- **Config** — lihat dan edit konfigurasi
- **Cron** — kelola tugas terjadwal
- **Tools** — jelajahi alat yang tersedia
- **Logs** — lihat log aktivitas agen
- **Cost** — penggunaan token dan pelacakan biaya
- **Doctor** — diagnostik kesehatan sistem
- **Integrations** — status integrasi dan pengaturan
- **Pairing** — manajemen pairing perangkat
### Target firmware
| Target | Platform | Tujuan |
|--------|----------|--------|
| ESP32 | Espressif ESP32 | Agen periferal nirkabel |
| ESP32-UI | ESP32 + Display | Agen dengan antarmuka visual |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Periferal industri |
| Arduino | Arduino | Jembatan sensor/aktuator dasar |
| Uno Q Bridge | Arduino Uno | Jembatan serial ke agen |
### Alat + otomasi
- **Inti:** shell, file read/write/edit, operasi git, glob search, content search
- **Web:** browser control, web fetch, web search, screenshot, image info, PDF read
- **Integrasi:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **Penjadwalan:** cron add/remove/update/run, schedule tool
- **Memori:** recall, store, forget, knowledge, project intel
- **Lanjutan:** delegate (agen-ke-agen), swarm, model switch/routing, security ops, cloud ops
- **Perangkat keras:** board info, memory map, memory read (feature-gated)
### Runtime + keamanan
- **Level otonomi:** ReadOnly, Supervised (default), Full.
- **Sandboxing:** isolasi workspace, pemblokiran traversal jalur, daftar izin perintah, jalur terlarang, Landlock (Linux), Bubblewrap.
- **Pembatasan laju:** maksimum tindakan per jam, maksimum biaya per hari (dapat dikonfigurasi).
- **Gating persetujuan:** persetujuan interaktif untuk operasi risiko menengah/tinggi.
- **E-stop:** kemampuan shutdown darurat.
- **129+ tes keamanan** dalam CI otomatis.
### Ops + pengemasan
- Dasbor web disajikan langsung dari Gateway.
- Dukungan tunnel: Cloudflare, Tailscale, ngrok, OpenVPN, perintah kustom.
- Adapter runtime Docker untuk eksekusi terkontainerisasi.
- CI/CD: beta (otomatis saat push) → stable (dispatch manual) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Biner pre-built untuk Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Konfigurasi
ZeroClaw menggunakan file konfigurasi YAML. Secara default, ini mencari `config.yaml`.
Minimal `~/.zeroclaw/config.toml`:
```yaml
# Penyedia default
provider: anthropic
# Konfigurasi penyedia
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# Konfigurasi memori
memory:
backend: sqlite
path: data/memory.db
# Konfigurasi saluran
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
Referensi konfigurasi lengkap: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Konfigurasi saluran
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Konfigurasi tunnel
```toml
[tunnel]
kind = "cloudflare" # atau "tailscale", "ngrok", "openvpn", "custom", "none"
```
Detail: [Referensi Saluran](docs/reference/api/channels-reference.md) · [Referensi Konfigurasi](docs/reference/api/config-reference.md)
### Dukungan runtime (saat ini)
- **`native`** (default) — eksekusi proses langsung, jalur tercepat, ideal untuk lingkungan tepercaya.
- **`docker`** — isolasi kontainer penuh, kebijakan keamanan ditegakkan, memerlukan Docker.
Atur `runtime.kind = "docker"` untuk sandboxing ketat atau isolasi jaringan.
## Autentikasi Berlangganan (OpenAI Codex / Claude Code / Gemini)
ZeroClaw mendukung profil autentikasi native berlangganan (multi-akun, terenkripsi saat istirahat).
- File penyimpanan: `~/.zeroclaw/auth-profiles.json`
- Kunci enkripsi: `~/.zeroclaw/.secret_key`
- Format id profil: `<provider>:<profile_name>` (contoh: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (langganan ChatGPT)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Periksa / refresh / ganti profil
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Jalankan agen dengan auth berlangganan
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Workspace agen + skill
Root workspace: `~/.zeroclaw/workspace/` (dapat dikonfigurasi melalui config).
File prompt yang diinjeksi:
- `IDENTITY.md` — kepribadian dan peran agen
- `USER.md` — konteks dan preferensi pengguna
- `MEMORY.md` — fakta dan pelajaran jangka panjang
- `AGENTS.md` — konvensi sesi dan aturan inisialisasi
- `SOUL.md` — identitas inti dan prinsip operasi
Skill: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` atau `SKILL.toml`.
```bash
# Daftar skill yang terinstal
zeroclaw skills list
# Instal dari git
zeroclaw skills install https://github.com/user/my-skill.git
# Audit keamanan sebelum instalasi
zeroclaw skills audit https://github.com/user/my-skill.git
# Hapus skill
zeroclaw skills remove my-skill
```
## Perintah CLI
```bash
# Manajemen workspace
zeroclaw onboard # Wizard pengaturan terpandu
zeroclaw status # Tampilkan status daemon/agen
zeroclaw doctor # Jalankan diagnostik sistem
# Gateway + daemon
zeroclaw gateway # Mulai server gateway (127.0.0.1:42617)
zeroclaw daemon # Mulai runtime otonom penuh
# Agen
zeroclaw agent # Mode obrolan interaktif
zeroclaw agent -m "message" # Mode pesan tunggal
# Manajemen layanan
zeroclaw service install # Instal sebagai layanan OS (launchd/systemd)
zeroclaw service start|stop|restart|status
# Saluran
zeroclaw channel list # Daftar saluran yang dikonfigurasi
zeroclaw channel doctor # Periksa kesehatan saluran
zeroclaw channel bind-telegram 123456789
# Cron + penjadwalan
zeroclaw cron list # Daftar tugas terjadwal
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Memori
zeroclaw memory list # Daftar entri memori
zeroclaw memory get <key> # Ambil memori
zeroclaw memory stats # Statistik memori
# Profil autentikasi
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Periferal perangkat keras
zeroclaw hardware discover # Pindai perangkat yang terhubung
zeroclaw peripheral list # Daftar periferal yang terhubung
zeroclaw peripheral flash # Flash firmware ke perangkat
# Migrasi
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Pelengkapan shell
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Referensi perintah lengkap: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Prasyarat
<details>
<summary><strong>Windows</strong></summary>
#### Diperlukan
1. **Visual Studio Build Tools** (menyediakan linker MSVC dan Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Selama instalasi (atau melalui Visual Studio Installer), pilih beban kerja **"Desktop development with C++"**.
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
Setelah instalasi, buka terminal baru dan jalankan `rustup default stable` untuk memastikan toolchain stabil aktif.
3. **Verifikasi** keduanya berfungsi:
```powershell
rustc --version
cargo --version
```
#### Opsional
- **Docker Desktop** — diperlukan hanya jika menggunakan [runtime Docker sandboxed](#dukungan-runtime-saat-ini) (`runtime.kind = "docker"`). Instal melalui `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Diperlukan
1. **Build essentials:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Instal Xcode Command Line Tools: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Lihat [rustup.rs](https://rustup.rs) untuk detail.
3. **Verifikasi** keduanya berfungsi:
```bash
rustc --version
cargo --version
```
#### Installer Satu Baris
Atau lewati langkah di atas dan instal semuanya (dependensi sistem, Rust, ZeroClaw) dalam satu perintah:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Kebutuhan sumber daya kompilasi
Membangun dari sumber memerlukan lebih banyak sumber daya daripada menjalankan biner yang dihasilkan:
| Sumber Daya | Minimum | Disarankan |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Disk kosong**| 6 GB | 10 GB+ |
Jika host Anda di bawah minimum, gunakan biner pre-built:
```bash
./install.sh --prefer-prebuilt
```
Untuk memerlukan instalasi hanya-biner tanpa fallback sumber:
```bash
./install.sh --prebuilt-only
```
#### Opsional
- **Docker** — diperlukan hanya jika menggunakan [runtime Docker sandboxed](#dukungan-runtime-saat-ini) (`runtime.kind = "docker"`). Instal melalui manajer paket Anda atau [docker.com](https://docs.docker.com/engine/install/).
> **Catatan:** Default `cargo build --release` menggunakan `codegen-units=1` untuk menurunkan tekanan kompilasi puncak. Untuk build lebih cepat di mesin yang kuat, gunakan `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Biner pre-built
Aset rilis dipublikasikan untuk:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Unduh aset terbaru dari:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Dokumentasi
Untuk dokumentasi terperinci, lihat:
Gunakan ini ketika Anda sudah melewati alur onboarding dan menginginkan referensi yang lebih mendalam.
- [Hub Dokumentasi](docs/README.md)
- [Referensi Perintah](docs/commands-reference.md)
- [Referensi Penyedia](docs/providers-reference.md)
- [Referensi Saluran](docs/channels-reference.md)
- [Referensi Konfigurasi](docs/config-reference.md)
- Mulai dengan [indeks dokumentasi](docs/README.md) untuk navigasi dan "apa di mana."
- Baca [ikhtisar arsitektur](docs/architecture.md) untuk model sistem lengkap.
- Gunakan [referensi konfigurasi](docs/reference/api/config-reference.md) ketika Anda memerlukan setiap kunci dan contoh.
- Jalankan Gateway sesuai buku dengan [runbook operasional](docs/ops/operations-runbook.md).
- Ikuti [ZeroClaw Onboard](#mulai-cepat) untuk pengaturan terpandu.
- Debug kegagalan umum dengan [panduan pemecahan masalah](docs/ops/troubleshooting.md).
- Tinjau [panduan keamanan](docs/security/README.md) sebelum mengekspos apa pun.
---
### Dokumentasi referensi
- Hub dokumentasi: [docs/README.md](docs/README.md)
- TOC dokumentasi terpadu: [docs/SUMMARY.md](docs/SUMMARY.md)
- Referensi perintah: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Referensi konfigurasi: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Referensi provider: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Referensi saluran: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Runbook operasional: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Pemecahan masalah: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### Dokumentasi kolaborasi
- Panduan kontribusi: [CONTRIBUTING.md](CONTRIBUTING.md)
- Kebijakan alur kerja PR: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- Panduan alur kerja CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Playbook reviewer: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Kebijakan pengungkapan keamanan: [SECURITY.md](SECURITY.md)
- Template dokumentasi: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Deployment + operasi
- Panduan deployment jaringan: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Playbook proxy agent: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Panduan perangkat keras: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw dibangun untuk smooth crab 🦀, asisten AI yang cepat dan efisien. Dibangun oleh Argenis De La Rosa dan komunitas.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Dukung ZeroClaw
Jika ZeroClaw membantu pekerjaan Anda dan Anda ingin mendukung pengembangan berkelanjutan, Anda dapat berdonasi di sini:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Terima Kasih Khusus
Terima kasih yang tulus kepada komunitas dan institusi yang menginspirasi dan mendorong pekerjaan open-source ini:
- **Harvard University** — untuk memupuk rasa ingin tahu intelektual dan mendorong batas dari apa yang mungkin.
- **MIT** — untuk memperjuangkan pengetahuan terbuka, open source, dan keyakinan bahwa teknologi harus dapat diakses oleh semua orang.
- **Sundai Club** — untuk komunitas, energi, dan dorongan tanpa henti untuk membangun hal-hal yang penting.
- **Dunia & Seterusnya** 🌍✨ — kepada setiap kontributor, pemimpi, dan pembangun di luar sana yang menjadikan open source sebagai kekuatan untuk kebaikan. Ini untuk kalian.
Kami membangun secara terbuka karena ide terbaik datang dari mana saja. Jika Anda membaca ini, Anda adalah bagian darinya. Selamat datang. 🦀❤️
## Berkontribusi
Kontribusi diterima! Silakan baca [Panduan Kontribusi](CONTRIBUTING.md).
Baru di ZeroClaw? Cari isu berlabel [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — lihat [Panduan Kontribusi](CONTRIBUTING.md#first-time-contributors) untuk cara memulai. PR yang dibuat dengan AI/vibe-coded dipersilakan! 🤖
Lihat [CONTRIBUTING.md](CONTRIBUTING.md) dan [CLA.md](docs/contributing/cla.md). Implementasikan trait, kirimkan PR:
- Panduan alur kerja CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- `Provider` baru → `src/providers/`
- `Channel` baru → `src/channels/`
- `Observer` baru → `src/observability/`
- `Tool` baru → `src/tools/`
- `Memory` baru → `src/memory/`
- `Tunnel` baru → `src/tunnel/`
- `Peripheral` baru → `src/peripherals/`
- `Skill` baru → `~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Repositori Resmi & Peringatan Peniruan
**Ini adalah satu-satunya repositori resmi ZeroClaw:**
> https://github.com/zeroclaw-labs/zeroclaw
Repositori, organisasi, domain, atau paket lain yang mengklaim sebagai "ZeroClaw" atau menyiratkan afiliasi dengan ZeroClaw Labs adalah **tidak sah dan tidak berafiliasi dengan proyek ini**. Fork tidak sah yang diketahui akan terdaftar di [TRADEMARK.md](docs/maintainers/trademark.md).
Jika Anda menemukan peniruan atau penyalahgunaan merek dagang, silakan [buka isu](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Lisensi
Proyek ini dilisensikan ganda:
ZeroClaw memiliki dual-license untuk keterbukaan maksimum dan perlindungan kontributor:
- MIT License
- Apache License, versi 2.0
| Lisensi | Kasus penggunaan |
|---|---|
| [MIT](LICENSE-MIT) | Open-source, riset, akademik, penggunaan pribadi |
| [Apache 2.0](LICENSE-APACHE) | Perlindungan paten, institusional, deployment komersial |
Lihat [LICENSE-APACHE](LICENSE-APACHE) dan [LICENSE-MIT](LICENSE-MIT) untuk detailnya.
Anda dapat memilih salah satu lisensi. **Kontributor secara otomatis memberikan hak di bawah keduanya** — lihat [CLA.md](docs/contributing/cla.md) untuk perjanjian kontributor lengkap.
### Merek Dagang
Nama dan logo **ZeroClaw** adalah merek dagang dari ZeroClaw Labs. Lisensi ini tidak memberikan izin untuk menggunakannya untuk menyiratkan dukungan atau afiliasi. Lihat [TRADEMARK.md](docs/maintainers/trademark.md) untuk penggunaan yang diizinkan dan dilarang.
### Perlindungan Kontributor
- Anda **mempertahankan hak cipta** atas kontribusi Anda
- **Hibah paten** (Apache 2.0) melindungi Anda dari klaim paten oleh kontributor lain
- Kontribusi Anda **secara permanen diatribusikan** dalam riwayat commit dan [NOTICE](NOTICE)
- Tidak ada hak merek dagang yang dialihkan dengan berkontribusi
---
## Komunitas
**ZeroClaw** — Nol overhead. Nol kompromi. Deploy di mana saja. Tukar apa saja. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Kontributor
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## Sponsor
Daftar ini dihasilkan dari grafik kontributor GitHub dan diperbarui secara otomatis.
Jika ZeroClaw berguna bagi Anda, mohon pertimbangkan untuk membelikan kami kopi:
## Riwayat Bintang
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

View File

@ -1,24 +1,33 @@
<p align="center">
<img src="docs/assets/zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀(日本語)</h1>
<h1 align="center">🦀 ZeroClaw — パーソナルAIアシスタント</h1>
<p align="center">
<strong>Zero overhead. Zero compromise. 100% Rust. 100% Agnostic.</strong>
<strong>ゼロオーバーヘッド。ゼロ妥協。100% Rust。100% 非依存。</strong><br>
⚡️ <strong>10ドルのハードウェアで5MB未満のRAMで動作OpenClawより99%少ないメモリ、Mac miniより98%安い!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
🌐 言語:
ハーバード大学、MIT、Sundai.Clubコミュニティの学生とメンバーにより構築。
</p>
<p align="center">
🌐 <strong>Languages:</strong>
<a href="README.md">🇺🇸 English</a> ·
<a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
<a href="README.ja.md">🇯🇵 日本語</a> ·
@ -52,75 +61,190 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
<p align="center">
<a href="install.sh">ワンクリック導入</a> |
<a href="docs/setup-guides/README.md">導入ガイド</a> |
<a href="docs/README.ja.md">ドキュメントハブ</a> |
<a href="docs/SUMMARY.md">Docs TOC</a>
</p>
ZeroClawは、あなた自身のデバイスで実行するパーソナルAIアシスタントです。既に使用しているチャンネルWhatsApp、Telegram、Slack、Discord、Signal、iMessage、Matrix、IRC、Email、Bluesky、Nostr、Mattermost、Nextcloud Talk、DingTalk、Lark、QQ、Reddit、LinkedIn、Twitter、MQTT、WeChat Workなどで応答します。リアルタイム制御用のウェブダッシュボードを備え、ハードウェア周辺機器ESP32、STM32、Arduino、Raspberry Piに接続できます。Gatewayはコントロールプレーンに過ぎず、製品はアシスタントそのものです。
ローカルで高速、常時稼働のパーソナルなシングルユーザーアシスタントが必要なら、これがその答えです。
<p align="center">
<strong>クイック分流:</strong>
<a href="docs/reference/README.md">参照</a> ·
<a href="docs/ops/README.md">運用</a> ·
<a href="docs/ops/troubleshooting.md">障害対応</a> ·
<a href="docs/security/README.md">セキュリティ</a> ·
<a href="docs/hardware/README.md">ハードウェア</a> ·
<a href="docs/contributing/README.md">貢献・CI</a>
<a href="https://zeroclawlabs.ai">ウェブサイト</a> ·
<a href="docs/README.md">ドキュメント</a> ·
<a href="docs/architecture.md">アーキテクチャ</a> ·
<a href="#クイックスタートtldr">はじめに</a> ·
<a href="#openclawからの移行">OpenClawからの移行</a> ·
<a href="docs/ops/troubleshooting.md">トラブルシューティング</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
> この文書は `README.md` の内容を、正確性と可読性を重視して日本語に整えた版です(逐語訳ではありません)。
>
> コマンド名、設定キー、API パス、Trait 名などの技術識別子は英語のまま維持しています。
>
> 最終同期日: **2026-02-19**
> **推奨セットアップ:** ターミナルで `zeroclaw onboard` を実行してください。ZeroClaw Onboardがゲートウェイ、ワークスペース、チャンネル、プロバイダーのセットアップをステップバイステップでガイドします。これは推奨されるセットアップパスで、macOS、Linux、WindowsWSL2経由で動作します。新規インストールここから開始[はじめに](#クイックスタートtldr)
## 📢 お知らせボード
### サブスクリプション認証OAuth
重要なお知らせ(互換性破壊変更、セキュリティ告知、メンテナンス時間、リリース阻害事項など)をここに掲載します。
- **OpenAI Codex**ChatGPTサブスクリプション
- **Gemini**Google OAuth
- **Anthropic**APIキーまたは認証トークン
| 日付 (UTC) | レベル | お知らせ | 対応 |
|---|---|---|---|
| 2026-02-19 | _緊急_ | 私たちは `openagen/zeroclaw` および `zeroclaw.org` とは**一切関係ありません**。`zeroclaw.org` は現在 `openagen/zeroclaw` の fork を指しており、そのドメイン/リポジトリは当プロジェクトの公式サイト・公式プロジェクトを装っています。 | これらの情報源による案内、バイナリ、資金調達情報、公式発表は信頼しないでください。必ず[本リポジトリ](https://github.com/zeroclaw-labs/zeroclaw)と認証済み公式SNSのみを参照してください。 |
| 2026-02-21 | _重要_ | 公式サイトを公開しました: [zeroclawlabs.ai](https://zeroclawlabs.ai)。公開までお待ちいただきありがとうございました。引き続きなりすましの試みを確認しているため、ZeroClaw 名義の投資・資金調達などの案内は、公式チャネルで確認できない限り参加しないでください。 | 情報は[本リポジトリ](https://github.com/zeroclaw-labs/zeroclaw)を最優先で確認し、[X@zeroclawlabs](https://x.com/zeroclawlabs?s=21)、[Telegram@zeroclawlabs](https://t.me/zeroclawlabs)、[Facebookグループ](https://www.facebook.com/groups/zeroclaw)、[Redditr/zeroclawlabs](https://www.reddit.com/r/zeroclawlabs/) と [小紅書アカウント](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) で公式更新を確認してください。 |
| 2026-02-19 | _重要_ | Anthropic は 2026-02-19 に Authentication and Credential Use を更新しました。条文では、OAuth authenticationFree/Pro/Maxは Claude Code と Claude.ai 専用であり、Claude Free/Pro/Max で取得した OAuth トークンを他の製品・ツール・サービスAgent SDK を含むで使用することは許可されず、Consumer Terms of Service 違反に該当すると明記されています。 | 損失回避のため、当面は Claude Code OAuth 連携を試さないでください。原文: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use)。 |
モデルに関する注意:多くのプロバイダー/モデルがサポートされていますが、最良のエクスペリエンスのために、利用可能な最新世代の最も強力なモデルを使用してください。[オンボーディング](#クイックスタートtldr)を参照。
## 概要
モデル設定 + CLI[プロバイダーリファレンス](docs/reference/api/providers-reference.md)
認証プロファイルローテーションOAuth vs APIキー+ フェイルオーバー:[モデルフェイルオーバー](docs/reference/api/providers-reference.md)
ZeroClaw は、高速・省リソース・高拡張性を重視した自律エージェント実行基盤です。ZeroClawはエージェントワークフローのための**ランタイムオペレーティングシステム**です — モデル、ツール、メモリ、実行を抽象化し、エージェントを一度構築すればどこでも実行できるインフラストラクチャです。
## インストール(推奨)
- Rust ネイティブ実装、単一バイナリで配布可能
- Trait ベース設計(`Provider` / `Channel` / `Tool` / `Memory` など)
- セキュアデフォルト(ペアリング、明示 allowlist、サンドボックス、スコープ制御
ランタイムRust stable ツールチェーン。単一バイナリ、ランタイム依存なし。
## ZeroClaw が選ばれる理由
### HomebrewmacOS/Linuxbrew
- **軽量ランタイムを標準化**: CLI や `status` などの常用操作は数MB級メモリで動作。
- **低コスト環境に適合**: 低価格ボードや小規模クラウドでも、重い実行基盤なしで運用可能。
- **高速コールドスタート**: Rust 単一バイナリにより、主要コマンドと daemon 起動が非常に速い。
- **高い移植性**: ARM / x86 / RISC-V を同じ運用モデルで扱え、provider/channel/tool を差し替え可能。
```bash
brew install zeroclaw
```
### ワンクリックブートストラップ
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` はインストール後に自動的に実行され、ワークスペースとプロバイダーを設定します。
## クイックスタートTL;DR
完全な初心者ガイド(認証、ペアリング、チャンネル):[はじめに](docs/setup-guides/one-click-bootstrap.md)
```bash
# インストール + オンボード
./install.sh --api-key "sk-..." --provider openrouter
# ゲートウェイを起動webhookサーバー + ウェブダッシュボード)
zeroclaw gateway # デフォルト127.0.0.1:42617
zeroclaw gateway --port 0 # ランダムポート(セキュリティ強化)
# アシスタントと会話
zeroclaw agent -m "Hello, ZeroClaw!"
# インタラクティブモード
zeroclaw agent
# フル自律ランタイムを起動(ゲートウェイ + チャンネル + cron + hands
zeroclaw daemon
# ステータス確認
zeroclaw status
# 診断を実行
zeroclaw doctor
```
アップグレード?更新後に `zeroclaw doctor` を実行してください。
### ソースからビルド(開発)
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
zeroclaw onboard
```
> **開発用代替手段(グローバルインストールなし):** コマンドの前に `cargo run --release --` を付けてください(例:`cargo run --release -- status`)。
## OpenClawからの移行
ZeroClawはOpenClawのワークスペース、メモリ、設定をインポートできます
```bash
# 移行内容のプレビュー(安全、読み取り専用)
zeroclaw migrate openclaw --dry-run
# 移行を実行
zeroclaw migrate openclaw
```
これにより、メモリエントリ、ワークスペースファイル、設定が `~/.openclaw/` から `~/.zeroclaw/` に移行されます。設定はJSONからTOMLに自動変換されます。
## セキュリティデフォルトDMアクセス
ZeroClawは実際のメッセージングサービスに接続します。着信DMを信頼できない入力として扱ってください。
完全なセキュリティガイド:[SECURITY.md](SECURITY.md)
すべてのチャンネルのデフォルト動作:
- **DMペアリング**(デフォルト):不明な送信者には短いペアリングコードが送信され、ボットはメッセージを処理しません。
- 承認方法:`zeroclaw pairing approve <channel> <code>`(送信者がローカル許可リストに追加されます)。
- パブリック着信DMには `config.toml` での明示的なオプトインが必要です。
- `zeroclaw doctor` を実行してリスクのある、または設定ミスのあるDMポリシーを検出します。
**自律レベル:**
| レベル | 動作 |
|--------|------|
| `ReadOnly` | エージェントは観察のみで操作不可 |
| `Supervised`(デフォルト) | エージェントは中/高リスク操作時に承認が必要 |
| `Full` | エージェントはポリシー範囲内で自律的に操作 |
**サンドボックス層:** ワークスペース分離、パストラバーサルブロック、コマンド許可リスト、禁止パス(`/etc`、`/root`、`~/.ssh`)、レート制限(時間あたり最大アクション数、日あたりコスト上限)。
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 お知らせ
このボードは重要な通知(破壊的変更、セキュリティアドバイザリ、メンテナンスウィンドウ、リリースブロッカー)に使用します。
| 日付 (UTC) | レベル | 通知 | 対応 |
| ---------- | ------ | ---- | ---- |
| 2026-02-19 | _重大_ | 当プロジェクトは `openagen/zeroclaw`、`zeroclaw.org`、`zeroclaw.net` とは**一切関係ありません**。`zeroclaw.org` と `zeroclaw.net` ドメインは現在 `openagen/zeroclaw` フォークを指しており、そのドメイン/リポジトリは当プロジェクトの公式ウェブサイト/プロジェクトを偽装しています。 | それらのソースからの情報、バイナリ、資金調達、告知を信頼しないでください。[このリポジトリ](https://github.com/zeroclaw-labs/zeroclaw)と認証済みのソーシャルアカウントのみを使用してください。 |
| 2026-02-21 | _重要_ | 公式ウェブサイトが公開されました:[zeroclawlabs.ai](https://zeroclawlabs.ai)。ローンチ準備中のお待ちいただき、ありがとうございます。引き続き偽装行為が確認されていますので、公式チャンネルを通じて公開されない限り、ZeroClawの名前を使った投資や資金調達活動には**参加しないでください**。 | [このリポジトリ](https://github.com/zeroclaw-labs/zeroclaw)を唯一の信頼できる情報源として使用してください。公式アップデートは [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21)、[Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs)、[Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) をフォローしてください。 |
| 2026-02-19 | _重要_ | Anthropicは2026-02-19に認証と資格情報の使用に関する規約を更新しました。Claude Code OAuthトークンFree、Pro、MaxはClaude CodeおよびClaude.ai専用です。Claude Free/Pro/MaxのOAuthトークンを他の製品、ツール、サービスAgent SDKを含むで使用することは許可されておらず、消費者利用規約に違反する可能性があります。 | 潜在的な損失を防ぐため、一時的にClaude Code OAuth統合を避けてください。元の条項[Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use)。 |
## ハイライト
- **デフォルトでリーンなランタイム** — 一般的なCLIとステータスワークフローは、リリースビルドで数メガバイトのメモリエンベロープで実行されます。
- **コスト効率の良いデプロイ** — 10ドルボードや小規模クラウドインスタンス向けに設計、重量級ランタイム依存なし。
- **高速コールドスタート** — シングルバイナリRustランタイムにより、コマンドとデーモンの起動がほぼ瞬時。
- **ポータブルアーキテクチャ** — ARM、x86、RISC-Vにまたがる単一バイナリで、プロバイダー/チャンネル/ツールが交換可能。
- **ローカルファーストゲートウェイ** — セッション、チャンネル、ツール、cron、SOP、イベントの単一コントロールプレーン。
- **マルチチャンネル受信箱** — WhatsApp、Telegram、Slack、Discord、Signal、iMessage、Matrix、IRC、Email、Bluesky、Nostr、Mattermost、Nextcloud Talk、DingTalk、Lark、QQ、Reddit、LinkedIn、Twitter、MQTT、WeChat Work、WebSocketなど。
- **マルチエージェントオーケストレーションHands** — スケジュールに基づいて実行され、時間とともにスマートになる自律エージェントスウォーム。
- **標準運用手順SOPs** — MQTT、webhook、cron、周辺機器トリガーによるイベント駆動ワークフロー自動化。
- **ウェブダッシュボード** — React 19 + Viteウェブ UIで、リアルタイムチャット、メモリブラウザ、設定エディタ、cronマネージャー、ツールインスペクター。
- **ハードウェア周辺機器**`Peripheral` traitを通じてESP32、STM32 Nucleo、Arduino、Raspberry Pi GPIOをサポート。
- **ファーストクラスツール** — shell、ファイルI/O、ブラウザ、git、ウェブフェッチ/検索、MCP、Jira、Notion、Google Workspaceなど70以上。
- **ライフサイクルフック** — あらゆる段階でLLM呼び出し、ツール実行、メッセージをインターセプトおよび変更。
- **スキルプラットフォーム** — バンドル、コミュニティ、ワークスペーススキルとセキュリティ監査。
- **トンネルサポート** — Cloudflare、Tailscale、ngrok、OpenVPN、カスタムトンネルによるリモートアクセス。
### チームがZeroClawを選ぶ理由
- **デフォルトでリーン:** 小型Rustバイナリ、高速起動、低メモリフットプリント。
- **設計によるセキュリティ:** ペアリング、厳格なサンドボックス、明示的な許可リスト、ワークスペーススコーピング。
- **完全に交換可能:** コアシステムはすべてtraitプロバイダー、チャンネル、ツール、メモリ、トンネル
- **ロックインなし:** OpenAI互換プロバイダーサポート + プラガブルなカスタムエンドポイント。
## ベンチマークスナップショットZeroClaw vs OpenClaw、再現可能
以下はローカルのクイック比較macOS arm64、2026年2月を、0.8GHz エッジ CPU 基準で正規化したものです。
ローカルマシンクイックベンチマークmacOS arm64、2026年2月、0.8GHzエッジハードウェア向けに正規化
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
|---|---|---|---|---|
| **言語** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **起動時間0.8GHz コア)** | > 500s | > 30s | < 1s | **< 10ms** |
| **バイナリサイズ** | ~28MBdist | N/Aスクリプト | ~8MB | **~8.8 MB** |
| **コスト** | Mac Mini $599 | Linux SBC ~$50 | Linux ボード $10 | **任意の $10 ハードウェア** |
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **言語** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **起動時間0.8GHzコア)** | > 500s | > 30s | < 1s | **< 10ms** |
| **バイナリサイズ** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **コスト** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **任意のハードウェア $10** |
> 注記: ZeroClaw の結果は release ビルドを `/usr/bin/time -l` で計測したものです。OpenClaw は Node.js ランタイムが必要で、ランタイム由来だけで通常は約390MBの追加メモリを要します。NanoBot は Python ランタイムが必要です。PicoClaw と ZeroClaw は静的バイナリです。
> 注ZeroClawの結果はリリースビルドで `/usr/bin/time -l` を使用して測定されています。OpenClawにはNode.jsランタイム通常約390MBの追加メモリオーバーヘッドが必要で、NanoBotにはPythonランタイムが必要です。PicoClawとZeroClawは静的バイナリです。上記のRAM数値はランタイムメモリです。ビルド時のコンパイル要件はより高くなります。
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### ローカルで再現可能な測定
ベンチマーク値はコードやツールチェーン更新で変わるため、必ず自身の環境で再測定してください。
### 再現可能なローカル測定
```bash
cargo build --release
@ -130,199 +254,502 @@ ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw status
```
README のサンプル値macOS arm64, 2026-02-18:
## これまでに構築したすべて
- Release バイナリ: `8.8M`
- `zeroclaw --help`: 約 `0.02s`、ピークメモリ 約 `3.9MB`
- `zeroclaw status`: 約 `0.01s`、ピークメモリ 約 `4.1MB`
### コアプラットフォーム
## ワンクリック導入
- Gateway HTTP/WS/SSEコントロールプレーンセッション、プレゼンス、設定、cron、webhook、ウェブダッシュボード、ペアリング。
- CLIサーフェス`gateway`、`agent`、`onboard`、`doctor`、`status`、`service`、`migrate`、`auth`、`cron`、`channel`、`skills`。
- エージェントオーケストレーションループ:ツールディスパッチ、プロンプト構築、メッセージ分類、メモリロード。
- セッションモデル:セキュリティポリシー実行、自律レベル、承認ゲーティング。
- レジリエントプロバイダーラッパー20以上のLLMバックエンドにわたるフェイルオーバー、リトライ、モデルルーティング。
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
### チャンネル
チャンネルWhatsAppネイティブ、Telegram、Slack、Discord、Signal、iMessage、Matrix、IRC、Email、Bluesky、DingTalk、Lark、Mattermost、Nextcloud Talk、Nostr、QQ、Reddit、LinkedIn、Twitter、MQTT、WeChat Work、WATI、Mochat、Linq、Notion、WebSocket、ClawdTalk。
フィーチャーゲートMatrix`channel-matrix`、Lark`channel-lark`、Nostr`channel-nostr`)。
### ウェブダッシュボード
React 19 + Vite 6 + Tailwind CSS 4 ウェブダッシュボード、Gatewayから直接提供
- **ダッシュボード** — システム概要、ヘルスステータス、アップタイム、コストトラッキング
- **エージェントチャット** — エージェントとのインタラクティブチャット
- **メモリ** — メモリエントリの閲覧と管理
- **設定** — 設定の表示と編集
- **Cron** — スケジュールタスクの管理
- **ツール** — 利用可能なツールの閲覧
- **ログ** — エージェントアクティビティログの表示
- **コスト** — トークン使用量とコストトラッキング
- **Doctor** — システムヘルス診断
- **インテグレーション** — インテグレーションステータスとセットアップ
- **ペアリング** — デバイスペアリング管理
### ファームウェアターゲット
| ターゲット | プラットフォーム | 用途 |
|------------|------------------|------|
| ESP32 | Espressif ESP32 | ワイヤレス周辺機器エージェント |
| ESP32-UI | ESP32 + Display | ビジュアルインターフェース付きエージェント |
| STM32 Nucleo | STM32 (ARM Cortex-M) | 産業用周辺機器 |
| Arduino | Arduino | 基本センサー/アクチュエーターブリッジ |
| Uno Q Bridge | Arduino Uno | エージェントへのシリアルブリッジ |
### ツール + 自動化
- **コア:** shell、ファイル読み書き/編集、git操作、glob検索、コンテンツ検索
- **ウェブ:** ブラウザ制御、ウェブフェッチ、ウェブ検索、スクリーンショット、画像情報、PDF読み取り
- **インテグレーション:** Jira、Notion、Google Workspace、Microsoft 365、LinkedIn、Composio、Pushover
- **MCP** Model Context Protocolツールラッパー + 遅延ツールセット
- **スケジューリング:** cron追加/削除/更新/実行、スケジュールツール
- **メモリ:** 想起、保存、忘却、知識、プロジェクトインテル
- **高度:** 委譲(エージェント間)、スウォーム、モデル切り替え/ルーティング、セキュリティオプス、クラウドオプス
- **ハードウェア:** ボード情報、メモリマップ、メモリ読み取り(フィーチャーゲート)
### ランタイム + 安全性
- **自律レベル:** ReadOnly、Supervisedデフォルト、Full。
- **サンドボックス:** ワークスペース分離、パストラバーサルブロック、コマンド許可リスト、禁止パス、LandlockLinux、Bubblewrap。
- **レート制限:** 時間あたり最大アクション数、日あたり最大コスト(設定可能)。
- **承認ゲーティング:** 中/高リスク操作のインタラクティブ承認。
- **緊急停止:** 緊急シャットダウン機能。
- **129以上のセキュリティテスト** が自動化CIに含まれています。
### 運用 + パッケージング
- ウェブダッシュボードはGatewayから直接提供。
- トンネルサポートCloudflare、Tailscale、ngrok、OpenVPN、カスタムコマンド。
- Dockerランタイムアダプターによるコンテナ化実行。
- CI/CDbetaプッシュ時自動→ stable手動ディスパッチ→ Docker、crates.io、Scoop、AUR、Homebrew、tweet。
- プリビルドバイナリLinuxx86_64、aarch64、armv7、macOSx86_64、aarch64、Windowsx86_64
## 設定
最小 `~/.zeroclaw/config.toml`
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
環境ごと初期化する場合: `./install.sh --install-system-deps --install-rust`(システムパッケージで `sudo` が必要な場合があります)。
完全な設定リファレンス:[docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
詳細は [`docs/setup-guides/one-click-bootstrap.md`](docs/setup-guides/one-click-bootstrap.md) を参照してください。
### チャンネル設定
## クイックスタート
### HomebrewmacOS/Linuxbrew
```bash
brew install zeroclaw
**Telegram**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
zeroclaw onboard --api-key sk-... --provider openrouter
zeroclaw onboard --interactive
zeroclaw agent -m "Hello, ZeroClaw!"
# default: 127.0.0.1:42617
zeroclaw gateway
zeroclaw daemon
**Discord**
```toml
[channels.discord]
token = "your-bot-token"
```
## Subscription AuthOpenAI Codex / Claude Code
**Slack**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
ZeroClaw はサブスクリプションベースのネイティブ認証プロファイルをサポートしています(マルチアカウント対応、保存時暗号化)。
**WhatsApp**
```toml
[channels.whatsapp]
enabled = true
```
- 保存先: `~/.zeroclaw/auth-profiles.json`
- 暗号化キー: `~/.zeroclaw/.secret_key`
- Profile ID 形式: `<provider>:<profile_name>`(例: `openai-codex:work`
**Matrix**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
OpenAI Codex OAuthChatGPT サブスクリプション):
**Signal**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### トンネル設定
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
詳細:[チャンネルリファレンス](docs/reference/api/channels-reference.md) · [設定リファレンス](docs/reference/api/config-reference.md)
### ランタイムサポート(現在)
- **`native`**(デフォルト)— 直接プロセス実行、最速パス、信頼できる環境に最適。
- **`docker`** — 完全なコンテナ分離、強制セキュリティポリシー、Docker必要。
厳格なサンドボックスまたはネットワーク分離には `runtime.kind = "docker"` を設定してください。
## サブスクリプション認証OpenAI Codex / Claude Code / Gemini
ZeroClawはサブスクリプションネイティブ認証プロファイルマルチアカウント、保存時暗号化をサポートしています。
- ストアファイル:`~/.zeroclaw/auth-profiles.json`
- 暗号化キー:`~/.zeroclaw/.secret_key`
- プロファイルIDフォーマット`<provider>:<profile_name>`(例:`openai-codex:work`
```bash
# サーバー/ヘッドレス環境向け推奨
# OpenAI Codex OAuthChatGPTサブスクリプション
zeroclaw auth login --provider openai-codex --device-code
# ブラウザ/コールバックフロー(ペーストフォールバック付き)
zeroclaw auth login --provider openai-codex --profile default
zeroclaw auth paste-redirect --provider openai-codex --profile default
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# 確認 / リフレッシュ / プロファイル切替
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# チェック / リフレッシュ / プロファイル切り替え
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
```
Claude Code / Anthropic setup-token:
```bash
# サブスクリプション/setup token の貼り付けAuthorization header モード)
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# エイリアスコマンド
zeroclaw auth setup-token --provider anthropic --profile default
```
Subscription auth で agent を実行:
```bash
# サブスクリプション認証でエージェントを実行
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hello"
# Anthropic は API key と auth token の両方の環境変数をサポート:
# ANTHROPIC_AUTH_TOKEN, ANTHROPIC_OAUTH_TOKEN, ANTHROPIC_API_KEY
zeroclaw agent --provider anthropic -m "hello"
```
## アーキテクチャ
## エージェントワークスペース + スキル
すべてのサブシステムは **Trait** — 設定変更だけで実装を差し替え可能、コード変更不要
ワークスペースルート:`~/.zeroclaw/workspace/`(設定で変更可能)。
<p align="center">
<img src="docs/assets/architecture.svg" alt="ZeroClaw アーキテクチャ" width="900" />
</p>
注入されるプロンプトファイル:
- `IDENTITY.md` — エージェントの人格と役割
- `USER.md` — ユーザーコンテキストと好み
- `MEMORY.md` — 長期的な事実と教訓
- `AGENTS.md` — セッション規約と初期化ルール
- `SOUL.md` — コアアイデンティティと運用原則
| サブシステム | Trait | 内蔵実装 | 拡張方法 |
|-------------|-------|----------|----------|
| **AI モデル** | `Provider` | `zeroclaw providers` で確認(現在 28 個の組み込み + エイリアス、カスタムエンドポイント対応) | `custom:https://your-api.com`OpenAI 互換)または `anthropic-custom:https://your-api.com` |
| **チャネル** | `Channel` | CLI, Telegram, Discord, Slack, Mattermost, iMessage, Matrix, Signal, WhatsApp, Linq, Email, IRC, Lark, DingTalk, QQ, Webhook | 任意のメッセージ API |
| **メモリ** | `Memory` | SQLite ハイブリッド検索, PostgreSQL バックエンド, Lucid ブリッジ, Markdown ファイル, 明示的 `none` バックエンド, スナップショット/復元, オプション応答キャッシュ | 任意の永続化バックエンド |
| **ツール** | `Tool` | shell/file/memory, cron/schedule, git, pushover, browser, http_request, screenshot/image_info, composio (opt-in), delegate, ハードウェアツール | 任意の機能 |
| **オブザーバビリティ** | `Observer` | Noop, Log, Multi | Prometheus, OTel |
| **ランタイム** | `RuntimeAdapter` | Native, Dockerサンドボックス | adapter 経由で追加可能;未対応の kind は即座にエラー |
| **セキュリティ** | `SecurityPolicy` | Gateway ペアリング, サンドボックス, allowlist, レート制限, ファイルシステムスコープ, 暗号化シークレット | — |
| **アイデンティティ** | `IdentityConfig` | OpenClaw (markdown), AIEOS v1.1 (JSON) | 任意の ID フォーマット |
| **トンネル** | `Tunnel` | None, Cloudflare, Tailscale, ngrok, Custom | 任意のトンネルバイナリ |
| **ハートビート** | Engine | HEARTBEAT.md 定期タスク | — |
| **スキル** | Loader | TOML マニフェスト + SKILL.md インストラクション | コミュニティスキルパック |
| **インテグレーション** | Registry | 9 カテゴリ、70 件以上の連携 | プラグインシステム |
スキル:`~/.zeroclaw/workspace/skills/<skill>/SKILL.md` または `SKILL.toml`
### ランタイムサポート(現状)
```bash
# インストール済みスキルの一覧
zeroclaw skills list
- ✅ 現在サポート: `runtime.kind = "native"` または `runtime.kind = "docker"`
- 🚧 計画中(未実装): WASM / エッジランタイム
# gitからインストール
zeroclaw skills install https://github.com/user/my-skill.git
未対応の `runtime.kind` が設定された場合、ZeroClaw は native へのサイレントフォールバックではなく、明確なエラーで終了します。
# インストール前のセキュリティ監査
zeroclaw skills audit https://github.com/user/my-skill.git
### メモリシステム(フルスタック検索エンジン)
すべて自社実装、外部依存ゼロ — Pinecone、Elasticsearch、LangChain 不要:
| レイヤー | 実装 |
|---------|------|
| **ベクトル DB** | Embeddings を SQLite に BLOB として保存、コサイン類似度検索 |
| **キーワード検索** | FTS5 仮想テーブル、BM25 スコアリング |
| **ハイブリッドマージ** | カスタム重み付きマージ関数(`vector.rs` |
| **Embeddings** | `EmbeddingProvider` trait — OpenAI、カスタム URL、または noop |
| **チャンキング** | 行ベースの Markdown チャンカー(見出し構造保持) |
| **キャッシュ** | SQLite `embedding_cache` テーブル、LRU エビクション |
| **安全な再インデックス** | FTS5 再構築 + 欠落ベクトルの再埋め込みをアトミックに実行 |
Agent はツール経由でメモリの呼び出し・保存・管理を自動的に行います。
```toml
[memory]
backend = "sqlite" # "sqlite", "lucid", "postgres", "markdown", "none"
auto_save = true
embedding_provider = "none" # "none", "openai", "custom:https://..."
vector_weight = 0.7
keyword_weight = 0.3
# スキルの削除
zeroclaw skills remove my-skill
```
## セキュリティのデフォルト
## CLIコマンド
- Gateway の既定バインド: `127.0.0.1:42617`
- 既定でペアリング必須: `require_pairing = true`
- 既定で公開バインド禁止: `allow_public_bind = false`
- Channel allowlist:
- `[]` は deny-by-default
- `["*"]` は allow all意図的に使う場合のみ
```bash
# ワークスペース管理
zeroclaw onboard # ガイド付きセットアップウィザード
zeroclaw status # デーモン/エージェントのステータス表示
zeroclaw doctor # システム診断を実行
## 設定例
# ゲートウェイ + デーモン
zeroclaw gateway # ゲートウェイサーバーを起動127.0.0.1:42617
zeroclaw daemon # フル自律ランタイムを起動
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
# エージェント
zeroclaw agent # インタラクティブチャットモード
zeroclaw agent -m "message" # 単一メッセージモード
[memory]
backend = "sqlite"
auto_save = true
embedding_provider = "none"
# サービス管理
zeroclaw service install # OSサービスとしてインストールlaunchd/systemd
zeroclaw service start|stop|restart|status
[gateway]
host = "127.0.0.1"
port = 42617
require_pairing = true
allow_public_bind = false
# チャンネル
zeroclaw channel list # 設定済みチャンネルの一覧
zeroclaw channel doctor # チャンネルヘルスの確認
zeroclaw channel bind-telegram 123456789
# Cron + スケジューリング
zeroclaw cron list # スケジュールタスクの一覧
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# メモリ
zeroclaw memory list # メモリエントリの一覧
zeroclaw memory get <key> # メモリの取得
zeroclaw memory stats # メモリ統計
# 認証プロファイル
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# ハードウェア周辺機器
zeroclaw hardware discover # 接続デバイスのスキャン
zeroclaw peripheral list # 接続周辺機器の一覧
zeroclaw peripheral flash # デバイスへのファームウェア書き込み
# 移行
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# シェル補完
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
## ドキュメント入口
完全なコマンドリファレンス:[docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- ドキュメントハブ(英語): [`docs/README.md`](docs/README.md)
- 統合 TOC: [`docs/SUMMARY.md`](docs/SUMMARY.md)
- ドキュメントハブ(日本語): [`docs/README.ja.md`](docs/README.ja.md)
- コマンドリファレンス: [`docs/reference/cli/commands-reference.md`](docs/reference/cli/commands-reference.md)
- 設定リファレンス: [`docs/reference/api/config-reference.md`](docs/reference/api/config-reference.md)
- Provider リファレンス: [`docs/reference/api/providers-reference.md`](docs/reference/api/providers-reference.md)
- Channel リファレンス: [`docs/reference/api/channels-reference.md`](docs/reference/api/channels-reference.md)
- 運用ガイドRunbook: [`docs/ops/operations-runbook.md`](docs/ops/operations-runbook.md)
- トラブルシューティング: [`docs/ops/troubleshooting.md`](docs/ops/troubleshooting.md)
- ドキュメント一覧 / 分類: [`docs/maintainers/docs-inventory.md`](docs/maintainers/docs-inventory.md)
- プロジェクト triage スナップショット: [`docs/maintainers/project-triage-snapshot-2026-02-18.md`](docs/maintainers/project-triage-snapshot-2026-02-18.md)
<!-- markdownlint-disable MD001 MD024 -->
## コントリビュート / ライセンス
## 前提条件
- Contributing: [`CONTRIBUTING.md`](CONTRIBUTING.md)
- PR Workflow: [`docs/contributing/pr-workflow.md`](docs/contributing/pr-workflow.md)
- Reviewer Playbook: [`docs/contributing/reviewer-playbook.md`](docs/contributing/reviewer-playbook.md)
- License: MIT or Apache 2.0[`LICENSE-MIT`](LICENSE-MIT), [`LICENSE-APACHE`](LICENSE-APACHE), [`NOTICE`](NOTICE)
<details>
<summary><strong>Windows</strong></summary>
#### 必須
1. **Visual Studio Build Tools**MSVCリンカーとWindows SDKを提供
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
インストール時またはVisual Studioインストーラーで、**"Desktop development with C++"** ワークロードを選択してください。
2. **Rustツールチェーン**
```powershell
winget install Rustlang.Rustup
```
インストール後、新しいターミナルを開いて `rustup default stable` を実行し、stableツールチェーンがアクティブであることを確認してください。
3. 両方が動作していることを**確認**
```powershell
rustc --version
cargo --version
```
#### オプション
- **Docker Desktop** — [Dockerサンドボックスランタイム](#ランタイムサポート現在)`runtime.kind = "docker"`)を使用する場合のみ必要。`winget install Docker.DockerDesktop` でインストール。
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### 必須
1. **ビルドツール:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Xcodeコマンドラインツールをインストール`xcode-select --install`
2. **Rustツールチェーン**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
詳細は [rustup.rs](https://rustup.rs) を参照。
3. 両方が動作していることを**確認**
```bash
rustc --version
cargo --version
```
#### ワンラインインストーラー
または、上記のステップをスキップして、単一コマンドですべてをインストールシステム依存、Rust、ZeroClaw
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### コンパイルリソース要件
ソースからのビルドは、結果のバイナリを実行するよりも多くのリソースが必要です:
| リソース | 最小 | 推奨 |
| -------- | ---- | ---- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **空きディスク** | 6 GB | 10 GB+ |
ホストが最小要件を下回る場合、プリビルドバイナリを使用してください:
```bash
./install.sh --prefer-prebuilt
```
ソースフォールバックなしのバイナリのみインストール:
```bash
./install.sh --prebuilt-only
```
#### オプション
- **Docker** — [Dockerサンドボックスランタイム](#ランタイムサポート現在)`runtime.kind = "docker"`)を使用する場合のみ必要。パッケージマネージャーまたは [docker.com](https://docs.docker.com/engine/install/) からインストール。
> **注意:** デフォルトの `cargo build --release``codegen-units=1` を使用してコンパイルのピーク圧力を低減します。強力なマシンでのビルド高速化には `cargo build --profile release-fast` を使用してください。
</details>
<!-- markdownlint-enable MD001 MD024 -->
### プリビルドバイナリ
リリースアセットは以下で公開されています:
- Linux: `x86_64`、`aarch64`、`armv7`
- macOS: `x86_64`、`aarch64`
- Windows: `x86_64`
最新アセットはこちらからダウンロード:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## ドキュメント
オンボーディングフローを終えて、より深いリファレンスが必要な場合に使用してください。
- ナビゲーションと「どこに何があるか」は[ドキュメントインデックス](docs/README.md)から。
- [アーキテクチャ概要](docs/architecture.md)で完全なシステムモデルを確認。
- すべてのキーと例は[設定リファレンス](docs/reference/api/config-reference.md)で。
- [運用ランブック](docs/ops/operations-runbook.md)に従ってGatewayを実行。
- [ZeroClaw Onboard](#クイックスタートtldr)でガイド付きセットアップ。
- [トラブルシューティングガイド](docs/ops/troubleshooting.md)で一般的な障害をデバッグ。
- 何かを公開する前に[セキュリティガイダンス](docs/security/README.md)を確認。
### リファレンスドキュメント
- ドキュメントハブ:[docs/README.md](docs/README.md)
- 統一ドキュメント目次:[docs/SUMMARY.md](docs/SUMMARY.md)
- コマンドリファレンス:[docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- 設定リファレンス:[docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- プロバイダーリファレンス:[docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- チャンネルリファレンス:[docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- 運用ランブック:[docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- トラブルシューティング:[docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### コラボレーションドキュメント
- 貢献ガイド:[CONTRIBUTING.md](CONTRIBUTING.md)
- PRワークフローポリシー[docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CIワークフローガイド[docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- レビューアープレイブック:[docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- セキュリティ開示ポリシー:[SECURITY.md](SECURITY.md)
- ドキュメントテンプレート:[docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### デプロイ + 運用
- ネットワークデプロイガイド:[docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- プロキシエージェントプレイブック:[docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- ハードウェアガイド:[docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClawはsmooth crab 🦀のために構築されました。高速で効率的なAIアシスタント。Argenis De La Rosaとコミュニティによって構築されました。
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## ZeroClawを支援
ZeroClawがあなたの仕事に役立ち、継続的な開発を支援したい場合は、こちらから寄付できます
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 特別な感謝
このオープンソースの取り組みにインスピレーションと活力を与えてくれたコミュニティと機関に心からの感謝を:
- **ハーバード大学** — 知的好奇心を育み、可能性の限界を押し広げてくれたことに感謝。
- **MIT** — オープンな知識、オープンソース、そしてテクノロジーは誰もがアクセスできるべきという信念を擁護してくれたことに感謝。
- **Sundai Club** — コミュニティ、エネルギー、そして意味のあるものを構築するための弛まぬ努力に感謝。
- **世界とその先** 🌍✨ — オープンソースを良い力にしているすべての貢献者、夢想家、構築者へ。これはあなたのためのものです。
最高のアイデアはあらゆるところから生まれるため、私たちはオープンに構築しています。これを読んでいるなら、あなたはその一部です。ようこそ。🦀❤️
## 貢献
ZeroClaw初心者ですか[`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) ラベルの付いた課題を探してください — 始め方は[貢献ガイド](CONTRIBUTING.md#first-time-contributors)を参照。AI/vibe-coded PRも歓迎します🤖
[CONTRIBUTING.md](CONTRIBUTING.md) と [CLA.md](docs/contributing/cla.md) を参照。traitを実装してPRを提出してください
- CIワークフローガイド[docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- 新 `Provider``src/providers/`
- 新 `Channel``src/channels/`
- 新 `Observer``src/observability/`
- 新 `Tool``src/tools/`
- 新 `Memory``src/memory/`
- 新 `Tunnel``src/tunnel/`
- 新 `Peripheral``src/peripherals/`
- 新 `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ 公式リポジトリと偽装警告
**これがZeroClawの唯一の公式リポジトリです**
> https://github.com/zeroclaw-labs/zeroclaw
「ZeroClaw」を名乗る、またはZeroClaw Labsとの提携を示唆する他のリポジトリ、組織、ドメイン、パッケージは**無許可であり、本プロジェクトとは無関係です**。既知の無許可フォークは [TRADEMARK.md](docs/maintainers/trademark.md) に記載されます。
偽装や商標の悪用を見つけた場合は、[issueを作成](https://github.com/zeroclaw-labs/zeroclaw/issues)してください。
---
詳細仕様全コマンド、アーキテクチャ、API 仕様、開発フロー)は英語版の [`README.md`](README.md) を参照してください。
## ライセンス
ZeroClawは最大限のオープン性と貢献者保護のためにデュアルライセンスです
| ライセンス | 用途 |
|------------|------|
| [MIT](LICENSE-MIT) | オープンソース、研究、学術、個人使用 |
| [Apache 2.0](LICENSE-APACHE) | 特許保護、機関、商用デプロイ |
どちらのライセンスでも選択できます。**貢献者は両方のライセンスの権利を自動的に付与します** — 完全な貢献者契約については [CLA.md](docs/contributing/cla.md) を参照してください。
### 商標
**ZeroClaw** の名称とロゴはZeroClaw Labsの商標です。このライセンスは、推薦や提携を暗示するための使用許可を付与しません。許可された使用と禁止された使用については [TRADEMARK.md](docs/maintainers/trademark.md) を参照してください。
### 貢献者の保護
- あなたは貢献の**著作権を保持**します
- **特許付与**Apache 2.0)により、他の貢献者からの特許請求から保護されます
- あなたの貢献はコミット履歴と [NOTICE](NOTICE) に**永続的に帰属**されます
- 貢献により商標権は移転されません
---
**ZeroClaw** — ゼロオーバーヘッド。ゼロ妥協。どこでもデプロイ。何でも交換。🦀
## 貢献者
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
このリストはGitHub貢献者グラフから生成され、自動的に更新されます。
## Star履歴
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

1350
README.md

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +1,33 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Personlig AI-assistent</h1>
<p align="center">
<strong>Null overhead. Null kompromiss. 100% Rust. 100% Agnostisk.</strong><br>
⚡️ <strong>Kjører på $10 maskinvare med <5MB RAM: Det er 99% mindre minne enn OpenClaw og 98% billigere enn en Mac mini!</strong>
⚡️ <strong>Kjorer pa $10 maskinvare med <5MB RAM: Det er 99% mindre minne enn OpenClaw og 98% billigere enn en Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
🌐 <strong>Språk:</strong>
Bygget av studenter og medlemmer av Harvard-, MIT- og Sundai.Club-miljoene.
</p>
<p align="center">
🌐 <strong>Sprak:</strong>
<a href="README.md">🇺🇸 English</a> ·
<a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
<a href="README.ja.md">🇯🇵 日本語</a> ·
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw er en personlig AI-assistent du kjorer pa dine egne enheter. Den svarer deg pa kanalene du allerede bruker (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work og flere). Den har et nettbasert dashbord for sanntidskontroll og kan kobles til maskinvareperiferiutstyr (ESP32, STM32, Arduino, Raspberry Pi). Gateway er bare kontrollplanet — produktet er assistenten.
## Hva er ZeroClaw?
Hvis du onsker en personlig, enkeltbruker-assistent som foler seg lokal, rask og alltid tilgjengelig, er dette den.
ZeroClaw er en lettvektig, foranderlig og utvidbar AI-assistent-infrastruktur bygget i Rust. Den kobler sammen ulike LLM-leverandører (Anthropic, OpenAI, Google, Ollama osv.) via et samlet grensesnitt og støtter flere kanaler (Telegram, Matrix, CLI osv.).
<p align="center">
<a href="https://zeroclawlabs.ai">Nettsted</a> ·
<a href="docs/README.md">Dokumentasjon</a> ·
<a href="docs/architecture.md">Arkitektur</a> ·
<a href="#hurtigstart">Kom i gang</a> ·
<a href="#migrering-fra-openclaw">Migrering fra OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Feilsoking</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Hovedfunksjoner
> **Anbefalt oppsett:** kjor `zeroclaw onboard` i terminalen din. ZeroClaw Onboard guider deg steg for steg gjennom oppsett av gateway, arbeidsomrade, kanaler og leverandor. Det er den anbefalte oppsettsveien og fungerer pa macOS, Linux og Windows (via WSL2). Ny installasjon? Start her: [Kom i gang](#hurtigstart)
- **🦀 Skrevet i Rust**: Høy ytelse, minnesikkerhet og nullkostnads-abstraksjoner
- **🔌 Leverandør-agnostisk**: Støtter OpenAI, Anthropic, Google Gemini, Ollama og andre
- **📱 Multi-kanal**: Telegram, Matrix (med E2EE), CLI og andre
- **🧠 Pluggbart minne**: SQLite og Markdown-backends
- **🛠️ Utvidbare verktøy**: Legg til tilpassede verktøy enkelt
- **🔒 Sikkerhet først**: Omvendt proxy, personvern-først design
### Abonnementsautentisering (OAuth)
---
- **OpenAI Codex** (ChatGPT-abonnement)
- **Gemini** (Google OAuth)
- **Anthropic** (API-nokkel eller autentiseringstoken)
## Rask Start
Modellmerknad: selv om mange leverandorer/modeller stotter, for best opplevelse bruk den sterkeste siste-generasjons modellen tilgjengelig for deg. Se [Onboarding](#hurtigstart).
### Krav
Modellkonfigurasjon + CLI: [Leverandorreferanse](docs/reference/api/providers-reference.md)
Autentiseringsprofil-rotasjon (OAuth vs API-nokler) + failover: [Modell-failover](docs/reference/api/providers-reference.md)
- Rust 1.70+
- En LLM-leverandør API-nøkkel (Anthropic, OpenAI osv.)
## Installasjon (anbefalt)
### Installasjon
Kjoretidemiljo: Rust stabil verktoyskjede. Enkel binarfil, ingen kjoretidesavhengigheter.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Ett-klikks oppstart
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` kjorer automatisk etter installasjon for a konfigurere arbeidsomradet og leverandoren din.
## Hurtigstart (TL;DR)
Full nybegynnerguide (autentisering, paring, kanaler): [Kom i gang](docs/setup-guides/one-click-bootstrap.md)
```bash
# Installer + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Start gateway (webhook-server + nettbasert dashbord)
zeroclaw gateway # standard: 127.0.0.1:42617
zeroclaw gateway --port 0 # tilfeldig port (sikkerhetsskarmet)
# Snakk med assistenten
zeroclaw agent -m "Hello, ZeroClaw!"
# Interaktiv modus
zeroclaw agent
# Start full autonom kjoretidemiljo (gateway + kanaler + cron + hands)
zeroclaw daemon
# Sjekk status
zeroclaw status
# Kjor diagnostikk
zeroclaw doctor
```
Oppgraderer? Kjor `zeroclaw doctor` etter oppdatering.
### Fra kildekode (utvikling)
```bash
# Klon repository
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Bygg
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Kjør
cargo run --release
zeroclaw onboard
```
### Med Docker
> **Utvikler-fallback (ingen global installasjon):** prefiks kommandoer med `cargo run --release --` (eksempel: `cargo run --release -- status`).
## Migrering fra OpenClaw
ZeroClaw kan importere ditt OpenClaw-arbeidsomrade, minne og konfigurasjon:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Forhandsvis hva som vil bli migrert (trygt, skrivebeskyttet)
zeroclaw migrate openclaw --dry-run
# Kjor migreringen
zeroclaw migrate openclaw
```
---
Dette migrerer minneoppforinger, arbeidsomradefiler og konfigurasjon fra `~/.openclaw/` til `~/.zeroclaw/`. Konfigurasjon konverteres automatisk fra JSON til TOML.
## Sikkerhetsstandarder (DM-tilgang)
ZeroClaw kobler til ekte meldingsflater. Behandle innkommende DM-er som upalitelig inndata.
Full sikkerhetsguide: [SECURITY.md](SECURITY.md)
Standardoppforsel pa alle kanaler:
- **DM-paring** (standard): ukjente avsendere mottar en kort paringskode og boten behandler ikke meldingen deres.
- Godkjenn med: `zeroclaw pairing approve <channel> <code>` (deretter legges avsenderen til en lokal tillatelesliste).
- Offentlige innkommende DM-er krever en eksplisitt opt-in i `config.toml`.
- Kjor `zeroclaw doctor` for a avdekke risikable eller feilkonfigurerte DM-policyer.
**Autonominiva:**
| Niva | Oppforsel |
|------|-----------|
| `ReadOnly` | Agenten kan observere men ikke handle |
| `Supervised` (standard) | Agenten handler med godkjenning for medium/hoy-risiko operasjoner |
| `Full` | Agenten handler autonomt innenfor policygrenser |
**Sandkasselag:** arbeidsomradeisolasjon, stiblokkering, kommandotillatelselister, forbudte stier (`/etc`, `/root`, `~/.ssh`), hastighetsbegrensning (maks handlinger/time, kostnad/dag-tak).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### Kunngoringer
Bruk denne tavlen for viktige meldinger (brytende endringer, sikkerhetsrad, vedlikeholdsvinduer og utgivelsesblokkeringer).
| Dato (UTC) | Niva | Merknad | Handling |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritisk_ | Vi er **ikke tilknyttet** `openagen/zeroclaw`, `zeroclaw.org` eller `zeroclaw.net`. Domenene `zeroclaw.org` og `zeroclaw.net` peker for oyeblikket til `openagen/zeroclaw`-forken, og dette domenet/repositoriet utgir seg for a vaere vart offisielle nettsted/prosjekt. | Ikke stol pa informasjon, binarfiler, innsamlinger eller kunngoringer fra disse kildene. Bruk kun [dette repositoriet](https://github.com/zeroclaw-labs/zeroclaw) og vare verifiserte sosiale kontoer. |
| 2026-02-21 | _Viktig_ | Vart offisielle nettsted er na live: [zeroclawlabs.ai](https://zeroclawlabs.ai). Takk for talmodigheten mens vi forberedte lanseringen. Vi ser fortsatt etterligningsforsok, sa **ikke** bli med pa noen investerings- eller innsamlingsaktivitet som hevder ZeroClaw-navnet med mindre det er publisert gjennom vare offisielle kanaler. | Bruk [dette repositoriet](https://github.com/zeroclaw-labs/zeroclaw) som eneste sannhetskilde. Folg [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Gruppe)](https://www.facebook.com/groups/zeroclawlabs) og [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) for offisielle oppdateringer. |
| 2026-02-19 | _Viktig_ | Anthropic oppdaterte vilkarene for autentisering og legitimasjonsbruk 2026-02-19. Claude Code OAuth-tokens (Free, Pro, Max) er utelukkende ment for Claude Code og Claude.ai; bruk av OAuth-tokens fra Claude Free/Pro/Max i andre produkter, verktoy eller tjenester (inkludert Agent SDK) er ikke tillatt og kan bryte forbruksvilkarene. | Vennligst unnga Claude Code OAuth-integrasjoner midlertidig for a forhindre potensielt tap. Opprinnelig klausul: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Hoydepunkter
- **Slank kjoretidemiljo som standard** — vanlige CLI- og statusarbeidsflyter kjorer i en fa-megabyte minneramme pa release-bygg.
- **Kostnadseffektiv distribusjon** — designet for $10-kort og sma skyinstanser, ingen tunge kjoretidesavhengigheter.
- **Raske kaldstarter** — enkel-binar Rust-kjoretidemiljo holder kommando- og daemonoppstart naer oydblikkelig.
- **Portabel arkitektur** — en binarfil pa tvers av ARM, x86 og RISC-V med byttbare leverandorer/kanaler/verktoy.
- **Lokal-forst Gateway** — enkelt kontrollplan for sesjoner, kanaler, verktoy, cron, SOP-er og hendelser.
- **Multikanal-innboks** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket og flere.
- **Multi-agent-orkestrering (Hands)** — autonome agentsverm som kjorer etter tidsplan og blir smartere over tid.
- **Standard Operating Procedures (SOPs)** — hendelsesdrevet arbeidsflytautomatisering med MQTT, webhook, cron og periferielle utlosere.
- **Nettbasert dashbord** — React 19 + Vite nettgrensesnitt med sanntidschat, minneleser, konfigurasjonsredigeringsverktoy, cron-behandler og verktoyinspektoring.
- **Maskinvareperiferiutstyr** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO via `Peripheral`-traitet.
- **Forsterangs verktoy** — shell, fil-I/O, nettleser, git, web fetch/search, MCP, Jira, Notion, Google Workspace og 70+ flere.
- **Livssyklus-hooks** — fang opp og modifiser LLM-kall, verktoyutforelser og meldinger pa hvert trinn.
- **Ferdighetsplattform** — medfoldgende, fellesskaps- og arbeidsomrade-ferdigheter med sikkerhetsgransking.
- **Tunnelstotte** — Cloudflare, Tailscale, ngrok, OpenVPN og egendefinerte tunneler for fjerntilgang.
### Hvorfor team velger ZeroClaw
- **Slank som standard:** liten Rust-binarfil, rask oppstart, lavt minneforbruk.
- **Sikker fra grunnen:** paring, streng sandkassing, eksplisitte tillateleslister, arbeidsomradeomfang.
- **Fullt byttbart:** kjernesystemer er traits (leverandorer, kanaler, verktoy, minne, tunneler).
- **Ingen innlasing:** OpenAI-kompatibel leverandorstotte + pluggbare egendefinerte endepunkter.
## Ytelsessammenligning (ZeroClaw vs OpenClaw, reproduserbar)
Lokal maskin hurtigtest (macOS arm64, feb 2026) normalisert for 0.8GHz kantmaskinvare.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Sprak** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Oppstart (0.8GHz-kjerne)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Binarstorrelse** | ~28MB (dist) | N/A (Skript) | ~8MB | **~8.8 MB** |
| **Kostnad** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Enhver maskinvare $10** |
> Merknader: ZeroClaw-resultater er malt pa release-bygg med `/usr/bin/time -l`. OpenClaw krever Node.js-kjoretidemiljo (typisk ~390MB ekstra minneoverhead), mens NanoBot krever Python-kjoretidemiljo. PicoClaw og ZeroClaw er statiske binarfiler. RAM-tallene ovenfor er kjoretidesminne; byggetidskompileringskrav er hoyere.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw-sammenligning" width="800" />
</p>
### Reproduserbar lokal maling
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## Alt vi har bygget sa langt
### Kjerneplattform
- Gateway HTTP/WS/SSE-kontrollplan med sesjoner, tilstedevaerelse, konfigurasjon, cron, webhooks, nettbasert dashbord og paring.
- CLI-overflate: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Agentorkestreringssloyfe med verktoyutsendelse, prompt-konstruksjon, meldingsklassifisering og minnelasting.
- Sesjonsmodell med sikkerhetspolicy-handhevelse, autonominiva og godkjenningsstyring.
- Robust leverandorwrapper med failover, retry og modellruting pa tvers av 20+ LLM-backends.
### Kanaler
Kanaler: WhatsApp (native), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
Funksjonsbaserte: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Nettbasert dashbord
React 19 + Vite 6 + Tailwind CSS 4 nettbasert dashbord servert direkte fra Gateway:
- **Dashbord** — systemoversikt, helsestatus, oppetid, kostnadssporing
- **Agentchat** — interaktiv chat med agenten
- **Minne** — bla gjennom og administrer minneoppforinger
- **Konfigurasjon** — vis og rediger konfigurasjon
- **Cron** — administrer planlagte oppgaver
- **Verktoy** — bla gjennom tilgjengelige verktoy
- **Logger** — vis agentaktivitetslogger
- **Kostnad** — tokenbruk og kostnadssporing
- **Doktor** — systemhelsediagnostikk
- **Integrasjoner** — integrasjonsstatus og oppsett
- **Paring** — enhetsparingsadministrasjon
### Firmwaremal
| Mal | Plattform | Formal |
|-----|-----------|--------|
| ESP32 | Espressif ESP32 | Tradlos periferiagent |
| ESP32-UI | ESP32 + Skjerm | Agent med visuelt grensesnitt |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Industriell periferi |
| Arduino | Arduino | Grunnleggende sensor/aktuatorbro |
| Uno Q Bridge | Arduino Uno | Seriell bro til agent |
### Verktoy + automatisering
- **Kjerne:** shell, fillesing/skriving/redigering, git-operasjoner, glob-sok, innholdssok
- **Nett:** nettleserkontroll, web fetch, web search, skjermbilde, bildeinformasjon, PDF-lesing
- **Integrasjoner:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol verktoy-wrapper + utsatte verktoysamlinger
- **Planlegging:** cron legg til/fjern/oppdater/kjor, planleggingsverktoy
- **Minne:** recall, store, forget, knowledge, project intel
- **Avansert:** delegate (agent-til-agent), swarm, modellbytte/-ruting, sikkerhetsoperasjoner, skyoperasjoner
- **Maskinvare:** board info, memory map, memory read (funksjonsbasert)
### Kjoretidemiljo + sikkerhet
- **Autonominiva:** ReadOnly, Supervised (standard), Full.
- **Sandkassing:** arbeidsomradeisolasjon, stiblokkering, kommandotillatelselister, forbudte stier, Landlock (Linux), Bubblewrap.
- **Hastighetsbegrensning:** maks handlinger per time, maks kostnad per dag (konfigurerbart).
- **Godkjenningsstyring:** interaktiv godkjenning for medium/hoy-risiko operasjoner.
- **Nodstopp:** mulighet for nodavslutning.
- **129+ sikkerhetstester** i automatisert CI.
### Drift + pakking
- Nettbasert dashbord servert direkte fra Gateway.
- Tunnelstotte: Cloudflare, Tailscale, ngrok, OpenVPN, egendefinert kommando.
- Docker kjoretidemiljoadapter for kontainerisert utforelse.
- CI/CD: beta (auto pa push) -> stabil (manuell utsendelse) -> Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Forhandsbygde binarfiler for Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Konfigurasjon
ZeroClaw bruker en YAML-konfigurasjonsfil. Som standard ser den etter `config.yaml`.
Minimal `~/.zeroclaw/config.toml`:
```yaml
# Standardleverandør
provider: anthropic
# Leverandørkonfigurasjon
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# Minnekonfigurasjon
memory:
backend: sqlite
path: data/memory.db
# Kanalkonfigurasjon
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
Full konfigurasjonsreferanse: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Kanalkonfigurasjon
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Tunnelkonfigurasjon
```toml
[tunnel]
kind = "cloudflare" # eller "tailscale", "ngrok", "openvpn", "custom", "none"
```
Detaljer: [Kanalreferanse](docs/reference/api/channels-reference.md) · [Konfigurasjonsreferanse](docs/reference/api/config-reference.md)
### Kjoretidestotte (gjeldende)
- **`native`** (standard) — direkte prosessutforelse, raskeste sti, ideell for palitelige miljoer.
- **`docker`** — full kontainerisolasjon, handhevede sikkerhetspolicyer, krever Docker.
Sett `runtime.kind = "docker"` for streng sandkassing eller nettverksisolasjon.
## Abonnementsautentisering (OpenAI Codex / Claude Code / Gemini)
ZeroClaw stotter abonnements-native autentiseringsprofiler (multi-konto, kryptert i hvile).
- Lagringsfil: `~/.zeroclaw/auth-profiles.json`
- Krypteringsnokkel: `~/.zeroclaw/.secret_key`
- Profil-ID-format: `<provider>:<profile_name>` (eksempel: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT-abonnement)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Sjekk / oppdater / bytt profil
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Kjor agenten med abonnementsautentisering
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Agentarbeidsomrade + ferdigheter
Arbeidsomraderot: `~/.zeroclaw/workspace/` (konfigurerbar via konfigurasjon).
Injiserte prompt-filer:
- `IDENTITY.md` — agentpersonlighet og rolle
- `USER.md` — brukerkontekst og preferanser
- `MEMORY.md` — langtidsfakta og laerdommer
- `AGENTS.md` — sesjonskonvensjoner og initialiseringsregler
- `SOUL.md` — kjerneidentitet og driftsprinsipper
Ferdigheter: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` eller `SKILL.toml`.
```bash
# List installerte ferdigheter
zeroclaw skills list
# Installer fra git
zeroclaw skills install https://github.com/user/my-skill.git
# Sikkerhetsgransking for installasjon
zeroclaw skills audit https://github.com/user/my-skill.git
# Fjern en ferdighet
zeroclaw skills remove my-skill
```
## CLI-kommandoer
```bash
# Arbeidsomradeadministrasjon
zeroclaw onboard # Veiledet oppsettveiviser
zeroclaw status # Vis daemon/agentstatus
zeroclaw doctor # Kjor systemdiagnostikk
# Gateway + daemon
zeroclaw gateway # Start gateway-server (127.0.0.1:42617)
zeroclaw daemon # Start full autonom kjoretidemiljo
# Agent
zeroclaw agent # Interaktiv chatmodus
zeroclaw agent -m "melding" # Enkeltmeldingsmodus
# Tjenesteadministrasjon
zeroclaw service install # Installer som OS-tjeneste (launchd/systemd)
zeroclaw service start|stop|restart|status
# Kanaler
zeroclaw channel list # List konfigurerte kanaler
zeroclaw channel doctor # Sjekk kanalhelse
zeroclaw channel bind-telegram 123456789
# Cron + planlegging
zeroclaw cron list # List planlagte jobber
zeroclaw cron add "*/5 * * * *" --prompt "Sjekk systemhelse"
zeroclaw cron remove <id>
# Minne
zeroclaw memory list # List minneoppforinger
zeroclaw memory get <key> # Hent et minne
zeroclaw memory stats # Minnestatistikk
# Autentiseringsprofiler
zeroclaw auth login --provider <navn>
zeroclaw auth status
zeroclaw auth use --provider <navn> --profile <profil>
# Maskinvareperiferiutstyr
zeroclaw hardware discover # Sok etter tilkoblede enheter
zeroclaw peripheral list # List tilkoblede periferienheter
zeroclaw peripheral flash # Flash firmware til enhet
# Migrering
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell-fullforinger
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Full kommandoreferanse: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Forutsetninger
<details>
<summary><strong>Windows</strong></summary>
#### Pakrevd
1. **Visual Studio Build Tools** (gir MSVC-linker og Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Under installasjon (eller via Visual Studio Installer), velg arbeidsbelastningen **"Desktop development with C++"**.
2. **Rust-verktoyskjede:**
```powershell
winget install Rustlang.Rustup
```
Etter installasjon, apne en ny terminal og kjor `rustup default stable` for a sikre at den stabile verktoyskjeden er aktiv.
3. **Verifiser** at begge fungerer:
```powershell
rustc --version
cargo --version
```
#### Valgfritt
- **Docker Desktop** — kun pakrevd ved bruk av [Docker-sandkassekjoretidemiljo](#kjoretidestotte-gjeldende) (`runtime.kind = "docker"`). Installer via `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Pakrevd
1. **Byggeverktoyer:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Installer Xcode Command Line Tools: `xcode-select --install`
2. **Rust-verktoyskjede:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Se [rustup.rs](https://rustup.rs) for detaljer.
3. **Verifiser** at begge fungerer:
```bash
rustc --version
cargo --version
```
#### En-linje installasjon
Eller hopp over stegene ovenfor og installer alt (systemavhengigheter, Rust, ZeroClaw) med en enkelt kommando:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Kompileringsressurskrav
Bygging fra kildekode krever mer ressurser enn a kjore den resulterende binarfilen:
| Ressurs | Minimum | Anbefalt |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Ledig disk** | 6 GB | 10 GB+ |
Hvis verten din er under minimum, bruk forhandsbygde binarfiler:
```bash
./install.sh --prefer-prebuilt
```
For a kreve kun binarinstallasjon uten kildekodefallback:
```bash
./install.sh --prebuilt-only
```
#### Valgfritt
- **Docker** — kun pakrevd ved bruk av [Docker-sandkassekjoretidemiljo](#kjoretidestotte-gjeldende) (`runtime.kind = "docker"`). Installer via pakkebehandleren din eller [docker.com](https://docs.docker.com/engine/install/).
> **Merk:** Standard `cargo build --release` bruker `codegen-units=1` for a senke topp-kompileringstrykk. For raskere bygg pa kraftige maskiner, bruk `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Forhandsbygde binarfiler
Utgivelsesfiler publiseres for:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Last ned de nyeste filene fra:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Dokumentasjon
For detaljert dokumentasjon, se:
Bruk disse nar du er forbi onboarding-flyten og onsker dypere referanse.
- [Dokumentasjonshub](docs/README.md)
- [Kommandoreferanse](docs/commands-reference.md)
- [Leverandørreferanse](docs/providers-reference.md)
- [Kanalreferanse](docs/channels-reference.md)
- [Konfigurasjonsreferanse](docs/config-reference.md)
- Start med [dokumentasjonsindeksen](docs/README.md) for navigasjon og "hva er hvor."
- Les [arkitekturoversikten](docs/architecture.md) for den fullstendige systemmodellen.
- Bruk [konfigurasjonsreferansen](docs/reference/api/config-reference.md) nar du trenger hver nokkel og eksempel.
- Kjor Gateway etter boken med [driftshandboken](docs/ops/operations-runbook.md).
- Folg [ZeroClaw Onboard](#hurtigstart) for et veiledet oppsett.
- Feilsok vanlige problemer med [feilsokingsguiden](docs/ops/troubleshooting.md).
- Gjennga [sikkerhetsveiledning](docs/security/README.md) for du eksponerer noe.
---
### Referansedokumentasjon
## Bidrag
- Dokumentasjonshub: [docs/README.md](docs/README.md)
- Samlet innholdsfortegnelse: [docs/SUMMARY.md](docs/SUMMARY.md)
- Kommandoreferanse: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Konfigurasjonsreferanse: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Leverandorreferanse: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Kanalreferanse: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Driftshandbok: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Feilsoking: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
Bidrag er velkomne! Vennligst les [Bidragsguiden](CONTRIBUTING.md).
### Samarbeidsdokumentasjon
- Bidragsguide: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR-arbeidsflyts-policy: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI-arbeidsflytguide: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Anmelderhandbok: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Sikkerhetsavsloring: [SECURITY.md](SECURITY.md)
- Dokumentasjonsmal: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Distribusjon + drift
- Nettverksdistribusjonsguide: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Proxy-agenthandbok: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Maskinvareguider: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw ble bygget for den smidige krabben 🦀, en rask og effektiv AI-assistent. Bygget av Argenis De La Rosa og fellesskapet.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Stott ZeroClaw
Hvis ZeroClaw hjelper arbeidet ditt og du onsker a stotte pagaende utvikling, kan du donere her:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### Spesiell takk
En hjertelig takk til miljoene og institusjonene som inspirerer og driver dette open source-arbeidet:
- **Harvard University** — for a fremme intellektuell nysgjerrighet og flytte grensene for hva som er mulig.
- **MIT** — for a fremme apen kunnskap, apen kildekode og troen pa at teknologi bor vaere tilgjengelig for alle.
- **Sundai Club** — for fellesskapet, energien og den uboyelige driven til a bygge ting som betyr noe.
- **Verden og videre** 🌍✨ — til hver bidragsyter, drommer og bygger der ute som gjor open source til en kraft for det gode. Dette er for dere.
Vi bygger i det apne fordi de beste ideene kommer fra overalt. Hvis du leser dette, er du en del av det. Velkommen. 🦀❤️
## Bidra
Ny til ZeroClaw? Se etter issues merket [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — se var [Bidragsguide](CONTRIBUTING.md#first-time-contributors) for hvordan du kommer i gang. AI/vibe-kodede PR-er er velkomne! 🤖
Se [CONTRIBUTING.md](CONTRIBUTING.md) og [CLA.md](docs/contributing/cla.md). Implementer et trait, send inn en PR:
- CI-arbeidsflytguide: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Ny `Provider` -> `src/providers/`
- Ny `Channel` -> `src/channels/`
- Ny `Observer` -> `src/observability/`
- Nytt `Tool` -> `src/tools/`
- Nytt `Memory` -> `src/memory/`
- Ny `Tunnel` -> `src/tunnel/`
- Ny `Peripheral` -> `src/peripherals/`
- Ny `Skill` -> `~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## Offisielt repository og etterligningsadvarsel
**Dette er det eneste offisielle ZeroClaw-repositoriet:**
> https://github.com/zeroclaw-labs/zeroclaw
Ethvert annet repository, organisasjon, domene eller pakke som hevder a vaere "ZeroClaw" eller antyder tilknytning til ZeroClaw Labs er **uautorisert og ikke tilknyttet dette prosjektet**. Kjente uautoriserte forker vil bli listet i [TRADEMARK.md](docs/maintainers/trademark.md).
Hvis du stoter pa etterligning eller varemerkemisbruk, vennligst [opprett en issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Lisens
Dette prosjektet er dobbelt-lisensiert:
ZeroClaw er dobbelt-lisensiert for maksimal apenhet og bidragsyterbeskyttelse:
- MIT License
- Apache License, versjon 2.0
| Lisens | Bruksomrade |
|---|---|
| [MIT](LICENSE-MIT) | Open source, forskning, akademisk, personlig bruk |
| [Apache 2.0](LICENSE-APACHE) | Patentbeskyttelse, institusjonell, kommersiell distribusjon |
Se [LICENSE-APACHE](LICENSE-APACHE) og [LICENSE-MIT](LICENSE-MIT) for detaljer.
Du kan velge begge lisenser. **Bidragsytere gir automatisk rettigheter under begge** — se [CLA.md](docs/contributing/cla.md) for den fullstendige bidragsyteravtalen.
### Varemerke
**ZeroClaw**-navnet og logoen er varemerker for ZeroClaw Labs. Denne lisensen gir ikke tillatelse til a bruke dem for a antyde stotte eller tilknytning. Se [TRADEMARK.md](docs/maintainers/trademark.md) for tillatt og forbudt bruk.
### Bidragsyterbeskyttelse
- Du **beholder opphavsretten** til dine bidrag
- **Patentbevilgning** (Apache 2.0) beskytter deg mot patentkrav fra andre bidragsytere
- Dine bidrag er **permanent attribuert** i commit-historikk og [NOTICE](NOTICE)
- Ingen varemerkerettigheter overdrages ved a bidra
---
## Fellesskap
**ZeroClaw** — Null overhead. Null kompromiss. Distribuer overalt. Bytt hva som helst. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Bidragsytere
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw-bidragsytere" />
</a>
## Sponsorer
Denne listen genereres fra GitHub-bidragsytergrafen og oppdateres automatisk.
Hvis ZeroClaw er nyttig for deg, vennligst vurder å kjøpe oss en kaffe:
## Stjernehistorikk
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Stjernehistorikk-diagram" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Asistent AI Personal</h1>
<p align="center">
<strong>Zero overhead. Zero compromisuri. 100% Rust. 100% Agnostic.</strong><br>
⚡️ <strong>Rulează pe hardware de $10 cu <5MB RAM: Asta e cu 99% mai puțină memorie decât OpenClaw și cu 98% mai ieftin decât un Mac mini!</strong>
⚡️ <strong>Rulează pe hardware de $10 cu <5MB RAM: Cu 99% mai puțină memorie decât OpenClaw și cu 98% mai ieftin decât un Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Construit de studenți și membri ai comunităților Harvard, MIT și Sundai.Club.
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw este un asistent AI personal pe care îl rulezi pe propriile dispozitive. Îți răspunde pe canalele pe care le folosești deja (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work și altele). Are un panou web pentru control în timp real și se poate conecta la periferice hardware (ESP32, STM32, Arduino, Raspberry Pi). Gateway-ul este doar planul de control — produsul este asistentul.
## Ce este ZeroClaw?
Dacă vrei un asistent personal, pentru un singur utilizator, care se simte local, rapid și mereu activ, acesta este.
ZeroClaw este o infrastructură de asistent AI ușoară, mutabilă și extensibilă construită în Rust. Conectează diverși furnizori de LLM (Anthropic, OpenAI, Google, Ollama, etc.) printr-o interfață unificată și suportă multiple canale (Telegram, Matrix, CLI, etc.).
<p align="center">
<a href="https://zeroclawlabs.ai">Site web</a> ·
<a href="docs/README.md">Documentație</a> ·
<a href="docs/architecture.md">Arhitectură</a> ·
<a href="#pornire-rapidă">Începe</a> ·
<a href="#migrarea-de-la-openclaw">Migrare de la OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Depanare</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Caracteristici Principale
> **Configurare recomandată:** rulează `zeroclaw onboard` în terminalul tău. ZeroClaw Onboard te ghidează pas cu pas prin configurarea gateway-ului, workspace-ului, canalelor și provider-ului. Este calea de configurare recomandată și funcționează pe macOS, Linux și Windows (prin WSL2). Instalare nouă? Începe aici: [Începe](#pornire-rapidă)
- **🦀 Scris în Rust**: Performanță ridicată, siguranță a memoriei și abstracțiuni fără costuri
- **🔌 Agnostic față de furnizori**: Suportă OpenAI, Anthropic, Google Gemini, Ollama și alții
- **📱 Multi-canal**: Telegram, Matrix (cu E2EE), CLI și altele
- **🧠 Memorie modulară**: Backend-uri SQLite și Markdown
- **🛠️ Instrumente extensibile**: Adaugă instrumente personalizate cu ușurință
- **🔒 Securitate pe primul loc**: Reverse proxy, design axat pe confidențialitate
### Autentificare prin abonament (OAuth)
---
- **OpenAI Codex** (abonament ChatGPT)
- **Gemini** (Google OAuth)
- **Anthropic** (cheie API sau token de autentificare)
## Start Rapid
Notă despre modele: deși sunt suportate multe provider-e/modele, pentru cea mai bună experiență folosește cel mai puternic model de ultimă generație disponibil. Vezi [Onboarding](#pornire-rapidă).
### Cerințe
Configurare modele + CLI: [Referință Providers](docs/reference/api/providers-reference.md)
Rotație profil de autentificare (OAuth vs chei API) + failover: [Failover model](docs/reference/api/providers-reference.md)
- Rust 1.70+
- O cheie API de furnizor LLM (Anthropic, OpenAI, etc.)
## Instalare (recomandat)
### Instalare
Runtime: Rust stable toolchain. Binar unic, fără dependențe de runtime.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Bootstrap cu un clic
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` rulează automat după instalare pentru a configura workspace-ul și provider-ul.
## Pornire rapidă (TL;DR)
Ghid complet pentru începători (autentificare, asociere, canale): [Începe](docs/setup-guides/one-click-bootstrap.md)
```bash
# Instalare + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Pornește gateway-ul (server webhook + panou web)
zeroclaw gateway # implicit: 127.0.0.1:42617
zeroclaw gateway --port 0 # port aleatoriu (securitate îmbunătățită)
# Vorbește cu asistentul
zeroclaw agent -m "Hello, ZeroClaw!"
# Mod interactiv
zeroclaw agent
# Pornește runtime-ul autonom complet (gateway + canale + cron + hands)
zeroclaw daemon
# Verifică starea
zeroclaw status
# Rulează diagnostice
zeroclaw doctor
```
Actualizezi? Rulează `zeroclaw doctor` după actualizare.
### Din sursă (dezvoltare)
```bash
# Clonează repository-ul
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Construiește
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Rulează
cargo run --release
zeroclaw onboard
```
### Cu Docker
> **Alternativă dev (fără instalare globală):** prefixează comenzile cu `cargo run --release --` (exemplu: `cargo run --release -- status`).
## Migrarea de la OpenClaw
ZeroClaw poate importa workspace-ul, memoria și configurația OpenClaw:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Previzualizează ce va fi migrat (sigur, doar citire)
zeroclaw migrate openclaw --dry-run
# Rulează migrarea
zeroclaw migrate openclaw
```
---
Aceasta migrează intrările de memorie, fișierele workspace și configurația din `~/.openclaw/` în `~/.zeroclaw/`. Configurația este convertită automat din JSON în TOML.
## Setări implicite de securitate (acces DM)
ZeroClaw se conectează la suprafețe de mesagerie reale. Tratează DM-urile primite ca intrare neîncredere.
Ghid complet de securitate: [SECURITY.md](SECURITY.md)
Comportament implicit pe toate canalele:
- **Asociere DM** (implicit): expeditorii necunoscuți primesc un cod scurt de asociere și bot-ul nu procesează mesajul lor.
- Aprobă cu: `zeroclaw pairing approve <channel> <code>` (apoi expeditorul este adăugat pe o listă de permisiuni locală).
- DM-urile publice primite necesită un opt-in explicit în `config.toml`.
- Rulează `zeroclaw doctor` pentru a identifica politici DM riscante sau configurate greșit.
**Niveluri de autonomie:**
| Nivel | Comportament |
|-------|----------|
| `ReadOnly` | Agentul poate observa dar nu poate acționa |
| `Supervised` (implicit) | Agentul acționează cu aprobare pentru operațiuni de risc mediu/ridicat |
| `Full` | Agentul acționează autonom în limitele politicii |
**Straturi de sandboxing:** izolarea workspace-ului, blocarea traversării căilor, liste de permisiuni pentru comenzi, căi interzise (`/etc`, `/root`, `~/.ssh`), limitare de rată (acțiuni maxime/oră, limite de cost/zi).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Anunțuri
Folosește acest panou pentru notificări importante (schimbări care rup compatibilitatea, avize de securitate, ferestre de mentenanță și blocaje de lansare).
| Data (UTC) | Nivel | Notificare | Acțiune |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Critic_ | Nu suntem **afiliați** cu `openagen/zeroclaw`, `zeroclaw.org` sau `zeroclaw.net`. Domeniile `zeroclaw.org` și `zeroclaw.net` indică în prezent fork-ul `openagen/zeroclaw`, iar acel domeniu/depozit se dă drept site-ul/proiectul nostru oficial. | Nu aveți încredere în informații, binare, strângeri de fonduri sau anunțuri din acele surse. Folosiți doar [acest depozit](https://github.com/zeroclaw-labs/zeroclaw) și conturile noastre sociale verificate. |
| 2026-02-21 | _Important_ | Site-ul nostru oficial este acum activ: [zeroclawlabs.ai](https://zeroclawlabs.ai). Mulțumim pentru răbdare în timp ce pregăteam lansarea. Încă observăm tentative de uzurpare a identității, așa că **nu** vă alăturați activităților de investiții sau strângere de fonduri care revendică numele ZeroClaw, decât dacă sunt publicate prin canalele noastre oficiale. | Folosiți [acest depozit](https://github.com/zeroclaw-labs/zeroclaw) ca singura sursă de adevăr. Urmăriți [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) și [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) pentru actualizări oficiale. |
| 2026-02-19 | _Important_ | Anthropic a actualizat termenii de Autentificare și Utilizare a Credențialelor pe 2026-02-19. Token-urile OAuth Claude Code (Free, Pro, Max) sunt destinate exclusiv Claude Code și Claude.ai; utilizarea token-urilor OAuth din Claude Free/Pro/Max în orice alt produs, instrument sau serviciu (inclusiv Agent SDK) nu este permisă și poate încălca Termenii Serviciului pentru Consumatori. | Vă rugăm să evitați temporar integrările OAuth Claude Code pentru a preveni pierderi potențiale. Clauza originală: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Puncte forte
- **Runtime ușor implicit** — fluxurile comune CLI și de stare rulează într-un plic de memorie de câțiva megabytes pe build-urile de lansare.
- **Implementare eficientă din punct de vedere al costurilor** — proiectat pentru plăci de $10 și instanțe cloud mici, fără dependențe runtime grele.
- **Porniri la rece rapide** — runtime-ul Rust cu binar unic menține pornirea comenzilor și daemon-ului aproape instantanee.
- **Arhitectură portabilă** — un singur binar pe ARM, x86 și RISC-V cu provider-e/canale/instrumente interschimbabile.
- **Gateway local-first** — plan de control unic pentru sesiuni, canale, instrumente, cron, SOP-uri și evenimente.
- **Inbox multi-canal** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket și altele.
- **Orchestrare multi-agent (Hands)** — roiuri de agenți autonomi care rulează programat și devin mai inteligenți în timp.
- **Proceduri Operaționale Standard (SOP-uri)** — automatizare de fluxuri de lucru bazată pe evenimente cu MQTT, webhook, cron și declanșatoare periferice.
- **Panou Web** — UI web React 19 + Vite cu chat în timp real, browser de memorie, editor de configurare, manager cron și inspector de instrumente.
- **Periferice hardware** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO prin trait-ul `Peripheral`.
- **Instrumente de primă clasă** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace și 70+ altele.
- **Hook-uri de ciclu de viață** — interceptează și modifică apelurile LLM, execuțiile de instrumente și mesajele la fiecare etapă.
- **Platformă de skill-uri** — skill-uri incluse, comunitare și de workspace cu audit de securitate.
- **Suport tunnel** — Cloudflare, Tailscale, ngrok, OpenVPN și tuneluri personalizate pentru acces la distanță.
### De ce echipele aleg ZeroClaw
- **Ușor implicit:** binar Rust mic, pornire rapidă, amprentă de memorie redusă.
- **Sigur prin design:** asociere, sandboxing strict, liste de permisiuni explicite, limitarea workspace-ului.
- **Complet interschimbabil:** sistemele de bază sunt trait-uri (provider-e, canale, instrumente, memorie, tuneluri).
- **Fără lock-in:** suport provider compatibil OpenAI + endpoint-uri personalizate conectabile.
## Instantaneu Benchmark (ZeroClaw vs OpenClaw, Reproductibil)
Benchmark rapid pe mașină locală (macOS arm64, feb 2026) normalizat pentru hardware edge 0.8GHz.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Limbaj** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Pornire (nucleu 0.8GHz)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Dimensiune binar** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Cost** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Orice hardware $10** |
> Note: Rezultatele ZeroClaw sunt măsurate pe build-uri de lansare folosind `/usr/bin/time -l`. OpenClaw necesită runtime Node.js (de obicei ~390MB overhead suplimentar de memorie), în timp ce NanoBot necesită runtime Python. PicoClaw și ZeroClaw sunt binare statice. Cifrele RAM de mai sus sunt memorie runtime; cerințele de compilare în timpul build-ului sunt mai mari.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Măsurare locală reproductibilă
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## Tot ce am construit până acum
### Platformă de bază
- Plan de control HTTP/WS/SSE Gateway cu sesiuni, prezență, configurare, cron, webhook-uri, panou web și asociere.
- Suprafață CLI: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Buclă de orchestrare agent cu dispatch de instrumente, construcție de prompt, clasificare de mesaje și încărcare de memorie.
- Model de sesiune cu aplicarea politicii de securitate, niveluri de autonomie și aprobare condiționată.
- Wrapper provider rezilient cu failover, reîncercare și rutare de modele pe 20+ backend-uri LLM.
### Canale
Canale: WhatsApp (nativ), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
Feature-gated: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Panou web
Panou web React 19 + Vite 6 + Tailwind CSS 4 servit direct din Gateway:
- **Dashboard** — prezentare generală a sistemului, stare de sănătate, uptime, urmărire costuri
- **Agent Chat** — chat interactiv cu agentul
- **Memory** — navighează și gestionează intrările de memorie
- **Config** — vizualizează și editează configurația
- **Cron** — gestionează sarcinile programate
- **Tools** — navighează instrumentele disponibile
- **Logs** — vizualizează jurnalele de activitate ale agentului
- **Cost** — utilizarea token-urilor și urmărirea costurilor
- **Doctor** — diagnostice de sănătate a sistemului
- **Integrations** — starea integrărilor și configurare
- **Pairing** — gestionarea asocierii dispozitivelor
### Ținte firmware
| Țintă | Platformă | Scop |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | Agent periferic wireless |
| ESP32-UI | ESP32 + Display | Agent cu interfață vizuală |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Periferic industrial |
| Arduino | Arduino | Punte senzor/actuator de bază |
| Uno Q Bridge | Arduino Uno | Punte serială către agent |
### Instrumente + automatizare
- **De bază:** shell, file read/write/edit, operații git, glob search, content search
- **Web:** browser control, web fetch, web search, screenshot, image info, PDF read
- **Integrări:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **Programare:** cron add/remove/update/run, schedule tool
- **Memorie:** recall, store, forget, knowledge, project intel
- **Avansat:** delegate (agent-la-agent), swarm, model switch/routing, security ops, cloud ops
- **Hardware:** board info, memory map, memory read (feature-gated)
### Runtime + siguranță
- **Niveluri de autonomie:** ReadOnly, Supervised (implicit), Full.
- **Sandboxing:** izolarea workspace-ului, blocarea traversării căilor, liste de permisiuni pentru comenzi, căi interzise, Landlock (Linux), Bubblewrap.
- **Limitare de rată:** acțiuni maxime pe oră, cost maxim pe zi (configurabil).
- **Aprobare condiționată:** aprobare interactivă pentru operațiuni de risc mediu/ridicat.
- **E-stop:** capacitate de oprire de urgență.
- **129+ teste de securitate** în CI automatizat.
### Ops + împachetare
- Panou web servit direct din Gateway.
- Suport tunnel: Cloudflare, Tailscale, ngrok, OpenVPN, comandă personalizată.
- Adaptor runtime Docker pentru execuție containerizată.
- CI/CD: beta (automat la push) → stable (dispatch manual) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Binare pre-construite pentru Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Configurare
ZeroClaw folosește un fișier de configurare YAML. În mod implicit, caută `config.yaml`.
Minimal `~/.zeroclaw/config.toml`:
```yaml
# Furnizor implicit
provider: anthropic
# Configurare furnizori
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# Configurare memorie
memory:
backend: sqlite
path: data/memory.db
# Configurare canale
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
Referință completă de configurare: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Configurare canale
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Configurare tunnel
```toml
[tunnel]
kind = "cloudflare" # sau "tailscale", "ngrok", "openvpn", "custom", "none"
```
Detalii: [Referință canale](docs/reference/api/channels-reference.md) · [Referință configurare](docs/reference/api/config-reference.md)
### Suport runtime (curent)
- **`native`** (implicit) — execuție directă a procesului, cea mai rapidă cale, ideală pentru medii de încredere.
- **`docker`** — izolare completă în container, politici de securitate aplicate, necesită Docker.
Setează `runtime.kind = "docker"` pentru sandboxing strict sau izolare de rețea.
## Autentificare prin abonament (OpenAI Codex / Claude Code / Gemini)
ZeroClaw suportă profiluri de autentificare native abonament (multi-cont, criptate în repaus).
- Fișier de stocare: `~/.zeroclaw/auth-profiles.json`
- Cheie de criptare: `~/.zeroclaw/.secret_key`
- Format id profil: `<provider>:<profile_name>` (exemplu: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (abonament ChatGPT)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Verifică / reîmprospătează / schimbă profilul
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Rulează agentul cu autentificare prin abonament
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Workspace agent + skill-uri
Rădăcina workspace: `~/.zeroclaw/workspace/` (configurabilă prin config).
Fișiere prompt injectate:
- `IDENTITY.md` — personalitatea și rolul agentului
- `USER.md` — contextul și preferințele utilizatorului
- `MEMORY.md` — fapte și lecții pe termen lung
- `AGENTS.md` — convenții de sesiune și reguli de inițializare
- `SOUL.md` — identitate de bază și principii operaționale
Skill-uri: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` sau `SKILL.toml`.
```bash
# Listează skill-urile instalate
zeroclaw skills list
# Instalează din git
zeroclaw skills install https://github.com/user/my-skill.git
# Audit de securitate înainte de instalare
zeroclaw skills audit https://github.com/user/my-skill.git
# Elimină un skill
zeroclaw skills remove my-skill
```
## Comenzi CLI
```bash
# Gestionarea workspace-ului
zeroclaw onboard # Asistent de configurare ghidată
zeroclaw status # Afișează starea daemon/agent
zeroclaw doctor # Rulează diagnostice de sistem
# Gateway + daemon
zeroclaw gateway # Pornește serverul gateway (127.0.0.1:42617)
zeroclaw daemon # Pornește runtime-ul autonom complet
# Agent
zeroclaw agent # Mod chat interactiv
zeroclaw agent -m "message" # Mod mesaj unic
# Gestionarea serviciilor
zeroclaw service install # Instalează ca serviciu OS (launchd/systemd)
zeroclaw service start|stop|restart|status
# Canale
zeroclaw channel list # Listează canalele configurate
zeroclaw channel doctor # Verifică sănătatea canalelor
zeroclaw channel bind-telegram 123456789
# Cron + programare
zeroclaw cron list # Listează sarcinile programate
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Memorie
zeroclaw memory list # Listează intrările de memorie
zeroclaw memory get <key> # Recuperează o memorie
zeroclaw memory stats # Statistici memorie
# Profiluri de autentificare
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Periferice hardware
zeroclaw hardware discover # Scanează dispozitivele conectate
zeroclaw peripheral list # Listează perifericele conectate
zeroclaw peripheral flash # Încarcă firmware pe dispozitiv
# Migrare
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Completări shell
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Referință completă comenzi: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Cerințe preliminare
<details>
<summary><strong>Windows</strong></summary>
#### Necesare
1. **Visual Studio Build Tools** (furnizează linker-ul MSVC și Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
În timpul instalării (sau prin Visual Studio Installer), selectează sarcina de lucru **"Desktop development with C++"**.
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
După instalare, deschide un terminal nou și rulează `rustup default stable` pentru a te asigura că toolchain-ul stabil este activ.
3. **Verifică** că ambele funcționează:
```powershell
rustc --version
cargo --version
```
#### Opțional
- **Docker Desktop** — necesar doar dacă folosești [runtime-ul Docker sandboxed](#suport-runtime-curent) (`runtime.kind = "docker"`). Instalează prin `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Necesare
1. **Build essentials:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Instalează Xcode Command Line Tools: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Vezi [rustup.rs](https://rustup.rs) pentru detalii.
3. **Verifică** că ambele funcționează:
```bash
rustc --version
cargo --version
```
#### Instalator cu o singură linie
Sau sări peste pașii de mai sus și instalează totul (dependențe sistem, Rust, ZeroClaw) cu o singură comandă:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Cerințe de resurse pentru compilare
Construirea din sursă necesită mai multe resurse decât rularea binarului rezultat:
| Resursă | Minimum | Recomandat |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Disc liber** | 6 GB | 10 GB+ |
Dacă gazda ta este sub minimum, folosește binare pre-construite:
```bash
./install.sh --prefer-prebuilt
```
Pentru a impune instalare doar cu binar, fără fallback sursă:
```bash
./install.sh --prebuilt-only
```
#### Opțional
- **Docker** — necesar doar dacă folosești [runtime-ul Docker sandboxed](#suport-runtime-curent) (`runtime.kind = "docker"`). Instalează prin managerul de pachete sau [docker.com](https://docs.docker.com/engine/install/).
> **Notă:** `cargo build --release` implicit folosește `codegen-units=1` pentru a reduce presiunea maximă de compilare. Pentru build-uri mai rapide pe mașini puternice, folosește `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Binare pre-construite
Resursele de lansare sunt publicate pentru:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Descarcă cele mai recente resurse de la:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Documentație
Pentru documentație detaliată, vezi:
Folosește-le când ai trecut de fluxul de onboarding și vrei referința mai detaliată.
- [Hub Documentație](docs/README.md)
- [Referință Comenzi](docs/commands-reference.md)
- [Referință Furnizori](docs/providers-reference.md)
- [Referință Canale](docs/channels-reference.md)
- [Referință Configurare](docs/config-reference.md)
- Începe cu [indexul documentației](docs/README.md) pentru navigare și „ce este unde."
- Citește [prezentarea arhitecturii](docs/architecture.md) pentru modelul complet al sistemului.
- Folosește [referința de configurare](docs/reference/api/config-reference.md) când ai nevoie de fiecare cheie și exemplu.
- Rulează Gateway-ul conform [runbook-ului operațional](docs/ops/operations-runbook.md).
- Urmează [ZeroClaw Onboard](#pornire-rapidă) pentru configurare ghidată.
- Depanează eșecurile comune cu [ghidul de depanare](docs/ops/troubleshooting.md).
- Revizuiește [ghidul de securitate](docs/security/README.md) înainte de a expune ceva.
---
### Documentație de referință
## Contribuții
- Hub documentație: [docs/README.md](docs/README.md)
- TOC documentație unificată: [docs/SUMMARY.md](docs/SUMMARY.md)
- Referință comenzi: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Referință configurare: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Referință providers: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Referință canale: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Runbook operațional: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Depanare: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
Contribuțiile sunt binevenite! Te rugăm să citești [Ghidul de Contribuții](CONTRIBUTING.md).
### Documentație de colaborare
- Ghid de contribuție: [CONTRIBUTING.md](CONTRIBUTING.md)
- Politica fluxului de lucru PR: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- Ghid flux de lucru CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Playbook recenzent: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Politica de divulgare a securității: [SECURITY.md](SECURITY.md)
- Șablon documentație: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Implementare + operațiuni
- Ghid de implementare în rețea: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Playbook proxy agent: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Ghiduri hardware: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw a fost construit pentru smooth crab 🦀, un asistent AI rapid și eficient. Construit de Argenis De La Rosa și comunitate.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Susține ZeroClaw
Dacă ZeroClaw te ajută în muncă și vrei să susții dezvoltarea continuă, poți dona aici:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Mulțumiri Speciale
Mulțumiri sincere comunităților și instituțiilor care inspiră și alimentează această muncă open-source:
- **Harvard University** — pentru cultivarea curiozității intelectuale și extinderea limitelor posibilului.
- **MIT** — pentru promovarea cunoștințelor deschise, open source și credința că tehnologia ar trebui să fie accesibilă tuturor.
- **Sundai Club** — pentru comunitate, energie și dorința neîncetată de a construi lucruri care contează.
- **Lumea și Dincolo** 🌍✨ — fiecărui contributor, visător și constructor care face din open source o forță a binelui. Aceasta este pentru voi.
Construim deschis pentru că cele mai bune idei vin de peste tot. Dacă citești asta, faci parte din asta. Bine ai venit. 🦀❤️
## Contribuție
Nou la ZeroClaw? Caută probleme etichetate [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — vezi [Ghidul de Contribuție](CONTRIBUTING.md#first-time-contributors) pentru cum să începi. PR-urile create cu AI/vibe-coded sunt binevenite! 🤖
Vezi [CONTRIBUTING.md](CONTRIBUTING.md) și [CLA.md](docs/contributing/cla.md). Implementează un trait, trimite un PR:
- Ghid flux de lucru CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- `Provider` nou → `src/providers/`
- `Channel` nou → `src/channels/`
- `Observer` nou → `src/observability/`
- `Tool` nou → `src/tools/`
- `Memory` nou → `src/memory/`
- `Tunnel` nou → `src/tunnel/`
- `Peripheral` nou → `src/peripherals/`
- `Skill` nou → `~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Depozit Oficial & Avertisment de Uzurpare
**Acesta este singurul depozit oficial ZeroClaw:**
> https://github.com/zeroclaw-labs/zeroclaw
Orice alt depozit, organizație, domeniu sau pachet care pretinde a fi „ZeroClaw" sau implică afiliere cu ZeroClaw Labs este **neautorizat și nu este afiliat cu acest proiect**. Fork-urile neautorizate cunoscute vor fi listate în [TRADEMARK.md](docs/maintainers/trademark.md).
Dacă întâmpini uzurpare de identitate sau utilizare abuzivă a mărcii comerciale, te rugăm [deschide o problemă](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Licență
Acest proiect este licențiat dual:
ZeroClaw este dual-licențiat pentru deschidere maximă și protecția contributorilor:
- MIT License
- Apache License, versiunea 2.0
| Licență | Caz de utilizare |
|---|---|
| [MIT](LICENSE-MIT) | Open-source, cercetare, academic, utilizare personală |
| [Apache 2.0](LICENSE-APACHE) | Protecție brevete, instituțional, implementare comercială |
Vezi [LICENSE-APACHE](LICENSE-APACHE) și [LICENSE-MIT](LICENSE-MIT) pentru detalii.
Poți alege oricare licență. **Contributorii acordă automat drepturi sub ambele** — vezi [CLA.md](docs/contributing/cla.md) pentru acordul complet al contributorului.
### Marcă comercială
Numele și logo-ul **ZeroClaw** sunt mărci comerciale ale ZeroClaw Labs. Această licență nu acordă permisiunea de a le folosi pentru a implica aprobare sau afiliere. Vezi [TRADEMARK.md](docs/maintainers/trademark.md) pentru utilizări permise și interzise.
### Protecții pentru contributori
- **Păstrezi drepturile de autor** ale contribuțiilor tale
- **Acordarea de brevete** (Apache 2.0) te protejează de revendicări de brevete ale altor contributori
- Contribuțiile tale sunt **atribuite permanent** în istoricul commit-urilor și [NOTICE](NOTICE)
- Nu se transferă drepturi de marcă comercială prin contribuție
---
## Comunitate
**ZeroClaw** — Zero overhead. Zero compromisuri. Implementează oriunde. Schimbă orice. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Contributori
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## Sponsori
Această listă este generată din graficul contributorilor GitHub și se actualizează automat.
Dacă ZeroClaw îți este util, te rugăm să iei în considerare să ne cumperi o cafea:
## Istoricul Stelelor
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

View File

@ -1,24 +1,33 @@
<p align="center">
<img src="docs/assets/zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀(Русский)</h1>
<h1 align="center">🦀 ZeroClaw — Персональный ИИ-ассистент</h1>
<p align="center">
<strong>Zero overhead. Zero compromise. 100% Rust. 100% Agnostic.</strong>
<strong>Нулевые накладные расходы. Нулевые компромиссы. 100% Rust. 100% Агностик.</strong><br>
⚡️ <strong>Работает на оборудовании за $10 с <5МБ ОЗУ: это на 99% меньше памяти, чем OpenClaw, и на 98% дешевле Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
🌐 Языки:
Создано студентами и участниками сообществ Harvard, MIT и Sundai.Club.
</p>
<p align="center">
🌐 <strong>Языки:</strong>
<a href="README.md">🇺🇸 English</a> ·
<a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
<a href="README.ja.md">🇯🇵 日本語</a> ·
@ -52,75 +61,190 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
<p align="center">
<a href="install.sh">Установка в 1 клик</a> |
<a href="docs/setup-guides/README.md">Быстрый старт</a> |
<a href="docs/README.ru.md">Хаб документации</a> |
<a href="docs/SUMMARY.md">TOC docs</a>
</p>
ZeroClaw — это персональный ИИ-ассистент, который вы запускаете на своих устройствах. Он отвечает вам в каналах, которые вы уже используете (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work и другие). У него есть веб-панель для управления в реальном времени, и он может подключаться к аппаратным периферийным устройствам (ESP32, STM32, Arduino, Raspberry Pi). Gateway — это просто панель управления, а продукт — это ассистент.
Если вам нужен персональный однопользовательский ассистент, который ощущается локальным, быстрым и всегда включённым — это он.
<p align="center">
<strong>Быстрые маршруты:</strong>
<a href="docs/reference/README.md">Справочники</a> ·
<a href="docs/ops/README.md">Операции</a> ·
<a href="docs/ops/troubleshooting.md">Диагностика</a> ·
<a href="docs/security/README.md">Безопасность</a> ·
<a href="docs/hardware/README.md">Аппаратная часть</a> ·
<a href="docs/contributing/README.md">Вклад и CI</a>
<a href="https://zeroclawlabs.ai">Веб-сайт</a> ·
<a href="docs/README.md">Документация</a> ·
<a href="docs/architecture.md">Архитектура</a> ·
<a href="#быстрый-старт">Начало работы</a> ·
<a href="#миграция-с-openclaw">Миграция с OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Устранение неполадок</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
> Этот файл — выверенный перевод `README.md` с акцентом на точность и читаемость (не дословный перевод).
>
> Технические идентификаторы (команды, ключи конфигурации, API-пути, имена Trait) сохранены на английском.
>
> Последняя синхронизация: **2026-02-19**.
> **Рекомендуемая настройка:** выполните `zeroclaw onboard` в терминале. ZeroClaw Onboard пошагово проведёт вас через настройку gateway, рабочего пространства, каналов и провайдера. Это рекомендуемый путь настройки, работающий на macOS, Linux и Windows (через WSL2). Новая установка? Начните здесь: [Начало работы](#быстрый-старт)
## 📢 Доска объявлений
### Аутентификация по подписке (OAuth)
Публикуйте здесь важные уведомления (breaking changes, security advisories, окна обслуживания и блокеры релиза).
- **OpenAI Codex** (подписка ChatGPT)
- **Gemini** (Google OAuth)
- **Anthropic** (API-ключ или токен аутентификации)
| Дата (UTC) | Уровень | Объявление | Действие |
|---|---|---|---|
| 2026-02-19 | _Срочно_ | Мы **не аффилированы** с `openagen/zeroclaw` и `zeroclaw.org`. Домен `zeroclaw.org` сейчас указывает на fork `openagen/zeroclaw`, и этот домен/репозиторий выдают себя за наш официальный сайт и проект. | Не доверяйте информации, бинарникам, сборам средств и «официальным» объявлениям из этих источников. Используйте только [этот репозиторий](https://github.com/zeroclaw-labs/zeroclaw) и наши верифицированные соцсети. |
| 2026-02-21 | _Важно_ | Наш официальный сайт уже запущен: [zeroclawlabs.ai](https://zeroclawlabs.ai). Спасибо, что дождались запуска. При этом попытки выдавать себя за ZeroClaw продолжаются, поэтому не участвуйте в инвестициях, сборах средств и похожих активностях, если они не подтверждены через наши официальные каналы. | Ориентируйтесь только на [этот репозиторий](https://github.com/zeroclaw-labs/zeroclaw); также следите за [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (группа)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) и [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) для официальных обновлений. |
| 2026-02-19 | _Важно_ | Anthropic обновил раздел Authentication and Credential Use 2026-02-19. В нем указано, что OAuth authentication (Free/Pro/Max) предназначена только для Claude Code и Claude.ai; использование OAuth-токенов, полученных через Claude Free/Pro/Max, в любых других продуктах, инструментах или сервисах (включая Agent SDK), не допускается и может считаться нарушением Consumer Terms of Service. | Чтобы избежать потерь, временно не используйте Claude Code OAuth-интеграции. Оригинал: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
Примечание о моделях: хотя поддерживается множество провайдеров/моделей, для лучшего опыта используйте самую мощную модель последнего поколения, доступную вам. См. [Онбординг](#быстрый-старт).
## О проекте
Конфигурация моделей + CLI: [Справочник провайдеров](docs/reference/api/providers-reference.md)
Ротация профилей аутентификации (OAuth vs API-ключи) + переключение при сбое: [Переключение моделей при сбое](docs/reference/api/providers-reference.md)
ZeroClaw — это производительная и расширяемая инфраструктура автономного AI-агента. ZeroClaw — это **операционная система времени выполнения** для агентных рабочих процессов — инфраструктура, абстрагирующая модели, инструменты, память и выполнение, позволяя создавать агентов один раз и запускать где угодно.
## Установка (рекомендуется)
- Нативно на Rust, единый бинарник, переносимость между ARM / x86 / RISC-V
- Архитектура на Trait (`Provider`, `Channel`, `Tool`, `Memory` и др.)
- Безопасные значения по умолчанию: pairing, явные allowlist, sandbox и scope-ограничения
Среда выполнения: стабильный набор инструментов Rust. Один бинарный файл, без зависимостей времени выполнения.
## Почему выбирают ZeroClaw
### Homebrew (macOS/Linuxbrew)
- **Лёгкий runtime по умолчанию**: Повседневные CLI-операции и `status` обычно укладываются в несколько МБ памяти.
- **Оптимизирован для недорогих сред**: Подходит для бюджетных плат и небольших cloud-инстансов без тяжёлой runtime-обвязки.
- **Быстрый cold start**: Архитектура одного Rust-бинарника ускоряет запуск основных команд и daemon-режима.
- **Портативная модель деплоя**: Единый подход для ARM / x86 / RISC-V и возможность менять providers/channels/tools.
```bash
brew install zeroclaw
```
## Снимок бенчмарка (ZeroClaw vs OpenClaw, воспроизводимо)
### Установка в один клик
Ниже — быстрый локальный сравнительный срез (macOS arm64, февраль 2026), нормализованный под 0.8GHz edge CPU.
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
|---|---|---|---|---|
| **Язык** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Старт (ядро 0.8GHz)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Размер бинарника** | ~28MB (dist) | N/A (скрипты) | ~8MB | **~8.8 MB** |
| **Стоимость** | Mac Mini $599 | Linux SBC ~$50 | Linux-плата $10 | **Любое железо за $10** |
`zeroclaw onboard` запускается автоматически после установки для настройки рабочего пространства и провайдера.
> Примечание: результаты ZeroClaw получены на release-сборке с помощью `/usr/bin/time -l`. OpenClaw требует Node.js runtime; только этот runtime обычно добавляет около 390MB дополнительного потребления памяти. NanoBot требует Python runtime. PicoClaw и ZeroClaw — статические бинарники.
## Быстрый старт (TL;DR)
Полное руководство для начинающих (аутентификация, сопряжение, каналы): [Начало работы](docs/setup-guides/one-click-bootstrap.md)
```bash
# Install + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Start the gateway (webhook server + web dashboard)
zeroclaw gateway # default: 127.0.0.1:42617
zeroclaw gateway --port 0 # random port (security hardened)
# Talk to the assistant
zeroclaw agent -m "Hello, ZeroClaw!"
# Interactive mode
zeroclaw agent
# Start full autonomous runtime (gateway + channels + cron + hands)
zeroclaw daemon
# Check status
zeroclaw status
# Run diagnostics
zeroclaw doctor
```
Обновляетесь? Выполните `zeroclaw doctor` после обновления.
### Из исходного кода (для разработки)
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
zeroclaw onboard
```
> **Альтернатива для разработки (без глобальной установки):** добавляйте перед командами `cargo run --release --` (пример: `cargo run --release -- status`).
## Миграция с OpenClaw
ZeroClaw может импортировать ваше рабочее пространство, память и конфигурацию OpenClaw:
```bash
# Preview what will be migrated (safe, read-only)
zeroclaw migrate openclaw --dry-run
# Run the migration
zeroclaw migrate openclaw
```
Это переносит ваши записи памяти, файлы рабочего пространства и конфигурацию из `~/.openclaw/` в `~/.zeroclaw/`. Конфигурация автоматически конвертируется из JSON в TOML.
## Настройки безопасности по умолчанию (доступ через ЛС)
ZeroClaw подключается к реальным поверхностям обмена сообщениями. Относитесь к входящим ЛС как к ненадёжному вводу.
Полное руководство по безопасности: [SECURITY.md](SECURITY.md)
Поведение по умолчанию на всех каналах:
- **Сопряжение ЛС** (по умолчанию): неизвестные отправители получают короткий код сопряжения, и бот не обрабатывает их сообщение.
- Одобрение через: `zeroclaw pairing approve <channel> <code>` (затем отправитель добавляется в локальный список разрешённых).
- Публичные входящие ЛС требуют явного включения в `config.toml`.
- Выполните `zeroclaw doctor` для выявления рискованных или неправильно настроенных политик ЛС.
**Уровни автономности:**
| Уровень | Поведение |
|---------|-----------|
| `ReadOnly` | Агент может наблюдать, но не действовать |
| `Supervised` (по умолчанию) | Агент действует с одобрением для операций среднего/высокого риска |
| `Full` | Агент действует автономно в рамках политики |
**Слои изоляции:** изоляция рабочего пространства, блокировка обхода путей, списки разрешённых команд, запрещённые пути (`/etc`, `/root`, `~/.ssh`), ограничение частоты (макс. действий/час, лимиты стоимости/день).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Объявления
Используйте эту доску для важных уведомлений (критические изменения, рекомендации по безопасности, окна обслуживания и блокеры релизов).
| Дата (UTC) | Уровень | Уведомление | Действие |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Критический_ | Мы **не связаны** с `openagen/zeroclaw`, `zeroclaw.org` или `zeroclaw.net`. Домены `zeroclaw.org` и `zeroclaw.net` в настоящее время указывают на форк `openagen/zeroclaw`, и этот домен/репозиторий выдают себя за наш официальный сайт/проект. | Не доверяйте информации, бинарным файлам, сбору средств или объявлениям из этих источников. Используйте только [этот репозиторий](https://github.com/zeroclaw-labs/zeroclaw) и наши верифицированные аккаунты в социальных сетях. |
| 2026-02-21 | _Важный_ | Наш официальный сайт теперь доступен: [zeroclawlabs.ai](https://zeroclawlabs.ai). Спасибо за терпение, пока мы готовили запуск. Мы по-прежнему видим попытки имитации, поэтому **не** присоединяйтесь к каким-либо инвестиционным или фандрайзинговым активностям, использующим имя ZeroClaw, если они не опубликованы через наши официальные каналы. | Используйте [этот репозиторий](https://github.com/zeroclaw-labs/zeroclaw) как единственный источник истины. Следите за обновлениями в [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) и [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/). |
| 2026-02-19 | _Важный_ | Anthropic обновила условия Authentication and Credential Use 2026-02-19. Токены Claude Code OAuth (Free, Pro, Max) предназначены исключительно для Claude Code и Claude.ai; использование токенов OAuth от Claude Free/Pro/Max в любом другом продукте, инструменте или сервисе (включая Agent SDK) не разрешено и может нарушать Условия обслуживания потребителей. | Пожалуйста, временно избегайте интеграций Claude Code OAuth для предотвращения потенциальных потерь. Оригинальный пункт: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Основные возможности
- **Лёгкая среда выполнения по умолчанию** — типичные CLI и статусные рабочие процессы выполняются в оболочке памяти в несколько мегабайт на релизных сборках.
- **Экономичное развёртывание** — разработан для плат за $10 и небольших облачных инстансов, без тяжёлых зависимостей среды выполнения.
- **Быстрый холодный старт** — однобинарная среда выполнения Rust обеспечивает почти мгновенный запуск команд и демона.
- **Портативная архитектура** — один бинарный файл для ARM, x86 и RISC-V с заменяемыми провайдерами/каналами/инструментами.
- **Локальный Gateway** — единая панель управления для сессий, каналов, инструментов, cron, SOP и событий.
- **Многоканальный почтовый ящик** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket и другие.
- **Многоагентная оркестрация (Hands)** — автономные рои агентов, работающие по расписанию и становящиеся умнее со временем.
- **Стандартные операционные процедуры (SOPs)** — событийная автоматизация рабочих процессов с MQTT, webhook, cron и триггерами периферийных устройств.
- **Веб-панель** — веб-интерфейс React 19 + Vite с чатом в реальном времени, браузером памяти, редактором конфигурации, менеджером cron и инспектором инструментов.
- **Аппаратные периферийные устройства** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO через трейт `Peripheral`.
- **Первоклассные инструменты** — shell, файловый I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace и 70+ других.
- **Хуки жизненного цикла** — перехват и модификация вызовов LLM, выполнения инструментов и сообщений на каждом этапе.
- **Платформа навыков** — встроенные, общественные и навыки рабочего пространства с аудитом безопасности.
- **Поддержка туннелей** — Cloudflare, Tailscale, ngrok, OpenVPN и пользовательские туннели для удалённого доступа.
### Почему команды выбирают ZeroClaw
- **Лёгкий по умолчанию:** маленький бинарный файл Rust, быстрый запуск, малый объём памяти.
- **Безопасный по дизайну:** сопряжение, строгая изоляция, явные списки разрешений, области рабочего пространства.
- **Полностью заменяемый:** основные системы — это трейты (провайдеры, каналы, инструменты, память, туннели).
- **Без привязки к вендору:** поддержка провайдеров, совместимых с OpenAI + подключаемые пользовательские эндпоинты.
## Снимок бенчмарков (ZeroClaw vs OpenClaw, воспроизводимый)
Быстрый бенчмарк на локальной машине (macOS arm64, февраль 2026), нормализованный для edge-оборудования на 0.8 ГГц.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Язык** | TypeScript | Python | Go | **Rust** |
| **ОЗУ** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Запуск (ядро 0.8 ГГц)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Размер бинарного файла** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Стоимость** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Любое оборудование $10** |
> Примечания: результаты ZeroClaw измерены на релизных сборках с использованием `/usr/bin/time -l`. OpenClaw требует среду выполнения Node.js (обычно ~390 МБ дополнительных накладных расходов памяти), а NanoBot требует среду выполнения Python. PicoClaw и ZeroClaw — статические бинарные файлы. Показатели ОЗУ выше — это память времени выполнения; требования к компиляции при сборке выше.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="Сравнение ZeroClaw и OpenClaw" width="800" />
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Локально воспроизводимое измерение
Метрики могут меняться вместе с кодом и toolchain, поэтому проверяйте результаты в своей среде:
### Воспроизводимое локальное измерение
```bash
cargo build --release
@ -130,199 +254,502 @@ ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw status
```
Текущие примерные значения из README (macOS arm64, 2026-02-18):
## Всё, что мы построили
- Размер release-бинарника: `8.8M`
- `zeroclaw --help`: ~`0.02s`, пик памяти ~`3.9MB`
- `zeroclaw status`: ~`0.01s`, пик памяти ~`4.1MB`
### Основная платформа
## Установка в 1 клик
- Gateway HTTP/WS/SSE панель управления с сессиями, присутствием, конфигурацией, cron, вебхуками, веб-панелью и сопряжением.
- CLI поверхность: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Цикл оркестрации агента с диспетчеризацией инструментов, построением промптов, классификацией сообщений и загрузкой памяти.
- Модель сессий с применением политики безопасности, уровнями автономности и шлюзом одобрения.
- Устойчивая обёртка провайдера с переключением при сбое, повторными попытками и маршрутизацией моделей через 20+ бэкендов LLM.
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
### Каналы
Каналы: WhatsApp (нативный), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
За feature-флагами: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Веб-панель
Веб-панель React 19 + Vite 6 + Tailwind CSS 4, подаваемая непосредственно из Gateway:
- **Панель управления** — обзор системы, состояние здоровья, время безотказной работы, отслеживание стоимости
- **Чат с агентом** — интерактивный чат с агентом
- **Память** — просмотр и управление записями памяти
- **Конфигурация** — просмотр и редактирование конфигурации
- **Cron** — управление запланированными задачами
- **Инструменты** — просмотр доступных инструментов
- **Логи** — просмотр журналов активности агента
- **Стоимость** — использование токенов и отслеживание стоимости
- **Доктор** — диагностика здоровья системы
- **Интеграции** — статус интеграций и настройка
- **Сопряжение** — управление сопряжением устройств
### Целевые прошивки
| Цель | Платформа | Назначение |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | Беспроводной периферийный агент |
| ESP32-UI | ESP32 + Display | Агент с визуальным интерфейсом |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Промышленное периферийное устройство |
| Arduino | Arduino | Базовый мост датчик/актуатор |
| Uno Q Bridge | Arduino Uno | Последовательный мост к агенту |
### Инструменты + автоматизация
- **Основные:** shell, чтение/запись/редактирование файлов, операции git, поиск glob, поиск по содержимому
- **Веб:** управление браузером, web fetch, web search, скриншоты, информация об изображении, чтение PDF
- **Интеграции:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** обёртка инструментов Model Context Protocol + отложенные наборы инструментов
- **Планирование:** cron add/remove/update/run, инструмент расписания
- **Память:** recall, store, forget, knowledge, project intel
- **Продвинутые:** delegate (агент-агенту), swarm, переключение/маршрутизация моделей, операции безопасности, облачные операции
- **Оборудование:** информация о плате, карта памяти, чтение памяти (за feature-флагом)
### Среда выполнения + безопасность
- **Уровни автономности:** ReadOnly, Supervised (по умолчанию), Full.
- **Изоляция:** изоляция рабочего пространства, блокировка обхода путей, списки разрешённых команд, запрещённые пути, Landlock (Linux), Bubblewrap.
- **Ограничение частоты:** макс. действий в час, макс. стоимость в день (настраиваемые).
- **Шлюз одобрения:** интерактивное одобрение для операций среднего/высокого риска.
- **Аварийная остановка:** возможность экстренного отключения.
- **129+ тестов безопасности** в автоматизированном CI.
### Операции + упаковка
- Веб-панель подаётся непосредственно из Gateway.
- Поддержка туннелей: Cloudflare, Tailscale, ngrok, OpenVPN, пользовательская команда.
- Docker-адаптер среды выполнения для контейнеризованного выполнения.
- CI/CD: бета (авто при push) → стабильный (ручной запуск) → Docker, crates.io, Scoop, AUR, Homebrew, твит.
- Предсобранные бинарные файлы для Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Конфигурация
Минимальный `~/.zeroclaw/config.toml`:
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
Для полной инициализации окружения: `./install.sh --install-system-deps --install-rust` (для системных пакетов может потребоваться `sudo`).
Полный справочник конфигурации: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
Подробности: [`docs/setup-guides/one-click-bootstrap.md`](docs/setup-guides/one-click-bootstrap.md).
### Конфигурация каналов
## Быстрый старт
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
zeroclaw onboard --api-key sk-... --provider openrouter
zeroclaw onboard --interactive
zeroclaw agent -m "Hello, ZeroClaw!"
# default: 127.0.0.1:42617
zeroclaw gateway
zeroclaw daemon
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
## Subscription Auth (OpenAI Codex / Claude Code)
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
ZeroClaw поддерживает нативные профили авторизации на основе подписки (мультиаккаунт, шифрование при хранении).
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
- Файл хранения: `~/.zeroclaw/auth-profiles.json`
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Конфигурация туннелей
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
Подробности: [Справочник каналов](docs/reference/api/channels-reference.md) · [Справочник конфигурации](docs/reference/api/config-reference.md)
### Поддержка среды выполнения (текущая)
- **`native`** (по умолчанию) — прямое выполнение процесса, самый быстрый путь, идеально для доверенных сред.
- **`docker`** — полная контейнерная изоляция, принудительные политики безопасности, требуется Docker.
Установите `runtime.kind = "docker"` для строгой изоляции или сетевой изоляции.
## Аутентификация по подписке (OpenAI Codex / Claude Code / Gemini)
ZeroClaw поддерживает нативные профили аутентификации по подписке (мультиаккаунт, шифрование в состоянии покоя).
- Файл хранилища: `~/.zeroclaw/auth-profiles.json`
- Ключ шифрования: `~/.zeroclaw/.secret_key`
- Формат Profile ID: `<provider>:<profile_name>` (пример: `openai-codex:work`)
OpenAI Codex OAuth (подписка ChatGPT):
- Формат id профиля: `<provider>:<profile_name>` (пример: `openai-codex:work`)
```bash
# Рекомендуется для серверов/headless-окружений
# OpenAI Codex OAuth (ChatGPT subscription)
zeroclaw auth login --provider openai-codex --device-code
# Браузерный/callback-поток с paste-фолбэком
zeroclaw auth login --provider openai-codex --profile default
zeroclaw auth paste-redirect --provider openai-codex --profile default
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Проверка / обновление / переключение профиля
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Check / refresh / switch profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
```
Claude Code / Anthropic setup-token:
```bash
# Вставка subscription/setup token (режим Authorization header)
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Команда-алиас
zeroclaw auth setup-token --provider anthropic --profile default
```
Запуск agent с subscription auth:
```bash
# Run the agent with subscription auth
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hello"
# Anthropic поддерживает и API key, и auth token через переменные окружения:
# ANTHROPIC_AUTH_TOKEN, ANTHROPIC_OAUTH_TOKEN, ANTHROPIC_API_KEY
zeroclaw agent --provider anthropic -m "hello"
```
## Архитектура
## Рабочее пространство агента + навыки
Каждая подсистема — это **Trait**: меняйте реализации через конфигурацию, без изменения кода.
Корень рабочего пространства: `~/.zeroclaw/workspace/` (настраивается через конфигурацию).
<p align="center">
<img src="docs/assets/architecture.svg" alt="Архитектура ZeroClaw" width="900" />
</p>
Внедряемые файлы промптов:
- `IDENTITY.md` — личность и роль агента
- `USER.md` — контекст и предпочтения пользователя
- `MEMORY.md` — долгосрочные факты и уроки
- `AGENTS.md` — соглашения сессий и правила инициализации
- `SOUL.md` — основная идентичность и принципы работы
| Подсистема | Trait | Встроенные реализации | Расширение |
|-----------|-------|---------------------|------------|
| **AI-модели** | `Provider` | Каталог через `zeroclaw providers` (сейчас 28 встроенных + алиасы, плюс пользовательские endpoint) | `custom:https://your-api.com` (OpenAI-совместимый) или `anthropic-custom:https://your-api.com` |
| **Каналы** | `Channel` | CLI, Telegram, Discord, Slack, Mattermost, iMessage, Matrix, Signal, WhatsApp, Linq, Email, IRC, Lark, DingTalk, QQ, Webhook | Любой messaging API |
| **Память** | `Memory` | SQLite гибридный поиск, PostgreSQL-бэкенд, Lucid-мост, Markdown-файлы, явный `none`-бэкенд, snapshot/hydrate, опциональный кэш ответов | Любой persistence-бэкенд |
| **Инструменты** | `Tool` | shell/file/memory, cron/schedule, git, pushover, browser, http_request, screenshot/image_info, composio (opt-in), delegate, аппаратные инструменты | Любая функциональность |
| **Наблюдаемость** | `Observer` | Noop, Log, Multi | Prometheus, OTel |
| **Runtime** | `RuntimeAdapter` | Native, Docker (sandbox) | Через adapter; неподдерживаемые kind завершаются с ошибкой |
| **Безопасность** | `SecurityPolicy` | Gateway pairing, sandbox, allowlist, rate limits, scoping файловой системы, шифрование секретов | — |
| **Идентификация** | `IdentityConfig` | OpenClaw (markdown), AIEOS v1.1 (JSON) | Любой формат идентификации |
| **Туннели** | `Tunnel` | None, Cloudflare, Tailscale, ngrok, Custom | Любой tunnel-бинарник |
| **Heartbeat** | Engine | HEARTBEAT.md — периодические задачи | — |
| **Навыки** | Loader | TOML-манифесты + SKILL.md-инструкции | Пакеты навыков сообщества |
| **Интеграции** | Registry | 70+ интеграций в 9 категориях | Плагинная система |
Навыки: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` или `SKILL.toml`.
### Поддержка runtime (текущая)
```bash
# List installed skills
zeroclaw skills list
- ✅ Поддерживается сейчас: `runtime.kind = "native"` или `runtime.kind = "docker"`
- 🚧 Запланировано, но ещё не реализовано: WASM / edge-runtime
# Install from git
zeroclaw skills install https://github.com/user/my-skill.git
При указании неподдерживаемого `runtime.kind` ZeroClaw завершается с явной ошибкой, а не молча откатывается к native.
# Security audit before install
zeroclaw skills audit https://github.com/user/my-skill.git
### Система памяти (полнофункциональный поисковый движок)
Полностью собственная реализация, ноль внешних зависимостей — без Pinecone, Elasticsearch, LangChain:
| Уровень | Реализация |
|---------|-----------|
| **Векторная БД** | Embeddings хранятся как BLOB в SQLite, поиск по косинусному сходству |
| **Поиск по ключевым словам** | Виртуальные таблицы FTS5 со скорингом BM25 |
| **Гибридное слияние** | Пользовательская взвешенная функция слияния (`vector.rs`) |
| **Embeddings** | Trait `EmbeddingProvider` — OpenAI, пользовательский URL или noop |
| **Чанкинг** | Построчный Markdown-чанкер с сохранением заголовков |
| **Кэширование** | Таблица `embedding_cache` в SQLite с LRU-вытеснением |
| **Безопасная переиндексация** | Атомарная перестройка FTS5 + повторное встраивание отсутствующих векторов |
Agent автоматически вспоминает, сохраняет и управляет памятью через инструменты.
```toml
[memory]
backend = "sqlite" # "sqlite", "lucid", "postgres", "markdown", "none"
auto_save = true
embedding_provider = "none" # "none", "openai", "custom:https://..."
vector_weight = 0.7
keyword_weight = 0.3
# Remove a skill
zeroclaw skills remove my-skill
```
## Важные security-дефолты
## Команды CLI
- Gateway по умолчанию: `127.0.0.1:42617`
- Pairing обязателен по умолчанию: `require_pairing = true`
- Публичный bind запрещён по умолчанию: `allow_public_bind = false`
- Семантика allowlist каналов:
- `[]` => deny-by-default
- `["*"]` => allow all (используйте осознанно)
```bash
# Workspace management
zeroclaw onboard # Guided setup wizard
zeroclaw status # Show daemon/agent status
zeroclaw doctor # Run system diagnostics
## Пример конфигурации
# Gateway + daemon
zeroclaw gateway # Start gateway server (127.0.0.1:42617)
zeroclaw daemon # Start full autonomous runtime
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
# Agent
zeroclaw agent # Interactive chat mode
zeroclaw agent -m "message" # Single message mode
[memory]
backend = "sqlite"
auto_save = true
embedding_provider = "none"
# Service management
zeroclaw service install # Install as OS service (launchd/systemd)
zeroclaw service start|stop|restart|status
[gateway]
host = "127.0.0.1"
port = 42617
require_pairing = true
allow_public_bind = false
# Channels
zeroclaw channel list # List configured channels
zeroclaw channel doctor # Check channel health
zeroclaw channel bind-telegram 123456789
# Cron + scheduling
zeroclaw cron list # List scheduled jobs
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Memory
zeroclaw memory list # List memory entries
zeroclaw memory get <key> # Retrieve a memory
zeroclaw memory stats # Memory statistics
# Auth profiles
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Hardware peripherals
zeroclaw hardware discover # Scan for connected devices
zeroclaw peripheral list # List connected peripherals
zeroclaw peripheral flash # Flash firmware to device
# Migration
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell completions
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
## Навигация по документации
Полный справочник команд: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Хаб документации (English): [`docs/README.md`](docs/README.md)
- Единый TOC docs: [`docs/SUMMARY.md`](docs/SUMMARY.md)
- Хаб документации (Русский): [`docs/README.ru.md`](docs/README.ru.md)
- Справочник команд: [`docs/reference/cli/commands-reference.md`](docs/reference/cli/commands-reference.md)
- Справочник конфигурации: [`docs/reference/api/config-reference.md`](docs/reference/api/config-reference.md)
- Справочник providers: [`docs/reference/api/providers-reference.md`](docs/reference/api/providers-reference.md)
- Справочник channels: [`docs/reference/api/channels-reference.md`](docs/reference/api/channels-reference.md)
- Операционный runbook: [`docs/ops/operations-runbook.md`](docs/ops/operations-runbook.md)
- Устранение неполадок: [`docs/ops/troubleshooting.md`](docs/ops/troubleshooting.md)
- Инвентарь и классификация docs: [`docs/maintainers/docs-inventory.md`](docs/maintainers/docs-inventory.md)
- Снимок triage проекта: [`docs/maintainers/project-triage-snapshot-2026-02-18.md`](docs/maintainers/project-triage-snapshot-2026-02-18.md)
<!-- markdownlint-disable MD001 MD024 -->
## Вклад и лицензия
## Предварительные требования
- Contribution guide: [`CONTRIBUTING.md`](CONTRIBUTING.md)
- PR workflow: [`docs/contributing/pr-workflow.md`](docs/contributing/pr-workflow.md)
- Reviewer playbook: [`docs/contributing/reviewer-playbook.md`](docs/contributing/reviewer-playbook.md)
- License: MIT or Apache 2.0 ([`LICENSE-MIT`](LICENSE-MIT), [`LICENSE-APACHE`](LICENSE-APACHE), [`NOTICE`](NOTICE))
<details>
<summary><strong>Windows</strong></summary>
#### Обязательные
1. **Visual Studio Build Tools** (предоставляет линкер MSVC и Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Во время установки (или через Visual Studio Installer) выберите рабочую нагрузку **"Desktop development with C++"**.
2. **Набор инструментов Rust:**
```powershell
winget install Rustlang.Rustup
```
После установки откройте новый терминал и выполните `rustup default stable`, чтобы убедиться, что стабильный набор инструментов активен.
3. **Проверьте**, что оба работают:
```powershell
rustc --version
cargo --version
```
#### Необязательные
- **Docker Desktop** — требуется только при использовании [изолированной среды выполнения Docker](#поддержка-среды-выполнения-текущая) (`runtime.kind = "docker"`). Установите через `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Обязательные
1. **Средства сборки:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Установите Xcode Command Line Tools: `xcode-select --install`
2. **Набор инструментов Rust:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Подробности на [rustup.rs](https://rustup.rs).
3. **Проверьте**, что оба работают:
```bash
rustc --version
cargo --version
```
#### Однострочный установщик
Или пропустите шаги выше и установите всё (системные зависимости, Rust, ZeroClaw) одной командой:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Требования к ресурсам для компиляции
Сборка из исходного кода требует больше ресурсов, чем запуск результирующего бинарного файла:
| Ресурс | Минимум | Рекомендуемый |
| -------------- | ------- | ----------- |
| **ОЗУ + swap** | 2 GB | 4 GB+ |
| **Свободное место на диске** | 6 GB | 10 GB+ |
Если ваш хост ниже минимума, используйте предсобранные бинарные файлы:
```bash
./install.sh --prefer-prebuilt
```
Чтобы требовать установку только бинарного файла без сборки из исходников:
```bash
./install.sh --prebuilt-only
```
#### Необязательные
- **Docker** — требуется только при использовании [изолированной среды выполнения Docker](#поддержка-среды-выполнения-текущая) (`runtime.kind = "docker"`). Установите через менеджер пакетов или [docker.com](https://docs.docker.com/engine/install/).
> **Примечание:** По умолчанию `cargo build --release` использует `codegen-units=1` для снижения пиковой нагрузки при компиляции. Для более быстрой сборки на мощных машинах используйте `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Предсобранные бинарные файлы
Артефакты релизов публикуются для:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Скачайте последние артефакты:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Документация
Используйте это, когда вы прошли онбординг и хотите более глубокий справочник.
- Начните с [индекса документации](docs/README.md) для навигации и «что где».
- Прочитайте [обзор архитектуры](docs/architecture.md) для полной модели системы.
- Используйте [справочник конфигурации](docs/reference/api/config-reference.md), когда вам нужен каждый ключ и пример.
- Управляйте Gateway по инструкции с [операционным руководством](docs/ops/operations-runbook.md).
- Следуйте [ZeroClaw Onboard](#быстрый-старт) для управляемой настройки.
- Устраняйте типичные сбои с помощью [руководства по устранению неполадок](docs/ops/troubleshooting.md).
- Ознакомьтесь с [руководством по безопасности](docs/security/README.md) перед открытием чего-либо.
### Справочная документация
- Хаб документации: [docs/README.md](docs/README.md)
- Единое оглавление: [docs/SUMMARY.md](docs/SUMMARY.md)
- Справочник команд: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Справочник конфигурации: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Справочник провайдеров: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Справочник каналов: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Операционное руководство: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Устранение неполадок: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### Документация по сотрудничеству
- Руководство по участию: [CONTRIBUTING.md](CONTRIBUTING.md)
- Политика рабочего процесса PR: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- Руководство по CI-процессу: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Руководство рецензента: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Политика раскрытия уязвимостей: [SECURITY.md](SECURITY.md)
- Шаблон документации: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Развёртывание + операции
- Руководство по сетевому развёртыванию: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Руководство по прокси-агенту: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Руководства по оборудованию: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw был создан для smooth crab 🦀 — быстрого и эффективного ИИ-ассистента. Создан Argenis De La Rosa и сообществом.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Поддержите ZeroClaw
Если ZeroClaw помогает вашей работе и вы хотите поддержать дальнейшую разработку, вы можете пожертвовать здесь:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Особая благодарность
Сердечная благодарность сообществам и институтам, которые вдохновляют и питают эту работу с открытым исходным кодом:
- **Harvard University** — за развитие интеллектуального любопытства и расширение границ возможного.
- **MIT** — за продвижение открытых знаний, открытого кода и веры в то, что технологии должны быть доступны каждому.
- **Sundai Club** — за сообщество, энергию и неустанное стремление создавать вещи, которые имеют значение.
- **Мир и далее** 🌍✨ — каждому участнику, мечтателю и создателю, делающему открытый код силой добра. Это для вас.
Мы строим открыто, потому что лучшие идеи приходят отовсюду. Если вы это читаете, вы часть этого. Добро пожаловать. 🦀❤️
## Участие
Новичок в ZeroClaw? Ищите задачи с меткой [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — см. наше [Руководство по участию](CONTRIBUTING.md#first-time-contributors) для начала. AI/vibe-coded PR приветствуются! 🤖
См. [CONTRIBUTING.md](CONTRIBUTING.md) и [CLA.md](docs/contributing/cla.md). Реализуйте трейт, отправьте PR:
- Руководство по CI-процессу: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Новый `Provider``src/providers/`
- Новый `Channel``src/channels/`
- Новый `Observer``src/observability/`
- Новый `Tool``src/tools/`
- Новый `Memory``src/memory/`
- Новый `Tunnel``src/tunnel/`
- Новый `Peripheral``src/peripherals/`
- Новый `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Официальный репозиторий и предупреждение об имитации
**Это единственный официальный репозиторий ZeroClaw:**
> https://github.com/zeroclaw-labs/zeroclaw
Любой другой репозиторий, организация, домен или пакет, претендующий на звание «ZeroClaw» или подразумевающий связь с ZeroClaw Labs, является **неавторизованным и не связанным с этим проектом**. Известные неавторизованные форки будут перечислены в [TRADEMARK.md](docs/maintainers/trademark.md).
Если вы столкнётесь с имитацией или неправомерным использованием товарного знака, пожалуйста, [откройте issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
Для полной и исчерпывающей информации (архитектура, все команды, API, разработка) используйте основной английский документ: [`README.md`](README.md).
## Лицензия
ZeroClaw распространяется под двойной лицензией для максимальной открытости и защиты участников:
| Лицензия | Случай использования |
|---|---|
| [MIT](LICENSE-MIT) | Открытый код, исследования, академическое, личное использование |
| [Apache 2.0](LICENSE-APACHE) | Патентная защита, институциональное, коммерческое развёртывание |
Вы можете выбрать любую лицензию. **Участники автоматически предоставляют права по обеим** — см. [CLA.md](docs/contributing/cla.md) для полного соглашения участника.
### Товарный знак
Название и логотип **ZeroClaw** являются товарными знаками ZeroClaw Labs. Эта лицензия не предоставляет разрешения на их использование для подразумевания одобрения или принадлежности. См. [TRADEMARK.md](docs/maintainers/trademark.md) для разрешённых и запрещённых использований.
### Защита участников
- Вы **сохраняете авторские права** на свои вклады
- **Патентное предоставление** (Apache 2.0) защищает вас от патентных претензий других участников
- Ваши вклады **постоянно атрибутированы** в истории коммитов и [NOTICE](NOTICE)
- Никакие права на товарный знак не передаются при участии
---
**ZeroClaw** — Нулевые накладные расходы. Нулевые компромиссы. Развёртывайте где угодно. Заменяйте что угодно. 🦀
## Участники
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
Этот список генерируется из графа участников GitHub и обновляется автоматически.
## История звёзд
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Personlig AI-assistent</h1>
<p align="center">
<strong>Noll overhead. Noll kompromiss. 100% Rust. 100% Agnostisk.</strong><br>
⚡️ <strong>Kör på $10 hårdvara med <5MB RAM: Det är 99% mindre minne än OpenClaw och 98% billigare än en Mac mini!</strong>
⚡️ <strong>Körs på $10-hårdvara med <5MB RAM: Det är 99% mindre minne än OpenClaw och 98% billigare än en Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Byggt av studenter och medlemmar i Harvard-, MIT- och Sundai.Club-gemenskaperna.
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw är en personlig AI-assistent som du kör på dina egna enheter. Den svarar dig via de kanaler du redan använder (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work med flera). Den har en webbpanel för realtidskontroll och kan ansluta till hårdvaruperiferienheter (ESP32, STM32, Arduino, Raspberry Pi). Gateway är bara kontrollplanet — produkten är assistenten.
## Vad är ZeroClaw?
Om du vill ha en personlig, enanvändarassistent som känns lokal, snabb och alltid tillgänglig, är det här lösningen.
ZeroClaw är en lättvikts, föränderlig och utökningsbar AI-assistent-infrastruktur byggd i Rust. Den ansluter olika LLM-leverantörer (Anthropic, OpenAI, Google, Ollama, etc.) via ett enhetligt gränssnitt och stöder flera kanaler (Telegram, Matrix, CLI, etc.).
<p align="center">
<a href="https://zeroclawlabs.ai">Webbplats</a> ·
<a href="docs/README.md">Dokumentation</a> ·
<a href="docs/architecture.md">Arkitektur</a> ·
<a href="#snabbstart">Kom igång</a> ·
<a href="#migrera-från-openclaw">Migrera från OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Felsökning</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Huvudfunktioner
> **Rekommenderad konfiguration:** kör `zeroclaw onboard` i din terminal. ZeroClaw Onboard guidar dig steg för steg genom att konfigurera gateway, arbetsyta, kanaler och leverantör. Det är den rekommenderade installationsvägen och fungerar på macOS, Linux och Windows (via WSL2). Ny installation? Börja här: [Kom igång](#snabbstart)
- **🦀 Skrivet i Rust**: Hög prestanda, minnessäkerhet och nollkostnadsabstraktioner
- **🔌 Leverantörsagnostisk**: Stöder OpenAI, Anthropic, Google Gemini, Ollama och andra
- **📱 Multi-kanal**: Telegram, Matrix (med E2EE), CLI och andra
- **🧠 Pluggbart minne**: SQLite och Markdown-backends
- **🛠️ Utökningsbara verktyg**: Lägg enkelt till anpassade verktyg
- **🔒 Säkerhet först**: Omvänd proxy, integritetsförst-design
### Prenumerationsautentisering (OAuth)
---
- **OpenAI Codex** (ChatGPT-prenumeration)
- **Gemini** (Google OAuth)
- **Anthropic** (API-nyckel eller autentiseringstoken)
Modellnotering: även om många leverantörer/modeller stöds, använd den starkaste senaste generationens modell som är tillgänglig för dig för bästa upplevelse. Se [Onboarding](#snabbstart).
Modellkonfiguration + CLI: [Leverantörsreferens](docs/reference/api/providers-reference.md)
Autentiseringsprofil-rotation (OAuth vs API-nycklar) + failover: [Modell-failover](docs/reference/api/providers-reference.md)
## Installation (rekommenderad)
Körmiljö: Rust stable toolchain. Enda binär, inga körtidsberoenden.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Ett-klicks-installation
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` körs automatiskt efter installationen för att konfigurera din arbetsyta och leverantör.
## Snabbstart
### Krav
- Rust 1.70+
- En LLM-leverantörs API-nyckel (Anthropic, OpenAI, etc.)
### Installation
Fullständig nybörjarguide (autentisering, parkoppling, kanaler): [Kom igång](docs/setup-guides/one-click-bootstrap.md)
```bash
# Installera + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Starta gateway (webhook-server + webbpanel)
zeroclaw gateway # standard: 127.0.0.1:42617
zeroclaw gateway --port 0 # slumpmässig port (säkerhetshärdad)
# Prata med assistenten
zeroclaw agent -m "Hello, ZeroClaw!"
# Interaktivt läge
zeroclaw agent
# Starta full autonom körmiljö (gateway + kanaler + cron + hands)
zeroclaw daemon
# Kontrollera status
zeroclaw status
# Kör diagnostik
zeroclaw doctor
```
Uppgraderar du? Kör `zeroclaw doctor` efter uppdatering.
### Från källkod (utveckling)
```bash
# Klona repositoryt
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Bygg
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Kör
cargo run --release
zeroclaw onboard
```
### Med Docker
> **Utvecklar-fallback (ingen global installation):** prefixera kommandon med `cargo run --release --` (exempel: `cargo run --release -- status`).
## Migrera från OpenClaw
ZeroClaw kan importera din OpenClaw-arbetsyta, minne och konfiguration:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Förhandsgranska vad som migreras (säkert, skrivskyddat)
zeroclaw migrate openclaw --dry-run
# Kör migreringen
zeroclaw migrate openclaw
```
---
Detta migrerar dina minnesposter, arbetsytefiler och konfiguration från `~/.openclaw/` till `~/.zeroclaw/`. Konfiguration konverteras automatiskt från JSON till TOML.
## Säkerhetsstandarder (DM-åtkomst)
ZeroClaw ansluter till riktiga meddelandeytor. Behandla inkommande DM som opålitlig indata.
Fullständig säkerhetsguide: [SECURITY.md](SECURITY.md)
Standardbeteende på alla kanaler:
- **DM-parkoppling** (standard): okända avsändare får en kort parkopplingskod och boten behandlar inte deras meddelande.
- Godkänn med: `zeroclaw pairing approve <channel> <code>` (sedan läggs avsändaren till i en lokal tillåtlista).
- Offentliga inkommande DM kräver ett explicit opt-in i `config.toml`.
- Kör `zeroclaw doctor` för att hitta riskfyllda eller felkonfigurerade DM-policyer.
**Autonominivåer:**
| Nivå | Beteende |
|------|----------|
| `ReadOnly` | Agenten kan observera men inte agera |
| `Supervised` (standard) | Agenten agerar med godkännande för medel-/högriskoperationer |
| `Full` | Agenten agerar autonomt inom policygränser |
**Sandboxlager:** arbetsyteisolering, sökvägstraversblockering, kommandotillåtlistor, förbjudna sökvägar (`/etc`, `/root`, `~/.ssh`), hastighetsbegränsning (max åtgärder/timme, kostnad/dag-gränser).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Meddelanden
Använd denna tavla för viktiga meddelanden (brytande ändringar, säkerhetsrådgivningar, underhållsfönster och releaseblockerare).
| Datum (UTC) | Nivå | Meddelande | Åtgärd |
| ----------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritisk_ | Vi är **inte affilierade** med `openagen/zeroclaw`, `zeroclaw.org` eller `zeroclaw.net`. Domänerna `zeroclaw.org` och `zeroclaw.net` pekar för närvarande till `openagen/zeroclaw`-forken, och den domänen/repositoryt utger sig för att vara vår officiella webbplats/projekt. | Lita inte på information, binärer, insamlingar eller meddelanden från dessa källor. Använd bara [detta repository](https://github.com/zeroclaw-labs/zeroclaw) och våra verifierade sociala konton. |
| 2026-02-21 | _Viktigt_ | Vår officiella webbplats är nu live: [zeroclawlabs.ai](https://zeroclawlabs.ai). Tack för ert tålamod medan vi förberedde lanseringen. Vi ser fortfarande imitationsförsök, så **gå inte** med i några investerings- eller insamlingsaktiviteter som hävdar ZeroClaw-namnet om de inte publicerats via våra officiella kanaler. | Använd [detta repository](https://github.com/zeroclaw-labs/zeroclaw) som enda sanningskälla. Följ [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Grupp)](https://www.facebook.com/groups/zeroclawlabs) och [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) för officiella uppdateringar. |
| 2026-02-19 | _Viktigt_ | Anthropic uppdaterade villkoren för autentisering och inloggningsanvändning 2026-02-19. Claude Code OAuth-tokens (Free, Pro, Max) är avsedda uteslutande för Claude Code och Claude.ai; att använda OAuth-tokens från Claude Free/Pro/Max i någon annan produkt, verktyg eller tjänst (inklusive Agent SDK) är inte tillåtet och kan bryta mot Consumer Terms of Service. | Undvik tillfälligt Claude Code OAuth-integrationer för att förhindra potentiell förlust. Originalklausul: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Höjdpunkter
- **Lean körmiljö som standard** — vanliga CLI- och statusarbetsflöden körs i ett fåmegabyte-minnesutrymme på release-byggen.
- **Kostnadseffektiv distribution** — designad för $10-kort och små molninstanser, inga tunga körtidsberoenden.
- **Snabba kallstarter** — enkel binär Rust-körmiljö håller kommando- och daemon-uppstart nära ögonblicklig.
- **Portabel arkitektur** — en binär över ARM, x86 och RISC-V med utbytbara providers/channels/tools.
- **Lokal-först Gateway** — enda kontrollplan för sessioner, kanaler, verktyg, cron, SOP:er och händelser.
- **Multikanalinkorg** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket med flera.
- **Multiagentorkestrering (Hands)** — autonoma agentsvärmar som körs på schema och blir smartare med tiden.
- **Standardoperationsprocedurer (SOPs)** — händelsedriven arbetsflödesautomatisering med MQTT, webhook, cron och periferiutlösare.
- **Webbpanel** — React 19 + Vite webb-UI med realtidschatt, minnesutforskare, konfigurationsredigerare, cron-hanterare och verktygsinspektor.
- **Hårdvaruperiferienheter** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO via `Peripheral`-traiten.
- **Förstklassiga verktyg** — shell, fil-I/O, webbläsare, git, web fetch/search, MCP, Jira, Notion, Google Workspace och 70+ fler.
- **Livscykelkrokar** — fånga upp och modifiera LLM-anrop, verktygsexekveringar och meddelanden i varje steg.
- **Färdighetsplattform** — medföljande, community- och arbetsytefärdigheter med säkerhetsgranskning.
- **Tunnelstöd** — Cloudflare, Tailscale, ngrok, OpenVPN och anpassade tunnlar för fjärråtkomst.
### Varför team väljer ZeroClaw
- **Lean som standard:** liten Rust-binär, snabb start, lågt minnesavtryck.
- **Säker från grunden:** parkoppling, strikt sandboxning, explicita tillåtlistor, arbetsyteavgränsning.
- **Fullt utbytbar:** kärnssystem är traits (providers, channels, tools, memory, tunnels).
- **Inget leverantörslås:** OpenAI-kompatibelt leverantörsstöd + pluggbara anpassade endpoints.
## Benchmarkögonblicksbild (ZeroClaw vs OpenClaw, Reproducerbar)
Lokal maskin-snabbtest (macOS arm64, feb 2026) normaliserat för 0.8GHz edge-hårdvara.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Språk** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Uppstart (0.8GHz kärna)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Binärstorlek** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Kostnad** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Vilken hårdvara som helst $10** |
> Noteringar: ZeroClaw-resultat mäts på release-byggen med `/usr/bin/time -l`. OpenClaw kräver Node.js-körmiljö (typiskt ~390MB extra minnesoverhead), medan NanoBot kräver Python-körmiljö. PicoClaw och ZeroClaw är statiska binärer. RAM-siffrorna ovan är körtidsminne; kompileringskrav vid byggtid är högre.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw jämförelse" width="800" />
</p>
### Reproducerbar lokal mätning
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## Allt vi byggt hittills
### Kärnplattform
- Gateway HTTP/WS/SSE-kontrollplan med sessioner, närvaro, konfiguration, cron, webhooks, webbpanel och parkoppling.
- CLI-yta: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Agentorkestreringsloop med verktygsdistribution, promptkonstruktion, meddelandeklassificering och minnesinläsning.
- Sessionsmodell med säkerhetspolicyefterlevnad, autonominivåer och godkännandeportar.
- Motståndskraftig leverantörswrapper med failover, retry och modellroutning över 20+ LLM-backends.
### Kanaler
Kanaler: WhatsApp (nativ), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
Funktionsgated: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Webbpanel
React 19 + Vite 6 + Tailwind CSS 4 webbpanel serverad direkt från Gateway:
- **Dashboard** — systemöversikt, hälsostatus, drifttid, kostnadsspårning
- **Agentchatt** — interaktiv chatt med agenten
- **Minne** — bläddra och hantera minnesposter
- **Konfiguration** — visa och redigera konfiguration
- **Cron** — hantera schemalagda uppgifter
- **Verktyg** — bläddra tillgängliga verktyg
- **Loggar** — visa agentaktivitetsloggar
- **Kostnad** — tokenanvändning och kostnadsspårning
- **Doktor** — systemhälsodiagnostik
- **Integrationer** — integrationsstatus och konfiguration
- **Parkoppling** — hantering av enhetsparkoppling
### Firmware-mål
| Mål | Plattform | Syfte |
|-----|-----------|-------|
| ESP32 | Espressif ESP32 | Trådlös periferienhetagent |
| ESP32-UI | ESP32 + Display | Agent med visuellt gränssnitt |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Industriell periferienhet |
| Arduino | Arduino | Grundläggande sensor-/aktuatorbrygga |
| Uno Q Bridge | Arduino Uno | Seriell brygga till agent |
### Verktyg + automatisering
- **Kärna:** shell, filläsning/skrivning/redigering, git-operationer, glob-sökning, innehållssökning
- **Webb:** webbläsarkontroll, web fetch, webbsökning, skärmdump, bildinformation, PDF-läsning
- **Integrationer:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol-verktygs-wrapper + uppskjutna verktygsuppsättningar
- **Schemaläggning:** cron add/remove/update/run, schemaverktyg
- **Minne:** recall, store, forget, knowledge, project intel
- **Avancerat:** delegate (agent-till-agent), swarm, modellväxling/routing, säkerhetsoperationer, molnoperationer
- **Hårdvara:** board info, memory map, memory read (funktionsgated)
### Körmiljö + säkerhet
- **Autonominivåer:** ReadOnly, Supervised (standard), Full.
- **Sandboxning:** arbetsyteisolering, sökvägstraversblockering, kommandotillåtlistor, förbjudna sökvägar, Landlock (Linux), Bubblewrap.
- **Hastighetsbegränsning:** max åtgärder per timme, max kostnad per dag (konfigurerbart).
- **Godkännandeportar:** interaktivt godkännande för medel-/högriskoperationer.
- **E-stopp:** nödavstängningskapacitet.
- **129+ säkerhetstester** i automatiserad CI.
### Drift + paketering
- Webbpanel serverad direkt från Gateway.
- Tunnelstöd: Cloudflare, Tailscale, ngrok, OpenVPN, anpassat kommando.
- Docker-körmiljöadapter för containeriserad exekvering.
- CI/CD: beta (automatiskt vid push) → stable (manuell dispatch) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Förbyggda binärer för Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Konfiguration
ZeroClaw använder en YAML-konfigurationsfil. Som standard letar den efter `config.yaml`.
Minimal `~/.zeroclaw/config.toml`:
```yaml
# Standardleverantör
provider: anthropic
# Leverantörskonfiguration
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# Minneskonfiguration
memory:
backend: sqlite
path: data/memory.db
# Kanalkonfiguration
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
Fullständig konfigurationsreferens: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Kanalkonfiguration
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Tunnelkonfiguration
```toml
[tunnel]
kind = "cloudflare" # eller "tailscale", "ngrok", "openvpn", "custom", "none"
```
Detaljer: [Kanalreferens](docs/reference/api/channels-reference.md) · [Konfigurationsreferens](docs/reference/api/config-reference.md)
### Körmiljöstöd (nuvarande)
- **`native`** (standard) — direkt processexekvering, snabbaste vägen, idealisk för betrodda miljöer.
- **`docker`** — full containerisolering, tvingade säkerhetspolicyer, kräver Docker.
Ställ in `runtime.kind = "docker"` för strikt sandboxning eller nätverksisolering.
## Prenumerationsautentisering (OpenAI Codex / Claude Code / Gemini)
ZeroClaw stöder prenumerationsnativa autentiseringsprofiler (multikonto, krypterat i vila).
- Lagringsfil: `~/.zeroclaw/auth-profiles.json`
- Krypteringsnyckel: `~/.zeroclaw/.secret_key`
- Profil-ID-format: `<provider>:<profile_name>` (exempel: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT-prenumeration)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Kontrollera / uppdatera / byt profil
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Kör agenten med prenumerationsautentisering
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Agentarbetsyta + färdigheter
Arbetsyterot: `~/.zeroclaw/workspace/` (konfigurerbart via config).
Injicerade promptfiler:
- `IDENTITY.md` — agentpersonlighet och roll
- `USER.md` — användarkontext och preferenser
- `MEMORY.md` — långtidsfakta och lärdomar
- `AGENTS.md` — sessionskonventioner och initieringsregler
- `SOUL.md` — kärnidentitet och operationsprinciper
Färdigheter: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` eller `SKILL.toml`.
```bash
# Lista installerade färdigheter
zeroclaw skills list
# Installera från git
zeroclaw skills install https://github.com/user/my-skill.git
# Säkerhetsgranskning före installation
zeroclaw skills audit https://github.com/user/my-skill.git
# Ta bort en färdighet
zeroclaw skills remove my-skill
```
## CLI-kommandon
```bash
# Arbetsytehantering
zeroclaw onboard # Guidad installationsguide
zeroclaw status # Visa daemon-/agentstatus
zeroclaw doctor # Kör systemdiagnostik
# Gateway + daemon
zeroclaw gateway # Starta gateway-server (127.0.0.1:42617)
zeroclaw daemon # Starta full autonom körmiljö
# Agent
zeroclaw agent # Interaktivt chattläge
zeroclaw agent -m "message" # Enstaka meddelandeläge
# Tjänstehantering
zeroclaw service install # Installera som OS-tjänst (launchd/systemd)
zeroclaw service start|stop|restart|status
# Kanaler
zeroclaw channel list # Lista konfigurerade kanaler
zeroclaw channel doctor # Kontrollera kanalhälsa
zeroclaw channel bind-telegram 123456789
# Cron + schemaläggning
zeroclaw cron list # Lista schemalagda jobb
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Minne
zeroclaw memory list # Lista minnesposter
zeroclaw memory get <key> # Hämta ett minne
zeroclaw memory stats # Minnesstatistik
# Autentiseringsprofiler
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Hårdvaruperiferienheter
zeroclaw hardware discover # Sök efter anslutna enheter
zeroclaw peripheral list # Lista anslutna periferienheter
zeroclaw peripheral flash # Flasha firmware till enhet
# Migrering
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell-kompletteringar
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Fullständig kommandoreferens: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Förutsättningar
<details>
<summary><strong>Windows</strong></summary>
#### Obligatoriskt
1. **Visual Studio Build Tools** (tillhandahåller MSVC-länkaren och Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Under installationen (eller via Visual Studio Installer), välj arbetsbelastningen **"Desktop development with C++"**.
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
Efter installationen, öppna en ny terminal och kör `rustup default stable` för att säkerställa att stable-toolchainen är aktiv.
3. **Verifiera** att båda fungerar:
```powershell
rustc --version
cargo --version
```
#### Valfritt
- **Docker Desktop** — krävs bara om du använder [Docker sandboxad körmiljö](#körmiljöstöd-nuvarande) (`runtime.kind = "docker"`). Installera via `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Obligatoriskt
1. **Byggverktyg:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Installera Xcode Command Line Tools: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Se [rustup.rs](https://rustup.rs) för detaljer.
3. **Verifiera** att båda fungerar:
```bash
rustc --version
cargo --version
```
#### Enradsinstallerare
Eller hoppa över stegen ovan och installera allt (systemberoenden, Rust, ZeroClaw) med ett enda kommando:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Kompileringsresurskrav
Att bygga från källkod kräver mer resurser än att köra den resulterande binären:
| Resurs | Minimum | Rekommenderat |
| -------------- | ------- | ------------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Ledigt disk**| 6 GB | 10 GB+ |
Om din värd ligger under minimum, använd förbyggda binärer:
```bash
./install.sh --prefer-prebuilt
```
För att kräva enbart binärinstallation utan källkods-fallback:
```bash
./install.sh --prebuilt-only
```
#### Valfritt
- **Docker** — krävs bara om du använder [Docker sandboxad körmiljö](#körmiljöstöd-nuvarande) (`runtime.kind = "docker"`). Installera via din pakethanterare eller [docker.com](https://docs.docker.com/engine/install/).
> **Notering:** Standard `cargo build --release` använder `codegen-units=1` för att minska toppkompileringstrycket. För snabbare byggen på kraftfulla maskiner, använd `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Förbyggda binärer
Release-tillgångar publiceras för:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Ladda ner de senaste tillgångarna från:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Dokumentation
För detaljerad dokumentation, se:
Använd dessa när du är förbi onboarding-flödet och vill ha den djupare referensen.
- [Dokumentationshubb](docs/README.md)
- [Kommandoreferens](docs/commands-reference.md)
- [Leverantörsreferens](docs/providers-reference.md)
- [Kanalreferens](docs/channels-reference.md)
- [Konfigurationsreferens](docs/config-reference.md)
- Börja med [dokumentationsindexet](docs/README.md) för navigering och "vad finns var."
- Läs [arkitekturöversikten](docs/architecture.md) för den fullständiga systemmodellen.
- Använd [konfigurationsreferensen](docs/reference/api/config-reference.md) när du behöver varje nyckel och exempel.
- Kör Gateway enligt boken med [operationsrunbook](docs/ops/operations-runbook.md).
- Följ [ZeroClaw Onboard](#snabbstart) för en guidad installation.
- Felsök vanliga problem med [felsökningsguiden](docs/ops/troubleshooting.md).
- Granska [säkerhetsvägledning](docs/security/README.md) innan du exponerar något.
---
### Referensdokumentation
## Bidrag
- Dokumentationshubb: [docs/README.md](docs/README.md)
- Enhetlig dokumentations-TOC: [docs/SUMMARY.md](docs/SUMMARY.md)
- Kommandoreferens: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Konfigurationsreferens: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Leverantörsreferens: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Kanalreferens: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Operationsrunbook: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Felsökning: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
Bidrag är välkomna! Vänligen läs [Bidragsguiden](CONTRIBUTING.md).
### Samarbetsdokumentation
- Bidragsguide: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR-arbetsflödespolicy: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI-arbetsflödesguide: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Granskningsplaybook: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Säkerhetsutlämnandepolicy: [SECURITY.md](SECURITY.md)
- Dokumentationsmall: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Distribution + drift
- Nätverksdistributionsguide: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Proxy-agentplaybook: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Hårdvaruguider: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw byggdes för smooth crab 🦀, en snabb och effektiv AI-assistent. Byggd av Argenis De La Rosa och gemenskapen.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Stöd ZeroClaw
Om ZeroClaw hjälper ditt arbete och du vill stödja pågående utveckling kan du donera här:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 Särskilt tack
Ett hjärtligt tack till de gemenskaper och institutioner som inspirerar och driver detta open source-arbete:
- **Harvard University** — för att främja intellektuell nyfikenhet och tänja gränserna för vad som är möjligt.
- **MIT** — för att försvara öppen kunskap, öppen källkod och tron att teknologi bör vara tillgänglig för alla.
- **Sundai Club** — för gemenskapen, energin och den outtröttliga driften att bygga saker som spelar roll.
- **Världen & bortom** 🌍✨ — till varje bidragsgivare, drömmare och byggare där ute som gör öppen källkod till en kraft för gott. Det här är för er.
Vi bygger öppet eftersom de bästa idéerna kommer från överallt. Om du läser detta är du en del av det. Välkommen. 🦀❤️
## Bidra
Ny till ZeroClaw? Leta efter ärenden märkta [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — se vår [Bidragsguide](CONTRIBUTING.md#first-time-contributors) för hur du kommer igång. AI/vibe-kodade PR:er är välkomna! 🤖
Se [CONTRIBUTING.md](CONTRIBUTING.md) och [CLA.md](docs/contributing/cla.md). Implementera en trait, skicka in en PR:
- CI-arbetsflödesguide: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Ny `Provider``src/providers/`
- Ny `Channel``src/channels/`
- Ny `Observer``src/observability/`
- Nytt `Tool``src/tools/`
- Nytt `Memory``src/memory/`
- Ny `Tunnel``src/tunnel/`
- Ny `Peripheral``src/peripherals/`
- Ny `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Officiellt repository & varning för imitation
**Detta är det enda officiella ZeroClaw-repositoryt:**
> https://github.com/zeroclaw-labs/zeroclaw
Alla andra repositorier, organisationer, domäner eller paket som hävdar att vara "ZeroClaw" eller antyder anslutning till ZeroClaw Labs är **obehöriga och inte affilierade med detta projekt**. Kända obehöriga forkar listas i [TRADEMARK.md](docs/maintainers/trademark.md).
Om du stöter på imitation eller varumärkesmissbruk, vänligen [öppna ett ärende](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Licens
Detta projekt är dubbellicensierat:
ZeroClaw är dubbellicensierat för maximal öppenhet och bidragsgivarskydd:
- MIT License
- Apache License, version 2.0
| Licens | Användningsfall |
|--------|-----------------|
| [MIT](LICENSE-MIT) | Öppen källkod, forskning, akademiskt, personligt bruk |
| [Apache 2.0](LICENSE-APACHE) | Patentskydd, institutionell, kommersiell distribution |
Se [LICENSE-APACHE](LICENSE-APACHE) och [LICENSE-MIT](LICENSE-MIT) för detaljer.
Du kan välja endera licens. **Bidragsgivare beviljar automatiskt rättigheter under båda** — se [CLA.md](docs/contributing/cla.md) för det fullständiga bidragsgivaravtalet.
### Varumärke
**ZeroClaw**-namnet och logotypen är varumärken som tillhör ZeroClaw Labs. Denna licens beviljar inte tillstånd att använda dem för att antyda stöd eller anslutning. Se [TRADEMARK.md](docs/maintainers/trademark.md) för tillåtna och förbjudna användningar.
### Bidragsgivarskydd
- Du **behåller upphovsrätten** till dina bidrag
- **Patentbeviljande** (Apache 2.0) skyddar dig från patentkrav från andra bidragsgivare
- Dina bidrag är **permanent tillskrivna** i commit-historik och [NOTICE](NOTICE)
- Inga varumärkesrättigheter överförs genom att bidra
---
## Community
**ZeroClaw** — Noll overhead. Noll kompromiss. Distribuera var som helst. Byt ut vad som helst. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Bidragsgivare
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw-bidragsgivare" />
</a>
## Sponsorer
Denna lista genereras från GitHub-bidragsgivargrafen och uppdateras automatiskt.
Om ZeroClaw är användbart för dig, vänligen överväg att köpa en kaffe till oss:
## Stjärnhistorik
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — ผู้ช่วย AI ส่วนตัว</h1>
<p align="center">
<strong>โอเวอร์เฮดเป็นศูนย์ ไม่มีการประนีประนอม 100% Rust 100% Agnostic</strong><br>
⚡️ <strong>ทำงานบนฮาร์ดแวร์ $10 ด้วย RAM <5MB: ใช้หน่วยความจำน้อยกว่า OpenClaw 99% และถูกกว่า Mac mini 98%!</strong>
<strong>ไม่มีโอเวอร์เฮด ไม่มีการประนีประนอม 100% Rust 100% ไม่ผูกมัด</strong><br>
⚡️ <strong>ทำงานบนฮาร์ดแวร์ $10 ด้วย RAM <5MB: นั่นคือหน่วยความจำน้อยกว่า OpenClaw 99% และราคาถูกกว่า Mac mini 98%!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
สร้างโดยนักศึกษาและสมาชิกจากชุมชน Harvard, MIT, และ Sundai.Club
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw คือผู้ช่วย AI ส่วนตัวที่คุณรันบนอุปกรณ์ของคุณเอง มันตอบคุณผ่านช่องทางที่คุณใช้อยู่แล้ว (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work และอื่นๆ) มีแดชบอร์ดเว็บสำหรับการควบคุมแบบเรียลไทม์และสามารถเชื่อมต่อกับอุปกรณ์ต่อพ่วง (ESP32, STM32, Arduino, Raspberry Pi) Gateway เป็นเพียง control plane — ผลิตภัณฑ์คือผู้ช่วย
## ZeroClaw คืออะไร?
หากคุณต้องการผู้ช่วยส่วนตัว ผู้ใช้คนเดียว ที่รู้สึกเหมือนอยู่ในเครื่อง เร็ว และพร้อมใช้งานตลอดเวลา นี่คือมัน
ZeroClaw เป็นโครงสร้างพื้นฐานผู้ช่วย AI ที่มีน้ำหนักเบา ปรับเปลี่ยนได้ และขยายได้ สร้างด้วย Rust มันเชื่อมต่อผู้ให้บริการ LLM ต่างๆ (Anthropic, OpenAI, Google, Ollama ฯลฯ) ผ่านอินเทอร์เฟซแบบรวมและรองรับหลายช่องทาง (Telegram, Matrix, CLI ฯลฯ)
<p align="center">
<a href="https://zeroclawlabs.ai">เว็บไซต์</a> ·
<a href="docs/README.md">เอกสาร</a> ·
<a href="docs/architecture.md">สถาปัตยกรรม</a> ·
<a href="#เริ่มต้นอย่างรวดเร็ว">เริ่มต้นใช้งาน</a> ·
<a href="#การย้ายจาก-openclaw">ย้ายจาก OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">แก้ไขปัญหา</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### คุณสมบัติหลัก
> **การตั้งค่าที่แนะนำ:** รัน `zeroclaw onboard` ในเทอร์มินัลของคุณ ZeroClaw Onboard จะแนะนำคุณทีละขั้นตอนในการตั้งค่า gateway, workspace, ช่องทาง และ provider เป็นเส้นทางการตั้งค่าที่แนะนำและใช้งานได้บน macOS, Linux และ Windows (ผ่าน WSL2) ติดตั้งใหม่? เริ่มที่นี่: [เริ่มต้นใช้งาน](#เริ่มต้นอย่างรวดเร็ว)
- **🦀 เขียนด้วย Rust**: ประสิทธิภาพสูง ความปลอดภัยของหน่วยความจำ และ abstraction แบบไม่มีค่าใช้จ่าย
- **🔌 Agnostic ต่อผู้ให้บริการ**: รองรับ OpenAI, Anthropic, Google Gemini, Ollama และอื่นๆ
- **📱 หลายช่องทาง**: Telegram, Matrix (พร้อม E2EE), CLI และอื่นๆ
- **🧠 หน่วยความจำแบบเสียบได้**: Backend แบบ SQLite และ Markdown
- **🛠️ เครื่องมือที่ขยายได้**: เพิ่มเครื่องมือที่กำหนดเองได้ง่าย
- **🔒 ความปลอดภัยเป็นอันดับหนึ่ง**: Reverse proxy, การออกแบบที่ให้ความสำคัญกับความเป็นส่วนตัว
### การยืนยันตัวตนแบบสมัครสมาชิก (OAuth)
---
- **OpenAI Codex** (สมัครสมาชิก ChatGPT)
- **Gemini** (Google OAuth)
- **Anthropic** (API key หรือ auth token)
## เริ่มต้นอย่างรวดเร็ว
หมายเหตุเกี่ยวกับโมเดล: แม้จะรองรับ provider/โมเดลหลายตัว แต่เพื่อประสบการณ์ที่ดีที่สุด ให้ใช้โมเดลรุ่นล่าสุดที่แข็งแกร่งที่สุดที่คุณมี ดู [Onboarding](#เริ่มต้นอย่างรวดเร็ว)
### ข้อกำหนด
การตั้งค่าโมเดล + CLI: [อ้างอิง Provider](docs/reference/api/providers-reference.md)
การหมุนเวียนโปรไฟล์การยืนยันตัวตน (OAuth vs API keys) + failover: [Model failover](docs/reference/api/providers-reference.md)
- Rust 1.70+
- API key ของผู้ให้บริการ LLM (Anthropic, OpenAI ฯลฯ)
## ติดตั้ง (แนะนำ)
### การติดตั้ง
Runtime: Rust stable toolchain ไบนารีเดียว ไม่มี runtime dependencies
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Bootstrap คลิกเดียว
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` จะรันโดยอัตโนมัติหลังติดตั้งเพื่อกำหนดค่า workspace และ provider ของคุณ
## เริ่มต้นอย่างรวดเร็ว (TL;DR)
คู่มือสำหรับผู้เริ่มต้นฉบับสมบูรณ์ (การยืนยันตัวตน, pairing, ช่องทาง): [เริ่มต้นใช้งาน](docs/setup-guides/one-click-bootstrap.md)
```bash
# ติดตั้ง + onboard
./install.sh --api-key "sk-..." --provider openrouter
# เริ่ม gateway (เซิร์ฟเวอร์ webhook + แดชบอร์ดเว็บ)
zeroclaw gateway # ค่าเริ่มต้น: 127.0.0.1:42617
zeroclaw gateway --port 0 # พอร์ตสุ่ม (ความปลอดภัยเพิ่มขึ้น)
# พูดคุยกับผู้ช่วย
zeroclaw agent -m "Hello, ZeroClaw!"
# โหมดโต้ตอบ
zeroclaw agent
# เริ่ม runtime อัตโนมัติเต็มรูปแบบ (gateway + ช่องทาง + cron + hands)
zeroclaw daemon
# ตรวจสอบสถานะ
zeroclaw status
# รันการวินิจฉัย
zeroclaw doctor
```
กำลังอัปเกรด? รัน `zeroclaw doctor` หลังจากอัปเดต
### จากซอร์ส (สำหรับนักพัฒนา)
```bash
# Clone repository
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Build
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Run
cargo run --release
zeroclaw onboard
```
### ด้วย Docker
> **ทางเลือกสำหรับนักพัฒนา (ไม่ต้องติดตั้งแบบ global):** นำหน้าคำสั่งด้วย `cargo run --release --` (ตัวอย่าง: `cargo run --release -- status`)
## การย้ายจาก OpenClaw
ZeroClaw สามารถนำเข้า workspace, หน่วยความจำ และการกำหนดค่าจาก OpenClaw ของคุณ:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# ดูตัวอย่างสิ่งที่จะถูกย้าย (ปลอดภัย, อ่านอย่างเดียว)
zeroclaw migrate openclaw --dry-run
# รันการย้าย
zeroclaw migrate openclaw
```
---
สิ่งนี้จะย้ายรายการหน่วยความจำ ไฟล์ workspace และการกำหนดค่าจาก `~/.openclaw/` ไปยัง `~/.zeroclaw/` การกำหนดค่าจะถูกแปลงจาก JSON เป็น TOML โดยอัตโนมัติ
## ค่าเริ่มต้นด้านความปลอดภัย (การเข้าถึง DM)
ZeroClaw เชื่อมต่อกับพื้นผิวการส่งข้อความจริง ถือว่า DM ขาเข้าเป็นข้อมูลที่ไม่น่าเชื่อถือ
คู่มือความปลอดภัยฉบับเต็ม: [SECURITY.md](SECURITY.md)
พฤติกรรมเริ่มต้นบนทุกช่องทาง:
- **DM pairing** (ค่าเริ่มต้น): ผู้ส่งที่ไม่รู้จักจะได้รับรหัส pairing สั้นๆ และบอทจะไม่ประมวลผลข้อความของพวกเขา
- อนุมัติด้วย: `zeroclaw pairing approve <channel> <code>` (จากนั้นผู้ส่งจะถูกเพิ่มในรายการอนุญาตในเครื่อง)
- DM ขาเข้าสาธารณะต้องมีการเลือกเข้าร่วมอย่างชัดเจนใน `config.toml`
- รัน `zeroclaw doctor` เพื่อค้นหานโยบาย DM ที่เสี่ยงหรือกำหนดค่าผิด
**ระดับความเป็นอัตโนมัติ:**
| ระดับ | พฤติกรรม |
|-------|----------|
| `ReadOnly` | เอเจนต์สามารถสังเกตแต่ไม่สามารถดำเนินการ |
| `Supervised` (ค่าเริ่มต้น) | เอเจนต์ดำเนินการโดยมีการอนุมัติสำหรับการดำเนินการที่มีความเสี่ยงปานกลาง/สูง |
| `Full` | เอเจนต์ดำเนินการอย่างอัตโนมัติภายในขอบเขตนโยบาย |
**ชั้นของ sandboxing:** การแยก workspace, การบล็อก path traversal, รายการอนุญาตคำสั่ง, เส้นทางที่ห้าม (`/etc`, `/root`, `~/.ssh`), การจำกัดอัตรา (การดำเนินการสูงสุด/ชั่วโมง, ขีดจำกัดค่าใช้จ่าย/วัน)
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 ประกาศ
ใช้บอร์ดนี้สำหรับประกาศสำคัญ (การเปลี่ยนแปลงที่ทำลาย, คำแนะนำด้านความปลอดภัย, ช่วงเวลาบำรุงรักษา และตัวบล็อกการปล่อย)
| วันที่ (UTC) | ระดับ | ประกาศ | การดำเนินการ |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _วิกฤต_ | เรา**ไม่มีส่วนเกี่ยวข้อง**กับ `openagen/zeroclaw`, `zeroclaw.org` หรือ `zeroclaw.net` โดเมน `zeroclaw.org` และ `zeroclaw.net` ปัจจุบันชี้ไปที่ fork `openagen/zeroclaw` และโดเมน/repository เหล่านั้นกำลังปลอมตัวเป็นเว็บไซต์/โปรเจกต์อย่างเป็นทางการของเรา | อย่าเชื่อถือข้อมูล ไบนารี การระดมทุน หรือประกาศจากแหล่งเหล่านั้น ใช้เฉพาะ[repository นี้](https://github.com/zeroclaw-labs/zeroclaw)และบัญชีโซเชียลที่ได้รับการยืนยันของเรา |
| 2026-02-21 | _สำคัญ_ | เว็บไซต์อย่างเป็นทางการของเราพร้อมใช้งานแล้ว: [zeroclawlabs.ai](https://zeroclawlabs.ai) ขอบคุณสำหรับความอดทนขณะที่เราเตรียมการเปิดตัว เรายังคงเห็นความพยายามในการแอบอ้าง ดังนั้น**อย่า**เข้าร่วมกิจกรรมการลงทุนหรือระดมทุนที่อ้างชื่อ ZeroClaw เว้นแต่จะเผยแพร่ผ่านช่องทางอย่างเป็นทางการของเรา | ใช้[repository นี้](https://github.com/zeroclaw-labs/zeroclaw)เป็นแหล่งข้อมูลที่เชื่อถือได้เพียงแหล่งเดียว ติดตาม [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) และ [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) สำหรับอัปเดตอย่างเป็นทางการ |
| 2026-02-19 | _สำคัญ_ | Anthropic อัปเดตข้อกำหนดการยืนยันตัวตนและการใช้ข้อมูลรับรองเมื่อ 2026-02-19 โทเค็น OAuth ของ Claude Code (Free, Pro, Max) มีไว้สำหรับ Claude Code และ Claude.ai โดยเฉพาะ การใช้โทเค็น OAuth จาก Claude Free/Pro/Max ในผลิตภัณฑ์ เครื่องมือ หรือบริการอื่น (รวมถึง Agent SDK) ไม่ได้รับอนุญาตและอาจละเมิดข้อกำหนดบริการสำหรับผู้บริโภค | โปรดหลีกเลี่ยงการรวม OAuth ของ Claude Code ชั่วคราวเพื่อป้องกันการสูญเสียที่อาจเกิดขึ้น ข้อความต้นฉบับ: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use) |
## จุดเด่น
- **Runtime ที่เบาเป็นค่าเริ่มต้น** — เวิร์กโฟลว์ CLI และสถานะทั่วไปทำงานในซองหน่วยความจำไม่กี่เมกะไบต์บน release builds
- **Deployment ที่คุ้มค่า** — ออกแบบสำหรับบอร์ด $10 และอินสแตนซ์คลาวด์ขนาดเล็ก ไม่มี runtime dependencies ที่หนัก
- **Cold Start ที่รวดเร็ว** — runtime Rust ไบนารีเดียวทำให้การเริ่มต้นคำสั่งและ daemon เกือบจะทันที
- **สถาปัตยกรรมที่พกพาได้** — ไบนารีเดียวข้าม ARM, x86 และ RISC-V พร้อม provider/ช่องทาง/เครื่องมือที่สลับได้
- **Gateway แบบ Local-first** — control plane เดียวสำหรับ sessions, ช่องทาง, เครื่องมือ, cron, SOPs และเหตุการณ์
- **กล่องข้อความหลายช่องทาง** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket และอื่นๆ
- **การจัดการหลายเอเจนต์ (Hands)** — ฝูงเอเจนต์อัตโนมัติที่ทำงานตามกำหนดเวลาและฉลาดขึ้นตามเวลา
- **Standard Operating Procedures (SOPs)** — การทำงานอัตโนมัติของเวิร์กโฟลว์ที่ขับเคลื่อนด้วยเหตุการณ์ด้วย MQTT, webhook, cron และทริกเกอร์อุปกรณ์ต่อพ่วง
- **แดชบอร์ดเว็บ** — UI เว็บ React 19 + Vite พร้อมแชทเรียลไทม์, เบราว์เซอร์หน่วยความจำ, ตัวแก้ไขการกำหนดค่า, ตัวจัดการ cron และตัวตรวจสอบเครื่องมือ
- **อุปกรณ์ต่อพ่วง** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO ผ่าน trait `Peripheral`
- **เครื่องมือชั้นหนึ่ง** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace และ 70+ อื่นๆ
- **Hook วงจรชีวิต** — สกัดกั้นและแก้ไขการเรียก LLM, การทำงานของเครื่องมือ และข้อความในทุกขั้นตอน
- **แพลตฟอร์ม skill** — skill ที่รวมมา, ชุมชน และ workspace พร้อมการตรวจสอบความปลอดภัย
- **รองรับ tunnel** — Cloudflare, Tailscale, ngrok, OpenVPN และ tunnel แบบกำหนดเองสำหรับการเข้าถึงระยะไกล
### ทำไมทีมถึงเลือก ZeroClaw
- **เบาเป็นค่าเริ่มต้น:** ไบนารี Rust ขนาดเล็ก เริ่มต้นเร็ว footprint หน่วยความจำต่ำ
- **ปลอดภัยตามการออกแบบ:** pairing, sandboxing ที่เข้มงวด, รายการอนุญาตที่ชัดเจน, การกำหนดขอบเขต workspace
- **สลับได้ทั้งหมด:** ระบบหลักเป็น traits (providers, ช่องทาง, เครื่องมือ, หน่วยความจำ, tunnels)
- **ไม่มี lock-in:** รองรับ provider ที่เข้ากันได้กับ OpenAI + endpoint แบบกำหนดเองที่เสียบได้
## สรุป Benchmark (ZeroClaw vs OpenClaw, ทำซ้ำได้)
Benchmark เร็วบนเครื่องท้องถิ่น (macOS arm64, ก.พ. 2026) ปรับมาตรฐานสำหรับฮาร์ดแวร์ edge 0.8GHz
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **ภาษา** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Startup (แกน 0.8GHz)** | > 500s | > 30s | < 1s | **< 10ms** |
| **ขนาดไบนารี** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **ค่าใช้จ่าย** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **ฮาร์ดแวร์ใดก็ได้ $10** |
> หมายเหตุ: ผลลัพธ์ ZeroClaw วัดจาก release builds โดยใช้ `/usr/bin/time -l` OpenClaw ต้องการ runtime Node.js (โดยทั่วไป ~390MB overhead หน่วยความจำเพิ่มเติม) ในขณะที่ NanoBot ต้องการ runtime Python PicoClaw และ ZeroClaw เป็นไบนารีแบบ static ตัวเลข RAM ด้านบนเป็นหน่วยความจำ runtime ความต้องการการคอมไพล์ตอน build สูงกว่า
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### การวัดในเครื่องที่ทำซ้ำได้
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## ทุกสิ่งที่เราสร้างมาจนถึงตอนนี้
### แพลตฟอร์มหลัก
- Control plane HTTP/WS/SSE ของ Gateway พร้อม sessions, presence, การกำหนดค่า, cron, webhooks, แดชบอร์ดเว็บ และ pairing
- พื้นผิว CLI: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`
- ลูปการจัดการเอเจนต์พร้อม tool dispatch, การสร้าง prompt, การจำแนกข้อความ และการโหลดหน่วยความจำ
- โมเดล session พร้อมการบังคับใช้นโยบายความปลอดภัย ระดับความเป็นอัตโนมัติ และ approval gating
- Wrapper provider ที่ยืดหยุ่นพร้อม failover, retry และ model routing ข้าม 20+ LLM backends
### ช่องทาง
ช่องทาง: WhatsApp (native), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk
Feature-gated: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`)
### แดชบอร์ดเว็บ
แดชบอร์ดเว็บ React 19 + Vite 6 + Tailwind CSS 4 ให้บริการโดยตรงจาก Gateway:
- **Dashboard** — ภาพรวมระบบ สถานะสุขภาพ uptime การติดตามค่าใช้จ่าย
- **Agent Chat** — แชทโต้ตอบกับเอเจนต์
- **Memory** — เรียกดูและจัดการรายการหน่วยความจำ
- **Config** — ดูและแก้ไขการกำหนดค่า
- **Cron** — จัดการงานที่กำหนดเวลา
- **Tools** — เรียกดูเครื่องมือที่มี
- **Logs** — ดูบันทึกกิจกรรมเอเจนต์
- **Cost** — การใช้โทเค็นและการติดตามค่าใช้จ่าย
- **Doctor** — การวินิจฉัยสุขภาพระบบ
- **Integrations** — สถานะการรวมและการตั้งค่า
- **Pairing** — การจัดการ pairing อุปกรณ์
### เป้าหมาย firmware
| เป้าหมาย | แพลตฟอร์ม | วัตถุประสงค์ |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | เอเจนต์อุปกรณ์ต่อพ่วงไร้สาย |
| ESP32-UI | ESP32 + Display | เอเจนต์พร้อมอินเทอร์เฟซภาพ |
| STM32 Nucleo | STM32 (ARM Cortex-M) | อุปกรณ์ต่อพ่วงอุตสาหกรรม |
| Arduino | Arduino | บริดจ์เซ็นเซอร์/แอคชูเอเตอร์พื้นฐาน |
| Uno Q Bridge | Arduino Uno | บริดจ์ซีเรียลไปยังเอเจนต์ |
### เครื่องมือ + การทำงานอัตโนมัติ
- **หลัก:** shell, file read/write/edit, การดำเนินการ git, glob search, content search
- **เว็บ:** browser control, web fetch, web search, screenshot, image info, PDF read
- **การรวม:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **การกำหนดเวลา:** cron add/remove/update/run, schedule tool
- **หน่วยความจำ:** recall, store, forget, knowledge, project intel
- **ขั้นสูง:** delegate (เอเจนต์-ต่อ-เอเจนต์), swarm, model switch/routing, security ops, cloud ops
- **ฮาร์ดแวร์:** board info, memory map, memory read (feature-gated)
### Runtime + ความปลอดภัย
- **ระดับความเป็นอัตโนมัติ:** ReadOnly, Supervised (ค่าเริ่มต้น), Full
- **Sandboxing:** การแยก workspace, การบล็อก path traversal, รายการอนุญาตคำสั่ง, เส้นทางที่ห้าม, Landlock (Linux), Bubblewrap
- **การจำกัดอัตรา:** การดำเนินการสูงสุดต่อชั่วโมง ค่าใช้จ่ายสูงสุดต่อวัน (กำหนดค่าได้)
- **Approval gating:** การอนุมัติแบบโต้ตอบสำหรับการดำเนินการที่มีความเสี่ยงปานกลาง/สูง
- **E-stop:** ความสามารถในการปิดระบบฉุกเฉิน
- **129+ การทดสอบความปลอดภัย** ใน CI อัตโนมัติ
### Ops + การแพ็กเกจ
- แดชบอร์ดเว็บให้บริการโดยตรงจาก Gateway
- รองรับ tunnel: Cloudflare, Tailscale, ngrok, OpenVPN, คำสั่งกำหนดเอง
- Docker runtime adapter สำหรับการทำงานแบบ containerized
- CI/CD: beta (อัตโนมัติเมื่อ push) → stable (dispatch แบบ manual) → Docker, crates.io, Scoop, AUR, Homebrew, tweet
- ไบนารี pre-built สำหรับ Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64)
## การกำหนดค่า
ZeroClaw ใช้ไฟล์กำหนดค่า YAML โดยค่าเริ่มต้นจะค้นหา `config.yaml`
ขั้นต่ำ `~/.zeroclaw/config.toml`:
```yaml
# ผู้ให้บริการเริ่มต้น
provider: anthropic
# การกำหนดค่าผู้ให้บริการ
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# การกำหนดค่าหน่วยความจำ
memory:
backend: sqlite
path: data/memory.db
# การกำหนดค่าช่องทาง
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
อ้างอิงการกำหนดค่าฉบับเต็ม: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
### การกำหนดค่าช่องทาง
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### การกำหนดค่า tunnel
```toml
[tunnel]
kind = "cloudflare" # หรือ "tailscale", "ngrok", "openvpn", "custom", "none"
```
รายละเอียด: [อ้างอิงช่องทาง](docs/reference/api/channels-reference.md) · [อ้างอิงการกำหนดค่า](docs/reference/api/config-reference.md)
### รองรับ runtime (ปัจจุบัน)
- **`native`** (ค่าเริ่มต้น) — การทำงานแบบ process โดยตรง เส้นทางที่เร็วที่สุด เหมาะสำหรับสภาพแวดล้อมที่เชื่อถือได้
- **`docker`** — การแยก container เต็มรูปแบบ นโยบายความปลอดภัยที่บังคับใช้ ต้องการ Docker
ตั้ง `runtime.kind = "docker"` สำหรับ sandboxing ที่เข้มงวดหรือการแยกเครือข่าย
## การยืนยันตัวตนแบบสมัครสมาชิก (OpenAI Codex / Claude Code / Gemini)
ZeroClaw รองรับโปรไฟล์การยืนยันตัวตนแบบ subscription-native (หลายบัญชี, เข้ารหัสเมื่อเก็บ)
- ไฟล์จัดเก็บ: `~/.zeroclaw/auth-profiles.json`
- คีย์เข้ารหัส: `~/.zeroclaw/.secret_key`
- รูปแบบ id โปรไฟล์: `<provider>:<profile_name>` (ตัวอย่าง: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (สมัครสมาชิก ChatGPT)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# ตรวจสอบ / refresh / สลับโปรไฟล์
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# รันเอเจนต์ด้วย auth แบบสมัครสมาชิก
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Workspace เอเจนต์ + skill
Root workspace: `~/.zeroclaw/workspace/` (กำหนดค่าได้ผ่าน config)
ไฟล์ prompt ที่ inject:
- `IDENTITY.md` — บุคลิกภาพและบทบาทของเอเจนต์
- `USER.md` — บริบทและความชอบของผู้ใช้
- `MEMORY.md` — ข้อเท็จจริงและบทเรียนระยะยาว
- `AGENTS.md` — ข้อตกลง session และกฎการเริ่มต้น
- `SOUL.md` — อัตลักษณ์หลักและหลักการดำเนินงาน
Skills: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` หรือ `SKILL.toml`
```bash
# แสดงรายการ skill ที่ติดตั้ง
zeroclaw skills list
# ติดตั้งจาก git
zeroclaw skills install https://github.com/user/my-skill.git
# ตรวจสอบความปลอดภัยก่อนติดตั้ง
zeroclaw skills audit https://github.com/user/my-skill.git
# ลบ skill
zeroclaw skills remove my-skill
```
## คำสั่ง CLI
```bash
# การจัดการ workspace
zeroclaw onboard # วิซาร์ดการตั้งค่าแบบแนะนำ
zeroclaw status # แสดงสถานะ daemon/เอเจนต์
zeroclaw doctor # รันการวินิจฉัยระบบ
# Gateway + daemon
zeroclaw gateway # เริ่มเซิร์ฟเวอร์ gateway (127.0.0.1:42617)
zeroclaw daemon # เริ่ม runtime อัตโนมัติเต็มรูปแบบ
# เอเจนต์
zeroclaw agent # โหมดแชทโต้ตอบ
zeroclaw agent -m "message" # โหมดข้อความเดียว
# การจัดการบริการ
zeroclaw service install # ติดตั้งเป็นบริการ OS (launchd/systemd)
zeroclaw service start|stop|restart|status
# ช่องทาง
zeroclaw channel list # แสดงรายการช่องทางที่กำหนดค่า
zeroclaw channel doctor # ตรวจสอบสุขภาพช่องทาง
zeroclaw channel bind-telegram 123456789
# Cron + การกำหนดเวลา
zeroclaw cron list # แสดงรายการงานที่กำหนดเวลา
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# หน่วยความจำ
zeroclaw memory list # แสดงรายการหน่วยความจำ
zeroclaw memory get <key> # ดึงหน่วยความจำ
zeroclaw memory stats # สถิติหน่วยความจำ
# โปรไฟล์การยืนยันตัวตน
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# อุปกรณ์ต่อพ่วง
zeroclaw hardware discover # สแกนอุปกรณ์ที่เชื่อมต่อ
zeroclaw peripheral list # แสดงรายการอุปกรณ์ต่อพ่วงที่เชื่อมต่อ
zeroclaw peripheral flash # แฟลช firmware ไปยังอุปกรณ์
# การย้าย
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# การเติมเต็ม shell
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
อ้างอิงคำสั่งฉบับเต็ม: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## ข้อกำหนดเบื้องต้น
<details>
<summary><strong>Windows</strong></summary>
#### จำเป็น
1. **Visual Studio Build Tools** (ให้ linker MSVC และ Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
ระหว่างการติดตั้ง (หรือผ่าน Visual Studio Installer) เลือก workload **"Desktop development with C++"**
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
หลังติดตั้ง เปิดเทอร์มินัลใหม่และรัน `rustup default stable` เพื่อให้แน่ใจว่า toolchain ที่เสถียรใช้งานอยู่
3. **ตรวจสอบ** ว่าทั้งสองใช้งานได้:
```powershell
rustc --version
cargo --version
```
#### ไม่บังคับ
- **Docker Desktop** — จำเป็นเฉพาะเมื่อใช้ [Docker sandboxed runtime](#รองรับ-runtime-ปัจจุบัน) (`runtime.kind = "docker"`) ติดตั้งผ่าน `winget install Docker.DockerDesktop`
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### จำเป็น
1. **Build essentials:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** ติดตั้ง Xcode Command Line Tools: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
ดู [rustup.rs](https://rustup.rs) สำหรับรายละเอียด
3. **ตรวจสอบ** ว่าทั้งสองใช้งานได้:
```bash
rustc --version
cargo --version
```
#### ตัวติดตั้งบรรทัดเดียว
หรือข้ามขั้นตอนด้านบนและติดตั้งทุกอย่าง (dependencies ระบบ, Rust, ZeroClaw) ในคำสั่งเดียว:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### ข้อกำหนดทรัพยากรการคอมไพล์
การ build จากซอร์สต้องการทรัพยากรมากกว่าการรันไบนารีที่ได้:
| ทรัพยากร | ขั้นต่ำ | แนะนำ |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **พื้นที่ว่าง** | 6 GB | 10 GB+ |
หากโฮสต์ของคุณต่ำกว่าขั้นต่ำ ใช้ไบนารี pre-built:
```bash
./install.sh --prefer-prebuilt
```
เพื่อต้องการการติดตั้งแบบไบนารีเท่านั้นโดยไม่มี fallback ซอร์ส:
```bash
./install.sh --prebuilt-only
```
#### ไม่บังคับ
- **Docker** — จำเป็นเฉพาะเมื่อใช้ [Docker sandboxed runtime](#รองรับ-runtime-ปัจจุบัน) (`runtime.kind = "docker"`) ติดตั้งผ่านตัวจัดการแพ็กเกจของคุณหรือ [docker.com](https://docs.docker.com/engine/install/)
> **หมายเหตุ:** `cargo build --release` เริ่มต้นใช้ `codegen-units=1` เพื่อลดความดันการคอมไพล์สูงสุด สำหรับ build ที่เร็วขึ้นบนเครื่องที่แรง ใช้ `cargo build --profile release-fast`
</details>
<!-- markdownlint-enable MD001 MD024 -->
### ไบนารี pre-built
Release assets เผยแพร่สำหรับ:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
ดาวน์โหลด assets ล่าสุดจาก:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## เอกสาร
สำหรับเอกสารโดยละเอียด ดูที่:
ใช้เมื่อคุณผ่านขั้นตอน onboarding แล้วและต้องการอ้างอิงที่ลึกกว่า
- [ศูนย์เอกสาร](docs/README.md)
- [ข้อมูลอ้างอิงคำสั่ง](docs/commands-reference.md)
- [ข้อมูลอ้างอิงผู้ให้บริการ](docs/providers-reference.md)
- [ข้อมูลอ้างอิงช่องทาง](docs/channels-reference.md)
- [ข้อมูลอ้างอิงการกำหนดค่า](docs/config-reference.md)
- เริ่มด้วย[สารบัญเอกสาร](docs/README.md)สำหรับการนำทางและ "อะไรอยู่ที่ไหน"
- อ่าน[ภาพรวมสถาปัตยกรรม](docs/architecture.md)สำหรับโมเดลระบบทั้งหมด
- ใช้[อ้างอิงการกำหนดค่า](docs/reference/api/config-reference.md)เมื่อคุณต้องการทุก key และตัวอย่าง
- รัน Gateway ตามหนังสือด้วย[runbook การดำเนินงาน](docs/ops/operations-runbook.md)
- ทำตาม [ZeroClaw Onboard](#เริ่มต้นอย่างรวดเร็ว) สำหรับการตั้งค่าแบบแนะนำ
- แก้ไขปัญหาที่พบบ่อยด้วย[คู่มือแก้ไขปัญหา](docs/ops/troubleshooting.md)
- ตรวจสอบ[แนวทางความปลอดภัย](docs/security/README.md)ก่อนเปิดเผยสิ่งใด
---
### เอกสารอ้างอิง
- ศูนย์กลางเอกสาร: [docs/README.md](docs/README.md)
- TOC เอกสารรวม: [docs/SUMMARY.md](docs/SUMMARY.md)
- อ้างอิงคำสั่ง: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- อ้างอิงการกำหนดค่า: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- อ้างอิง provider: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- อ้างอิงช่องทาง: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Runbook การดำเนินงาน: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- การแก้ไขปัญหา: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### เอกสารความร่วมมือ
- คู่มือการมีส่วนร่วม: [CONTRIBUTING.md](CONTRIBUTING.md)
- นโยบาย PR workflow: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- คู่มือ CI workflow: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Playbook ผู้ตรวจสอบ: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- นโยบายเปิดเผยความปลอดภัย: [SECURITY.md](SECURITY.md)
- เทมเพลตเอกสาร: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Deployment + การดำเนินงาน
- คู่มือ deployment เครือข่าย: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Playbook proxy agent: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- คู่มือฮาร์ดแวร์: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw ถูกสร้างสำหรับ smooth crab 🦀 ผู้ช่วย AI ที่เร็วและมีประสิทธิภาพ สร้างโดย Argenis De La Rosa และชุมชน
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## สนับสนุน ZeroClaw
หาก ZeroClaw ช่วยงานของคุณและคุณต้องการสนับสนุนการพัฒนาต่อเนื่อง คุณสามารถบริจาคที่นี่:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 ขอขอบคุณเป็นพิเศษ
ขอขอบคุณจากใจจริงถึงชุมชนและสถาบันที่สร้างแรงบันดาลใจและขับเคลื่อนงาน open-source นี้:
- **Harvard University** — สำหรับการส่งเสริมความอยากรู้ทางปัญญาและผลักดันขอบเขตของสิ่งที่เป็นไปได้
- **MIT** — สำหรับการสนับสนุนความรู้เปิด open source และความเชื่อว่าเทคโนโลยีควรเข้าถึงได้สำหรับทุกคน
- **Sundai Club** — สำหรับชุมชน พลังงาน และแรงผลักดันอย่างไม่หยุดหย่อนในการสร้างสิ่งที่สำคัญ
- **โลก & เหนือกว่า** 🌍✨ — ถึงผู้มีส่วนร่วม นักฝัน และผู้สร้างทุกคนที่ทำให้ open source เป็นพลังเพื่อสิ่งดีๆ นี่สำหรับคุณ
เราสร้างแบบเปิดเพราะไอเดียที่ดีที่สุดมาจากทุกที่ หากคุณอ่านสิ่งนี้ คุณเป็นส่วนหนึ่งของมัน ยินดีต้อนรับ 🦀❤️
## การมีส่วนร่วม
ยินดีต้อนรับการมีส่วนร่วม! โปรดอ่าน [คู่มือการมีส่วนร่วม](CONTRIBUTING.md)
ใหม่กับ ZeroClaw? มองหา issues ที่มีป้ายกำกับ [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — ดู[คู่มือการมีส่วนร่วม](CONTRIBUTING.md#first-time-contributors)สำหรับวิธีเริ่มต้น ยินดีรับ PR ที่สร้างด้วย AI/vibe-coded! 🤖
ดู [CONTRIBUTING.md](CONTRIBUTING.md) และ [CLA.md](docs/contributing/cla.md) ใช้งาน trait แล้วส่ง PR:
- คู่มือ CI workflow: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- `Provider` ใหม่ → `src/providers/`
- `Channel` ใหม่ → `src/channels/`
- `Observer` ใหม่ → `src/observability/`
- `Tool` ใหม่ → `src/tools/`
- `Memory` ใหม่ → `src/memory/`
- `Tunnel` ใหม่ → `src/tunnel/`
- `Peripheral` ใหม่ → `src/peripherals/`
- `Skill` ใหม่ → `~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Repository อย่างเป็นทางการ & คำเตือนการแอบอ้าง
**นี่คือ repository อย่างเป็นทางการเพียงแห่งเดียวของ ZeroClaw:**
> https://github.com/zeroclaw-labs/zeroclaw
repository, องค์กร, โดเมน หรือแพ็กเกจอื่นใดที่อ้างว่าเป็น "ZeroClaw" หรือบ่งบอกถึงการเกี่ยวข้องกับ ZeroClaw Labs นั้น**ไม่ได้รับอนุญาตและไม่มีส่วนเกี่ยวข้องกับโปรเจกต์นี้** Fork ที่ไม่ได้รับอนุญาตที่ทราบจะถูกระบุไว้ใน [TRADEMARK.md](docs/maintainers/trademark.md)
หากคุณพบการแอบอ้างหรือการใช้เครื่องหมายการค้าในทางที่ผิด โปรด[เปิด issue](https://github.com/zeroclaw-labs/zeroclaw/issues)
---
## สัญญาอนุญาต
โปรเจกต์นี้มีสัญญาอนุญาตคู่:
ZeroClaw มี dual-license เพื่อความเปิดกว้างสูงสุดและการปกป้องผู้มีส่วนร่วม:
- MIT License
- Apache License, เวอร์ชัน 2.0
| สัญญาอนุญาต | กรณีการใช้งาน |
|---|---|
| [MIT](LICENSE-MIT) | Open-source, วิจัย, วิชาการ, ใช้ส่วนตัว |
| [Apache 2.0](LICENSE-APACHE) | การปกป้องสิทธิบัตร, สถาบัน, deployment เชิงพาณิชย์ |
ดู [LICENSE-APACHE](LICENSE-APACHE) และ [LICENSE-MIT](LICENSE-MIT) สำหรับรายละเอียด
คุณสามารถเลือกสัญญาอนุญาตใดก็ได้ **ผู้มีส่วนร่วมให้สิทธิ์โดยอัตโนมัติภายใต้ทั้งสอง** — ดู [CLA.md](docs/contributing/cla.md) สำหรับข้อตกลงผู้มีส่วนร่วมฉบับเต็ม
### เครื่องหมายการค้า
ชื่อและโลโก้ **ZeroClaw** เป็นเครื่องหมายการค้าของ ZeroClaw Labs สัญญาอนุญาตนี้ไม่ให้สิทธิ์ในการใช้เพื่อบ่งบอกถึงการรับรองหรือการเกี่ยวข้อง ดู [TRADEMARK.md](docs/maintainers/trademark.md) สำหรับการใช้งานที่อนุญาตและห้าม
### การปกป้องผู้มีส่วนร่วม
- คุณ**คงสิทธิ์ลิขสิทธิ์**ของผลงานของคุณ
- **การให้สิทธิ์สิทธิบัตร** (Apache 2.0) ปกป้องคุณจากการเรียกร้องสิทธิบัตรโดยผู้มีส่วนร่วมคนอื่น
- ผลงานของคุณ**ได้รับการระบุอย่างถาวร**ในประวัติ commit และ [NOTICE](NOTICE)
- ไม่มีสิทธิ์เครื่องหมายการค้าที่ถ่ายโอนโดยการมีส่วนร่วม
---
## ชุมชน
**ZeroClaw** — ไม่มีโอเวอร์เฮด ไม่มีการประนีประนอม Deploy ที่ไหนก็ได้ สลับอะไรก็ได้ 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## ผู้มีส่วนร่วม
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## ผู้สนับสนุน
รายการนี้สร้างจากกราฟผู้มีส่วนร่วม GitHub และอัปเดตโดยอัตโนมัติ
หาก ZeroClaw มีประโยชน์สำหรับคุณ โปรดพิจารณาซื้อกาแฟให้เรา:
## ประวัติดาว
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,29 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — Персональний AI-Асистент</h1>
<p align="center">
<strong>Нуль накладних витрат. Нуль компромісів. 100% Rust. 100% Агностичний.</strong><br>
⚡️ <strong>Працює на $10 обладнанні з <5MB RAM: Це на 99% менше пам'яті ніж OpenClaw і на 98% дешевше ніж Mac mini!</strong>
⚡️ <strong>Працює на обладнанні за $10 з <5MB RAM: це на 99% менше пам'яті, ніж OpenClaw, і на 98% дешевше, ніж Mac mini!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Створено студентами та учасниками спільнот Harvard, MIT і Sundai.Club.
</p>
<p align="center">
@ -55,125 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw — це персональний AI-асистент, який ви запускаєте на власних пристроях. Він відповідає вам у каналах, які ви вже використовуєте (WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work та інші). Він має веб-панель керування для контролю в реальному часі та може підключатися до апаратних периферійних пристроїв (ESP32, STM32, Arduino, Raspberry Pi). Gateway — це лише площина управління, а продукт — це асистент.
## Що таке ZeroClaw?
Якщо вам потрібен персональний, одного користувача асистент, який відчувається локальним, швидким і завжди доступним — це він.
ZeroClaw — це легка, змінювана та розширювана інфраструктура AI-асистента, написана на Rust. Вона з'єднує різних LLM-провайдерів (Anthropic, OpenAI, Google, Ollama тощо) через уніфікований інтерфейс і підтримує багато каналів (Telegram, Matrix, CLI тощо).
<p align="center">
<a href="https://zeroclawlabs.ai">Вебсайт</a> ·
<a href="docs/README.md">Документація</a> ·
<a href="docs/architecture.md">Архітектура</a> ·
<a href="#швидкий-старт-tldr">Початок роботи</a> ·
<a href="#міграція-з-openclaw">Міграція з OpenClaw</a> ·
<a href="docs/ops/troubleshooting.md">Усунення неполадок</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### Ключові особливості
> **Рекомендований спосіб налаштування:** виконайте `zeroclaw onboard` у вашому терміналі. ZeroClaw Onboard покроково проведе вас через налаштування gateway, робочого простору, каналів і провайдера. Це рекомендований шлях налаштування, який працює на macOS, Linux і Windows (через WSL2). Нова установка? Почніть тут: [Початок роботи](#швидкий-старт-tldr)
- **🦀 Написано на Rust**: Висока продуктивність, безпека пам'яті та абстракції без накладних витрат
- **🔌 Агностичний до провайдерів**: Підтримка OpenAI, Anthropic, Google Gemini, Ollama та інших
- **📱 Багатоканальність**: Telegram, Matrix (з E2EE), CLI та інші
- **🧠 Плагінна пам'ять**: SQLite та Markdown бекенди
- **🛠️ Розширювані інструменти**: Легко додавайте власні інструменти
- **🔒 Безпека першочергово**: Зворотний проксі, дизайн з пріоритетом конфіденційності
### Subscription Auth (OAuth)
---
- **OpenAI Codex** (підписка ChatGPT)
- **Gemini** (Google OAuth)
- **Anthropic** (API-ключ або токен авторизації)
## Швидкий старт
Примітка щодо моделей: хоча підтримується багато провайдерів/моделей, для найкращого досвіду використовуйте найпотужнішу модель останнього покоління, доступну вам. Дивіться [Онбординг](#швидкий-старт-tldr).
### Вимоги
Конфігурація моделей + CLI: [Довідник провайдерів](docs/reference/api/providers-reference.md)
Ротація профілів авторизації (OAuth vs API-ключі) + аварійне перемикання: [Аварійне перемикання моделей](docs/reference/api/providers-reference.md)
- Rust 1.70+
- API-ключ LLM-провайдера (Anthropic, OpenAI тощо)
## Встановлення (рекомендовано)
### Встановлення
Середовище виконання: стабільний набір інструментів Rust. Єдиний бінарний файл, без залежностей середовища виконання.
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### Встановлення одним кліком
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` запускається автоматично після встановлення для налаштування вашого робочого простору та провайдера.
## Швидкий старт (TL;DR)
Повний посібник для початківців (авторизація, сполучення, канали): [Початок роботи](docs/setup-guides/one-click-bootstrap.md)
```bash
# Встановлення + онбординг
./install.sh --api-key "sk-..." --provider openrouter
# Запуск gateway (вебхук-сервер + веб-панель)
zeroclaw gateway # за замовчуванням: 127.0.0.1:42617
zeroclaw gateway --port 0 # випадковий порт (посилена безпека)
# Розмова з асистентом
zeroclaw agent -m "Hello, ZeroClaw!"
# Інтерактивний режим
zeroclaw agent
# Запуск повного автономного середовища (gateway + канали + cron + hands)
zeroclaw daemon
# Перевірка статусу
zeroclaw status
# Запуск діагностики
zeroclaw doctor
```
Оновлюєтесь? Виконайте `zeroclaw doctor` після оновлення.
### З вихідного коду (розробка)
```bash
# Клонуйте репозиторій
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# Зберіть проект
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# Запустіть
cargo run --release
zeroclaw onboard
```
### З Docker
> **Резервний варіант для розробників (без глобальної установки):** додайте до команд префікс `cargo run --release --` (приклад: `cargo run --release -- status`).
## Міграція з OpenClaw
ZeroClaw може імпортувати ваш робочий простір, пам'ять та конфігурацію OpenClaw:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# Попередній перегляд того, що буде мігровано (безпечно, лише читання)
zeroclaw migrate openclaw --dry-run
# Виконання міграції
zeroclaw migrate openclaw
```
---
Це мігрує ваші записи пам'яті, файли робочого простору та конфігурацію з `~/.openclaw/` до `~/.zeroclaw/`. Конфігурація автоматично конвертується з JSON у TOML.
## Стандартні налаштування безпеки (доступ через DM)
ZeroClaw підключається до реальних платформ обміну повідомленнями. Розглядайте вхідні DM як ненадійний ввід.
Повний посібник з безпеки: [SECURITY.md](SECURITY.md)
Поведінка за замовчуванням на всіх каналах:
- **Сполучення через DM** (за замовчуванням): невідомі відправники отримують короткий код сполучення, і бот не обробляє їхні повідомлення.
- Підтвердіть за допомогою: `zeroclaw pairing approve <channel> <code>` (після чого відправник додається до локального списку дозволених).
- Публічні вхідні DM вимагають явного увімкнення в `config.toml`.
- Виконайте `zeroclaw doctor` для виявлення ризикованих або неправильно налаштованих політик DM.
**Рівні автономності:**
| Рівень | Поведінка |
|--------|-----------|
| `ReadOnly` | Агент може спостерігати, але не діяти |
| `Supervised` (за замовчуванням) | Агент діє із затвердженням для операцій середнього/високого ризику |
| `Full` | Агент діє автономно в межах політики |
**Шари ізоляції:** ізоляція робочого простору, блокування обходу шляху, списки дозволених команд, заборонені шляхи (`/etc`, `/root`, `~/.ssh`), обмеження частоти (макс. дій/годину, ліміти витрат/день).
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### Оголошення
Використовуйте цю дошку для важливих повідомлень (критичні зміни, рекомендації з безпеки, вікна обслуговування та блокери випусків).
| Дата (UTC) | Рівень | Повідомлення | Дія |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Критичний_ | Ми **не пов'язані** з `openagen/zeroclaw`, `zeroclaw.org` або `zeroclaw.net`. Домени `zeroclaw.org` та `zeroclaw.net` наразі вказують на форк `openagen/zeroclaw`, і цей домен/репозиторій видають себе за наш офіційний вебсайт/проєкт. | Не довіряйте інформації, бінарним файлам, збору коштів або оголошенням з цих джерел. Використовуйте лише [цей репозиторій](https://github.com/zeroclaw-labs/zeroclaw) та наші верифіковані соціальні акаунти. |
| 2026-02-21 | _Важливий_ | Наш офіційний вебсайт тепер доступний: [zeroclawlabs.ai](https://zeroclawlabs.ai). Дякуємо за терпіння, поки ми готували запуск. Ми все ще бачимо спроби імітації, тому **не** приєднуйтесь до будь-якої інвестиційної або збіркової діяльності, що використовує назву ZeroClaw, якщо вона не опублікована через наші офіційні канали. | Використовуйте [цей репозиторій](https://github.com/zeroclaw-labs/zeroclaw) як єдине джерело істини. Слідкуйте за [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) та [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) для офіційних оновлень. |
| 2026-02-19 | _Важливий_ | Anthropic оновила умови автентифікації та використання облікових даних 2026-02-19. OAuth-токени Claude Code (Free, Pro, Max) призначені виключно для Claude Code та Claude.ai; використання OAuth-токенів Claude Free/Pro/Max у будь-якому іншому продукті, інструменті або сервісі (включаючи Agent SDK) не дозволяється та може порушувати Умови обслуговування для споживачів. | Будь ласка, тимчасово уникайте інтеграцій Claude Code OAuth для запобігання потенційних втрат. Оригінальний пункт: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
## Основні можливості
- **Легке середовище за замовчуванням** — типові робочі процеси CLI та статусу працюють у конверті пам'яті декількох мегабайтів на релізних збірках.
- **Економічне розгортання** — розроблено для плат за $10 і малих хмарних інстансів, без важких залежностей середовища виконання.
- **Швидкий холодний старт** — однобінарне середовище Rust забезпечує майже миттєвий запуск команд і демона.
- **Портативна архітектура** — один бінарний файл для ARM, x86 та RISC-V зі змінними провайдерами/каналами/інструментами.
- **Локальний Gateway** — єдина площина управління для сесій, каналів, інструментів, cron, SOP та подій.
- **Багатоканальна скринька** — WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, Nostr, Mattermost, Nextcloud Talk, DingTalk, Lark, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WebSocket та інші.
- **Мультиагентна оркестрація (Hands)** — автономні рої агентів, що працюють за розкладом і стають розумнішими з часом.
- **Стандартні операційні процедури (SOPs)** — автоматизація робочих процесів на основі подій з MQTT, webhook, cron та тригерами периферійних пристроїв.
- **Веб-панель керування** — веб-інтерфейс React 19 + Vite з чатом у реальному часі, браузером пам'яті, редактором конфігурації, менеджером cron та інспектором інструментів.
- **Апаратні периферійні пристрої** — ESP32, STM32 Nucleo, Arduino, Raspberry Pi GPIO через трейт `Peripheral`.
- **Першокласні інструменти** — shell, file I/O, browser, git, web fetch/search, MCP, Jira, Notion, Google Workspace та 70+ інших.
- **Хуки життєвого циклу** — перехоплення та модифікація викликів LLM, виконань інструментів і повідомлень на кожному етапі.
- **Платформа навичок** — вбудовані, спільноти та навички робочого простору з аудитом безпеки.
- **Підтримка тунелів** — Cloudflare, Tailscale, ngrok, OpenVPN та власні тунелі для віддаленого доступу.
### Чому команди обирають ZeroClaw
- **Легкий за замовчуванням:** малий бінарний файл Rust, швидкий запуск, низьке споживання пам'яті.
- **Безпечний за проєктуванням:** сполучення, суворе ізолювання, явні списки дозволених, обмеження робочого простору.
- **Повністю змінний:** основні системи — це трейти (провайдери, канали, інструменти, пам'ять, тунелі).
- **Без прив'язки:** підтримка провайдерів, сумісних з OpenAI + підключувані власні ендпоінти.
## Порівняльний бенчмарк (ZeroClaw проти OpenClaw, відтворюваний)
Локальний швидкий бенчмарк (macOS arm64, лютий 2026), нормалізований для edge-обладнання 0,8 ГГц.
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **Мова** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Запуск (ядро 0,8 ГГц)**| > 500s | > 30s | < 1s | **< 10ms** |
| **Розмір бінарного файлу**| ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **Вартість** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Будь-яке обладнання $10** |
> Примітки: результати ZeroClaw виміряні на релізних збірках за допомогою `/usr/bin/time -l`. OpenClaw вимагає середовище Node.js (зазвичай ~390MB додаткових накладних витрат пам'яті), тоді як NanoBot вимагає середовище Python. PicoClaw і ZeroClaw — це статичні бінарні файли. Наведені цифри RAM — це пам'ять часу виконання; вимоги до компіляції вищі.
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### Відтворюване локальне вимірювання
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## Все, що ми побудували на сьогодні
### Основна платформа
- Gateway HTTP/WS/SSE площина управління з сесіями, присутністю, конфігурацією, cron, вебхуками, веб-панеллю та сполученням.
- CLI-поверхня: `gateway`, `agent`, `onboard`, `doctor`, `status`, `service`, `migrate`, `auth`, `cron`, `channel`, `skills`.
- Цикл оркестрації агента з диспетчеризацією інструментів, побудовою промптів, класифікацією повідомлень та завантаженням пам'яті.
- Модель сесій з примусовим виконанням політик безпеки, рівнями автономності та затвердженням операцій.
- Стійкий обгортка провайдера з аварійним перемиканням, повторами та маршрутизацією моделей через 20+ LLM-бекендів.
### Канали
Канали: WhatsApp (нативний), Telegram, Slack, Discord, Signal, iMessage, Matrix, IRC, Email, Bluesky, DingTalk, Lark, Mattermost, Nextcloud Talk, Nostr, QQ, Reddit, LinkedIn, Twitter, MQTT, WeChat Work, WATI, Mochat, Linq, Notion, WebSocket, ClawdTalk.
З feature-гейтами: Matrix (`channel-matrix`), Lark (`channel-lark`), Nostr (`channel-nostr`).
### Веб-панель керування
Веб-панель React 19 + Vite 6 + Tailwind CSS 4, що обслуговується безпосередньо з Gateway:
- **Панель керування** — огляд системи, стан здоров'я, час роботи, відстеження витрат
- **Чат з агентом** — інтерактивний чат з агентом
- **Пам'ять** — перегляд та керування записами пам'яті
- **Конфігурація** — перегляд та редагування конфігурації
- **Cron** — керування запланованими завданнями
- **Інструменти** — перегляд доступних інструментів
- **Логи** — перегляд журналів активності агента
- **Витрати** — відстеження використання токенів та витрат
- **Діагностика** — діагностика стану системи
- **Інтеграції** — стан та налаштування інтеграцій
- **Сполучення** — керування сполученням пристроїв
### Цільові прошивки
| Ціль | Платформа | Призначення |
|------|-----------|-------------|
| ESP32 | Espressif ESP32 | Бездротовий периферійний агент |
| ESP32-UI | ESP32 + Display | Агент з візуальним інтерфейсом |
| STM32 Nucleo | STM32 (ARM Cortex-M) | Промисловий периферійний пристрій |
| Arduino | Arduino | Базовий міст датчиків/виконавчих пристроїв |
| Uno Q Bridge | Arduino Uno | Послідовний міст до агента |
### Інструменти + автоматизація
- **Основні:** shell, file read/write/edit, git operations, glob search, content search
- **Веб:** browser control, web fetch, web search, screenshot, image info, PDF read
- **Інтеграції:** Jira, Notion, Google Workspace, Microsoft 365, LinkedIn, Composio, Pushover
- **MCP:** Model Context Protocol tool wrapper + відкладені набори інструментів
- **Планування:** cron add/remove/update/run, schedule tool
- **Пам'ять:** recall, store, forget, knowledge, project intel
- **Розширені:** delegate (агент-агенту), swarm, model switch/routing, security ops, cloud ops
- **Апаратне забезпечення:** board info, memory map, memory read (з feature-гейтом)
### Середовище виконання + безпека
- **Рівні автономності:** ReadOnly, Supervised (за замовчуванням), Full.
- **Ізоляція:** ізоляція робочого простору, блокування обходу шляху, списки дозволених команд, заборонені шляхи, Landlock (Linux), Bubblewrap.
- **Обмеження частоти:** максимум дій на годину, максимум витрат на день (налаштовуване).
- **Затвердження операцій:** інтерактивне затвердження для операцій середнього/високого ризику.
- **Екстрена зупинка:** можливість екстреного вимкнення.
- **129+ тестів безпеки** в автоматизованому CI.
### Операції + пакування
- Веб-панель, що обслуговується безпосередньо з Gateway.
- Підтримка тунелів: Cloudflare, Tailscale, ngrok, OpenVPN, власна команда.
- Docker runtime adapter для контейнерного виконання.
- CI/CD: beta (автоматично при push) → stable (ручний запуск) → Docker, crates.io, Scoop, AUR, Homebrew, tweet.
- Попередньо зібрані бінарні файли для Linux (x86_64, aarch64, armv7), macOS (x86_64, aarch64), Windows (x86_64).
## Конфігурація
ZeroClaw використовує YAML-файл конфігурації. За замовчуванням він шукає `config.yaml`.
Мінімальний `~/.zeroclaw/config.toml`:
```yaml
# Провайдер за замовчуванням
provider: anthropic
# Конфігурація провайдерів
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# Конфігурація пам'яті
memory:
backend: sqlite
path: data/memory.db
# Конфігурація каналів
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
Повний довідник конфігурації: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md).
### Конфігурація каналів
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### Конфігурація тунелів
```toml
[tunnel]
kind = "cloudflare" # або "tailscale", "ngrok", "openvpn", "custom", "none"
```
Деталі: [Довідник каналів](docs/reference/api/channels-reference.md) · [Довідник конфігурації](docs/reference/api/config-reference.md)
### Підтримка середовищ виконання (поточна)
- **`native`** (за замовчуванням) — пряме виконання процесу, найшвидший шлях, ідеальний для довірених середовищ.
- **`docker`** — повна контейнерна ізоляція, примусові політики безпеки, вимагає Docker.
Встановіть `runtime.kind = "docker"` для суворої ізоляції або мережевої ізоляції.
## Subscription Auth (OpenAI Codex / Claude Code / Gemini)
ZeroClaw підтримує профілі авторизації на основі підписки (мультиакаунт, шифрування в стані спокою).
- Файл сховища: `~/.zeroclaw/auth-profiles.json`
- Ключ шифрування: `~/.zeroclaw/.secret_key`
- Формат ідентифікатора профілю: `<provider>:<profile_name>` (приклад: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (підписка ChatGPT)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# Перевірка / оновлення / перемикання профілю
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# Запуск агента з авторизацією підписки
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## Робочий простір агента + навички
Корінь робочого простору: `~/.zeroclaw/workspace/` (налаштовується через конфігурацію).
Вбудовані файли промптів:
- `IDENTITY.md` — особистість та роль агента
- `USER.md` — контекст та налаштування користувача
- `MEMORY.md` — довгострокові факти та уроки
- `AGENTS.md` — конвенції сесій та правила ініціалізації
- `SOUL.md` — основна ідентичність та операційні принципи
Навички: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` або `SKILL.toml`.
```bash
# Список встановлених навичок
zeroclaw skills list
# Встановлення з git
zeroclaw skills install https://github.com/user/my-skill.git
# Аудит безпеки перед встановленням
zeroclaw skills audit https://github.com/user/my-skill.git
# Видалення навички
zeroclaw skills remove my-skill
```
## Команди CLI
```bash
# Керування робочим простором
zeroclaw onboard # Покроковий майстер налаштування
zeroclaw status # Показати стан демона/агента
zeroclaw doctor # Запустити діагностику системи
# Gateway + демон
zeroclaw gateway # Запустити сервер gateway (127.0.0.1:42617)
zeroclaw daemon # Запустити повне автономне середовище
# Агент
zeroclaw agent # Інтерактивний режим чату
zeroclaw agent -m "message" # Режим одного повідомлення
# Керування сервісом
zeroclaw service install # Встановити як системний сервіс (launchd/systemd)
zeroclaw service start|stop|restart|status
# Канали
zeroclaw channel list # Список налаштованих каналів
zeroclaw channel doctor # Перевірка стану каналів
zeroclaw channel bind-telegram 123456789
# Cron + планування
zeroclaw cron list # Список запланованих завдань
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# Пам'ять
zeroclaw memory list # Список записів пам'яті
zeroclaw memory get <key> # Отримати запис пам'яті
zeroclaw memory stats # Статистика пам'яті
# Профілі авторизації
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# Апаратні периферійні пристрої
zeroclaw hardware discover # Сканування підключених пристроїв
zeroclaw peripheral list # Список підключених периферійних пристроїв
zeroclaw peripheral flash # Прошивка пристрою
# Міграція
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Автодоповнення оболонки
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
Повний довідник команд: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## Передумови
<details>
<summary><strong>Windows</strong></summary>
#### Обов'язково
1. **Visual Studio Build Tools** (надає компонувальник MSVC та Windows SDK):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
Під час встановлення (або через Visual Studio Installer) виберіть робоче навантаження **"Desktop development with C++"**.
2. **Набір інструментів Rust:**
```powershell
winget install Rustlang.Rustup
```
Після встановлення відкрийте новий термінал і виконайте `rustup default stable`, щоб переконатися, що стабільний набір інструментів активний.
3. **Перевірте**, що обидва працюють:
```powershell
rustc --version
cargo --version
```
#### Необов'язково
- **Docker Desktop** — потрібен лише при використанні [ізольованого середовища Docker](#підтримка-середовищ-виконання-поточна) (`runtime.kind = "docker"`). Встановлення через `winget install Docker.DockerDesktop`.
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### Обов'язково
1. **Базові інструменти збірки:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Встановіть Xcode Command Line Tools: `xcode-select --install`
2. **Набір інструментів Rust:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Деталі на [rustup.rs](https://rustup.rs).
3. **Перевірте**, що обидва працюють:
```bash
rustc --version
cargo --version
```
#### Встановлення одним рядком
Або пропустіть кроки вище і встановіть все (системні залежності, Rust, ZeroClaw) однією командою:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Вимоги до ресурсів для компіляції
Збірка з вихідного коду вимагає більше ресурсів, ніж запуск результуючого бінарного файлу:
| Ресурс | Мінімум | Рекомендовано |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **Вільний диск** | 6 GB | 10 GB+ |
Якщо ваш хост нижче мінімуму, використовуйте попередньо зібрані бінарні файли:
```bash
./install.sh --prefer-prebuilt
```
Для встановлення лише бінарного файлу без резервного варіанту з вихідного коду:
```bash
./install.sh --prebuilt-only
```
#### Необов'язково
- **Docker** — потрібен лише при використанні [ізольованого середовища Docker](#підтримка-середовищ-виконання-поточна) (`runtime.kind = "docker"`). Встановлення через менеджер пакетів або [docker.com](https://docs.docker.com/engine/install/).
> **Примітка:** Стандартна команда `cargo build --release` використовує `codegen-units=1` для зниження пікового навантаження при компіляції. Для швидших збірок на потужних машинах використовуйте `cargo build --profile release-fast`.
</details>
<!-- markdownlint-enable MD001 MD024 -->
### Попередньо зібрані бінарні файли
Релізні артефакти публікуються для:
- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`
Завантажте останні артефакти з:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## Документація
Для детальної документації дивіться:
Використовуйте ці матеріали, коли ви пройшли онбординг і хочете глибшу довідку.
- [Хаб документації](docs/README.md)
- [Довідник команд](docs/commands-reference.md)
- [Довідник провайдерів](docs/providers-reference.md)
- [Довідник каналів](docs/channels-reference.md)
- [Довідник конфігурації](docs/config-reference.md)
- Почніть з [індексу документації](docs/README.md) для навігації та "що де знаходиться".
- Прочитайте [огляд архітектури](docs/architecture.md) для повної моделі системи.
- Використовуйте [довідник конфігурації](docs/reference/api/config-reference.md), коли вам потрібен кожен ключ і приклад.
- Запускайте Gateway за інструкцією з [операційного посібника](docs/ops/operations-runbook.md).
- Слідуйте [ZeroClaw Onboard](#швидкий-старт-tldr) для покрокового налаштування.
- Діагностуйте типові збої за допомогою [посібника з усунення неполадок](docs/ops/troubleshooting.md).
- Перегляньте [рекомендації з безпеки](docs/security/README.md) перед будь-яким відкритим доступом.
---
### Довідкова документація
- Хаб документації: [docs/README.md](docs/README.md)
- Єдиний зміст документації: [docs/SUMMARY.md](docs/SUMMARY.md)
- Довідник команд: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- Довідник конфігурації: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Довідник провайдерів: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- Довідник каналів: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Операційний посібник: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- Усунення неполадок: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### Документація для співпраці
- Посібник з внеску: [CONTRIBUTING.md](CONTRIBUTING.md)
- Політика робочого процесу PR: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- Посібник CI робочих процесів: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Посібник рецензента: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Політика розкриття вразливостей: [SECURITY.md](SECURITY.md)
- Шаблон документації: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### Розгортання + операції
- Посібник з мережевого розгортання: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Посібник проксі-агента: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- Посібники з апаратного забезпечення: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw створений для smooth crab 🦀, швидкого та ефективного AI-асистента. Створений Argenis De La Rosa та спільнотою.
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## Підтримайте ZeroClaw
Якщо ZeroClaw допомагає вашій роботі і ви хочете підтримати подальшу розробку, ви можете зробити пожертву тут:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### Особлива подяка
Щира подяка спільнотам та установам, які надихають та живлять цю відкриту роботу:
- **Harvard University** — за виховання інтелектуальної допитливості та розширення меж можливого.
- **MIT** — за підтримку відкритих знань, відкритого коду та переконання, що технології повинні бути доступними для кожного.
- **Sundai Club** — за спільноту, енергію та невпинне прагнення створювати речі, що мають значення.
- **Світ та за його межами** — кожному учаснику, мрійнику та творцю, які роблять відкритий код силою добра. Це для вас.
Ми будуємо відкрито, тому що найкращі ідеї приходять звідусіль. Якщо ви це читаєте, ви вже частина цього. Ласкаво просимо. 🦀
## Внесок
Внески вітаються! Будь ласка, прочитайте [Керівництво з внеску](CONTRIBUTING.md).
Новачок у ZeroClaw? Шукайте завдання з міткою [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) — дивіться наш [Посібник з внеску](CONTRIBUTING.md#first-time-contributors) для початку. PR з AI-допомогою вітаються!
Дивіться [CONTRIBUTING.md](CONTRIBUTING.md) та [CLA.md](docs/contributing/cla.md). Реалізуйте трейт, подайте PR:
- Посібник CI робочих процесів: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Новий `Provider``src/providers/`
- Новий `Channel``src/channels/`
- Новий `Observer``src/observability/`
- Новий `Tool``src/tools/`
- Новий `Memory``src/memory/`
- Новий `Tunnel``src/tunnel/`
- Новий `Peripheral``src/peripherals/`
- Новий `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## Офіційний репозиторій та попередження про імітацію
**Це єдиний офіційний репозиторій ZeroClaw:**
> https://github.com/zeroclaw-labs/zeroclaw
Будь-який інший репозиторій, організація, домен або пакет, що претендує на назву "ZeroClaw" або натякає на зв'язок з ZeroClaw Labs, є **неавторизованим і не пов'язаним з цим проєктом**. Відомі неавторизовані форки перелічені в [TRADEMARK.md](docs/maintainers/trademark.md).
Якщо ви зіткнулися з імітацією або зловживанням торговою маркою, будь ласка, [створіть issue](https://github.com/zeroclaw-labs/zeroclaw/issues).
---
## Ліцензія
Цей проєкт має подвійну ліцензію:
ZeroClaw має подвійну ліцензію для максимальної відкритості та захисту учасників:
- MIT License
- Apache License, версія 2.0
| Ліцензія | Варіант використання |
|---|---|
| [MIT](LICENSE-MIT) | Відкритий код, дослідження, академічне, особисте використання |
| [Apache 2.0](LICENSE-APACHE) | Патентний захист, інституційне, комерційне розгортання |
Дивіться [LICENSE-APACHE](LICENSE-APACHE) та [LICENSE-MIT](LICENSE-MIT) для деталей.
Ви можете обрати будь-яку ліцензію. **Учасники автоматично надають права за обома** — дивіться [CLA.md](docs/contributing/cla.md) для повної угоди учасника.
### Торгова марка
Назва та логотип **ZeroClaw** є торговими марками ZeroClaw Labs. Ця ліцензія не надає дозволу використовувати їх для підтвердження або зв'язку. Дивіться [TRADEMARK.md](docs/maintainers/trademark.md) для дозволених та заборонених використань.
### Захист учасників
- Ви **зберігаєте авторські права** на свої внески
- **Патентне надання** (Apache 2.0) захищає вас від патентних претензій інших учасників
- Ваші внески **назавжди атрибутовані** в історії комітів та [NOTICE](NOTICE)
- Жодних прав на торгову марку не передається при внеску
---
## Спільнота
**ZeroClaw** — Нуль накладних витрат. Нуль компромісів. Розгортайте будь-де. Замінюйте будь-що. 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## Учасники
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## Спонсори
Цей список генерується з графіку учасників GitHub і оновлюється автоматично.
Якщо ZeroClaw корисний для вас, будь ласка, розгляньте можливість купити нам каву:
## Історія зірок
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

View File

@ -1,26 +1,32 @@
<p align="center">
<img src="zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀</h1>
<h1 align="center">🦀 ZeroClaw — ذاتی AI اسسٹنٹ</h1>
<p align="center" dir="rtl">
<strong>صفر اوور ہیڈ۔ صفر سمجھوتہ۔ 100% رسٹ۔ 100% اگنوسٹک۔</strong><br>
⚡️ <strong>$10 کے ہارڈویئر پر <5MB RAM کے ساتھ چلتا ہے: یہ OpenClaw سے 99% کم میموری اور Mac mini سے 98% سستا ہے!</strong>
<p align="center">
<strong>صفر اوور ہیڈ۔ صفر سمجھوتا۔ 100% Rust۔ 100% غیر جانبدار۔</strong><br>
⚡️ <strong>$10 ہارڈویئر پر <5MB RAM کے ساتھ چلتا ہے: یہ OpenClaw سے 99% کم میموری اور Mac mini سے 98% سستا ہے!</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
<a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
<a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center" dir="rtl">
<p align="center">
Harvard، MIT، اور Sundai.Club کمیونٹیز کے طلباء اور اراکین نے بنایا۔
</p>
<p align="center">
🌐 <strong>زبانیں:</strong>
<a href="README.md">🇺🇸 English</a> ·
<a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
@ -55,143 +61,695 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
---
ZeroClaw ایک ذاتی AI اسسٹنٹ ہے جسے آپ اپنے آلات پر چلاتے ہیں۔ یہ آپ کو ان چینلز پر جواب دیتا ہے جو آپ پہلے سے استعمال کرتے ہیں (WhatsApp، Telegram، Slack، Discord، Signal، iMessage، Matrix، IRC، Email، Bluesky، Nostr، Mattermost، Nextcloud Talk، DingTalk، Lark، QQ، Reddit، LinkedIn، Twitter، MQTT، WeChat Work، اور مزید)۔ اس میں ریئل ٹائم کنٹرول کے لیے ویب ڈیش بورڈ ہے اور یہ ہارڈویئر پیری فیرلز (ESP32، STM32، Arduino، Raspberry Pi) سے جڑ سکتا ہے۔ Gateway صرف control plane ہے — پروڈکٹ اسسٹنٹ ہے۔
## ZeroClaw کیا ہے؟
اگر آپ ایک ذاتی، واحد صارف اسسٹنٹ چاہتے ہیں جو مقامی، تیز، اور ہمیشہ فعال محسوس ہو، تو یہ ہے۔
<p align="center" dir="rtl">
ZeroClaw ایک ہلکا، قابل تبدیلی اور توسیع پذیر AI اسسٹنٹ انفراسٹرکچر ہے جو رسٹ میں بنایا گیا ہے۔ یہ مختلف LLM فراہم کنندگان (Anthropic, OpenAI, Google, Ollama, وغیرہ) کو ایک متحد انٹرفیس کے ذریعے جوڑتا ہے اور متعدد چینلز (Telegram, Matrix, CLI, وغیرہ) کی حمایت کرتا ہے۔
<p align="center">
<a href="https://zeroclawlabs.ai">ویب سائٹ</a> ·
<a href="docs/README.md">دستاویزات</a> ·
<a href="docs/architecture.md">آرکیٹیکچر</a> ·
<a href="#فوری-آغاز">شروع کریں</a> ·
<a href="#openclaw-سے-منتقلی">OpenClaw سے منتقلی</a> ·
<a href="docs/ops/troubleshooting.md">مسائل حل کریں</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
### اہم خصوصیات
> **تجویز کردہ سیٹ اپ:** اپنے ٹرمینل میں `zeroclaw onboard` چلائیں۔ ZeroClaw Onboard آپ کو gateway، workspace، چینلز، اور provider ترتیب دینے میں مرحلہ وار رہنمائی کرتا ہے۔ یہ تجویز کردہ سیٹ اپ راستہ ہے اور macOS، Linux، اور Windows (WSL2 کے ذریعے) پر کام کرتا ہے۔ نئی تنصیب؟ یہاں سے شروع کریں: [شروع کریں](#فوری-آغاز)
<p align="center" dir="rtl">
- **🦀 رسٹ میں لکھا گیا**: اعلیٰ کارکردگی، میموری سیورٹی، اور بغیر لاگت کے ایبسٹریکشن
- **🔌 فراہم کنندہ-اگنوسٹک**: OpenAI, Anthropic, Google Gemini, Ollama, اور دیگر کی حمایت
- **📱 ملٹی چینل**: Telegram, Matrix (E2EE کے ساتھ), CLI, اور دیگر
- **🧠 پلگ ایبل میموری**: SQLite اور Markdown بیک اینڈ
- **🛠️ قابل توسیع ٹولز**: آسانی سے کسٹم ٹولز شامل کریں
- **🔒 سیورٹی فرسٹ**: ریورس پراکسی، پرائیویسی فرسٹ ڈیزائن
</p>
### سبسکرپشن تصدیق (OAuth)
---
- **OpenAI Codex** (ChatGPT سبسکرپشن)
- **Gemini** (Google OAuth)
- **Anthropic** (API key یا auth token)
## فوری شروعات
ماڈل نوٹ: اگرچہ بہت سے providers/ماڈلز سپورٹ کیے جاتے ہیں، بہترین تجربے کے لیے اپنے دستیاب سب سے مضبوط جدید ترین ماڈل کا استعمال کریں۔ دیکھیں [Onboarding](#فوری-آغاز)۔
### ضروریات
ماڈلز کنفیگ + CLI: [Providers حوالہ](docs/reference/api/providers-reference.md)
Auth پروفائل روٹیشن (OAuth بمقابلہ API keys) + failover: [Model failover](docs/reference/api/providers-reference.md)
<p align="center" dir="rtl">
- Rust 1.70+
- ایک LLM فراہم کنندہ API کی (Anthropic, OpenAI, وغیرہ)
</p>
## انسٹال (تجویز کردہ)
### انسٹالیشن
رن ٹائم: Rust stable toolchain۔ واحد بائنری، کوئی runtime dependencies نہیں۔
### Homebrew (macOS/Linuxbrew)
```bash
brew install zeroclaw
```
### ایک کلک بوٹسٹریپ
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
`zeroclaw onboard` انسٹال کے بعد خود بخود چلتا ہے تاکہ آپ کا workspace اور provider ترتیب دیا جا سکے۔
## فوری آغاز (TL;DR)
مکمل ابتدائی گائیڈ (تصدیق، pairing، چینلز): [شروع کریں](docs/setup-guides/one-click-bootstrap.md)
```bash
# انسٹال + onboard
./install.sh --api-key "sk-..." --provider openrouter
# Gateway شروع کریں (webhook سرور + ویب ڈیش بورڈ)
zeroclaw gateway # ڈیفالٹ: 127.0.0.1:42617
zeroclaw gateway --port 0 # بے ترتیب پورٹ (سیکیورٹی مضبوط)
# اسسٹنٹ سے بات کریں
zeroclaw agent -m "Hello, ZeroClaw!"
# انٹرایکٹو موڈ
zeroclaw agent
# مکمل خودمختار رن ٹائم شروع کریں (gateway + چینلز + cron + hands)
zeroclaw daemon
# اسٹیٹس چیک کریں
zeroclaw status
# تشخیص چلائیں
zeroclaw doctor
```
اپ گریڈ کر رہے ہیں؟ اپ ڈیٹ کے بعد `zeroclaw doctor` چلائیں۔
### سورس سے (ترقی)
```bash
# ریپوزٹری کلون کریں
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
# بلڈ کریں
cargo build --release
cargo build --release --locked
cargo install --path . --force --locked
# چلائیں
cargo run --release
zeroclaw onboard
```
### Docker کے ساتھ
> **Dev متبادل (بغیر global انسٹال):** کمانڈز کے آگے `cargo run --release --` لگائیں (مثال: `cargo run --release -- status`)۔
## OpenClaw سے منتقلی
ZeroClaw آپ کا OpenClaw workspace، میموری، اور کنفیگریشن درآمد کر سکتا ہے:
```bash
docker run -d \
--name zeroclaw \
-e ANTHROPIC_API_KEY=your_key \
-v zeroclaw-data:/app/data \
zeroclaw/zeroclaw:latest
# دیکھیں کیا منتقل ہوگا (محفوظ، صرف پڑھنے)
zeroclaw migrate openclaw --dry-run
# منتقلی چلائیں
zeroclaw migrate openclaw
```
---
یہ آپ کے میموری اندراجات، workspace فائلیں، اور کنفیگریشن `~/.openclaw/` سے `~/.zeroclaw/` میں منتقل کرتا ہے۔ کنفیگ خود بخود JSON سے TOML میں تبدیل ہو جاتی ہے۔
## سیکیورٹی ڈیفالٹس (DM رسائی)
ZeroClaw حقیقی پیغام رسانی سطحوں سے جڑتا ہے۔ آنے والے DMs کو غیر بھروسہ مند ان پٹ سمجھیں۔
مکمل سیکیورٹی گائیڈ: [SECURITY.md](SECURITY.md)
تمام چینلز پر ڈیفالٹ رویہ:
- **DM pairing** (ڈیفالٹ): نامعلوم بھیجنے والوں کو ایک مختصر pairing کوڈ ملتا ہے اور بوٹ ان کے پیغام پر عمل نہیں کرتا۔
- منظوری دیں: `zeroclaw pairing approve <channel> <code>` (پھر بھیجنے والا مقامی اجازت نامہ میں شامل ہو جاتا ہے)۔
- عوامی آنے والے DMs کے لیے `config.toml` میں واضح opt-in ضروری ہے۔
- خطرناک یا غلط ترتیب شدہ DM پالیسیوں کا پتہ لگانے کے لیے `zeroclaw doctor` چلائیں۔
**خودمختاری کی سطحیں:**
| سطح | رویہ |
|-------|----------|
| `ReadOnly` | ایجنٹ مشاہدہ کر سکتا ہے لیکن عمل نہیں کر سکتا |
| `Supervised` (ڈیفالٹ) | ایجنٹ درمیانے/زیادہ خطرے والے آپریشنز کے لیے منظوری کے ساتھ عمل کرتا ہے |
| `Full` | ایجنٹ پالیسی حدود میں خودمختار طور پر عمل کرتا ہے |
**سینڈ باکسنگ پرتیں:** workspace تنہائی، path traversal بلاکنگ، کمانڈ اجازت نامے، ممنوعہ راستے (`/etc`، `/root`، `~/.ssh`)، شرح محدودیت (زیادہ سے زیادہ عمل/گھنٹہ، لاگت/دن کی حد)۔
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 اعلانات
اہم نوٹسز کے لیے یہ بورڈ استعمال کریں (تبدیلیاں جو توڑ دیں، سیکیورٹی مشاورتیں، دیکھ بھال کی کھڑکیاں، اور ریلیز بلاکرز)۔
| تاریخ (UTC) | سطح | نوٹس | عمل |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _اہم ترین_ | ہم `openagen/zeroclaw`، `zeroclaw.org` یا `zeroclaw.net` سے **وابستہ نہیں** ہیں۔ `zeroclaw.org` اور `zeroclaw.net` ڈومینز فی الحال `openagen/zeroclaw` فورک کی طرف اشارہ کرتے ہیں، اور وہ ڈومین/ریپوزٹری ہماری سرکاری ویب سائٹ/پروجیکٹ کی نقل کر رہے ہیں۔ | ان ذرائع سے معلومات، بائنریز، فنڈ ریزنگ، یا اعلانات پر بھروسہ نہ کریں۔ صرف [یہ ریپوزٹری](https://github.com/zeroclaw-labs/zeroclaw) اور ہمارے تصدیق شدہ سوشل اکاؤنٹس استعمال کریں۔ |
| 2026-02-21 | _اہم_ | ہماری سرکاری ویب سائٹ اب فعال ہے: [zeroclawlabs.ai](https://zeroclawlabs.ai)۔ لانچ کی تیاری کے دوران آپ کے صبر کا شکریہ۔ ہم اب بھی نقل کی کوششیں دیکھ رہے ہیں، لہذا ZeroClaw نام کا دعویٰ کرنے والی کسی بھی سرمایہ کاری یا فنڈ ریزنگ سرگرمی میں **شامل نہ ہوں** جب تک کہ یہ ہمارے سرکاری چینلز کے ذریعے شائع نہ ہو۔ | [یہ ریپوزٹری](https://github.com/zeroclaw-labs/zeroclaw) کو واحد سچائی کا ذریعہ استعمال کریں۔ سرکاری اپ ڈیٹس کے لیے [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21)، [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs)، اور [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) فالو کریں۔ |
| 2026-02-19 | _اہم_ | Anthropic نے 2026-02-19 کو تصدیق اور اسناد کے استعمال کی شرائط اپ ڈیٹ کیں۔ Claude Code OAuth ٹوکنز (Free، Pro، Max) خصوصی طور پر Claude Code اور Claude.ai کے لیے ہیں؛ Claude Free/Pro/Max سے OAuth ٹوکنز کسی اور پروڈکٹ، ٹول، یا سروس (بشمول Agent SDK) میں استعمال کرنا اجازت یافتہ نہیں ہے اور صارف سروس کی شرائط کی خلاف ورزی ہو سکتی ہے۔ | براہ کرم ممکنہ نقصان سے بچنے کے لیے عارضی طور پر Claude Code OAuth انٹیگریشنز سے گریز کریں۔ اصل شق: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use)۔ |
## خصوصیات
- **ڈیفالٹ طور پر ہلکا رن ٹائم** — عام CLI اور اسٹیٹس ورک فلوز ریلیز بلڈز پر چند میگا بائٹ میموری میں چلتے ہیں۔
- **لاگت سے مؤثر تعیناتی** — $10 بورڈز اور چھوٹے کلاؤڈ انسٹینسز کے لیے ڈیزائن کیا گیا، کوئی بھاری runtime dependencies نہیں۔
- **تیز کولڈ اسٹارٹ** — واحد بائنری Rust رن ٹائم کمانڈ اور daemon اسٹارٹ اپ کو تقریباً فوری رکھتا ہے۔
- **پورٹیبل آرکیٹیکچر** — ARM، x86، اور RISC-V پر ایک بائنری، قابل تبادلہ providers/چینلز/ٹولز کے ساتھ۔
- **لوکل فرسٹ Gateway** — سیشنز، چینلز، ٹولز، cron، SOPs، اور ایونٹس کے لیے واحد control plane۔
- **ملٹی چینل ان باکس** — WhatsApp، Telegram، Slack، Discord، Signal، iMessage، Matrix، IRC، Email، Bluesky، Nostr، Mattermost، Nextcloud Talk، DingTalk، Lark، QQ، Reddit، LinkedIn، Twitter، MQTT، WeChat Work، WebSocket، اور مزید۔
- **ملٹی ایجنٹ آرکیسٹریشن (Hands)** — خودمختار ایجنٹ جھنڈ جو شیڈول پر چلتے ہیں اور وقت کے ساتھ ذہین ہوتے ہیں۔
- **سٹینڈرڈ آپریٹنگ پروسیجرز (SOPs)** — MQTT، webhook، cron، اور پیری فیرل ٹرگرز کے ساتھ ایونٹ پر مبنی ورک فلو آٹومیشن۔
- **ویب ڈیش بورڈ** — ریئل ٹائم چیٹ، میموری براؤزر، کنفیگ ایڈیٹر، cron مینیجر، اور ٹول انسپیکٹر کے ساتھ React 19 + Vite ویب UI۔
- **ہارڈویئر پیری فیرلز**`Peripheral` trait کے ذریعے ESP32، STM32 Nucleo، Arduino، Raspberry Pi GPIO۔
- **فرسٹ کلاس ٹولز** — shell، file I/O، browser، git، web fetch/search، MCP، Jira، Notion، Google Workspace، اور 70+ مزید۔
- **لائف سائیکل ہکس** — ہر مرحلے پر LLM کالز، ٹول ایگزیکیوشنز، اور پیغامات کو روکیں اور ترمیم کریں۔
- **اسکلز پلیٹ فارم** — بلٹ ان، کمیونٹی، اور workspace اسکلز سیکیورٹی آڈٹنگ کے ساتھ۔
- **ٹنل سپورٹ** — ریموٹ رسائی کے لیے Cloudflare، Tailscale، ngrok، OpenVPN، اور کسٹم ٹنلز۔
### ٹیمیں ZeroClaw کیوں چنتی ہیں
- **ڈیفالٹ طور پر ہلکا:** چھوٹی Rust بائنری، تیز اسٹارٹ اپ، کم میموری فٹ پرنٹ۔
- **ڈیزائن سے محفوظ:** pairing، سخت سینڈ باکسنگ، واضح اجازت نامے، workspace سکوپنگ۔
- **مکمل طور پر قابل تبادلہ:** بنیادی نظام traits ہیں (providers، چینلز، ٹولز، میموری، tunnels)۔
- **کوئی lock-in نہیں:** OpenAI ہم آہنگ provider سپورٹ + پلگ ایبل کسٹم endpoints۔
## بینچ مارک سنیپ شاٹ (ZeroClaw بمقابلہ OpenClaw، قابل تکرار)
مقامی مشین فوری بینچ مارک (macOS arm64، فروری 2026) 0.8GHz ایج ہارڈویئر کے لیے نارملائز۔
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **زبان** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **اسٹارٹ اپ (0.8GHz کور)** | > 500s | > 30s | < 1s | **< 10ms** |
| **بائنری سائز** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **لاگت** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **کوئی بھی ہارڈویئر $10** |
> نوٹ: ZeroClaw نتائج `/usr/bin/time -l` استعمال کرتے ہوئے ریلیز بلڈز پر ماپے گئے ہیں۔ OpenClaw کو Node.js رن ٹائم کی ضرورت ہے (عام طور پر ~390MB اضافی میموری اوور ہیڈ)، جبکہ NanoBot کو Python رن ٹائم کی ضرورت ہے۔ PicoClaw اور ZeroClaw سٹیٹک بائنریز ہیں۔ اوپر RAM اعداد رن ٹائم میموری ہیں؛ بلڈ ٹائم کمپائلیشن ضروریات زیادہ ہیں۔
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### قابل تکرار مقامی پیمائش
```bash
cargo build --release
ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```
## ہم نے اب تک جو کچھ بنایا
### بنیادی پلیٹ فارم
- سیشنز، presence، کنفیگ، cron، webhooks، ویب ڈیش بورڈ، اور pairing کے ساتھ Gateway HTTP/WS/SSE control plane۔
- CLI سطح: `gateway`، `agent`، `onboard`، `doctor`، `status`، `service`، `migrate`، `auth`، `cron`، `channel`، `skills`۔
- ٹول dispatch، prompt تعمیر، پیغام درجہ بندی، اور میموری لوڈنگ کے ساتھ ایجنٹ آرکیسٹریشن لوپ۔
- سیکیورٹی پالیسی نفاذ، خودمختاری کی سطحوں، اور منظوری گیٹنگ کے ساتھ سیشن ماڈل۔
- 20+ LLM بیک اینڈز میں failover، retry، اور model routing کے ساتھ لچکدار provider ریپر۔
### چینلز
چینلز: WhatsApp (native)، Telegram، Slack، Discord، Signal، iMessage، Matrix، IRC، Email، Bluesky، DingTalk، Lark، Mattermost، Nextcloud Talk، Nostr، QQ، Reddit، LinkedIn، Twitter، MQTT، WeChat Work، WATI، Mochat، Linq، Notion، WebSocket، ClawdTalk۔
Feature-gated: Matrix (`channel-matrix`)، Lark (`channel-lark`)، Nostr (`channel-nostr`)۔
### ویب ڈیش بورڈ
Gateway سے براہ راست فراہم کردہ React 19 + Vite 6 + Tailwind CSS 4 ویب ڈیش بورڈ:
- **Dashboard** — سسٹم جائزہ، صحت کی حالت، اپ ٹائم، لاگت ٹریکنگ
- **Agent Chat** — ایجنٹ کے ساتھ انٹرایکٹو چیٹ
- **Memory** — میموری اندراجات براؤز اور منظم کریں
- **Config** — کنفیگریشن دیکھیں اور ترمیم کریں
- **Cron** — شیڈولڈ ٹاسکس کا انتظام کریں
- **Tools** — دستیاب ٹولز براؤز کریں
- **Logs** — ایجنٹ سرگرمی لاگز دیکھیں
- **Cost** — ٹوکن استعمال اور لاگت ٹریکنگ
- **Doctor** — سسٹم صحت تشخیص
- **Integrations** — انٹیگریشن اسٹیٹس اور سیٹ اپ
- **Pairing** — ڈیوائس pairing مینجمنٹ
### فرم ویئر اہداف
| ہدف | پلیٹ فارم | مقصد |
|--------|----------|---------|
| ESP32 | Espressif ESP32 | وائرلیس پیری فیرل ایجنٹ |
| ESP32-UI | ESP32 + Display | بصری انٹرفیس کے ساتھ ایجنٹ |
| STM32 Nucleo | STM32 (ARM Cortex-M) | صنعتی پیری فیرل |
| Arduino | Arduino | بنیادی سینسر/ایکچویٹر بریج |
| Uno Q Bridge | Arduino Uno | ایجنٹ کے لیے سیریل بریج |
### ٹولز + آٹومیشن
- **بنیادی:** shell، file read/write/edit، git آپریشنز، glob search، content search
- **ویب:** browser control، web fetch، web search، screenshot، image info، PDF read
- **انٹیگریشنز:** Jira، Notion، Google Workspace، Microsoft 365، LinkedIn، Composio، Pushover
- **MCP:** Model Context Protocol tool wrapper + deferred tool sets
- **شیڈولنگ:** cron add/remove/update/run، schedule tool
- **میموری:** recall، store، forget، knowledge، project intel
- **ایڈوانسڈ:** delegate (ایجنٹ سے ایجنٹ)، swarm، model switch/routing، security ops، cloud ops
- **ہارڈویئر:** board info، memory map، memory read (feature-gated)
### رن ٹائم + حفاظت
- **خودمختاری کی سطحیں:** ReadOnly، Supervised (ڈیفالٹ)، Full۔
- **سینڈ باکسنگ:** workspace تنہائی، path traversal بلاکنگ، کمانڈ اجازت نامے، ممنوعہ راستے، Landlock (Linux)، Bubblewrap۔
- **شرح محدودیت:** فی گھنٹہ زیادہ سے زیادہ عمل، فی دن زیادہ سے زیادہ لاگت (قابل ترتیب)۔
- **منظوری گیٹنگ:** درمیانے/زیادہ خطرے والے آپریشنز کے لیے انٹرایکٹو منظوری۔
- **E-stop:** ایمرجنسی شٹ ڈاؤن صلاحیت۔
- **129+ سیکیورٹی ٹیسٹس** خودکار CI میں۔
### Ops + پیکیجنگ
- Gateway سے براہ راست فراہم کردہ ویب ڈیش بورڈ۔
- ٹنل سپورٹ: Cloudflare، Tailscale، ngrok، OpenVPN، کسٹم کمانڈ۔
- کنٹینرائزڈ ایگزیکیوشن کے لیے Docker رن ٹائم اڈاپٹر۔
- CI/CD: beta (push پر خودکار) → stable (دستی dispatch) → Docker، crates.io، Scoop، AUR، Homebrew، tweet۔
- Linux (x86_64، aarch64، armv7)، macOS (x86_64، aarch64)، Windows (x86_64) کے لیے پری بلٹ بائنریز۔
## کنفیگریشن
<p align="center" dir="rtl">
ZeroClaw ایک YAML کنفیگریشن فائل استعمال کرتا ہے۔ ڈیفالٹ طور پر، یہ `config.yaml` تلاش کرتا ہے۔
</p>
کم از کم `~/.zeroclaw/config.toml`:
```yaml
# ڈیفالٹ فراہم کنندہ
provider: anthropic
# فراہم کنندگان کی کنفیگریشن
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
model: claude-3-5-sonnet-20241022
openai:
api_key: ${OPENAI_API_KEY}
model: gpt-4o
# میموری کنفیگریشن
memory:
backend: sqlite
path: data/memory.db
# چینلز کی کنفیگریشن
channels:
telegram:
token: ${TELEGRAM_BOT_TOKEN}
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
---
مکمل کنفیگریشن حوالہ: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)۔
### چینل کنفیگریشن
**Telegram:**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
**Discord:**
```toml
[channels.discord]
token = "your-bot-token"
```
**Slack:**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
**WhatsApp:**
```toml
[channels.whatsapp]
enabled = true
```
**Matrix:**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
**Signal:**
```toml
[channels.signal]
phone_number = "+1234567890"
```
### ٹنل کنفیگریشن
```toml
[tunnel]
kind = "cloudflare" # یا "tailscale", "ngrok", "openvpn", "custom", "none"
```
تفصیلات: [چینل حوالہ](docs/reference/api/channels-reference.md) · [کنفیگ حوالہ](docs/reference/api/config-reference.md)
### رن ٹائم سپورٹ (موجودہ)
- **`native`** (ڈیفالٹ) — براہ راست process ایگزیکیوشن، تیز ترین راستہ، بھروسہ مند ماحول کے لیے مثالی۔
- **`docker`** — مکمل کنٹینر تنہائی، نافذ سیکیورٹی پالیسیاں، Docker ضروری ہے۔
سخت سینڈ باکسنگ یا نیٹ ورک تنہائی کے لیے `runtime.kind = "docker"` سیٹ کریں۔
## سبسکرپشن تصدیق (OpenAI Codex / Claude Code / Gemini)
ZeroClaw سبسکرپشن نیٹو auth پروفائلز سپورٹ کرتا ہے (ملٹی اکاؤنٹ، آرام پر خفیہ)۔
- اسٹور فائل: `~/.zeroclaw/auth-profiles.json`
- خفیہ کاری کلید: `~/.zeroclaw/.secret_key`
- پروفائل id فارمیٹ: `<provider>:<profile_name>` (مثال: `openai-codex:work`)
```bash
# OpenAI Codex OAuth (ChatGPT سبسکرپشن)
zeroclaw auth login --provider openai-codex --device-code
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# چیک / ریفریش / پروفائل تبدیل کریں
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# سبسکرپشن auth کے ساتھ ایجنٹ چلائیں
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## ایجنٹ workspace + اسکلز
Workspace روٹ: `~/.zeroclaw/workspace/` (config کے ذریعے قابل ترتیب)۔
انجیکٹ کردہ prompt فائلیں:
- `IDENTITY.md` — ایجنٹ شخصیت اور کردار
- `USER.md` — صارف سیاق و سباق اور ترجیحات
- `MEMORY.md` — طویل مدتی حقائق اور اسباق
- `AGENTS.md` — سیشن کنونشنز اور آغاز کے قواعد
- `SOUL.md` — بنیادی شناخت اور آپریٹنگ اصول
اسکلز: `~/.zeroclaw/workspace/skills/<skill>/SKILL.md` یا `SKILL.toml`۔
```bash
# انسٹال شدہ اسکلز کی فہرست
zeroclaw skills list
# git سے انسٹال
zeroclaw skills install https://github.com/user/my-skill.git
# انسٹال سے پہلے سیکیورٹی آڈٹ
zeroclaw skills audit https://github.com/user/my-skill.git
# اسکل ہٹائیں
zeroclaw skills remove my-skill
```
## CLI کمانڈز
```bash
# Workspace مینجمنٹ
zeroclaw onboard # رہنمائی شدہ سیٹ اپ وزرڈ
zeroclaw status # daemon/ایجنٹ اسٹیٹس دکھائیں
zeroclaw doctor # سسٹم تشخیص چلائیں
# Gateway + daemon
zeroclaw gateway # Gateway سرور شروع کریں (127.0.0.1:42617)
zeroclaw daemon # مکمل خودمختار رن ٹائم شروع کریں
# ایجنٹ
zeroclaw agent # انٹرایکٹو چیٹ موڈ
zeroclaw agent -m "message" # واحد پیغام موڈ
# سروس مینجمنٹ
zeroclaw service install # OS سروس کے طور پر انسٹال کریں (launchd/systemd)
zeroclaw service start|stop|restart|status
# چینلز
zeroclaw channel list # ترتیب شدہ چینلز کی فہرست
zeroclaw channel doctor # چینل صحت چیک کریں
zeroclaw channel bind-telegram 123456789
# Cron + شیڈولنگ
zeroclaw cron list # شیڈولڈ جابز کی فہرست
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# میموری
zeroclaw memory list # میموری اندراجات کی فہرست
zeroclaw memory get <key> # میموری حاصل کریں
zeroclaw memory stats # میموری اعداد و شمار
# Auth پروفائلز
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# ہارڈویئر پیری فیرلز
zeroclaw hardware discover # منسلک آلات اسکین کریں
zeroclaw peripheral list # منسلک پیری فیرلز کی فہرست
zeroclaw peripheral flash # آلے پر فرم ویئر فلیش کریں
# منتقلی
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# شیل تکمیلات
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
مکمل کمانڈز حوالہ: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## شرائط
<details>
<summary><strong>Windows</strong></summary>
#### ضروری
1. **Visual Studio Build Tools** (MSVC لنکر اور Windows SDK فراہم کرتا ہے):
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
انسٹالیشن کے دوران (یا Visual Studio Installer کے ذریعے)، **"Desktop development with C++"** ورک لوڈ منتخب کریں۔
2. **Rust toolchain:**
```powershell
winget install Rustlang.Rustup
```
انسٹالیشن کے بعد، نیا ٹرمینل کھولیں اور `rustup default stable` چلائیں تاکہ مستحکم toolchain فعال ہو۔
3. **تصدیق** کریں دونوں کام کر رہے ہیں:
```powershell
rustc --version
cargo --version
```
#### اختیاری
- **Docker Desktop** — صرف اس صورت میں ضروری ہے جب [Docker sandboxed runtime](#رن-ٹائم-سپورٹ-موجودہ) (`runtime.kind = "docker"`) استعمال کر رہے ہوں۔ `winget install Docker.DockerDesktop` سے انسٹال کریں۔
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### ضروری
1. **Build essentials:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** Xcode Command Line Tools انسٹال کریں: `xcode-select --install`
2. **Rust toolchain:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
تفصیلات کے لیے [rustup.rs](https://rustup.rs) دیکھیں۔
3. **تصدیق** کریں دونوں کام کر رہے ہیں:
```bash
rustc --version
cargo --version
```
#### ایک لائن انسٹالر
یا اوپر کے مراحل چھوڑیں اور سب کچھ (سسٹم dependencies، Rust، ZeroClaw) ایک کمانڈ میں انسٹال کریں:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### کمپائلیشن وسائل کی ضروریات
سورس سے بنانا نتیجے میں آنے والی بائنری چلانے سے زیادہ وسائل کی ضرورت ہے:
| وسیلہ | کم از کم | تجویز کردہ |
| -------------- | ------- | ----------- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **خالی ڈسک** | 6 GB | 10 GB+ |
اگر آپ کا ہوسٹ کم از کم سے نیچے ہے، پری بلٹ بائنریز استعمال کریں:
```bash
./install.sh --prefer-prebuilt
```
بغیر سورس فال بیک صرف بائنری انسٹال کے لیے:
```bash
./install.sh --prebuilt-only
```
#### اختیاری
- **Docker** — صرف اس صورت میں ضروری ہے جب [Docker sandboxed runtime](#رن-ٹائم-سپورٹ-موجودہ) (`runtime.kind = "docker"`) استعمال کر رہے ہوں۔ اپنے پیکیج مینیجر یا [docker.com](https://docs.docker.com/engine/install/) سے انسٹال کریں۔
> **نوٹ:** ڈیفالٹ `cargo build --release` چوٹی کمپائل دباؤ کم کرنے کے لیے `codegen-units=1` استعمال کرتا ہے۔ طاقتور مشینوں پر تیز بلڈز کے لیے، `cargo build --profile release-fast` استعمال کریں۔
</details>
<!-- markdownlint-enable MD001 MD024 -->
### پری بلٹ بائنریز
ریلیز اثاثے شائع کیے جاتے ہیں:
- Linux: `x86_64`، `aarch64`، `armv7`
- macOS: `x86_64`، `aarch64`
- Windows: `x86_64`
تازہ ترین اثاثے یہاں سے ڈاؤن لوڈ کریں:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## دستاویزات
<p align="center" dir="rtl">
تفصیلی دستاویزات کے لیے، دیکھیں:
</p>
جب آپ onboarding فلو سے گزر چکے ہوں اور گہرا حوالہ چاہتے ہوں تو یہ استعمال کریں۔
- [دستاویزات ہب](docs/README.md)
- [کمانڈز ریفرنس](docs/commands-reference.md)
- [فراہم کنندگان ریفرنس](docs/providers-reference.md)
- [چینلز ریفرنس](docs/channels-reference.md)
- [کنفیگریشن ریفرنس](docs/config-reference.md)
- نیویگیشن اور "کیا کہاں ہے" کے لیے [دستاویزات فہرست](docs/README.md) سے شروع کریں۔
- مکمل سسٹم ماڈل کے لیے [آرکیٹیکچر جائزہ](docs/architecture.md) پڑھیں۔
- جب آپ کو ہر key اور مثال چاہیے تو [کنفیگریشن حوالہ](docs/reference/api/config-reference.md) استعمال کریں۔
- [آپریشنل رن بک](docs/ops/operations-runbook.md) کے ساتھ Gateway کتاب کے مطابق چلائیں۔
- رہنمائی شدہ سیٹ اپ کے لیے [ZeroClaw Onboard](#فوری-آغاز) فالو کریں۔
- عام ناکامیوں کو [مسائل حل کرنے کی گائیڈ](docs/ops/troubleshooting.md) سے ڈیبگ کریں۔
- کچھ بھی ظاہر کرنے سے پہلے [سیکیورٹی رہنمائی](docs/security/README.md) کا جائزہ لیں۔
---
### حوالہ جاتی دستاویزات
- دستاویزات مرکز: [docs/README.md](docs/README.md)
- متحد دستاویزات TOC: [docs/SUMMARY.md](docs/SUMMARY.md)
- کمانڈز حوالہ: [docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- کنفیگ حوالہ: [docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- Providers حوالہ: [docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- چینلز حوالہ: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- آپریشنل رن بک: [docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- مسائل حل: [docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### تعاون دستاویزات
- شراکت گائیڈ: [CONTRIBUTING.md](CONTRIBUTING.md)
- PR ورک فلو پالیسی: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI ورک فلو گائیڈ: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- جائزہ کار پلے بک: [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- سیکیورٹی افشاء پالیسی: [SECURITY.md](SECURITY.md)
- دستاویزات ٹیمپلیٹ: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### تعیناتی + آپریشنز
- نیٹ ورک تعیناتی گائیڈ: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- پراکسی ایجنٹ پلے بک: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- ہارڈویئر گائیڈز: [docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw smooth crab 🦀 کے لیے بنایا گیا تھا، ایک تیز اور مؤثر AI اسسٹنٹ۔ Argenis De La Rosa اور کمیونٹی نے بنایا۔
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## ZeroClaw کی حمایت کریں
اگر ZeroClaw آپ کے کام میں مدد کرتا ہے اور آپ جاری ترقی کی حمایت کرنا چاہتے ہیں، تو آپ یہاں عطیہ دے سکتے ہیں:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 خصوصی شکریہ
ان کمیونٹیز اور اداروں کا دلی شکریہ جو اس اوپن سورس کام کو متاثر اور توانائی دیتے ہیں:
- **Harvard University** — فکری تجسس کو فروغ دینے اور ممکنات کی حدود کو آگے بڑھانے کے لیے۔
- **MIT** — کھلے علم، اوپن سورس، اور اس یقین کی حمایت کے لیے کہ ٹیکنالوجی سب کے لیے قابل رسائی ہونی چاہیے۔
- **Sundai Club** — کمیونٹی، توانائی، اور اہم چیزیں بنانے کی لگاتار کوشش کے لیے۔
- **دنیا اور آگے** 🌍✨ — ہر اس شراکت دار، خواب دیکھنے والے، اور تعمیر کرنے والے کے لیے جو اوپن سورس کو اچھائی کی قوت بنا رہا ہے۔ یہ آپ کے لیے ہے۔
ہم کھلے میں بنا رہے ہیں کیونکہ بہترین آئیڈیاز ہر جگہ سے آتے ہیں۔ اگر آپ یہ پڑھ رہے ہیں، تو آپ اس کا حصہ ہیں۔ خوش آمدید۔ 🦀❤️
## شراکت
<p align="center" dir="rtl">
شراکت کا خیرمقدم ہے! براہ کرم [شراکت گائیڈ](CONTRIBUTING.md) پڑھیں۔
</p>
ZeroClaw میں نئے ہیں؟ [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) لیبل والے issues تلاش کریں — شروع کرنے کے طریقے کے لیے [شراکت گائیڈ](CONTRIBUTING.md#first-time-contributors) دیکھیں۔ AI/vibe-coded PRs کا خیرمقدم ہے! 🤖
[CONTRIBUTING.md](CONTRIBUTING.md) اور [CLA.md](docs/contributing/cla.md) دیکھیں۔ ایک trait نافذ کریں، PR جمع کرائیں:
- CI ورک فلو گائیڈ: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- نیا `Provider``src/providers/`
- نیا `Channel``src/channels/`
- نیا `Observer``src/observability/`
- نیا `Tool``src/tools/`
- نیا `Memory``src/memory/`
- نیا `Tunnel``src/tunnel/`
- نیا `Peripheral``src/peripherals/`
- نیا `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ سرکاری ریپوزٹری اور نقل کی وارننگ
**یہ ZeroClaw کی واحد سرکاری ریپوزٹری ہے:**
> https://github.com/zeroclaw-labs/zeroclaw
کوئی بھی دوسری ریپوزٹری، تنظیم، ڈومین، یا پیکیج جو "ZeroClaw" ہونے کا دعویٰ کرے یا ZeroClaw Labs سے وابستگی کا اشارہ کرے **غیر مجاز ہے اور اس پروجیکٹ سے وابستہ نہیں ہے**۔ معلوم غیر مجاز فورکس [TRADEMARK.md](docs/maintainers/trademark.md) میں درج ہوں گے۔
اگر آپ کو نقل یا ٹریڈ مارک کا غلط استعمال ملے، براہ کرم [issue کھولیں](https://github.com/zeroclaw-labs/zeroclaw/issues)۔
---
## لائسنس
<p align="center" dir="rtl">
یہ پروجیکٹ ڈول لائسنس یافتہ ہے:
</p>
ZeroClaw زیادہ سے زیادہ کشادگی اور شراکت دار تحفظ کے لیے دوہری لائسنس یافتہ ہے:
- MIT License
- Apache License, ورژن 2.0
| لائسنس | استعمال کا معاملہ |
|---|---|
| [MIT](LICENSE-MIT) | اوپن سورس، تحقیق، تعلیمی، ذاتی استعمال |
| [Apache 2.0](LICENSE-APACHE) | پیٹنٹ تحفظ، ادارہ جاتی، تجارتی تعیناتی |
<p align="center" dir="rtl">
تفصیلات کے لیے [LICENSE-APACHE](LICENSE-APACHE) اور [LICENSE-MIT](LICENSE-MIT) دیکھیں۔
</p>
آپ کوئی بھی لائسنس منتخب کر سکتے ہیں۔ **شراکت دار خود بخود دونوں کے تحت حقوق دیتے ہیں** — مکمل شراکت دار معاہدے کے لیے [CLA.md](docs/contributing/cla.md) دیکھیں۔
### ٹریڈ مارک
**ZeroClaw** نام اور لوگو ZeroClaw Labs کے ٹریڈ مارکس ہیں۔ یہ لائسنس انہیں توثیق یا وابستگی کا اشارہ دینے کے لیے استعمال کرنے کی اجازت نہیں دیتا۔ مجاز اور ممنوع استعمال کے لیے [TRADEMARK.md](docs/maintainers/trademark.md) دیکھیں۔
### شراکت دار تحفظات
- آپ اپنی شراکتوں کا **کاپی رائٹ برقرار رکھتے ہیں**
- **پیٹنٹ گرانٹ** (Apache 2.0) آپ کو دوسرے شراکت داروں کے پیٹنٹ دعووں سے بچاتی ہے
- آپ کی شراکتیں commit تاریخ اور [NOTICE](NOTICE) میں **مستقل طور پر منسوب** ہیں
- شراکت کرنے سے کوئی ٹریڈ مارک حقوق منتقل نہیں ہوتے
---
## کمیونٹی
**ZeroClaw** — صفر اوور ہیڈ۔ صفر سمجھوتا۔ کہیں بھی تعینات کریں۔ کچھ بھی تبدیل کریں۔ 🦀
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
## شراکت دار
---
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
## سپانسرز
یہ فہرست GitHub شراکت داروں کے گراف سے بنائی گئی ہے اور خود بخود اپ ڈیٹ ہوتی ہے۔
<p align="center" dir="rtl">
اگر ZeroClaw آپ کے لیے مفید ہے، تو براہ کرم ہمیں کافی خریدنے پر غور کریں:
## ستاروں کی تاریخ
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>
[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee)](https://buymeacoffee.com/argenistherose)

File diff suppressed because it is too large Load Diff

View File

@ -1,24 +1,33 @@
<p align="center">
<img src="docs/assets/zeroclaw.png" alt="ZeroClaw" width="200" />
<img src="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/docs/assets/zeroclaw-banner.png" alt="ZeroClaw" width="600" />
</p>
<h1 align="center">ZeroClaw 🦀(简体中文)</h1>
<h1 align="center">🦀 ZeroClaw — 个人AI助手</h1>
<p align="center">
<strong>零开销、零妥协;随处部署、万物可换。</strong>
<strong>零开销。零妥协。100% Rust。100% 无绑定。</strong><br>
⚡️ <strong>在10美元硬件上运行RAM不到5MB比OpenClaw少99%内存比Mac mini便宜98%</strong>
</p>
<p align="center">
<a href="LICENSE-APACHE"><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="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors"><img src="https://img.shields.io/github/contributors/zeroclaw-labs/zeroclaw?color=green" alt="Contributors" /></a>
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
<a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
<a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://www.facebook.com/groups/zeroclawlabs"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
<a href="https://discord.com/invite/wDshRVqRjx"><img src="https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white" alt="Discord" /></a>
<a href="https://www.instagram.com/therealzeroclaw"><img src="https://img.shields.io/badge/Instagram-%40therealzeroclaw-E4405F?style=flat&logo=instagram&logoColor=white" alt="Instagram: @therealzeroclaw" /></a>
<a href="https://www.tiktok.com/@zeroclawlabs"><img src="https://img.shields.io/badge/TikTok-%40zeroclawlabs-000000?style=flat&logo=tiktok&logoColor=white" alt="TikTok: @zeroclawlabs" /></a>
<a href="https://www.rednote.com/user/profile/69b735e6000000002603927e"><img src="https://img.shields.io/badge/RedNote-Official-FF2442?style=flat" alt="RedNote" /></a>
<a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
🌐 语言:
由哈佛大学、麻省理工学院和 Sundai.Club 社区的学生及成员构建。
</p>
<p align="center">
🌐 <strong>Languages:</strong>
<a href="README.md">🇺🇸 English</a> ·
<a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
<a href="README.ja.md">🇯🇵 日本語</a> ·
@ -52,75 +61,190 @@
<a href="README.nb.md">🇳🇴 Norsk</a>
</p>
<p align="center">
<a href="install.sh">一键部署</a> |
<a href="docs/setup-guides/README.md">安装入门</a> |
<a href="docs/README.zh-CN.md">文档总览</a> |
<a href="docs/SUMMARY.md">文档目录</a>
</p>
ZeroClaw 是一个运行在你自己设备上的个人AI助手。它在你已经使用的频道上回复你WhatsApp、Telegram、Slack、Discord、Signal、iMessage、Matrix、IRC、Email、Bluesky、Nostr、Mattermost、Nextcloud Talk、DingTalk、Lark、QQ、Reddit、LinkedIn、Twitter、MQTT、WeChat Work 等。它有一个用于实时控制的网页仪表板可以连接硬件外设ESP32、STM32、Arduino、Raspberry Pi。Gateway 只是控制平面——产品是助手本身。
如果你想要一个本地化、快速、始终在线的个人单用户助手,这就是它。
<p align="center">
<strong>场景分流:</strong>
<a href="docs/reference/README.md">参考手册</a> ·
<a href="docs/ops/README.md">运维部署</a> ·
<a href="docs/ops/troubleshooting.md">故障排查</a> ·
<a href="docs/security/README.md">安全专题</a> ·
<a href="docs/hardware/README.md">硬件外设</a> ·
<a href="docs/contributing/README.md">贡献与 CI</a>
<a href="https://zeroclawlabs.ai">官网</a> ·
<a href="docs/README.md">文档</a> ·
<a href="docs/architecture.md">架构</a> ·
<a href="#快速开始简版">入门指南</a> ·
<a href="#从-openclaw-迁移">从 OpenClaw 迁移</a> ·
<a href="docs/ops/troubleshooting.md">故障排除</a> ·
<a href="https://discord.com/invite/wDshRVqRjx">Discord</a>
</p>
> 本文是对 `README.md` 的人工对齐翻译(强调可读性与准确性,不做逐字直译)。
>
> 技术标识命令、配置键、API 路径、Trait 名称)保持英文,避免语义漂移。
>
> 最后对齐时间:**2026-02-22**。
> **推荐设置方式:** 在终端运行 `zeroclaw onboard`。ZeroClaw Onboard 会引导你逐步设置网关、工作区、频道和提供者。这是推荐的设置路径,支持 macOS、Linux 和 Windows通过 WSL2。首次安装从这里开始[入门指南](#快速开始简版)
## 📢 公告板
### 订阅认证OAuth
用于发布重要通知(破坏性变更、安全通告、维护窗口、版本阻塞问题等)。
- **OpenAI Codex**ChatGPT 订阅)
- **Gemini**Google OAuth
- **Anthropic**API 密钥或认证令牌)
| 日期UTC | 级别 | 通知 | 处理建议 |
|---|---|---|---|
| 2026-02-19 | _紧急_ | 我们与 `openagen/zeroclaw``zeroclaw.org` **没有任何关系**。`zeroclaw.org` 当前会指向 `openagen/zeroclaw` 这个 fork并且该域名/仓库正在冒充我们的官网与官方项目。 | 请不要相信上述来源发布的任何信息、二进制、募资活动或官方声明。请仅以[本仓库](https://github.com/zeroclaw-labs/zeroclaw)和已验证官方社媒为准。 |
| 2026-02-21 | _重要_ | 我们的官网现已上线:[zeroclawlabs.ai](https://zeroclawlabs.ai)。感谢大家一直以来的耐心等待。我们仍在持续发现冒充行为,请勿参与任何未经我们官方渠道发布、但打着 ZeroClaw 名义进行的投资、募资或类似活动。 | 一切信息请以[本仓库](https://github.com/zeroclaw-labs/zeroclaw)为准;也可关注 [X@zeroclawlabs](https://x.com/zeroclawlabs?s=21)、[Telegram@zeroclawlabs](https://t.me/zeroclawlabs)、[Facebook群组](https://www.facebook.com/groups/zeroclaw)、[Redditr/zeroclawlabs](https://www.reddit.com/r/zeroclawlabs/) 与 [小红书账号](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) 获取官方最新动态。 |
| 2026-02-19 | _重要_ | Anthropic 于 2026-02-19 更新了 Authentication and Credential Use 条款。条款明确OAuth authentication用于 Free、Pro、Max仅适用于 Claude Code 与 Claude.ai将 Claude Free/Pro/Max 账号获得的 OAuth token 用于其他任何产品、工具或服务(包括 Agent SDK不被允许并可能构成对 Consumer Terms of Service 的违规。 | 为避免损失,请暂时不要尝试 Claude Code OAuth 集成;原文见:[Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use)。 |
模型说明:虽然支持许多提供者/模型,但为获得最佳体验,请使用你可用的最强最新一代模型。参见[引导设置](#快速开始简版)。
## 项目简介
模型配置 + CLI[提供者参考](docs/reference/api/providers-reference.md)
认证配置轮换OAuth 与 API 密钥)+ 故障转移:[模型故障转移](docs/reference/api/providers-reference.md)
ZeroClaw 是一个高性能、低资源占用、可组合的自主智能体运行时。ZeroClaw 是面向智能代理工作流的**运行时操作系统** — 它抽象了模型、工具、记忆和执行层,使代理可以一次构建、随处运行。
## 安装(推荐)
- Rust 原生实现,单二进制部署,跨 ARM / x86 / RISC-V。
- Trait 驱动架构,`Provider` / `Channel` / `Tool` / `Memory` 可替换。
- 安全默认值优先:配对鉴权、显式 allowlist、沙箱与作用域约束。
运行时Rust stable 工具链。单一二进制文件,无运行时依赖。
## 为什么选择 ZeroClaw
### HomebrewmacOS/Linuxbrew
- **默认轻量运行时**:常见 CLI 与 `status` 工作流通常保持在几 MB 级内存范围。
- **低成本部署友好**:面向低价板卡与小规格云主机设计,不依赖厚重运行时。
- **冷启动速度快**Rust 单二进制让常用命令与守护进程启动更接近“秒开”。
- **跨架构可移植**:同一套二进制优先流程覆盖 ARM / x86 / RISC-V并保持 provider/channel/tool 可替换。
```bash
brew install zeroclaw
```
## 基准快照ZeroClaw vs OpenClaw可复现
### 一键安装
以下是本地快速基准对比macOS arm642026 年 2 月),按 0.8GHz 边缘 CPU 进行归一化展示:
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
```
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
|---|---|---|---|---|
| **语言** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **启动时间0.8GHz 核)** | > 500s | > 30s | < 1s | **< 10ms** |
| **二进制体积** | ~28MBdist | N/A脚本 | ~8MB | **~8.8 MB** |
| **成本** | Mac Mini $599 | Linux SBC ~$50 | Linux 板卡 $10 | **任意 $10 硬件** |
`zeroclaw onboard` 在安装后自动运行,配置你的工作区和提供者。
> 说明ZeroClaw 的数据来自 release 构建,并通过 `/usr/bin/time -l` 测得。OpenClaw 需要 Node.js 运行时环境,仅该运行时通常就会带来约 390MB 的额外内存占用NanoBot 需要 Python 运行时环境。PicoClaw 与 ZeroClaw 为静态二进制。
## 快速开始(简版)
完整新手指南(认证、配对、频道):[入门指南](docs/setup-guides/one-click-bootstrap.md)
```bash
# 安装 + 引导
./install.sh --api-key "sk-..." --provider openrouter
# 启动网关webhook 服务器 + 网页仪表板)
zeroclaw gateway # 默认127.0.0.1:42617
zeroclaw gateway --port 0 # 随机端口(安全加固)
# 与助手对话
zeroclaw agent -m "Hello, ZeroClaw!"
# 交互模式
zeroclaw agent
# 启动完整自主运行时(网关 + 频道 + 定时任务 + 手)
zeroclaw daemon
# 检查状态
zeroclaw status
# 运行诊断
zeroclaw doctor
```
升级?更新后运行 `zeroclaw doctor`
### 从源码构建(开发)
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
zeroclaw onboard
```
> **开发替代方案(无全局安装):** 命令前加 `cargo run --release --`(示例:`cargo run --release -- status`)。
## 从 OpenClaw 迁移
ZeroClaw 可以导入你的 OpenClaw 工作区、记忆和配置:
```bash
# 预览将迁移的内容(安全,只读)
zeroclaw migrate openclaw --dry-run
# 执行迁移
zeroclaw migrate openclaw
```
这会将你的记忆条目、工作区文件和配置从 `~/.openclaw/` 迁移到 `~/.zeroclaw/`。配置会自动从 JSON 转换为 TOML。
## 安全默认设置DM 访问)
ZeroClaw 连接到真实的消息平台。将入站 DM 视为不可信输入。
完整安全指南:[SECURITY.md](SECURITY.md)
所有频道的默认行为:
- **DM 配对**(默认):未知发送者会收到一个短配对码,机器人不会处理他们的消息。
- 使用以下命令批准:`zeroclaw pairing approve <channel> <code>`(然后发送者会被添加到本地允许列表)。
- 公共入站 DM 需要在 `config.toml` 中显式启用。
- 运行 `zeroclaw doctor` 来检测有风险或配置错误的 DM 策略。
**自主级别:**
| 级别 | 行为 |
|------|------|
| `ReadOnly` | 代理可以观察但不能操作 |
| `Supervised`(默认) | 代理在中/高风险操作时需要批准 |
| `Full` | 代理在策略范围内自主操作 |
**沙箱层:** 工作区隔离、路径遍历阻止、命令允许列表、禁止路径(`/etc`、`/root`、`~/.ssh`)、速率限制(每小时最大操作数、每日成本上限)。
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 公告
使用此面板发布重要通知(破坏性更改、安全公告、维护窗口和发布阻塞问题)。
| 日期 (UTC) | 级别 | 通知 | 操作 |
| ---------- | ---- | ---- | ---- |
| 2026-02-19 | _严重_ | 我们与 `openagen/zeroclaw`、`zeroclaw.org` 或 `zeroclaw.net` **无任何关联**。`zeroclaw.org` 和 `zeroclaw.net` 域名目前指向 `openagen/zeroclaw` 分支,该域名/仓库正在冒充我们的官方网站/项目。 | 不要信任来自这些来源的信息、二进制文件、筹款或公告。仅使用[本仓库](https://github.com/zeroclaw-labs/zeroclaw)和我们经过验证的社交账号。 |
| 2026-02-21 | _重要_ | 我们的官方网站现已上线:[zeroclawlabs.ai](https://zeroclawlabs.ai)。感谢您在我们准备发布期间的耐心等待。我们仍然看到冒充行为,因此**不要**加入任何声称使用 ZeroClaw 名义的投资或筹款活动,除非它是通过我们的官方渠道发布的。 | 使用[本仓库](https://github.com/zeroclaw-labs/zeroclaw)作为唯一信息来源。关注 [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21)、[Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs) 和 [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) 获取官方更新。 |
| 2026-02-19 | _重要_ | Anthropic 于 2026-02-19 更新了认证和凭证使用条款。Claude Code OAuth 令牌Free、Pro、Max仅供 Claude Code 和 Claude.ai 专用;在任何其他产品、工具或服务(包括 Agent SDK中使用 Claude Free/Pro/Max 的 OAuth 令牌是不允许的,可能违反消费者服务条款。 | 请暂时避免 Claude Code OAuth 集成以防止潜在损失。原始条款:[Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use)。 |
## 亮点
- **默认精简运行时** — 常见 CLI 和状态工作流在发布构建中运行仅需数兆字节内存。
- **低成本部署** — 专为 10 美元开发板和小型云实例设计,无重量级运行时依赖。
- **快速冷启动** — 单一二进制 Rust 运行时使命令和守护进程启动近乎即时。
- **可移植架构** — 跨 ARM、x86 和 RISC-V 的单一二进制文件,可交换的提供者/频道/工具。
- **本地优先网关** — 用于会话、频道、工具、定时任务、SOP 和事件的单一控制平面。
- **多频道收件箱** — WhatsApp、Telegram、Slack、Discord、Signal、iMessage、Matrix、IRC、Email、Bluesky、Nostr、Mattermost、Nextcloud Talk、DingTalk、Lark、QQ、Reddit、LinkedIn、Twitter、MQTT、WeChat Work、WebSocket 等。
- **多代理编排Hands** — 按计划运行并随时间变得更智能的自主代理群。
- **标准操作规程SOPs** — 事件驱动的工作流自动化,支持 MQTT、webhook、cron 和外设触发器。
- **网页仪表板** — React 19 + Vite 网页 UI具有实时聊天、记忆浏览器、配置编辑器、定时任务管理器和工具检查器。
- **硬件外设** — 通过 `Peripheral` trait 支持 ESP32、STM32 Nucleo、Arduino、Raspberry Pi GPIO。
- **一流工具** — shell、文件 I/O、浏览器、git、网页抓取/搜索、MCP、Jira、Notion、Google Workspace 等 70+ 种。
- **生命周期钩子** — 在每个阶段拦截和修改 LLM 调用、工具执行和消息。
- **技能平台** — 内置、社区和工作区技能,带安全审计。
- **隧道支持** — Cloudflare、Tailscale、ngrok、OpenVPN 和自定义隧道用于远程访问。
### 团队为什么选择 ZeroClaw
- **默认精简:** 小型 Rust 二进制文件,快速启动,低内存占用。
- **安全设计:** 配对、严格沙箱、显式允许列表、工作区范围限定。
- **完全可替换:** 核心系统都是 trait提供者、频道、工具、记忆、隧道
- **无锁定:** 支持 OpenAI 兼容提供者 + 可插拔自定义端点。
## 基准测试快照ZeroClaw 对比 OpenClaw可复现
本地机器快速基准测试macOS arm642026年2月针对 0.8GHz 边缘硬件标准化。
| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
| ------------------------- | ------------- | -------------- | --------------- | -------------------- |
| **语言** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **启动时间0.8GHz 核心)** | > 500s | > 30s | < 1s | **< 10ms** |
| **二进制大小** | ~28MB (dist) | N/A (Scripts) | ~8MB | **~8.8 MB** |
| **成本** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **任何硬件 $10** |
> 注意ZeroClaw 的结果使用 `/usr/bin/time -l` 在发布构建上测量。OpenClaw 需要 Node.js 运行时(通常约 390MB 额外内存开销),而 NanoBot 需要 Python 运行时。PicoClaw 和 ZeroClaw 是静态二进制文件。上述 RAM 数据为运行时内存;构建时编译需求更高。
<p align="center">
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw 对比图" width="800" />
<img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>
### 本地可复现测量
基准数据会随代码与工具链变化,建议始终在你的目标环境自行复测:
### 可复现的本地测量
```bash
cargo build --release
@ -130,204 +254,502 @@ ls -lh target/release/zeroclaw
/usr/bin/time -l target/release/zeroclaw status
```
当前 README 的样例数据macOS arm642026-02-18
## 我们迄今为止构建的一切
- Release 二进制:`8.8M`
- `zeroclaw --help`:约 `0.02s`,峰值内存约 `3.9MB`
- `zeroclaw status`:约 `0.01s`,峰值内存约 `4.1MB`
### 核心平台
## 一键部署
- Gateway HTTP/WS/SSE 控制平面支持会话、在线状态、配置、定时任务、webhook、网页仪表板和配对。
- CLI 表面:`gateway`、`agent`、`onboard`、`doctor`、`status`、`service`、`migrate`、`auth`、`cron`、`channel`、`skills`。
- 代理编排循环,支持工具调度、提示构建、消息分类和记忆加载。
- 会话模型,支持安全策略执行、自主级别和批准门控。
- 弹性提供者包装器,支持故障转移、重试和跨 20+ LLM 后端的模型路由。
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh
### 频道
频道WhatsApp原生、Telegram、Slack、Discord、Signal、iMessage、Matrix、IRC、Email、Bluesky、DingTalk、Lark、Mattermost、Nextcloud Talk、Nostr、QQ、Reddit、LinkedIn、Twitter、MQTT、WeChat Work、WATI、Mochat、Linq、Notion、WebSocket、ClawdTalk。
功能门控Matrix`channel-matrix`、Lark`channel-lark`、Nostr`channel-nostr`)。
### 网页仪表板
React 19 + Vite 6 + Tailwind CSS 4 网页仪表板直接从 Gateway 提供:
- **仪表板** — 系统概览、健康状态、运行时间、成本跟踪
- **代理聊天** — 与代理的交互式聊天
- **记忆** — 浏览和管理记忆条目
- **配置** — 查看和编辑配置
- **定时任务** — 管理计划任务
- **工具** — 浏览可用工具
- **日志** — 查看代理活动日志
- **成本** — 令牌使用和成本跟踪
- **诊断** — 系统健康诊断
- **集成** — 集成状态和设置
- **配对** — 设备配对管理
### 固件目标
| 目标 | 平台 | 用途 |
|------|------|------|
| ESP32 | Espressif ESP32 | 无线外设代理 |
| ESP32-UI | ESP32 + Display | 带可视化界面的代理 |
| STM32 Nucleo | STM32 (ARM Cortex-M) | 工业外设 |
| Arduino | Arduino | 基础传感器/执行器桥接 |
| Uno Q Bridge | Arduino Uno | 到代理的串口桥接 |
### 工具 + 自动化
- **核心:** shell、文件读/写/编辑、git 操作、glob 搜索、内容搜索
- **网络:** 浏览器控制、网页抓取、网络搜索、截图、图片信息、PDF 阅读
- **集成:** Jira、Notion、Google Workspace、Microsoft 365、LinkedIn、Composio、Pushover
- **MCP** Model Context Protocol 工具包装器 + 延迟工具集
- **调度:** cron 添加/删除/更新/运行、计划工具
- **记忆:** 回忆、存储、遗忘、知识、项目情报
- **高级:** 委托(代理到代理)、群体、模型切换/路由、安全操作、云操作
- **硬件:** 板信息、内存映射、内存读取(功能门控)
### 运行时 + 安全
- **自主级别:** ReadOnly、Supervised默认、Full。
- **沙箱:** 工作区隔离、路径遍历阻止、命令允许列表、禁止路径、LandlockLinux、Bubblewrap。
- **速率限制:** 每小时最大操作数、每日最大成本(可配置)。
- **批准门控:** 中/高风险操作的交互式批准。
- **紧急停止:** 紧急关闭功能。
- **129+ 安全测试** 在自动化 CI 中。
### 运维 + 打包
- 网页仪表板直接从 Gateway 提供。
- 隧道支持Cloudflare、Tailscale、ngrok、OpenVPN、自定义命令。
- Docker 运行时适配器用于容器化执行。
- CI/CDbeta推送时自动→ stable手动触发→ Docker、crates.io、Scoop、AUR、Homebrew、tweet。
- 预构建二进制文件支持 Linuxx86_64、aarch64、armv7、macOSx86_64、aarch64、Windowsx86_64
## 配置
最小 `~/.zeroclaw/config.toml`
```toml
default_provider = "anthropic"
api_key = "sk-ant-..."
```
可选环境初始化:`./install.sh --install-system-deps --install-rust`(可能需要 `sudo`)。
完整配置参考:[docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
详细说明见:[`docs/setup-guides/one-click-bootstrap.md`](docs/setup-guides/one-click-bootstrap.md)。
### 频道配置
## 快速开始
### HomebrewmacOS/Linuxbrew
```bash
brew install zeroclaw
**Telegram**
```toml
[channels.telegram]
bot_token = "123456:ABC-DEF..."
```
```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
# 快速初始化(无交互)
zeroclaw onboard --api-key sk-... --provider openrouter
# 或使用交互式向导
zeroclaw onboard --interactive
# 单次对话
zeroclaw agent -m "Hello, ZeroClaw!"
# 启动网关(默认: 127.0.0.1:42617
zeroclaw gateway
# 启动长期运行模式
zeroclaw daemon
**Discord**
```toml
[channels.discord]
token = "your-bot-token"
```
## Subscription AuthOpenAI Codex / Claude Code
ZeroClaw 现已支持基于订阅的原生鉴权配置(多账号、静态加密存储)。
- 配置文件:`~/.zeroclaw/auth-profiles.json`
- 加密密钥:`~/.zeroclaw/.secret_key`
- Profile ID 格式:`<provider>:<profile_name>`(例:`openai-codex:work`
OpenAI Codex OAuthChatGPT 订阅):
```bash
# 推荐用于服务器/无显示器环境
zeroclaw auth login --provider openai-codex --device-code
# 浏览器/回调流程,支持粘贴回退
zeroclaw auth login --provider openai-codex --profile default
zeroclaw auth paste-redirect --provider openai-codex --profile default
# 检查 / 刷新 / 切换 profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
**Slack**
```toml
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
```
Claude Code / Anthropic setup-token
```bash
# 粘贴订阅/setup tokenAuthorization header 模式)
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# 别名命令
zeroclaw auth setup-token --provider anthropic --profile default
**WhatsApp**
```toml
[channels.whatsapp]
enabled = true
```
使用 subscription auth 运行 agent
```bash
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hello"
# Anthropic 同时支持 API key 和 auth token 环境变量:
# ANTHROPIC_AUTH_TOKEN, ANTHROPIC_OAUTH_TOKEN, ANTHROPIC_API_KEY
zeroclaw agent --provider anthropic -m "hello"
**Matrix**
```toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@bot:matrix.org"
password = "..."
```
## 架构
**Signal**
```toml
[channels.signal]
phone_number = "+1234567890"
```
每个子系统都是一个 **Trait** — 通过配置切换即可更换实现,无需修改代码。
### 隧道配置
<p align="center">
<img src="docs/assets/architecture.svg" alt="ZeroClaw 架构图" width="900" />
</p>
```toml
[tunnel]
kind = "cloudflare" # or "tailscale", "ngrok", "openvpn", "custom", "none"
```
| 子系统 | Trait | 内置实现 | 扩展方式 |
|--------|-------|----------|----------|
| **AI 模型** | `Provider` | 通过 `zeroclaw providers` 查看(当前 28 个内置 + 别名,以及自定义端点) | `custom:https://your-api.com`OpenAI 兼容)或 `anthropic-custom:https://your-api.com` |
| **通道** | `Channel` | CLI, Telegram, Discord, Slack, Mattermost, iMessage, Matrix, Signal, WhatsApp, Linq, Email, IRC, Lark, DingTalk, QQ, Webhook | 任意消息 API |
| **记忆** | `Memory` | SQLite 混合搜索, PostgreSQL 后端, Lucid 桥接, Markdown 文件, 显式 `none` 后端, 快照/恢复, 可选响应缓存 | 任意持久化后端 |
| **工具** | `Tool` | shell/file/memory, cron/schedule, git, pushover, browser, http_request, screenshot/image_info, composio (opt-in), delegate, 硬件工具 | 任意能力 |
| **可观测性** | `Observer` | Noop, Log, Multi | Prometheus, OTel |
| **运行时** | `RuntimeAdapter` | Native, Docker沙箱 | 通过 adapter 添加;不支持的类型会快速失败 |
| **安全** | `SecurityPolicy` | Gateway 配对, 沙箱, allowlist, 速率限制, 文件系统作用域, 加密密钥 | — |
| **身份** | `IdentityConfig` | OpenClaw (markdown), AIEOS v1.1 (JSON) | 任意身份格式 |
| **隧道** | `Tunnel` | None, Cloudflare, Tailscale, ngrok, Custom | 任意隧道工具 |
| **心跳** | Engine | HEARTBEAT.md 定期任务 | — |
| **技能** | Loader | TOML 清单 + SKILL.md 指令 | 社区技能包 |
| **集成** | Registry | 9 个分类下 70+ 集成 | 插件系统 |
详情:[频道参考](docs/reference/api/channels-reference.md) · [配置参考](docs/reference/api/config-reference.md)
### 运行时支持(当前)
- ✅ 当前支持:`runtime.kind = "native"` 或 `runtime.kind = "docker"`
- 🚧 计划中尚未实现WASM / 边缘运行时
- **`native`**(默认)— 直接进程执行,最快路径,适合可信环境。
- **`docker`** — 完全容器隔离,强制安全策略,需要 Docker。
配置了不支持的 `runtime.kind`ZeroClaw 会以明确的错误退出,而非静默回退到 native
设置 `runtime.kind = "docker"` 以获得严格沙箱或网络隔离。
### 记忆系统(全栈搜索引擎
## 订阅认证OpenAI Codex / Claude Code / Gemini
全部自研,零外部依赖 — 无需 Pinecone、Elasticsearch、LangChain
ZeroClaw 支持订阅原生认证配置文件(多账户,静态加密)。
| 层级 | 实现 |
|------|------|
| **向量数据库** | Embeddings 以 BLOB 存储于 SQLite余弦相似度搜索 |
| **关键词搜索** | FTS5 虚拟表BM25 评分 |
| **混合合并** | 自定义加权合并函数(`vector.rs` |
| **Embeddings** | `EmbeddingProvider` trait — OpenAI、自定义 URL 或 noop |
| **分块** | 基于行的 Markdown 分块器,保留标题结构 |
| **缓存** | SQLite `embedding_cache`LRU 淘汰策略 |
| **安全重索引** | 原子化重建 FTS5 + 重新嵌入缺失向量 |
- 存储文件:`~/.zeroclaw/auth-profiles.json`
- 加密密钥:`~/.zeroclaw/.secret_key`
- 配置文件 ID 格式:`<provider>:<profile_name>`(示例:`openai-codex:work`
Agent 通过工具自动进行记忆的回忆、保存和管理。
```bash
# OpenAI Codex OAuthChatGPT 订阅)
zeroclaw auth login --provider openai-codex --device-code
```toml
[memory]
backend = "sqlite" # "sqlite", "lucid", "postgres", "markdown", "none"
auto_save = true
embedding_provider = "none" # "none", "openai", "custom:https://..."
vector_weight = 0.7
keyword_weight = 0.3
# Gemini OAuth
zeroclaw auth login --provider gemini --profile default
# Anthropic setup-token
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization
# 检查 / 刷新 / 切换配置文件
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
# 使用订阅认证运行代理
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider anthropic -m "hello"
```
## 安全默认行为(关键)
## 代理工作区 + 技能
- Gateway 默认绑定:`127.0.0.1:42617`
- Gateway 默认要求配对:`require_pairing = true`
- 默认拒绝公网绑定:`allow_public_bind = false`
- Channel allowlist 语义:
- 空列表 `[]` => deny-by-default
- `"*"` => allow all仅在明确知道风险时使用
工作区根目录:`~/.zeroclaw/workspace/`(可通过配置自定义)。
## 常用配置片段
注入的提示文件:
- `IDENTITY.md` — 代理人格和角色
- `USER.md` — 用户上下文和偏好
- `MEMORY.md` — 长期事实和经验
- `AGENTS.md` — 会话约定和初始化规则
- `SOUL.md` — 核心身份和运作原则
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
技能:`~/.zeroclaw/workspace/skills/<skill>/SKILL.md` 或 `SKILL.toml`
[memory]
backend = "sqlite" # sqlite | lucid | markdown | none
auto_save = true
embedding_provider = "none" # none | openai | custom:https://...
```bash
# 列出已安装的技能
zeroclaw skills list
[gateway]
host = "127.0.0.1"
port = 42617
require_pairing = true
allow_public_bind = false
# 从 git 安装
zeroclaw skills install https://github.com/user/my-skill.git
# 安装前安全审计
zeroclaw skills audit https://github.com/user/my-skill.git
# 移除技能
zeroclaw skills remove my-skill
```
## 文档导航(推荐从这里开始)
## CLI 命令
- 文档总览(英文):[`docs/README.md`](docs/README.md)
- 统一目录TOC[`docs/SUMMARY.md`](docs/SUMMARY.md)
- 文档总览(简体中文):[`docs/README.zh-CN.md`](docs/README.zh-CN.md)
- 命令参考:[`docs/reference/cli/commands-reference.md`](docs/reference/cli/commands-reference.md)
- 配置参考:[`docs/reference/api/config-reference.md`](docs/reference/api/config-reference.md)
- Provider 参考:[`docs/reference/api/providers-reference.md`](docs/reference/api/providers-reference.md)
- Channel 参考:[`docs/reference/api/channels-reference.md`](docs/reference/api/channels-reference.md)
- 运维手册:[`docs/ops/operations-runbook.md`](docs/ops/operations-runbook.md)
- 故障排查:[`docs/ops/troubleshooting.md`](docs/ops/troubleshooting.md)
- 文档清单与分类:[`docs/maintainers/docs-inventory.md`](docs/maintainers/docs-inventory.md)
- 项目 triage 快照2026-02-18[`docs/maintainers/project-triage-snapshot-2026-02-18.md`](docs/maintainers/project-triage-snapshot-2026-02-18.md)
```bash
# 工作区管理
zeroclaw onboard # 引导设置向导
zeroclaw status # 显示守护进程/代理状态
zeroclaw doctor # 运行系统诊断
## 贡献与许可证
# 网关 + 守护进程
zeroclaw gateway # 启动网关服务器127.0.0.1:42617
zeroclaw daemon # 启动完整自主运行时
- 贡献指南:[`CONTRIBUTING.md`](CONTRIBUTING.md)
- PR 工作流:[`docs/contributing/pr-workflow.md`](docs/contributing/pr-workflow.md)
- Reviewer 指南:[`docs/contributing/reviewer-playbook.md`](docs/contributing/reviewer-playbook.md)
- 许可证MIT 或 Apache 2.0(见 [`LICENSE-MIT`](LICENSE-MIT)、[`LICENSE-APACHE`](LICENSE-APACHE) 与 [`NOTICE`](NOTICE)
# 代理
zeroclaw agent # 交互式聊天模式
zeroclaw agent -m "message" # 单条消息模式
# 服务管理
zeroclaw service install # 作为系统服务安装launchd/systemd
zeroclaw service start|stop|restart|status
# 频道
zeroclaw channel list # 列出已配置的频道
zeroclaw channel doctor # 检查频道健康状况
zeroclaw channel bind-telegram 123456789
# 定时任务 + 调度
zeroclaw cron list # 列出计划任务
zeroclaw cron add "*/5 * * * *" --prompt "Check system health"
zeroclaw cron remove <id>
# 记忆
zeroclaw memory list # 列出记忆条目
zeroclaw memory get <key> # 检索记忆
zeroclaw memory stats # 记忆统计
# 认证配置文件
zeroclaw auth login --provider <name>
zeroclaw auth status
zeroclaw auth use --provider <name> --profile <profile>
# 硬件外设
zeroclaw hardware discover # 扫描已连接的设备
zeroclaw peripheral list # 列出已连接的外设
zeroclaw peripheral flash # 向设备刷写固件
# 迁移
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
# Shell 补全
source <(zeroclaw completions bash)
zeroclaw completions zsh > ~/.zfunc/_zeroclaw
```
完整命令参考:[docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
<!-- markdownlint-disable MD001 MD024 -->
## 前置条件
<details>
<summary><strong>Windows</strong></summary>
#### 必需
1. **Visual Studio Build Tools**(提供 MSVC 链接器和 Windows SDK
```powershell
winget install Microsoft.VisualStudio.2022.BuildTools
```
在安装期间(或通过 Visual Studio 安装程序),选择 **"Desktop development with C++"** 工作负载。
2. **Rust 工具链:**
```powershell
winget install Rustlang.Rustup
```
安装后,打开新终端并运行 `rustup default stable` 确保 stable 工具链已激活。
3. **验证**两者是否正常工作:
```powershell
rustc --version
cargo --version
```
#### 可选
- **Docker Desktop** — 仅在使用 [Docker 沙箱运行时](#运行时支持当前)`runtime.kind = "docker"`)时需要。通过 `winget install Docker.DockerDesktop` 安装。
</details>
<details>
<summary><strong>Linux / macOS</strong></summary>
#### 必需
1. **构建工具:**
- **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
- **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
- **macOS:** 安装 Xcode 命令行工具:`xcode-select --install`
2. **Rust 工具链:**
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
详情参见 [rustup.rs](https://rustup.rs)。
3. **验证**两者是否正常工作:
```bash
rustc --version
cargo --version
```
#### 一行安装
或者跳过上述步骤使用单条命令安装所有内容系统依赖、Rust、ZeroClaw
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### 编译资源需求
从源码构建比运行生成的二进制文件需要更多资源:
| 资源 | 最低 | 推荐 |
| ---- | ---- | ---- |
| **RAM + swap** | 2 GB | 4 GB+ |
| **可用磁盘** | 6 GB | 10 GB+ |
如果你的主机低于最低要求,使用预构建二进制文件:
```bash
./install.sh --prefer-prebuilt
```
仅使用二进制安装,不回退到源码编译:
```bash
./install.sh --prebuilt-only
```
#### 可选
- **Docker** — 仅在使用 [Docker 沙箱运行时](#运行时支持当前)`runtime.kind = "docker"`)时需要。通过你的包管理器或 [docker.com](https://docs.docker.com/engine/install/) 安装。
> **注意:** 默认的 `cargo build --release` 使用 `codegen-units=1` 以降低编译峰值压力。对于强大的机器,使用 `cargo build --profile release-fast` 加速构建。
</details>
<!-- markdownlint-enable MD001 MD024 -->
### 预构建二进制文件
发布资产可用于:
- Linux: `x86_64`、`aarch64`、`armv7`
- macOS: `x86_64`、`aarch64`
- Windows: `x86_64`
从以下位置下载最新资产:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>
## 文档
当你完成引导流程后需要更深入的参考时使用这些文档。
- 从[文档索引](docs/README.md)开始了解导航和内容分布。
- 阅读[架构概述](docs/architecture.md)了解完整系统模型。
- 使用[配置参考](docs/reference/api/config-reference.md)查阅所有键和示例。
- 按照[运维手册](docs/ops/operations-runbook.md)运行 Gateway。
- 按照 [ZeroClaw Onboard](#快速开始简版) 进行引导设置。
- 使用[故障排除指南](docs/ops/troubleshooting.md)调试常见故障。
- 在暴露任何内容之前查看[安全指南](docs/security/README.md)。
### 参考文档
- 文档中心:[docs/README.md](docs/README.md)
- 统一文档目录:[docs/SUMMARY.md](docs/SUMMARY.md)
- 命令参考:[docs/reference/cli/commands-reference.md](docs/reference/cli/commands-reference.md)
- 配置参考:[docs/reference/api/config-reference.md](docs/reference/api/config-reference.md)
- 提供者参考:[docs/reference/api/providers-reference.md](docs/reference/api/providers-reference.md)
- 频道参考:[docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- 运维手册:[docs/ops/operations-runbook.md](docs/ops/operations-runbook.md)
- 故障排除:[docs/ops/troubleshooting.md](docs/ops/troubleshooting.md)
### 协作文档
- 贡献指南:[CONTRIBUTING.md](CONTRIBUTING.md)
- PR 工作流策略:[docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- CI 工作流指南:[docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- 审查员手册:[docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- 安全披露策略:[SECURITY.md](SECURITY.md)
- 文档模板:[docs/contributing/doc-template.md](docs/contributing/doc-template.md)
### 部署 + 运维
- 网络部署指南:[docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- 代理代理手册:[docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)
- 硬件指南:[docs/hardware/README.md](docs/hardware/README.md)
## Smooth Crab 🦀
ZeroClaw 为 smooth crab 🦀 而构建,一个快速高效的 AI 助手。由 Argenis De La Rosa 和社区共同构建。
- [zeroclawlabs.ai](https://zeroclawlabs.ai)
- [@zeroclawlabs](https://x.com/zeroclawlabs)
## 支持 ZeroClaw
如果 ZeroClaw 对你的工作有帮助,你想支持持续开发,可以在这里捐款:
<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
### 🙏 特别感谢
衷心感谢激励和推动这项开源工作的社区和机构:
- **哈佛大学** — 培养求知欲并推动可能性的边界。
- **MIT** — 倡导开放知识、开源以及技术应该人人可及的信念。
- **Sundai Club** — 社区、能量以及不懈追求构建有意义事物的动力。
- **世界及更远** 🌍✨ — 致每一位贡献者、梦想家和构建者,你们让开源成为一股向善的力量。这是献给你们的。
我们公开构建,因为最好的想法来自四面八方。如果你在阅读这些,你就是其中的一部分。欢迎。🦀❤️
## 贡献
ZeroClaw 新手?寻找标记为 [`good first issue`](https://github.com/zeroclaw-labs/zeroclaw/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 的问题 — 参阅我们的[贡献指南](CONTRIBUTING.md#first-time-contributors)了解如何开始。欢迎 AI/vibe-coded PR🤖
参见 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [CLA.md](docs/contributing/cla.md)。实现一个 trait提交 PR
- CI 工作流指南:[docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- 新 `Provider``src/providers/`
- 新 `Channel``src/channels/`
- 新 `Observer``src/observability/`
- 新 `Tool``src/tools/`
- 新 `Memory``src/memory/`
- 新 `Tunnel``src/tunnel/`
- 新 `Peripheral``src/peripherals/`
- 新 `Skill``~/.zeroclaw/workspace/skills/<name>/`
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ 官方仓库和冒充警告
**这是唯一的 ZeroClaw 官方仓库:**
> https://github.com/zeroclaw-labs/zeroclaw
任何其他声称是"ZeroClaw"或暗示与 ZeroClaw Labs 有关联的仓库、组织、域名或包都是**未经授权的,与本项目无关**。已知的未授权分支将在 [TRADEMARK.md](docs/maintainers/trademark.md) 中列出。
如果你遇到冒充或商标滥用,请[提交问题](https://github.com/zeroclaw-labs/zeroclaw/issues)。
---
如果你需要完整实现细节(架构图、全部命令、完整 API、开发流程请直接阅读英文主文档[`README.md`](README.md)。
## 许可证
ZeroClaw 采用双重许可,以实现最大开放性和贡献者保护:
| 许可证 | 使用场景 |
|--------|----------|
| [MIT](LICENSE-MIT) | 开源、研究、学术、个人使用 |
| [Apache 2.0](LICENSE-APACHE) | 专利保护、机构、商业部署 |
你可以选择任一许可证。**贡献者自动授予两种许可证的权利** — 参见 [CLA.md](docs/contributing/cla.md) 了解完整的贡献者协议。
### 商标
**ZeroClaw** 名称和标志是 ZeroClaw Labs 的商标。此许可证不授予使用它们暗示背书或关联的权限。参见 [TRADEMARK.md](docs/maintainers/trademark.md) 了解允许和禁止的使用。
### 贡献者保护
- 你**保留**你贡献的版权
- **专利授权**Apache 2.0)保护你免受其他贡献者的专利索赔
- 你的贡献在提交历史和 [NOTICE](NOTICE) 中**永久归属**
- 贡献不转让商标权
---
**ZeroClaw** — 零开销。零妥协。随处部署。任意替换。🦀
## 贡献者
<a href="https://github.com/zeroclaw-labs/zeroclaw/graphs/contributors">
<img src="https://contrib.rocks/image?repo=zeroclaw-labs/zeroclaw" alt="ZeroClaw contributors" />
</a>
此列表从 GitHub 贡献者图表生成,自动更新。
## Star 历史
<p align="center">
<a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
</picture>
</a>
</p>

29
apps/tauri/Cargo.toml Normal file
View File

@ -0,0 +1,29 @@
[package]
name = "zeroclaw-desktop"
version = "0.1.0"
edition = "2021"
description = "ZeroClaw Desktop — Tauri-powered system tray app"
publish = false
[build-dependencies]
tauri-build = { version = "2.0", features = [] }
[dependencies]
tauri = { version = "2.0", features = ["tray-icon", "image-png"] }
tauri-plugin-shell = "2.0"
tauri-plugin-store = "2.0"
tauri-plugin-single-instance = "2.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
tokio = { version = "1.50", features = ["rt-multi-thread", "macros", "sync", "time"] }
anyhow = "1.0"
[target.'cfg(target_os = "macos")'.dependencies]
objc2 = "0.6"
objc2-app-kit = { version = "0.3", features = ["NSApplication", "NSImage", "NSRunningApplication"] }
objc2-foundation = { version = "0.3", features = ["NSData"] }
[features]
default = ["custom-protocol"]
custom-protocol = ["tauri/custom-protocol"]

3
apps/tauri/build.rs Normal file
View File

@ -0,0 +1,3 @@
fn main() {
tauri_build::build();
}

View File

@ -0,0 +1,14 @@
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "Default capability set for ZeroClaw Desktop",
"windows": ["main"],
"permissions": [
"core:default",
"shell:allow-open",
"store:allow-get",
"store:allow-set",
"store:allow-save",
"store:allow-load"
]
}

View File

@ -0,0 +1,14 @@
{
"identifier": "desktop",
"description": "Desktop-specific permissions for ZeroClaw",
"windows": ["main"],
"permissions": [
"core:default",
"shell:allow-open",
"shell:allow-execute",
"store:allow-get",
"store:allow-set",
"store:allow-save",
"store:allow-load"
]
}

View File

@ -0,0 +1,8 @@
{
"identifier": "mobile",
"description": "Mobile-specific permissions for ZeroClaw",
"windows": ["main"],
"permissions": [
"core:default"
]
}

View File

View File

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

BIN
apps/tauri/icons/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

BIN
apps/tauri/icons/icon.icns Normal file

Binary file not shown.

BIN
apps/tauri/icons/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="16" fill="#DC322F"/>
<text x="64" y="80" font-size="64" font-family="monospace" font-weight="bold" fill="white" text-anchor="middle">Z</text>
</svg>

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 B

View File

@ -0,0 +1,17 @@
use crate::gateway_client::GatewayClient;
use crate::state::SharedState;
use tauri::State;
#[tauri::command]
pub async fn send_message(
state: State<'_, SharedState>,
message: String,
) -> Result<serde_json::Value, String> {
let s = state.read().await;
let client = GatewayClient::new(&s.gateway_url, s.token.as_deref());
drop(s);
client
.send_webhook_message(&message)
.await
.map_err(|e| e.to_string())
}

View File

@ -0,0 +1,11 @@
use crate::gateway_client::GatewayClient;
use crate::state::SharedState;
use tauri::State;
#[tauri::command]
pub async fn list_channels(state: State<'_, SharedState>) -> Result<serde_json::Value, String> {
let s = state.read().await;
let client = GatewayClient::new(&s.gateway_url, s.token.as_deref());
drop(s);
client.get_status().await.map_err(|e| e.to_string())
}

View File

@ -0,0 +1,19 @@
use crate::gateway_client::GatewayClient;
use crate::state::SharedState;
use tauri::State;
#[tauri::command]
pub async fn get_status(state: State<'_, SharedState>) -> Result<serde_json::Value, String> {
let s = state.read().await;
let client = GatewayClient::new(&s.gateway_url, s.token.as_deref());
drop(s);
client.get_status().await.map_err(|e| e.to_string())
}
#[tauri::command]
pub async fn get_health(state: State<'_, SharedState>) -> Result<bool, String> {
let s = state.read().await;
let client = GatewayClient::new(&s.gateway_url, s.token.as_deref());
drop(s);
client.get_health().await.map_err(|e| e.to_string())
}

View File

@ -0,0 +1,4 @@
pub mod agent;
pub mod channels;
pub mod gateway;
pub mod pairing;

View File

@ -0,0 +1,19 @@
use crate::gateway_client::GatewayClient;
use crate::state::SharedState;
use tauri::State;
#[tauri::command]
pub async fn initiate_pairing(state: State<'_, SharedState>) -> Result<serde_json::Value, String> {
let s = state.read().await;
let client = GatewayClient::new(&s.gateway_url, s.token.as_deref());
drop(s);
client.initiate_pairing().await.map_err(|e| e.to_string())
}
#[tauri::command]
pub async fn get_devices(state: State<'_, SharedState>) -> Result<serde_json::Value, String> {
let s = state.read().await;
let client = GatewayClient::new(&s.gateway_url, s.token.as_deref());
drop(s);
client.get_devices().await.map_err(|e| e.to_string())
}

View File

@ -0,0 +1,213 @@
//! HTTP client for communicating with the ZeroClaw gateway.
use anyhow::{Context, Result};
pub struct GatewayClient {
pub(crate) base_url: String,
pub(crate) token: Option<String>,
client: reqwest::Client,
}
impl GatewayClient {
pub fn new(base_url: &str, token: Option<&str>) -> Self {
let client = reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(10))
.build()
.unwrap_or_default();
Self {
base_url: base_url.to_string(),
token: token.map(String::from),
client,
}
}
pub(crate) fn auth_header(&self) -> Option<String> {
self.token.as_ref().map(|t| format!("Bearer {t}"))
}
pub async fn get_status(&self) -> Result<serde_json::Value> {
let mut req = self.client.get(format!("{}/api/status", self.base_url));
if let Some(auth) = self.auth_header() {
req = req.header("Authorization", auth);
}
let resp = req.send().await.context("status request failed")?;
Ok(resp.json().await?)
}
pub async fn get_health(&self) -> Result<bool> {
match self
.client
.get(format!("{}/health", self.base_url))
.send()
.await
{
Ok(resp) => Ok(resp.status().is_success()),
Err(_) => Ok(false),
}
}
pub async fn get_devices(&self) -> Result<serde_json::Value> {
let mut req = self.client.get(format!("{}/api/devices", self.base_url));
if let Some(auth) = self.auth_header() {
req = req.header("Authorization", auth);
}
let resp = req.send().await.context("devices request failed")?;
Ok(resp.json().await?)
}
pub async fn initiate_pairing(&self) -> Result<serde_json::Value> {
let mut req = self
.client
.post(format!("{}/api/pairing/initiate", self.base_url));
if let Some(auth) = self.auth_header() {
req = req.header("Authorization", auth);
}
let resp = req.send().await.context("pairing request failed")?;
Ok(resp.json().await?)
}
/// Check whether the gateway requires pairing.
pub async fn requires_pairing(&self) -> Result<bool> {
let resp = self
.client
.get(format!("{}/health", self.base_url))
.send()
.await
.context("health request failed")?;
let body: serde_json::Value = resp.json().await?;
Ok(body["require_pairing"].as_bool().unwrap_or(false))
}
/// Request a new pairing code from the gateway (localhost-only admin endpoint).
pub async fn request_new_paircode(&self) -> Result<String> {
let resp = self
.client
.post(format!("{}/admin/paircode/new", self.base_url))
.send()
.await
.context("paircode request failed")?;
let body: serde_json::Value = resp.json().await?;
body["pairing_code"]
.as_str()
.map(String::from)
.context("no pairing_code in response")
}
/// Exchange a pairing code for a bearer token.
pub async fn pair_with_code(&self, code: &str) -> Result<String> {
let resp = self
.client
.post(format!("{}/pair", self.base_url))
.header("X-Pairing-Code", code)
.send()
.await
.context("pair request failed")?;
if !resp.status().is_success() {
anyhow::bail!("pair request returned {}", resp.status());
}
let body: serde_json::Value = resp.json().await?;
body["token"]
.as_str()
.map(String::from)
.context("no token in pair response")
}
/// Validate an existing token by calling a protected endpoint.
pub async fn validate_token(&self) -> Result<bool> {
let mut req = self.client.get(format!("{}/api/status", self.base_url));
if let Some(auth) = self.auth_header() {
req = req.header("Authorization", auth);
}
match req.send().await {
Ok(resp) => Ok(resp.status().is_success()),
Err(_) => Ok(false),
}
}
/// Auto-pair with the gateway: request a new code and exchange it for a token.
pub async fn auto_pair(&self) -> Result<String> {
let code = self.request_new_paircode().await?;
self.pair_with_code(&code).await
}
pub async fn send_webhook_message(&self, message: &str) -> Result<serde_json::Value> {
let mut req = self
.client
.post(format!("{}/webhook", self.base_url))
.json(&serde_json::json!({ "message": message }));
if let Some(auth) = self.auth_header() {
req = req.header("Authorization", auth);
}
let resp = req.send().await.context("webhook request failed")?;
Ok(resp.json().await?)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn client_creation_no_token() {
let client = GatewayClient::new("http://127.0.0.1:42617", None);
assert_eq!(client.base_url, "http://127.0.0.1:42617");
assert!(client.token.is_none());
assert!(client.auth_header().is_none());
}
#[test]
fn client_creation_with_token() {
let client = GatewayClient::new("http://localhost:8080", Some("test-token"));
assert_eq!(client.base_url, "http://localhost:8080");
assert_eq!(client.token.as_deref(), Some("test-token"));
assert_eq!(client.auth_header().unwrap(), "Bearer test-token");
}
#[test]
fn client_custom_url() {
let client = GatewayClient::new("https://zeroclaw.example.com:9999", None);
assert_eq!(client.base_url, "https://zeroclaw.example.com:9999");
}
#[test]
fn auth_header_format() {
let client = GatewayClient::new("http://localhost", Some("zc_abc123"));
assert_eq!(client.auth_header().unwrap(), "Bearer zc_abc123");
}
#[tokio::test]
async fn health_returns_false_for_unreachable_host() {
// Connect to a port that should not be listening.
let client = GatewayClient::new("http://127.0.0.1:1", None);
let result = client.get_health().await.unwrap();
assert!(!result, "health should be false for unreachable host");
}
#[tokio::test]
async fn status_fails_for_unreachable_host() {
let client = GatewayClient::new("http://127.0.0.1:1", None);
let result = client.get_status().await;
assert!(result.is_err(), "status should fail for unreachable host");
}
#[tokio::test]
async fn devices_fails_for_unreachable_host() {
let client = GatewayClient::new("http://127.0.0.1:1", None);
let result = client.get_devices().await;
assert!(result.is_err(), "devices should fail for unreachable host");
}
#[tokio::test]
async fn pairing_fails_for_unreachable_host() {
let client = GatewayClient::new("http://127.0.0.1:1", None);
let result = client.initiate_pairing().await;
assert!(result.is_err(), "pairing should fail for unreachable host");
}
#[tokio::test]
async fn webhook_fails_for_unreachable_host() {
let client = GatewayClient::new("http://127.0.0.1:1", None);
let result = client.send_webhook_message("hello").await;
assert!(result.is_err(), "webhook should fail for unreachable host");
}
}

40
apps/tauri/src/health.rs Normal file
View File

@ -0,0 +1,40 @@
//! Background health polling for the ZeroClaw gateway.
use crate::gateway_client::GatewayClient;
use crate::state::SharedState;
use crate::tray::icon;
use std::time::Duration;
use tauri::{AppHandle, Emitter, Runtime};
const POLL_INTERVAL: Duration = Duration::from_secs(5);
/// Spawn a background task that polls gateway health and updates state + tray.
pub fn spawn_health_poller<R: Runtime>(app: AppHandle<R>, state: SharedState) {
tauri::async_runtime::spawn(async move {
loop {
let (url, token) = {
let s = state.read().await;
(s.gateway_url.clone(), s.token.clone())
};
let client = GatewayClient::new(&url, token.as_deref());
let healthy = client.get_health().await.unwrap_or(false);
let (connected, agent_status) = {
let mut s = state.write().await;
s.connected = healthy;
(s.connected, s.agent_status)
};
// Update the tray icon and tooltip to reflect current state.
if let Some(tray) = app.tray_by_id("main") {
let _ = tray.set_icon(Some(icon::icon_for_state(connected, agent_status)));
let _ = tray.set_tooltip(Some(icon::tooltip_for_state(connected, agent_status)));
}
let _ = app.emit("zeroclaw://status-changed", healthy);
tokio::time::sleep(POLL_INTERVAL).await;
}
});
}

136
apps/tauri/src/lib.rs Normal file
View File

@ -0,0 +1,136 @@
//! ZeroClaw Desktop — Tauri application library.
pub mod commands;
pub mod gateway_client;
pub mod health;
pub mod state;
pub mod tray;
use gateway_client::GatewayClient;
use state::shared_state;
use tauri::{Manager, RunEvent};
/// Attempt to auto-pair with the gateway so the WebView has a valid token
/// before the React frontend mounts. Runs on localhost so the admin endpoints
/// are accessible without auth.
async fn auto_pair(state: &state::SharedState) -> Option<String> {
let url = {
let s = state.read().await;
s.gateway_url.clone()
};
let client = GatewayClient::new(&url, None);
// Check if gateway is reachable and requires pairing.
if !client.requires_pairing().await.unwrap_or(false) {
return None; // Pairing disabled — no token needed.
}
// Check if we already have a valid token in state.
{
let s = state.read().await;
if let Some(ref token) = s.token {
let authed = GatewayClient::new(&url, Some(token));
if authed.validate_token().await.unwrap_or(false) {
return Some(token.clone()); // Existing token is valid.
}
}
}
// No valid token — auto-pair by requesting a new code and exchanging it.
let client = GatewayClient::new(&url, None);
match client.auto_pair().await {
Ok(token) => {
let mut s = state.write().await;
s.token = Some(token.clone());
Some(token)
}
Err(_) => None, // Gateway may not be ready yet; health poller will retry.
}
}
/// Inject a bearer token into the WebView's localStorage so the React app
/// skips the pairing dialog. Uses Tauri's WebviewWindow scripting API.
fn inject_token_into_webview<R: tauri::Runtime>(window: &tauri::WebviewWindow<R>, token: &str) {
let escaped = token.replace('\\', "\\\\").replace('\'', "\\'");
let script = format!("localStorage.setItem('zeroclaw_token', '{escaped}')");
// WebviewWindow scripting is the standard Tauri API for running JS in the WebView.
let _ = window.eval(&script);
}
/// Set the macOS dock icon programmatically so it shows even in dev builds
/// (which don't have a proper .app bundle).
#[cfg(target_os = "macos")]
fn set_dock_icon() {
use objc2::{AnyThread, MainThreadMarker};
use objc2_app_kit::NSApplication;
use objc2_app_kit::NSImage;
use objc2_foundation::NSData;
let icon_bytes = include_bytes!("../icons/128x128.png");
// Safety: setup() runs on the main thread in Tauri.
let mtm = unsafe { MainThreadMarker::new_unchecked() };
let data = NSData::with_bytes(icon_bytes);
if let Some(image) = NSImage::initWithData(NSImage::alloc(), &data) {
let app = NSApplication::sharedApplication(mtm);
unsafe { app.setApplicationIconImage(Some(&image)) };
}
}
/// Configure and run the Tauri application.
pub fn run() {
let shared = shared_state();
tauri::Builder::default()
.plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_store::Builder::default().build())
.plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| {
// When a second instance launches, focus the existing window.
if let Some(window) = app.get_webview_window("main") {
let _ = window.show();
let _ = window.set_focus();
}
}))
.manage(shared.clone())
.invoke_handler(tauri::generate_handler![
commands::gateway::get_status,
commands::gateway::get_health,
commands::channels::list_channels,
commands::pairing::initiate_pairing,
commands::pairing::get_devices,
commands::agent::send_message,
])
.setup(move |app| {
// Set macOS dock icon (needed for dev builds without .app bundle).
#[cfg(target_os = "macos")]
set_dock_icon();
// Set up the system tray.
let _ = tray::setup_tray(app);
// Auto-pair with gateway and inject token into the WebView.
let app_handle = app.handle().clone();
let pair_state = shared.clone();
tauri::async_runtime::spawn(async move {
if let Some(token) = auto_pair(&pair_state).await {
if let Some(window) = app_handle.get_webview_window("main") {
inject_token_into_webview(&window, &token);
}
}
});
// Start background health polling.
health::spawn_health_poller(app.handle().clone(), shared.clone());
Ok(())
})
.build(tauri::generate_context!())
.expect("error while building tauri application")
.run(|_app, event| {
// Keep the app running in the background when all windows are closed.
// This is the standard pattern for menu bar / tray apps.
if let RunEvent::ExitRequested { api, .. } = event {
api.prevent_exit();
}
});
}

8
apps/tauri/src/main.rs Normal file
View File

@ -0,0 +1,8 @@
//! ZeroClaw Desktop — main entry point.
//!
//! Prevents an additional console window on Windows in release.
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
zeroclaw_desktop::run();
}

6
apps/tauri/src/mobile.rs Normal file
View File

@ -0,0 +1,6 @@
//! Mobile entry point for ZeroClaw Desktop (iOS/Android).
#[tauri::mobile_entry_point]
fn main() {
zeroclaw_desktop::run();
}

99
apps/tauri/src/state.rs Normal file
View File

@ -0,0 +1,99 @@
//! Shared application state for Tauri.
use std::sync::Arc;
use tokio::sync::RwLock;
/// Agent status as reported by the gateway.
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum AgentStatus {
Idle,
Working,
Error,
}
/// Shared application state behind an `Arc<RwLock<_>>`.
#[derive(Debug, Clone)]
pub struct AppState {
pub gateway_url: String,
pub token: Option<String>,
pub connected: bool,
pub agent_status: AgentStatus,
}
impl Default for AppState {
fn default() -> Self {
Self {
gateway_url: "http://127.0.0.1:42617".to_string(),
token: None,
connected: false,
agent_status: AgentStatus::Idle,
}
}
}
/// Thread-safe wrapper around `AppState`.
pub type SharedState = Arc<RwLock<AppState>>;
/// Create the default shared state.
pub fn shared_state() -> SharedState {
Arc::new(RwLock::new(AppState::default()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_state() {
let state = AppState::default();
assert_eq!(state.gateway_url, "http://127.0.0.1:42617");
assert!(state.token.is_none());
assert!(!state.connected);
assert_eq!(state.agent_status, AgentStatus::Idle);
}
#[test]
fn shared_state_is_cloneable() {
let s1 = shared_state();
let s2 = s1.clone();
// Both references point to the same allocation.
assert!(Arc::ptr_eq(&s1, &s2));
}
#[tokio::test]
async fn shared_state_concurrent_read_write() {
let state = shared_state();
// Write from one handle.
{
let mut s = state.write().await;
s.connected = true;
s.agent_status = AgentStatus::Working;
s.token = Some("zc_test".to_string());
}
// Read from cloned handle.
let state2 = state.clone();
let s = state2.read().await;
assert!(s.connected);
assert_eq!(s.agent_status, AgentStatus::Working);
assert_eq!(s.token.as_deref(), Some("zc_test"));
}
#[test]
fn agent_status_serialization() {
assert_eq!(
serde_json::to_string(&AgentStatus::Idle).unwrap(),
"\"idle\""
);
assert_eq!(
serde_json::to_string(&AgentStatus::Working).unwrap(),
"\"working\""
);
assert_eq!(
serde_json::to_string(&AgentStatus::Error).unwrap(),
"\"error\""
);
}
}

View File

@ -0,0 +1,25 @@
//! Tray menu event handling.
use tauri::{menu::MenuEvent, AppHandle, Manager, Runtime};
pub fn handle_menu_event<R: Runtime>(app: &AppHandle<R>, event: MenuEvent) {
match event.id().as_ref() {
"show" => show_main_window(app, None),
"chat" => show_main_window(app, Some("/agent")),
"quit" => {
app.exit(0);
}
_ => {}
}
}
fn show_main_window<R: Runtime>(app: &AppHandle<R>, navigate_to: Option<&str>) {
if let Some(window) = app.get_webview_window("main") {
let _ = window.show();
let _ = window.set_focus();
if let Some(path) = navigate_to {
let script = format!("window.location.hash = '{path}'");
let _ = window.eval(&script);
}
}
}

105
apps/tauri/src/tray/icon.rs Normal file
View File

@ -0,0 +1,105 @@
//! Tray icon management — swap icon based on connection/agent status.
use crate::state::AgentStatus;
use tauri::image::Image;
/// Embedded tray icon PNGs (22x22, RGBA).
const ICON_IDLE: &[u8] = include_bytes!("../../icons/tray-idle.png");
const ICON_WORKING: &[u8] = include_bytes!("../../icons/tray-working.png");
const ICON_ERROR: &[u8] = include_bytes!("../../icons/tray-error.png");
const ICON_DISCONNECTED: &[u8] = include_bytes!("../../icons/tray-disconnected.png");
/// Select the appropriate tray icon for the current state.
pub fn icon_for_state(connected: bool, status: AgentStatus) -> Image<'static> {
let bytes: &[u8] = if !connected {
ICON_DISCONNECTED
} else {
match status {
AgentStatus::Idle => ICON_IDLE,
AgentStatus::Working => ICON_WORKING,
AgentStatus::Error => ICON_ERROR,
}
};
Image::from_bytes(bytes).expect("embedded tray icon is a valid PNG")
}
/// Tooltip text for the current state.
pub fn tooltip_for_state(connected: bool, status: AgentStatus) -> &'static str {
if !connected {
return "ZeroClaw — Disconnected";
}
match status {
AgentStatus::Idle => "ZeroClaw — Idle",
AgentStatus::Working => "ZeroClaw — Working",
AgentStatus::Error => "ZeroClaw — Error",
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn icon_disconnected_when_not_connected() {
// Should not panic — icon bytes are valid PNGs.
let _img = icon_for_state(false, AgentStatus::Idle);
let _img = icon_for_state(false, AgentStatus::Working);
let _img = icon_for_state(false, AgentStatus::Error);
}
#[test]
fn icon_connected_variants() {
let _idle = icon_for_state(true, AgentStatus::Idle);
let _working = icon_for_state(true, AgentStatus::Working);
let _error = icon_for_state(true, AgentStatus::Error);
}
#[test]
fn tooltip_disconnected() {
assert_eq!(
tooltip_for_state(false, AgentStatus::Idle),
"ZeroClaw — Disconnected"
);
// Agent status is irrelevant when disconnected.
assert_eq!(
tooltip_for_state(false, AgentStatus::Working),
"ZeroClaw — Disconnected"
);
assert_eq!(
tooltip_for_state(false, AgentStatus::Error),
"ZeroClaw — Disconnected"
);
}
#[test]
fn tooltip_connected_variants() {
assert_eq!(
tooltip_for_state(true, AgentStatus::Idle),
"ZeroClaw — Idle"
);
assert_eq!(
tooltip_for_state(true, AgentStatus::Working),
"ZeroClaw — Working"
);
assert_eq!(
tooltip_for_state(true, AgentStatus::Error),
"ZeroClaw — Error"
);
}
#[test]
fn embedded_icons_are_valid_png() {
// Verify the PNG signature (first 8 bytes) of each embedded icon.
let png_sig: &[u8] = &[0x89, b'P', b'N', b'G', 0x0D, 0x0A, 0x1A, 0x0A];
assert!(ICON_IDLE.starts_with(png_sig), "idle icon not valid PNG");
assert!(
ICON_WORKING.starts_with(png_sig),
"working icon not valid PNG"
);
assert!(ICON_ERROR.starts_with(png_sig), "error icon not valid PNG");
assert!(
ICON_DISCONNECTED.starts_with(png_sig),
"disconnected icon not valid PNG"
);
}
}

View File

@ -0,0 +1,19 @@
//! Tray menu construction.
use tauri::{
menu::{Menu, MenuItemBuilder, PredefinedMenuItem},
App, Runtime,
};
pub fn create_tray_menu<R: Runtime>(app: &App<R>) -> Result<Menu<R>, tauri::Error> {
let show = MenuItemBuilder::with_id("show", "Show Dashboard").build(app)?;
let chat = MenuItemBuilder::with_id("chat", "Agent Chat").build(app)?;
let sep1 = PredefinedMenuItem::separator(app)?;
let status = MenuItemBuilder::with_id("status", "Status: Checking...")
.enabled(false)
.build(app)?;
let sep2 = PredefinedMenuItem::separator(app)?;
let quit = MenuItemBuilder::with_id("quit", "Quit ZeroClaw").build(app)?;
Menu::with_items(app, &[&show, &chat, &sep1, &status, &sep2, &quit])
}

Some files were not shown because too many files have changed in this diff Show More