Compare commits

...

491 Commits

Author SHA1 Message Date
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
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
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
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
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 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
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
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
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
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
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
SimianAstronaut7 7170810e98 fix(channel): drop MutexGuard before .await in WhatsApp Web listen (#3315)
Extract `self.bot_handle.lock().take()` into a separate `let` binding
so the parking_lot::MutexGuard is dropped before the `.await`, making
the listen future Send again.

Closes #3312

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:16:40 +00:00
SimianAstronaut7 816fa87d60 fix(channel): restore Lark/Feishu channel compilation (#3318)
Replace the `use_feishu: bool` field on `LarkChannel` with a
`platform: LarkPlatform` enum field, add `mention_only` to the
`new_with_platform` constructor, and introduce `from_lark_config` /
`from_feishu_config` factory methods so the channel factory in
`mod.rs` and the existing tests compile.

Resolves #3302

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:16:31 +00:00
Argenis dcffa4d7fb fix(ci): add missing ci-run.yml workflow (#3268)
The ci-run.yml workflow was referenced in docs/contributing/ci-map.md
and branch protection rules but never existed in the repository,
causing push-triggered CI runs to fail immediately with zero jobs
and no logs.

This adds the workflow with all documented jobs: lint, strict delta
lint, test, build (linux + macOS), docs quality, and the CI Required
Gate composite check. Triggers on both push and pull_request to master.

Fixes #2853

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 12:48:16 +00:00
Argenis e03dc4bfce fix(security): unify cron shell validation across API/CLI/scheduler (#3270)
Centralize cron shell command validation so all entrypoints enforce the
same security policy (allowlist + risk gate + approval) before
persistence and execution.

Changes:
- Add validate_shell_command() and validate_shell_command_with_security()
  as the single validation gate for all cron shell paths
- Add add_shell_job_with_approval() and update_shell_job_with_approval()
  that validate before persisting
- Add add_once_validated() and add_once_at_validated() for one-shot jobs
- Make raw add_shell_job/add_job/add_once/add_once_at pub(crate) to
  prevent unvalidated writes from outside the cron module
- Route gateway API through validated creation path
- Route schedule tool through validated helpers (single validation)
- Route cron_add/cron_update tools through validated helpers
- Unify scheduler execution validation via validate_shell_command_with_security
- CLI update handler uses full validate_command_execution instead of
  just is_command_allowed
- Add focused tests for validation parity across entrypoints
- Standardize error format to "blocked by security policy: {reason}"

Closes #2741
Closes #2742

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 12:48:13 +00:00
Darren.Zeng 2cb57e6b2d fix(cli): honor config default_temperature in agent command (#3106)
* fix(cli): honor config default_temperature in agent command

Fixes #3033

The agent command was using a hardcoded default_value of 0.7 for the
--temperature parameter, which ignored the default_temperature setting
in the config file.

Changes:
- Changed temperature from f64 to Option<f64>
- Removed hardcoded default_value
- Use config.default_temperature when --temperature is not provided

Users can now set default_temperature in config.toml and have it
honored when running 'zeroclaw agent' without --temperature.

Risk: low (behavior change: now honors config instead of hardcoded value)

* fix: resolve moved value error for config in agent command

Extract final_temperature before passing config to agent::run() to
avoid use-of-moved-value error (config is moved as the first argument
while config.default_temperature was being accessed in the same call).

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

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 00:34:32 -04:00
Alix-007 079e972c81 fix(release): use master in cut_release_tag helper (#3249)
Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 00:20:36 -04:00
Argenis 448682c440 feat(providers): add Azure OpenAI provider support (#3246)
Closes #3176
2026-03-12 00:06:11 -04:00
Argenis 3fe3fe23b1 feat(build): add 32-bit system support via feature gates (#3245)
Closes #3174
2026-03-12 00:06:08 -04:00
Alix-007 9e9052634d fix(ci): use master merge-base in collect_changed_links (#3250)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:45:36 -04:00
Alix-007 b227b1abc3 fix(docs): correct default branch in triage snapshot (#3253)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:45:34 -04:00
Alix-007 fb9501afd5 fix(install): guard empty docker namespace args on Bash 3.2 (#3248)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:43:21 -04:00
Alix-007 9df0a76f4a fix(ci): use master merge-base in docs_quality_gate (#3251)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:43:19 -04:00
Alix-007 9501555448 fix(ci): use master merge-base in rust_strict_delta_gate (#3252)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:43:16 -04:00
Alix-007 138ada0fd6 fix(release): lower GNU Linux build runner baseline (#3257)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:43:14 -04:00
Darren.Zeng 3c2c5aa78c feat(web): add auto-expanding multiline chat composer (#3185)
* feat(web): add auto-expanding multiline chat composer

Convert chat input from single-line input to auto-expanding textarea:

- Replace input with textarea for multiline support
- Add auto-resize logic that grows up to max height (200px)
- Enter sends message, Shift+Enter adds new line
- Reset height after sending message
- Add overflow-y-auto for scrolling when max height reached
- Update placeholder to indicate Shift+Enter for new line

Fixes #3119

* fix: run cargo fmt to fix lint CI

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

* chore: trigger CI re-run

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

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:35:38 -04:00
ImanHashemi 273bd00d08 feat(hooks): add webhook-audit builtin hook (#3212)
Co-authored-by: ImanHashemi
2026-03-11 23:34:17 -04:00
Darren.Zeng 546873e2bb feat(cargo): add channel-feishu feature alias for channel-lark (#3105)
Fixes #3012

Adds a feature alias `channel-feishu` that maps to `channel-lark`.
This makes it easier for Feishu users to discover and enable the feature,
as Lark and Feishu are the same platform with different branding.

Users can now use either:
  cargo install zeroclaw --features channel-lark
  cargo install zeroclaw --features channel-feishu

Risk: low (feature alias only, no functional change)

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:28:03 -04:00
Darren.Zeng bf7f568eef docs(contributing): update contributing guide (#3109)
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:28:01 -04:00
Darren.Zeng d33b73974b feat(provider): add vision support for Anthropic provider (#3177)
Add vision support to Anthropic provider to enable image understanding:

- Add ImageSource struct for Anthropic's image content block format
- Add Image variant to NativeContentOut enum
- Implement capabilities() returning vision: true
- Update convert_messages() to parse [IMAGE:...] markers and convert
them to Anthropic's native image content blocks
- Support both data URIs and local file paths
- Add comprehensive tests for vision functionality

Fixes #3163

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:27:58 -04:00
Darren.Zeng a99ec631aa feat(web): add per-message copy button on hover (#3178)
* feat(web): add per-message copy button on hover

Add a copy affordance to each chat message that appears on hover/focus:

- Add MessageCopyButton component with clipboard integration
- Button appears on hover/focus for both user and agent messages
- Shows checkmark icon briefly after successful copy
- Graceful fallback for non-secure contexts
- Keyboard accessible with focus state
- Does not disrupt message layout or text selection

Fixes #3120

* fix: run cargo fmt to fix lint CI

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

* chore: trigger CI re-run

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

---------

Co-authored-by: argenis de la rosa <theonlyhennygod@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:27:56 -04:00
Darren.Zeng ab6846cb9f feat(channel): make email subject configurable (#3190)
Add default_subject field to EmailConfig to allow users to customize
the default subject line for outgoing emails. Previously hardcoded as
"ZeroClaw Message".

- Add default_subject field with serde default
- Update send() method to use configured default
- Add tests for new functionality

Fixes #2878

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:27:52 -04:00
Darren.Zeng ca683816a7 fix(config): fix web_fetch allowed_domains serde default (#3192)
When [web_fetch] section was specified in config without explicit
allowed_domains, serde used Vec::default() (empty vector) instead of
the wildcard ["*"] default. This caused all web fetch requests to be
rejected unexpectedly.

Fix by adding explicit serde default function that returns vec!["*"].

Fixes #2941

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 23:27:49 -04:00
Argenis 59014641bf fix(web): update rollup to patch path traversal vulnerability (#3258)
Updates rollup to 4.59.0 to fix CVE-2026-27606, an arbitrary file write
via path traversal vulnerability (GHSA-mw96-cpmx-2vgc).
Resolves Dependabot alert #2.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:24:04 -04:00
Darren.Zeng 8d7abb73e7 fix(config): accept openai-* aliases for wire_api config (#3191)
Add support for openai-responses, open-ai-responses, openai-chat-completions,
and open-ai-chat-completions as aliases for wire_api configuration values.
This aligns the parser with documented values that users expect to work.

Fixes #2735
2026-03-11 22:09:50 -04:00
Darren.Zeng 7ddf10f86d feat(onboard): add --reinit flag to prevent accidental config overwrite (#3102)
* feat(onboard): add --reinit flag to prevent accidental config overwrite

Add --reinit flag to onboard command that:
- Backs up existing ~/.zeroclaw directory with timestamp
- Starts fresh initialization after backup
- Requires --interactive mode to work
- Prevents accidental configuration loss

This addresses issue #3013 where onboard could accidentally
overwrite all configuration without warning.

Closes #3013

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

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

* fix(ci): SHA-pin all third-party GitHub Actions

Replace mutable version tags with immutable commit SHAs to prevent
tag-hijacking supply chain attacks (P1 finding).

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

* chore: retrigger CI after startup_failure

* fix(onboard): address PR #3102 review issues for --reinit flag

- Use resolve_runtime_dirs_for_onboarding() instead of hardcoded ~/.zeroclaw
- Remove unsafe relative path fallback, bail instead
- Add user confirmation prompt before reinitializing config
- Update docs/reference/cli/commands-reference.md with --reinit docs

* style: fix cargo fmt and clippy violations

- Fix import ordering in src/config/mod.rs (rustfmt)
- Collapse single-arg encrypt/decrypt calls in src/config/schema.rs (rustfmt)
- Box::pin large onboard futures to fix clippy::large_futures in src/main.rs

These violations were blocking CI lint checks.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Simian Astronaut 7 <simianastronaut7@gmail.com>
2026-03-11 22:09:39 -04:00
Darren.Zeng 6352f024b2 docs(readme): add features documentation (#3107) 2026-03-11 22:09:36 -04:00
Darren.Zeng ef2f8e9808 fix(daemon): handle SIGTERM for graceful shutdown (#3193)
The daemon previously only handled SIGINT (Ctrl+C), ignoring SIGTERM
which is the standard termination signal used by Docker, Kubernetes,
and systemd. This caused containers to wait for the grace period
then be force-killed with SIGKILL.

Now the daemon handles both SIGINT and SIGTERM for graceful shutdown.

Fixes #2529
2026-03-11 22:09:34 -04:00
Darren.Zeng 6f482051ec docs: replace main branch references with master (#3194)
The repository uses master as the default branch, but many documentation
files and scripts were referencing main branch URLs that would 404.

Updated all references from zeroclaw-labs/zeroclaw/main to
zeroclaw-labs/zeroclaw/master in README files and documentation.

Fixes #2929
Fixes #3061

Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 21:54:08 -04:00
Argenis 8bed9c5485 fix(ci,release): update all scripts from origin/main to origin/master (#3238)
* fix(ci): update rust_strict_delta_gate.sh to reference origin/master

* fix(ci): update docs_quality_gate.sh to reference origin/master

* fix(ci): update collect_changed_links.py to reference origin/master

* fix(release): update cut_release_tag.sh to reference origin/master
2026-03-11 21:53:48 -04:00
Argenis 6861664258 docs: add branching model section to CONTRIBUTING.md (#3237)
Adds a prominent Branching Model section to CONTRIBUTING.md explaining:
- master is the sole default branch (main has been removed)
- Contributors should use feat/* and fix/* branches off master
- Historical context for the migration (refs #2929, #3061, #3194)

Also updates fork workflow instructions to show both feat/ and fix/ prefixes.
2026-03-11 21:53:38 -04:00
Argenis 5cf1c77531 style: fix cargo fmt violations blocking CI lint (#3244)
* style: fix cargo fmt in ollama.rs test

* style: cargo fmt dispatcher.rs

* style: cargo fmt loop_.rs

* style: cargo fmt schema.rs

* style: cargo fmt mod.rs

* style: cargo fmt ws.rs

* style: cargo fmt ollama.rs
2026-03-11 21:53:25 -04:00
Argenis 483d3c0853 fix(ollama): strip <think> tags from Qwen responses and validate tool calls (#3079) (#3241)
- Strip `<think>...</think>` blocks in parse_tool_calls(), XmlToolDispatcher,
  and OllamaProvider before processing tool-call XML
- Add effective_content() fallback: when content is empty after stripping
  think tags, check the thinking field for tool-call XML
- Add strip_think_tags() to ollama.rs, loop_.rs, and dispatcher.rs
- Add comprehensive tests for think-tag stripping and tool-call parsing

Fixes #3079

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:35:33 -04:00
Argenis f5cd6baec3 fix(gateway): add /api/integrations/settings, echo WS protocol, persist session ID (#3242)
- #3009: Add handle_api_integrations_settings endpoint returning JSON with
  per-integration enabled/category/status so /api/integrations/settings no
  longer falls through to the SPA static handler.

- #3010: Extract Sec-WebSocket-Protocol header in handle_ws_chat and echo
  back "zeroclaw.v1" via ws.protocols() when the client requests it.

- #3038: Generate a persistent session_id (crypto.randomUUID stored in
  sessionStorage) in the web WS client and pass it as a query parameter.
  Add session_id: Option<String> to WsQuery on the server side so the
  backend can key conversations by session across reconnects.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:35:27 -04:00
Argenis dfe0221e49 feat(web): auto-expanding chat textarea and copy-on-hover for messages (#3119, #3120) (#3243)
Replace single-line <input> with auto-expanding <textarea> (min 44px,
max 200px) that resizes on each keystroke. Add a copy button that
appears on hover for every message bubble, showing a checkmark on
successful clipboard write.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:35:22 -04:00
Argenis 12cfe48047 fix(config): add channel secrets roundtrip test and gitignore entries (#3126) (#3240)
Add a test verifying Telegram bot_token is encrypted on save and
decrypted on load, and add .gitignore entries for local state backups.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:35:11 -04:00
Jaime Linares 0479bfca36 fix(channel): reconnect WhatsApp Web session and show QR on logout (#3045)
Wraps the WhatsApp Web listen() in a reconnect loop. When Event::LoggedOut
fires, the bot is torn down, stale session DB files are deleted, and after
exponential backoff (3s base, 300s cap, max 10 retries) the loop restarts
triggering fresh QR pairing.

- Broadcast channel for logout signaling from event handler to listen loop
- Session file cleanup (primary + WAL + SHM) only on explicit LoggedOut
- Proper resource ordering: client lock, abort handle, drop bot/device
- Tests for retry delay, counter, session purge, and file paths helpers
2026-03-11 20:30:28 -04:00
Argenis 67e581d8ae fix(gateway): add health and pairing proxy routes to vite dev server (#3056)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:08:22 -04:00
Argenis 195c7ba919 fix(agent): resolve display text for tool-only turns (#3054) 2026-03-11 20:08:16 -04:00
James Cowan bb66df5276 fix(config): encrypt and decrypt all channel secrets on save/load (#3217)
Adds symmetric encrypt/decrypt calls for all channel secret fields in
Config::save() and Config::load_or_init(). Previously only nostr.private_key
was handled, leaving all other channel secrets (bot_token, app_token,
access_token, api_token, password, etc.) and gateway.paired_tokens stored
as plaintext when secrets.encrypt = true.

Closes #3175, closes #3173.

Co-authored-by: jameslcowan
2026-03-11 20:02:20 -04:00
Thomas Tuffin d47f6703d8 fix: revert Rust bump to 1.93 in Dockerfile (#3208)
Reverts Dockerfile from rust:1.94-slim to rust:1.93-slim.

Rust 1.94 triggers a recursion limit overflow in matrix-sdk 0.16.0
(rust-lang/rust#152942, matrix-org/matrix-rust-sdk#6254). No upstream
fix available yet. CI uses Rust 1.92 and is unaffected.

Fixes #3207
2026-03-11 19:38:36 -04:00
Alan P John 74fe29d772 feat: Add Opencode-go provider (#3113)
Adds opencode-go as a first-class provider with dedicated API endpoint,
env var, onboarding wizard wiring, and test coverage.

CI failures are pre-existing on master (Rust 1.94 formatting/lint changes per #3207).
2026-03-11 19:35:43 -04:00
Argenis 86ca34ac1f fix(tests): update assertions for live tool call notifications (#3232)
The live tool call notifications feature sends extra messages to the
channel when tools are invoked. Update 5 tests that assumed exactly
1 sent message to instead check the last message in the list.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 19:26:45 -04:00
Argenis f0f0f80895 feat(matrix): add multi-room support (#3224)
Enable a single Matrix bot instance to respond in multiple rooms:
- Disable the room_id filter so messages from all joined rooms are processed
- Embed room_id in reply_target as "user||room_id" for routing replies
- Include room_id in channel field for per-room conversation isolation
- Extract room_id from recipient in send() for correct message routing

The configured room_id still serves as a fallback for direct sends
without a "||" separator in the recipient.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 19:13:18 -04:00
Argenis 01bcba83ad feat(matrix): add file upload handling and voice message support (#3222) 2026-03-11 19:12:44 -04:00
Argenis 4da85cee6e chore(github): update review ownership routing (#3216)
- Add @theonlyhennygod as first-listed code owner on all CODEOWNERS paths
- Add SimianAstronaut7 as maintainer with PR approval authority in docs
- Normalize WORKFLOW_OWNER_LOGINS casing to canonical GitHub logins
2026-03-11 19:11:53 -04:00
Argenis bdc0f325bf feat(matrix): add pin and unpin message support (#3220)
Implement pin_message and unpin_message for the Matrix channel using
the m.room.pinned_events state event. Adds default no-op trait methods
to the Channel trait so other channel implementations are unaffected.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 19:10:08 -04:00
Abdullah Imad 248348bd80 feat(matrix): reaction and threading support (#3219)
Implement add_reaction/remove_reaction for Matrix channel using
ReactionEventContent and redaction. Add threading support via
Relation::Thread in send() and thread_ts extraction from incoming
messages, enabling threaded conversations.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 19:07:49 -04:00
Abdullah Imad bd70c0f45b feat(observer): live tool call notifications (#3221)
Add ChannelNotifyObserver that wraps the observer to forward tool-call
events as real-time threaded messages on messaging channels. Include
tool arguments (truncated) in ToolCallStart events for better
visibility into what tools are doing. Auto-thread final replies when
tools were used.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 19:07:34 -04:00
Abdullah Imad d0edcec1f9 feat(prompt): refresh stale datetime (#3223)
The system prompt is built once at daemon startup and cached. The
"Current Date & Time" section becomes stale immediately. This patch
replaces it with a fresh timestamp every time build_channel_system_prompt
is called (i.e. per incoming message).

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 19:04:23 -04:00
SimianAstronaut7 9423b9c94e Merge pull request #3215 from zeroclaw-labs/feat-readme-fix
docs(readme): remove retired social links
2026-03-11 22:30:30 +00:00
SimianAstronaut7 95da0062de chore: bump version to 0.1.9 for stable release (#3225)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 18:23:38 -04:00
SimianAstronaut7 7634d8d1f8 Merge branch 'master' into feat-readme-fix 2026-03-11 20:50:56 +00:00
JordanTheJet 744620bc34 Merge pull request #3214 from zeroclaw-labs/artifact-enhancement
fix(ci): downgrade action-gh-release to v2.4.2 to fix release finalization
2026-03-11 15:53:44 -04:00
argenis de la rosa f67abd9fc8 docs(readme): remove retired social links
Remove WeChat, Xiaohongshu, and Telegram from the README social badges and aligned locale entry points.
2026-03-11 15:48:43 -04:00
SimianAstronaut7 94a4d72e71 Merge branch 'master' into artifact-enhancement 2026-03-11 19:41:45 +00:00
Aleksandr Prilipko 39353748fa fix(memory): resolve embedding api_key from embedding_provider env var, not default_provider key (#3184)
When embedding_provider differs from default_provider (e.g. default=gemini,
embedding=openai), the caller-supplied api_key belongs to the chat provider.
Passing it to the embedding endpoint causes 401 Unauthorized (gemini key
sent to api.openai.com/v1/embeddings).

Add embedding_provider_env_key() which looks up OPENAI_API_KEY,
OPENROUTER_API_KEY, or COHERE_API_KEY before falling back to the
caller-supplied key. This matches the provider-specific env var resolution
in providers/mod.rs without introducing cross-module coupling.

Also add config_secrets_survive_save_load_roundtrip test: full save→load
cycle with channel credentials (telegram, discord, slack bot_token,
slack app_token) and gateway paired_tokens, verifying that enc2: values
are correctly decrypted by Config::load_or_init(). Regression guard for
issues #3173 and #3175.

Closes #3083

Co-authored-by: ZeroClaw Bot <zeroclaw_bot@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Argenis <theonlyhennygod@gmail.com>
2026-03-11 15:39:54 -04:00
Simian Astronaut 7 71f013af49 chore: update action-gh-release to version 2.4.2 in release workflows 2026-03-11 15:39:00 -04:00
Argenis 74f411bd2b Merge pull request #3198 from panviktor/fix/channel-model-switch-resolve-routes
fix(channels): resolve provider from model_routes on /model, preserve context
2026-03-11 13:48:30 -04:00
Argenis 50a65ea0e5 Merge branch 'master' into fix/channel-model-switch-resolve-routes 2026-03-11 13:32:15 -04:00
Argenis 655e5fd56a Merge pull request #3204 from zeroclaw-labs/codex/add-simian-codeowners-master
chore(codeowners): add SimianAstronaut7 to review routing
2026-03-11 12:33:14 -04:00
argenis de la rosa 072a10eff4 chore(codeowners): add SimianAstronaut7 to review routing 2026-03-11 12:32:49 -04:00
SimianAstronaut7 9baa02a40b Merge pull request #3203 from zeroclaw-labs/build-artifact-fix
fix(ci): exclude stale artifacts from release and Docker builds
2026-03-11 16:31:35 +00:00
Simian Astronaut 7 0af0f0344e fix: remove data directory copy from Dockerfile and update artifact download patterns in release workflows 2026-03-11 12:20:54 -04:00
Argenis 9cfc88c38c Merge pull request #3201 from whtiehack/pr/fix-channel-embedding-routes
fix(channels): pass embedding routes to channel memory init
2026-03-11 12:07:53 -04:00
Argenis 87127e2a08 Merge pull request #3200 from whtiehack/pr/fix-strip-tool-result-display
fix(agent): strip prompt-guided tool artifacts from visible replies
2026-03-11 12:07:08 -04:00
smallwhite 7cacdef2d1 fix(channels): pass embedding routes to channel memory init 2026-03-11 23:57:46 +08:00
SimianAstronaut7 9469b5bdbe Merge pull request #3199 from zeroclaw-labs/e2e-testing
test: restructure test suite into five-level taxonomy. cleaned up + documented
2026-03-11 15:54:38 +00:00
Simian Astronaut 7 ecbe5e2c68 docs(testing): note both co-located and separate unit test patterns
The codebase uses both #[cfg(test)] blocks in source files (194 files)
and separate tests.rs files (src/agent/tests.rs). Document both.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:52:09 -04:00
Simian Astronaut 7 86a2fc2594 docs(testing): clarify unit tests are co-located in source files
Unit tests use #[cfg(test)] mod tests blocks inside src/**/*.rs,
not separate tests.rs files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:50:47 -04:00
smallwhite 1c2a49459e fix(agent): strip prompt-guided tool artifacts from visible replies 2026-03-11 23:50:39 +08:00
SimianAstronaut7 e1f37a307e Merge branch 'master' into e2e-testing 2026-03-11 15:26:19 +00:00
Argenis fd40eeb408 Merge pull request #3182 from rareba/fix/cargo-fmt-config-imports
style: fix cargo fmt violations blocking all PR CI
2026-03-11 11:10:49 -04:00
panviktor 0ee3b6d617 fix(channels): resolve provider from model_routes on /model, preserve context
- `/model <name>` now auto-resolves provider from configured model_routes
  by matching model name or hint, fixing 404 when switching to models on
  different providers (e.g. `/model kimi-k2.5` with anthropic default)
- Conversation history is no longer cleared on `/model` or `/models` —
  users can explicitly reset via `/new`
- Matrix channel now supports `/model`, `/models`, and `/new` commands
- `/model` (no args) lists configured model routes with hints

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:10:42 +01:00
Simian Astronaut 7 d0781f31a5 test: restructure test suite into five-level taxonomy
Reorganize the flat tests/ directory into a structured taxonomy:
- component/ (174 tests): single-subsystem tests
- integration/ (65 tests): multi-component wiring tests
- system/ (5 tests): full-stack with real SQLite memory
- live/ (5 tests, #[ignore]): real external API tests
- manual/: shell/Python scripts for human-driven testing
- support/: shared mock infrastructure (MockProvider, EchoTool, etc.)
- fixtures/: JSON trace fixtures for declarative LLM replay

Deduplicates ~180 lines of identical mock code from agent_e2e.rs and
agent_loop_robustness.rs into shared support modules. Adds new component
tests for gateway (HMAC signature verification) and security (config
defaults, TOML round-trips). Adds system-level tests exercising the
full agent turn cycle with real SQLite memory.

Updates Cargo.toml with [[test]] entries, dev/ci.sh with level-specific
commands, and docs/contributing/testing.md with a comprehensive testing
guide.

Zero impact on src/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:03:33 -04:00
SimianAstronaut7 a3bc7a04dd Merge pull request #3196 from zeroclaw-labs/hardening-gateway-slack-tts
fix(multi): harden gateway auth, Slack file handling, and TTS subprocess safety
2026-03-11 14:32:40 +00:00
Simian Astronaut 7 5901f70dc0 fix(clippy): box-pin large onboard wizard futures
The onboard wizard futures exceed clippy's large_futures threshold
(16KB+). Wrap in Box::pin to heap-allocate and fix the lint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:21:46 -04:00
Simian Astronaut 7 026158557c chore: fix rustfmt violations from TTS provider merge
Import ordering in config/mod.rs and line-wrapping in config/schema.rs
were left unformatted by PR #2994. Run cargo fmt to fix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:09:06 -04:00
Simian Astronaut 7 162a2b65a5 fix(multi): harden Edge TTS path validation, add subprocess timeout, restore Slack symlink protection
Edge TTS: reject binary_path containing path separators to prevent
arbitrary executable paths bypassing the basename allowlist. Wrap
subprocess execution in tokio::time::timeout (60s) matching HTTP
providers.

Slack: restore symlink_metadata check before rename to prevent
symlink-following attacks on attachment output paths.

Docs: add TTS module misplacement note to refactor-candidates.md —
tts.rs belongs in src/tools/, not src/channels/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:05:52 -04:00
Simian Astronaut 7 e6bfb1ebee fix(slack): add HTTP timeouts, proper jitter, and cache bounds
HTTP clients had no timeouts and could hang forever; add 30s total and
10s connect timeouts. Replace clock-nanos-based jitter with rand::random
for proper randomness. Add a 1000-entry cap to the user display name
cache with expired-entry pruning. Fix truncate_text to avoid scanning
the full string twice when checking for truncation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:58:20 -04:00
Simian Astronaut 7 9a6de3b204 fix(tts): move Google API key to header and sanitize provider inputs
Google TTS was passing the API key as a URL query parameter, which can
appear in logs and proxy access records. Move it to the x-goog-api-key
header instead. Add input validation for ElevenLabs voice IDs (reject
non-alphanumeric/dash/underscore characters) and restrict Edge TTS
binary_path to allowed basenames (edge-tts, edge-playback).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:58:13 -04:00
Simian Astronaut 7 f894bc4140 fix(slack): only send bearer token on first redirect hop
Slack private file fetching was sending the bot token on every redirect
hop. Since Slack CDN redirects use pre-signed URLs, sending the bearer
token to CDN hosts is unnecessary credential exposure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:58:05 -04:00
Simian Astronaut 7 a1c65558d8 fix(gateway): restrict admin endpoints to localhost and replace process::exit with graceful shutdown
Admin endpoints (/admin/shutdown, /admin/paircode, /admin/paircode/new) were
completely unauthenticated, allowing any network client to shut down the gateway
or read/generate pairing codes. Add require_localhost() guard that returns 403
for non-loopback IPs.

Replace std::process::exit(0) in shutdown handler with a tokio watch channel
for graceful shutdown, allowing proper destructor cleanup and connection
draining. Replace the 500ms sleep race in the restart command with a poll loop
that waits for the port to actually become free.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:57:34 -04:00
Giulio V ed7c191fcd style: fix cargo fmt + clippy violations from TTS merge
- config/mod.rs: reorder TTS imports alphabetically (rustfmt)
- config/schema.rs: collapse single-arg encrypt/decrypt calls (rustfmt)
- main.rs: Box::pin large onboard futures to fix clippy::large_futures

These violations were introduced by the TTS providers merge (#2994)
and are blocking CI lint on all open PRs targeting master.
2026-03-11 11:41:11 +01:00
Giulio V 69abd217d7 style: fix cargo fmt violations in config module
The TTS providers merge (#2994) introduced import ordering and
line-wrapping that doesn't match rustfmt output, causing lint
failures on all open PRs targeting master.
2026-03-11 11:30:56 +01:00
Argenis f2035819c2 Merge pull request #2994 from rareba/feature/tts-providers
feat(tts): add multi-provider TTS system
2026-03-11 05:23:50 -04:00
Argenis 46d68fc8ba Merge pull request #3067 from kunalk16/fix-honor-default-temperature-agent-command
fix(config): honor default_temperature config while running "zeroclaw agent" without temperature parameter
2026-03-11 04:50:31 -04:00
Kunal Karmakar 06926a189d Merge branch 'master' of https://github.com/kunalk16/zeroclaw into fix-honor-default-temperature-agent-command 2026-03-11 08:36:35 +00:00
dependabot[bot] 8f68afb70c chore(deps): bump rust in the docker-all group
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>
2026-03-11 04:33:19 -04:00
Sid Jain 6016491985 fix(slack): harden redirect chain and auth health checks 2026-03-11 04:32:56 -04:00
Sid Jain bf11b7b1a0 fix(slack): resolve clippy warnings in URL and tests 2026-03-11 04:32:56 -04:00
Sid Jain 436619b015 chore(slack): satisfy rustfmt wrap in MIME warning 2026-03-11 04:32:56 -04:00
Sid Jain c6233b066c Revert "chore(docker): make cargo profile configurable for builds"
This reverts commit 942e6cb97452b3330827ea485473fc176e5bf103.
2026-03-11 04:32:56 -04:00
Sid Jain b33af6894e fix(slack): redact private URLs and harden attachment writes 2026-03-11 04:32:56 -04:00
Sid Jain f98a18502f chore(docker): make cargo profile configurable for builds 2026-03-11 04:32:56 -04:00
Sid Jain 14de5e527e fix(slack): preserve auth and validate image bytes 2026-03-11 04:32:56 -04:00
Sid Jain 7b7e08dc21 fix(slack): align cron workspace dir and socket retry backoff 2026-03-11 04:32:56 -04:00
Sid Jain 526d63fd75 feat: add slack file reading capability to zeroclaw 2026-03-11 04:32:56 -04:00
dependabot[bot] e20e0f7cb0 chore(deps): bump the rust-all group across 1 directory with 10 updates
Bumps the rust-all group with 10 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [tokio](https://github.com/tokio-rs/tokio) | `1.49.0` | `1.50.0` |
| [toml](https://github.com/toml-rs/toml) | `1.0.3+spec-1.1.0` | `1.0.6+spec-1.1.0` |
| [shellexpand](https://gitlab.com/ijackson/rust-shellexpand) | `3.1.1` | `3.1.2` |
| [fantoccini](https://github.com/jonhoo/fantoccini) | `0.22.0` | `0.22.1` |
| [uuid](https://github.com/uuid-rs/uuid) | `1.21.0` | `1.22.0` |
| [chrono](https://github.com/chronotope/chrono) | `0.4.43` | `0.4.44` |
| [which](https://github.com/harryfei/which-rs) | `8.0.0` | `8.0.2` |
| [rustls](https://github.com/rustls/rustls) | `0.23.36` | `0.23.37` |
| [libc](https://github.com/rust-lang/libc) | `0.2.182` | `0.2.183` |
| [tempfile](https://github.com/Stebalien/tempfile) | `3.25.0` | `3.26.0` |



Updates `tokio` from 1.49.0 to 1.50.0
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.49.0...tokio-1.50.0)

Updates `toml` from 1.0.3+spec-1.1.0 to 1.0.6+spec-1.1.0
- [Commits](https://github.com/toml-rs/toml/compare/toml-v1.0.3...toml-v1.0.6)

Updates `shellexpand` from 3.1.1 to 3.1.2
- [Commits](https://gitlab.com/ijackson/rust-shellexpand/compare/shellexpand-3.1.1...shellexpand-3.1.2)

Updates `fantoccini` from 0.22.0 to 0.22.1
- [Commits](https://github.com/jonhoo/fantoccini/compare/v0.22.0...v0.22.1)

Updates `uuid` from 1.21.0 to 1.22.0
- [Release notes](https://github.com/uuid-rs/uuid/releases)
- [Commits](https://github.com/uuid-rs/uuid/compare/v1.21.0...v1.22.0)

Updates `chrono` from 0.4.43 to 0.4.44
- [Release notes](https://github.com/chronotope/chrono/releases)
- [Changelog](https://github.com/chronotope/chrono/blob/main/CHANGELOG.md)
- [Commits](https://github.com/chronotope/chrono/compare/v0.4.43...v0.4.44)

Updates `which` from 8.0.0 to 8.0.2
- [Release notes](https://github.com/harryfei/which-rs/releases)
- [Changelog](https://github.com/harryfei/which-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/harryfei/which-rs/compare/8.0.0...8.0.2)

Updates `rustls` from 0.23.36 to 0.23.37
- [Release notes](https://github.com/rustls/rustls/releases)
- [Changelog](https://github.com/rustls/rustls/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rustls/rustls/compare/v/0.23.36...v/0.23.37)

Updates `libc` from 0.2.182 to 0.2.183
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.183/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.182...0.2.183)

Updates `tempfile` from 3.25.0 to 3.26.0
- [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Stebalien/tempfile/commits/v3.26.0)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.50.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-all
- dependency-name: toml
  dependency-version: 1.0.6+spec-1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: shellexpand
  dependency-version: 3.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: fantoccini
  dependency-version: 0.22.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: uuid
  dependency-version: 1.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-all
- dependency-name: chrono
  dependency-version: 0.4.44
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: which
  dependency-version: 8.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: rustls
  dependency-version: 0.23.37
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: libc
  dependency-version: 0.2.183
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rust-all
- dependency-name: tempfile
  dependency-version: 3.26.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: rust-all
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 04:32:15 -04:00
曾文锋0668000834 e3cc40c64c feat(gateway): add --new flag to get-paircode for non-disruptive pairing code generation
- Add --new flag to GetPaircode command in src/lib.rs
- Update main.rs to handle GetPaircode { new } parameter
- Add /admin/paircode/new POST endpoint in gateway/mod.rs
- Enhance documentation for constant_time_eq security function

Refs: #3015
2026-03-11 04:30:58 -04:00
曾文锋0668000834 9d182c6dd8 fix(security): restore constant-time comparison bitwise operator
The bitwise & operator is intentional in constant_time_eq() to prevent
timing side-channel attacks. Both comparisons must always execute to
ensure constant-time behavior regardless of the first comparison result.

- Revert logical && back to bitwise &
- Add #[allow(clippy::needless_bitwise_bool)] annotation
- Add explanatory comment documenting the intentional use
2026-03-11 04:30:58 -04:00
Darren.Zeng d7d114eae7 Update package-lock.json 2026-03-11 04:30:58 -04:00
曾文锋0668000834 b1dfa192b8 fix(gateway): address CodeRabbit review feedback
- Add security warning for 0.0.0.0 binding in help text
- Implement proper gateway shutdown before restart via /admin/shutdown endpoint
- Fetch live pairing code from running gateway via /admin/paircode endpoint
- Extract duplicate code into helper functions
- Fix clippy warnings
2026-03-11 04:30:58 -04:00
曾文锋0668000834 7ed1bdc104 fix(gateway): address CodeRabbit review issues
- Add security warning for 0.0.0.0 binding in GatewayCommands::Start help
- Implement proper gateway shutdown via /admin/shutdown endpoint for Restart command
- Add /admin/paircode endpoint and update GetPaircode to fetch live pairing code
- Extract helper functions: resolve_gateway_addr, log_gateway_start, shutdown_gateway, fetch_paircode

Fixes: #3101
2026-03-11 04:30:58 -04:00
曾文锋0668000834 7f6bd651f7 fix(gateway): address CodeRabbit review feedback for PR #3101
- Fix Critical: Split illegal or-pattern (Some(...) | None) into separate match arms
- Fix Major: Implement restart command with graceful shutdown check
- Fix Major: Improve get-paircode to check gateway status and provide clear instructions
- Fix Minor: Update help text to document public-bind precondition

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-11 04:30:58 -04:00
曾文锋0668000834 491ac601e6 feat(gateway): add restart and get-paircode subcommands
Add GatewayCommands enum with three subcommands:
- start: Start the gateway server (default behavior preserved)
- restart: Restart the gateway server
- get-paircode: Show current pairing status without restarting

This improves gateway management by allowing users to:
1. Restart gateway without manual stop/start
2. Check pairing status without disrupting running gateway

Closes #3014
Closes #3015

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-11 04:30:58 -04:00
dependabot[bot] b4da085f0c chore(deps): bump actions/download-artifact from 4 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-11 04:30:08 -04:00
Kunal Karmakar 0829bb92df Merge branch 'master' of https://github.com/kunalk16/zeroclaw into fix-honor-default-temperature-agent-command 2026-03-11 08:28:23 +00:00
曾文锋0668000834 7950f51bb9 fix(docker): add missing COPY data/ directive
Fixes #3063

The Dockerfile was missing the COPY directive for the data/ directory,
which contains security/attack-corpus-v1.jsonl required by the
semantic guard feature via include_str!() at compile time.

This caused Docker builds to fail with:
  error: couldn't read src/security/../../data/security/attack-corpus-v1.jsonl

Risk: low (build fix only, no runtime behavior change)
2026-03-11 04:23:21 -04:00
Jiecheng Wu 79cff39aa5 fix(docker): enable BuildKit and write config.toml via printf
- Dockerfile: replace heredoc with printf for config.toml to avoid
  Docker parse error (unknown instruction WORKSPACE_DIR)
- install.sh: set DOCKER_BUILDKIT=1 when building image so RUN --mount works
2026-03-11 04:21:44 -04:00
曾文锋0668000834 e94dafbbfb chore(examples): add example configuration 2026-03-11 04:18:55 -04:00
曾文锋0668000834 99460c3fff chore(editor): add .editorconfig 2026-03-11 04:18:41 -04:00
曾文锋0668000834 8e3775362e chore(git): add .gitattributes for line endings 2026-03-11 04:18:31 -04:00
曾文锋0668000834 1ef1b5d02d docs(changelog): add changelog 2026-03-11 04:18:16 -04:00
Kunal Karmakar e2a3907d35 Merge branch 'master' of https://github.com/kunalk16/zeroclaw into fix-honor-default-temperature-agent-command 2026-03-11 08:08:22 +00:00
guan 980ad7ebc9 fix(docs): correct broken path references in contributing docs
Several files in docs/contributing/ referenced other docs files using
incorrect paths like "docs/pr-workflow.md" when the files are actually
in the same directory (docs/contributing/).

Changes:
- docs/contributing/README.md: fix Suggested Reading Order paths
- docs/contributing/pr-workflow.md: fix link text references
- docs/contributing/reviewer-playbook.md: fix link text reference
- docs/vi/contributing/README.md: fix Vietnamese translation paths
- docs/i18n/vi/contributing/README.md: fix Vietnamese i18n paths
- docs/setup-guides/zai-glm-setup.md: fix custom-providers.md link

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 03:31:14 -04:00
Rick Morgans da0a592163 fix(imessage): parse attributedBody when text column is NULL
Modern macOS (Ventura+) stores iMessage content in the attributedBody
column as a binary typedstream blob rather than the text column. The
existing SQL filter `AND m.text IS NOT NULL` silently dropped all
incoming messages on affected systems.

Add a length-prefix extractor for the typedstream format and fall back
to attributedBody when text is NULL or empty. Includes real captured
blob fixtures and 14 new parser/integration tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 03:25:05 -04:00
Kunal Karmakar a6cd877ac8 Merge branch 'master' of https://github.com/kunalk16/zeroclaw into fix-honor-default-temperature-agent-command 2026-03-11 02:13:12 +00:00
SimianAstronaut7 138ff4249c Merge pull request #3147 from zeroclaw-labs/simianastronaut7/claude-skill-for-general-use
feat(skills): add zeroclaw operational skill for CLI and REST API usage
2026-03-11 00:26:04 +00:00
SimianAstronaut7 ff2da533a5 Merge branch 'master' into simianastronaut7/claude-skill-for-general-use 2026-03-10 23:49:34 +00:00
SimianAstronaut7 86ca1ba2b6 Merge pull request #3142 from zeroclaw-labs/simianastronaut7/api-key-preflight
feat(provider): add API key prefix pre-flight validation
2026-03-10 23:49:21 +00:00
SimianAstronaut7 f16a71826c Merge branch 'master' into simianastronaut7/api-key-preflight 2026-03-10 23:41:23 +00:00
simianastronaut 0c5b41b288 fix(tests): remove nonexistent examples dir from regression scan
The `examples/` directory no longer exists, causing
`source_does_not_use_legacy_reply_to_field` to panic in CI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:33:36 -04:00
simianastronaut f127ca8c93 feat(skills): add zeroclaw operational skill for CLI and REST API usage
Adds a Claude Code skill that helps users operate their ZeroClaw instance
through both the CLI and gateway API. The skill provides adaptive expertise
(adjusts detail level based on user signals), discovery logic (finds the
binary, checks gateway status), and covers all core operations: agent chat,
memory, cron, providers, config, SSE events, estop, and troubleshooting.

Also adds gitignore entry for skill eval workspaces.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:05:30 -04:00
simianastronaut 2e86d83ed7 feat(api): add API key prefix validation to prevent cross-provider mismatches
Introduced a new function `check_api_key_prefix` to validate API key prefixes against their associated providers. This helps catch mismatches early in the process. Added unit tests to ensure correct functionality for various scenarios, including known and unknown key formats. This enhancement improves error handling and user guidance when incorrect provider keys are used.
2026-03-10 18:00:38 -04:00
Kunal Karmakar 4600469717 Merge branch 'fix-honor-default-temperature-agent-command' of https://github.com/kunalk16/zeroclaw into fix-honor-default-temperature-agent-command 2026-03-10 08:29:56 +00:00
Kunal Karmakar b2857cb836 Fix clippy linting 2026-03-10 08:29:45 +00:00
Kunal Karmakar 76d54193f1 Merge branch 'master' of https://github.com/kunalk16/zeroclaw into fix-honor-default-temperature-agent-command 2026-03-10 07:19:03 +00:00
Kunal Karmakar 225edecc3d Reuse default temperature 2026-03-09 14:54:29 +00:00
Kunal Karmakar 465b2ea6af Fix temperature range 2026-03-09 14:31:47 +00:00
Kunal Karmakar e70ca52dc4 Update wording as per review comment 2026-03-09 14:07:13 +00:00
Kunal Karmakar 45d2368730 Default of 0.7 2026-03-09 13:52:33 +00:00
Kunal Karmakar 026f2609f9 Support config without default_temperature 2026-03-09 13:28:08 +00:00
Kunal Karmakar a6cf7d4015 Honor default_temperature from config.toml for zeroclaw agent calls 2026-03-09 10:31:43 +00:00
Giulio V 48c7414bb3 feat(tts): add multi-provider TTS system (OpenAI, ElevenLabs, Google, Edge TTS)
Adds pluggable Text-to-Speech subsystem with TtsProvider trait,
TtsManager for provider selection, and per-provider config structs.
Includes secret encryption for TTS API keys.
2026-03-09 09:03:44 +01:00
522 changed files with 84169 additions and 17657 deletions
+10
View File
@@ -0,0 +1,10 @@
# 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
]
+285
View File
@@ -0,0 +1,285 @@
---
name: zeroclaw
description: "Help users operate and interact with their ZeroClaw agent instance — through both the CLI (`zeroclaw` commands) and the REST/WebSocket gateway API. Use this skill whenever the user wants to: send messages to ZeroClaw, manage memory or cron jobs, check system status, configure channels or providers, hit the gateway API, troubleshoot their ZeroClaw setup, build from source, or do anything involving the `zeroclaw` binary or its HTTP endpoints. Trigger this even if the user just says things like 'check my agent status', 'schedule a reminder', 'store this in memory', 'list my cron jobs', 'send a message to my bot', 'set up Telegram', 'build zeroclaw', or 'my bot is broken' — these are all ZeroClaw operations."
---
# ZeroClaw Skill
You are helping a user operate their ZeroClaw agent instance. ZeroClaw is an autonomous agent runtime with a CLI and an HTTP/WebSocket gateway.
Your job is to understand what the user wants to accomplish and then **execute it** — run the command, make the API call, report the result. Do not just show commands for the user to copy-paste. Actually run them via the Bash tool and tell the user what happened. The only exception is destructive operations (clearing all memory, estop kill-all) where you should confirm first.
## Adaptive Expertise
Pay attention to how the user talks. Someone who says "can you hit the webhook endpoint with a POST" is telling you they know what they're doing — be concise, skip explanations, just execute. Someone who says "how do I make my bot remember things" needs more context about what's happening under the hood.
Signals of technical comfort: mentions specific endpoints, HTTP methods, JSON fields, talks about tokens/auth, uses CLI flags fluently, references config files directly.
Signals of less familiarity: asks "what does X do", uses casual language about the bot/agent, describes goals rather than mechanisms ("I want it to check something every morning").
Default to a middle ground — brief explanation of what you're about to do, then do it. Dial up or down from there based on cues.
## Discovery — Before You Act
Before running any ZeroClaw operation, make sure you know where things are:
1. **Find the binary.** Search in this order:
- `which zeroclaw` (PATH)
- The current project's build output: `./target/release/zeroclaw` or `./target/debug/zeroclaw` — this is the right choice when the user is working inside the ZeroClaw source tree and may have local changes
- Common install locations: `~/.cargo/bin/zeroclaw`, `~/Downloads/zeroclaw-bin/zeroclaw`
If no binary is found anywhere, offer to build from source (see "Building from Source" below). If the user is a developer working on ZeroClaw itself, they'll likely want the local build — watch for cues like them editing source files, mentioning PRs, or being in the project directory.
2. **Check if the gateway is running** (only needed for REST/WebSocket operations). A quick `curl -sf http://127.0.0.1:42617/health` tells you. If it's not running and the user wants REST access, let them know and offer to start it (`zeroclaw gateway` or `zeroclaw daemon`).
3. **Check auth status.** If the gateway requires pairing (`require_pairing = true` is the default), REST calls need a bearer token. Run `zeroclaw status` to see the current state, or check `~/.zeroclaw/config.toml` for a stored token under `[gateway]`.
Cache these findings for the conversation — don't re-discover every time.
## Important: REPL Limitation
`zeroclaw agent` (interactive REPL) requires interactive stdin, which doesn't work through the Bash tool. When the user wants to chat with their agent, use single-message mode instead:
```bash
zeroclaw agent -m "the message"
```
Each `-m` invocation is independent (no conversation history between calls). If the user needs multi-turn conversation, let them know they can run `zeroclaw agent` directly in their terminal, or use the WebSocket endpoint for programmatic streaming.
## First-Time Setup
If the user hasn't set up ZeroClaw yet (no `~/.zeroclaw/config.toml` exists), guide them through onboarding:
```bash
zeroclaw onboard # Quick mode — defaults to OpenRouter
zeroclaw onboard --provider anthropic # Use Anthropic directly
zeroclaw onboard # Guided wizard (default)
```
After onboarding, verify everything works:
```bash
zeroclaw status
zeroclaw doctor
```
If they already have a config but something is broken, `zeroclaw onboard --channels-only` repairs just the channel configuration without overwriting everything else.
## Building from Source
If the user wants to build ZeroClaw (or no binary is installed):
```bash
cargo build --release
```
This produces `target/release/zeroclaw`. For faster iteration during development, `cargo build` (debug mode) is quicker but produces a slower binary at `target/debug/zeroclaw`.
You can also run directly without a separate build step:
```bash
cargo run --release -- <subcommand> [args]
```
Before building, `cargo check` gives a quick compile validation without the full build.
## Choosing CLI vs REST
Both surfaces can do most things. Rules of thumb:
- **CLI is simpler** for one-off operations from the terminal. It handles auth internally and formats output nicely. Prefer CLI when the user is working locally.
- **REST is needed** when the user is building an integration, scripting from another language, or accessing a remote ZeroClaw instance. Also needed for streaming (WebSocket, SSE).
- If unclear, **default to CLI** — it's less setup.
## Core Operations
### Sending Messages
**CLI:** `zeroclaw agent -m "your message here"` — remember, always use `-m` mode, not bare `zeroclaw agent`.
**REST:**
```bash
curl -X POST http://127.0.0.1:42617/webhook \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"message": "your message here"}'
```
Response: `{"response": "...", "model": "..."}`
**WebSocket** (for streaming): connect to `ws://127.0.0.1:42617/ws/chat?token=<token>`, send `{"type": "message", "content": "..."}`, receive `{"type": "done", "full_response": "..."}`.
### System Status
Run `zeroclaw status` to see provider, model, uptime, channels, memory backend. For deeper diagnostics: `zeroclaw doctor`.
**REST:** `GET /api/status` (same info as JSON), `GET /health` (no auth, quick ok/not-ok).
### Memory
The CLI can list, get, and clear memories but **cannot store** them directly. To store a memory:
- Via agent: `zeroclaw agent -m "remember that my favorite color is blue"`
- Via REST: `POST /api/memory` with `{"key": "...", "content": "...", "category": "core"}`
**CLI (read/delete):**
- `zeroclaw memory list` — list all entries
- `zeroclaw memory list --category core --limit 10` — filtered
- `zeroclaw memory get "key-name"` — get specific entry
- `zeroclaw memory stats` — usage statistics
- `zeroclaw memory clear --key "prefix" --yes` — delete entries (confirm with user first)
**REST (full CRUD):**
- `GET /api/memory` — list all (optional: `?query=search+text&category=core`)
- `POST /api/memory` — store: `{"key": "...", "content": "...", "category": "core"}`
- `DELETE /api/memory/{key}` — delete entry
Categories: `core`, `daily`, `conversation`, or any custom string.
### Cron / Scheduling
**CLI:**
- `zeroclaw cron list` — show all jobs
- `zeroclaw cron add '0 9 * * 1-5' 'Good morning' --tz America/New_York` — recurring
- `zeroclaw cron add-at '2026-03-11T10:00:00Z' 'Remind me'` — one-time at specific time
- `zeroclaw cron add-every 3600000 'Check health'` — interval in ms
- `zeroclaw cron once 30m 'Follow up'` — delay from now
- `zeroclaw cron pause <id>` / `zeroclaw cron resume <id>` / `zeroclaw cron remove <id>`
**REST:**
- `GET /api/cron` — list jobs
- `POST /api/cron` — add: `{"name": "...", "schedule": "0 9 * * *", "command": "..."}`
- `DELETE /api/cron/{id}` — remove job
### Tools
Tools are used automatically by the agent during conversations (shell, file ops, memory, browser, HTTP, web search, git, etc. — 30+ tools gated by security policy).
To see what's available: `GET /api/tools` (REST) lists all registered tools with descriptions and parameter schemas.
### Configuration
Edit `~/.zeroclaw/config.toml` directly, or re-run `zeroclaw onboard` to reconfigure.
**REST:**
- `GET /api/config` — get current config (secrets masked as `***MASKED***`)
- `PUT /api/config` — update config (send raw TOML as body, 1MB limit)
### Providers & Models
- `zeroclaw providers` — list all supported providers
- `zeroclaw models list` — cached model catalog
- `zeroclaw models refresh --all` — refresh from providers
- `zeroclaw models set anthropic/claude-sonnet-4-6` — set default model
Override per-message: `zeroclaw agent -p anthropic --model claude-sonnet-4-6 -m "hello"`
### Real-Time Events (SSE)
REST only — useful for building dashboards or monitoring:
```bash
curl -N -H "Authorization: Bearer <token>" http://127.0.0.1:42617/api/events
```
Streams JSON events: `llm_request`, `tool_call_start`, `tool_call`, `agent_start`, `agent_end`, `error`.
### Cost Tracking
`GET /api/cost` — returns session/daily/monthly costs, token counts, per-model breakdown.
### Emergency Stop
Confirm with the user before running any estop command — these are disruptive.
- `zeroclaw estop --level kill-all` — stop everything
- `zeroclaw estop --level network-kill` — block all network
- `zeroclaw estop --level tool-freeze --tool shell` — freeze specific tool
- `zeroclaw estop status` — check current estop state
- `zeroclaw estop resume --network` — resume
### Gateway Lifecycle
- `zeroclaw gateway` — start HTTP gateway (foreground)
- `zeroclaw gateway -p 8080 --host 127.0.0.1` — custom bind
- `zeroclaw daemon` — start gateway + channels + scheduler + heartbeat
- `zeroclaw service install/start/stop/status/uninstall` — OS service management
### Channels
ZeroClaw supports 21 messaging channels. To add one, you need to edit `~/.zeroclaw/config.toml`. For example, to set up Telegram:
```toml
[channels]
telegram = true
[channels_config.telegram]
bot_token = "your-bot-token-from-botfather"
allowed_users = [123456789]
```
Then restart the daemon. Check channel health with `zeroclaw channels doctor`.
For the full list of channels and their config fields, read `references/cli-reference.md` (Channels section).
### Pairing (Authentication Setup)
When `require_pairing = true` (default), REST clients need a bearer token:
```bash
curl -X POST http://127.0.0.1:42617/pair -H "X-Pairing-Code: <code>"
```
Response includes `{"token": "..."}` — save this for subsequent requests.
## Common Workflows
Here are multi-step sequences you're likely to need:
**"Is my agent healthy?"**
1. Run `zeroclaw status` — check provider, model, channels
2. Run `zeroclaw doctor` — check connectivity, diagnose issues
3. If gateway needed: `curl -sf http://127.0.0.1:42617/health`
**"Set up a new channel"**
1. Read the current config: `cat ~/.zeroclaw/config.toml`
2. Add the channel config (edit the TOML)
3. Restart: `zeroclaw service restart` (or restart daemon manually)
4. Verify: `zeroclaw channels doctor`
**"Switch to a different model"**
1. Check available: `zeroclaw models list`
2. Set it: `zeroclaw models set <provider/model>`
3. Verify: `zeroclaw status`
4. Test: `zeroclaw agent -m "hello, what model are you?"`
## Gateway Defaults
- **Port:** 42617
- **Host:** 127.0.0.1
- **Auth:** Pairing required (bearer token)
- **Rate limits:** 60 webhook requests/min, 10 pairing attempts/min
- **Body limit:** 64KB (1MB for config updates)
- **Timeout:** 30 seconds
- **Idempotency:** Optional `X-Idempotency-Key` header on `/webhook` (300s TTL)
- **Config location:** `~/.zeroclaw/config.toml`
## Reference Files
For the complete API specification with every endpoint, field, and edge case, read `references/rest-api.md`.
For the full CLI command tree with all flags and options, read `references/cli-reference.md`.
Only load these when you need precise details beyond what's in this file — for most operations, the quick references above are sufficient.
## Troubleshooting
**"zeroclaw: command not found"** — Binary not in PATH. Check `./target/release/zeroclaw`, `~/.cargo/bin/zeroclaw`, or build from source with `cargo build --release`.
**"Connection refused" on REST calls** — Gateway isn't running. Start it with `zeroclaw gateway` or `zeroclaw daemon`.
**"Unauthorized" (401/403)** — Bearer token is missing or invalid. Re-pair via `POST /pair` with the pairing code, or check `~/.zeroclaw/config.toml` for the stored token.
**"LLM request failed" (500)** — Provider issue. Run `zeroclaw doctor` to check connectivity. Common causes: expired API key, provider outage, rate limiting on the provider side.
**"Too many requests" (429)** — You're hitting ZeroClaw's rate limit. Back off — the response includes `retry_after` with the number of seconds to wait.
**Agent not using tools / acting limited** — Check autonomy settings in config.toml under `[autonomy]`. `level = "read_only"` disables most tools. Try `level = "supervised"` or `level = "full"`.
**Memory not persisting** — Check `[memory]` config. If `backend = "none"`, nothing is stored. Switch to `"sqlite"` or `"markdown"`. Also verify `auto_save = true`.
**Channel not responding** — Run `zeroclaw channels doctor` for the specific channel. Common issues: expired bot token, wrong allowed_users list, channel not enabled in `[channels]`.
Report errors to the user with context appropriate to their expertise level. For beginners, explain what went wrong and suggest the fix. For experts, just show the error and the fix.
+23
View File
@@ -0,0 +1,23 @@
{
"skill_name": "zeroclaw",
"evals": [
{
"id": 0,
"prompt": "how do i make my bot remember my name",
"expected_output": "Executes a zeroclaw command to store a memory, explains what happened in beginner-friendly language",
"files": []
},
{
"id": 1,
"prompt": "I want to schedule a daily health check on my ZeroClaw instance every morning at 9am ET",
"expected_output": "Executes zeroclaw cron add with correct cron expression and timezone flag",
"files": []
},
{
"id": 2,
"prompt": "Set up a Python script that monitors my ZeroClaw agent's activity via SSE and logs tool calls to a file",
"expected_output": "Writes a Python script that connects to /api/events SSE endpoint with auth, filters for tool_call events, and logs to a file",
"files": []
}
]
}
@@ -0,0 +1,277 @@
# ZeroClaw CLI Reference
Complete command reference for the `zeroclaw` binary.
## Table of Contents
1. [Agent](#agent)
2. [Onboarding](#onboarding)
3. [Status & Diagnostics](#status--diagnostics)
4. [Memory](#memory)
5. [Cron](#cron)
6. [Providers & Models](#providers--models)
7. [Gateway & Daemon](#gateway--daemon)
8. [Service Management](#service-management)
9. [Channels](#channels)
10. [Security & Emergency Stop](#security--emergency-stop)
11. [Hardware Peripherals](#hardware-peripherals)
12. [Skills](#skills)
13. [Shell Completions](#shell-completions)
---
## Agent
Interactive chat or single-message mode.
```bash
zeroclaw agent # Interactive REPL
zeroclaw agent -m "Summarize today's logs" # Single message
zeroclaw agent -p anthropic --model claude-sonnet-4-6 # Override provider/model
zeroclaw agent -t 0.3 # Set temperature
zeroclaw agent --peripheral nucleo-f401re:/dev/ttyACM0 # Attach hardware
```
**Key flags:**
- `-m <message>` — single message mode (no REPL)
- `-p <provider>` — override provider (openrouter, anthropic, openai, ollama)
- `--model <model>` — override model
- `-t <float>` — temperature (0.02.0)
- `--peripheral <name>:<port>` — attach hardware peripheral
The agent has access to 30+ tools gated by security policy: shell, file_read, file_write, file_edit, glob_search, content_search, memory_store, memory_recall, memory_forget, browser, http_request, web_fetch, web_search, cron, delegate, git, and more. Max tool iterations defaults to 10.
---
## Onboarding
First-time setup or reconfiguration.
```bash
zeroclaw onboard # Quick mode (default: openrouter)
zeroclaw onboard --provider anthropic # Quick mode with specific provider
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
```
**Key flags:**
- `--provider <name>` — openrouter (default), anthropic, openai, ollama
- `--model <model>` — default model
- `--memory <backend>` — sqlite, markdown, lucid, none
- `--force` — overwrite existing config.toml
- `--channels-only` — only repair channel configuration
- `--reinit` — start fresh (backs up existing config)
Creates `~/.zeroclaw/config.toml` with `0600` permissions.
---
## Status & Diagnostics
```bash
zeroclaw status # System overview
zeroclaw doctor # Run all diagnostic checks
zeroclaw doctor models # Probe model connectivity
zeroclaw doctor traces # Query execution traces
```
---
## Memory
```bash
zeroclaw memory list # List all entries
zeroclaw memory list --category core --limit 10 # Filtered list
zeroclaw memory get "some-key" # Get specific entry
zeroclaw memory stats # Usage statistics
zeroclaw memory clear --key "prefix" --yes # Delete entries (requires --yes)
```
**Key flags:**
- `--category <name>` — filter by category (core, daily, conversation, custom)
- `--limit <n>` — limit results
- `--key <prefix>` — key prefix for clear operations
- `--yes` — skip confirmation (required for clear)
---
## Cron
```bash
zeroclaw cron list # List all jobs
zeroclaw cron add '0 9 * * 1-5' 'Good morning' --tz America/New_York # Recurring (cron expr)
zeroclaw cron add-at '2026-03-11T10:00:00Z' 'Remind me about meeting' # One-time at specific time
zeroclaw cron add-every 3600000 'Check server health' # Interval in milliseconds
zeroclaw cron once 30m 'Follow up on that task' # Delay from now
zeroclaw cron pause <id> # Pause job
zeroclaw cron resume <id> # Resume job
zeroclaw cron remove <id> # Delete job
```
**Subcommands:**
- `add <cron-expr> <command>` — standard cron expression (5-field)
- `add-at <iso-datetime> <command>` — fire once at exact time
- `add-every <ms> <command>` — repeating interval
- `once <duration> <command>` — delay from now (e.g., `30m`, `2h`, `1d`)
---
## Providers & Models
```bash
zeroclaw providers # List all 40+ supported providers
zeroclaw models list # Show cached model catalog
zeroclaw models refresh --all # Refresh catalogs from all providers
zeroclaw models set anthropic/claude-sonnet-4-6 # Set default model
zeroclaw models status # Current model info
```
Model routing in config.toml:
```toml
[[model_routes]]
hint = "reasoning"
provider = "openrouter"
model = "anthropic/claude-sonnet-4-6"
```
---
## Gateway & Daemon
```bash
zeroclaw gateway # Start HTTP gateway (foreground)
zeroclaw gateway -p 8080 --host 127.0.0.1 # Custom port/host
zeroclaw daemon # Gateway + channels + scheduler + heartbeat
zeroclaw daemon -p 8080 --host 0.0.0.0 # Custom bind
```
**Gateway defaults:**
- Port: 42617
- Host: 127.0.0.1
- Pairing required: true
- Public bind allowed: false
---
## Service Management
OS service lifecycle (systemd on Linux, launchd on macOS).
```bash
zeroclaw service install # Install as system service
zeroclaw service start # Start the service
zeroclaw service status # Check service status
zeroclaw service stop # Stop the service
zeroclaw service restart # Restart the service
zeroclaw service uninstall # Remove the service
```
**Logs:**
- macOS: `~/.zeroclaw/logs/daemon.stdout.log`
- Linux: `journalctl -u zeroclaw`
---
## Channels
Channels are configured in `config.toml` under `[channels]` and `[channels_config.*]`.
```bash
zeroclaw channels list # List configured channels
zeroclaw channels doctor # Check channel health
```
Supported channels (21 total): Telegram, Discord, Slack, WhatsApp (Meta), WATI, Linq (iMessage/RCS/SMS), Email (IMAP/SMTP), IRC, Matrix, Nostr, Signal, Nextcloud Talk, and more.
Channel config example (Telegram):
```toml
[channels]
telegram = true
[channels_config.telegram]
bot_token = "..."
allowed_users = [123456789]
```
---
## Security & Emergency Stop
```bash
zeroclaw estop --level kill-all # Stop everything
zeroclaw estop --level network-kill # Block all network access
zeroclaw estop --level domain-block --domain "*.example.com" # Block specific domains
zeroclaw estop --level tool-freeze --tool shell # Freeze specific tool
zeroclaw estop status # Check estop state
zeroclaw estop resume --network # Resume (may require OTP)
```
**Estop levels:**
- `kill-all` — nuclear option, stops all agent activity
- `network-kill` — blocks all outbound network
- `domain-block` — blocks specific domain patterns
- `tool-freeze` — freezes individual tools
Autonomy config in config.toml:
```toml
[autonomy]
level = "supervised" # read_only | supervised | full
workspace_only = true
allowed_commands = ["git", "cargo", "python"]
forbidden_paths = ["/etc", "/root", "~/.ssh"]
max_actions_per_hour = 20
max_cost_per_day_cents = 500
```
---
## Hardware Peripherals
```bash
zeroclaw hardware discover # Find USB devices
zeroclaw hardware introspect /dev/ttyACM0 # Probe device capabilities
zeroclaw peripheral list # List configured peripherals
zeroclaw peripheral add nucleo-f401re /dev/ttyACM0 # Add peripheral
zeroclaw peripheral flash-nucleo # Flash STM32 firmware
zeroclaw peripheral flash --port /dev/cu.usbmodem101 # Flash Arduino firmware
```
**Supported boards:** STM32 Nucleo-F401RE, Arduino Uno R4, Raspberry Pi GPIO, ESP32.
Attach to agent session: `zeroclaw agent --peripheral nucleo-f401re:/dev/ttyACM0`
---
## Skills
```bash
zeroclaw skills list # List installed skills
zeroclaw skills install <path-or-url> # Install a skill
zeroclaw skills audit # Audit installed skills
zeroclaw skills remove <name> # Remove a skill
```
---
## Shell Completions
```bash
zeroclaw completions zsh # Generate Zsh completions
zeroclaw completions bash # Generate Bash completions
zeroclaw completions fish # Generate Fish completions
```
---
## Config File
Default location: `~/.zeroclaw/config.toml`
Config resolution order (first match wins):
1. `ZEROCLAW_CONFIG_DIR` environment variable
2. `ZEROCLAW_WORKSPACE` environment variable
3. `~/.zeroclaw/active_workspace.toml` marker file
4. `~/.zeroclaw/config.toml` (default)
@@ -0,0 +1,505 @@
# ZeroClaw REST API Reference
Complete endpoint reference for the ZeroClaw gateway HTTP API.
## Table of Contents
1. [Authentication](#authentication)
2. [Public Endpoints](#public-endpoints)
3. [Webhook](#webhook)
4. [WebSocket Chat](#websocket-chat)
5. [Status & Health](#status--health)
6. [Memory](#memory)
7. [Cron](#cron)
8. [Tools](#tools)
9. [Configuration](#configuration)
10. [Integrations](#integrations)
11. [Cost](#cost)
12. [Events (SSE)](#events-sse)
13. [Channel Webhooks](#channel-webhooks)
14. [Rate Limiting](#rate-limiting)
15. [Error Responses](#error-responses)
---
## Authentication
Three authentication mechanisms:
### Bearer Token (Primary)
```
Authorization: Bearer <token>
```
Obtained via `POST /pair`. Required for all `/api/*` endpoints when `require_pairing = true` (default).
### Webhook Secret
```
X-Webhook-Secret: <raw_secret>
```
Optional additional auth for `/webhook`. Server SHA-256 hashes and compares using constant-time comparison.
### WebSocket Token
```
ws://host:port/ws/chat?token=<bearer_token>
```
WebSocket connections pass the token as a query parameter (browsers can't set custom headers on WS handshake).
---
## Public Endpoints
### GET /health
No authentication required.
**Response 200:**
```json
{
"status": "ok",
"paired": true,
"require_pairing": true,
"runtime": {}
}
```
### GET /metrics
Prometheus text exposition format.
**Response 200:**
```
Content-Type: text/plain; version=0.0.4; charset=utf-8
```
### POST /pair
Exchange a one-time pairing code for a bearer token.
**Rate Limit:** Configurable per-minute limit per IP (default: 10/min).
**Headers:**
- `X-Pairing-Code: <code>` (required)
**Response 200 (success):**
```json
{
"paired": true,
"persisted": true,
"token": "<bearer_token>",
"message": "Save this token — use it as Authorization: Bearer <token>"
}
```
**Response 200 (persistence failure):**
```json
{
"paired": true,
"persisted": false,
"token": "<bearer_token>",
"message": "Paired for this process, but failed to persist token to config.toml..."
}
```
**Response 403:**
```json
{"error": "Invalid pairing code"}
```
**Response 429:**
```json
{"error": "Too many pairing requests. Please retry later.", "retry_after": 60}
```
**Response 429 (lockout):**
```json
{"error": "Too many failed attempts. Try again in {lockout_secs}s.", "retry_after": 120}
```
---
## Webhook
### POST /webhook
Send a message to the agent and receive a response.
**Rate Limit:** Configurable per-minute limit per IP (default: 60/min).
**Headers:**
- `Authorization: Bearer <token>` (if pairing enabled)
- `Content-Type: application/json`
- `X-Webhook-Secret: <secret>` (optional)
- `X-Idempotency-Key: <uuid>` (optional)
**Request Body:**
```json
{"message": "your prompt here"}
```
**Response 200:**
```json
{"response": "<llm_response>", "model": "<model_name>"}
```
**Response 200 (duplicate — idempotency key match):**
```json
{"status": "duplicate", "idempotent": true, "message": "Request already processed for this idempotency key"}
```
**Response 401:**
```json
{"error": "Unauthorized — pair first via POST /pair, then send Authorization: Bearer <token>"}
```
**Response 429:**
```json
{"error": "Too many webhook requests. Please retry later.", "retry_after": 60}
```
**Response 500:**
```json
{"error": "LLM request failed"}
```
### Idempotency
- Header: `X-Idempotency-Key: <uuid>`
- TTL: configurable, default 300 seconds
- Max tracked keys: configurable, default 10,000
- Duplicate requests within TTL return `"status": "duplicate"` instead of re-processing
---
## WebSocket Chat
### GET /ws/chat?token=<bearer_token>
Streaming agent chat over WebSocket.
**Client → Server:**
```json
{"type": "message", "content": "Hello, what's the weather?"}
```
**Server → Client (complete response):**
```json
{"type": "done", "full_response": "The weather in San Francisco is sunny..."}
```
**Server → Client (error):**
```json
{"type": "error", "message": "Error message here"}
```
Ignore unknown message types. Invalid JSON triggers an error response.
---
## Status & Health
### GET /api/status
**Response 200:**
```json
{
"provider": "openrouter",
"model": "anthropic/claude-sonnet-4",
"temperature": 0.7,
"uptime_seconds": 3600,
"gateway_port": 42617,
"locale": "en",
"memory_backend": "sqlite",
"paired": true,
"channels": {
"telegram": false,
"discord": true,
"slack": false
},
"health": {}
}
```
### GET /api/health
Component health snapshot (requires auth).
```json
{"health": {}}
```
### GET or POST /api/doctor
Run system diagnostics.
```json
{
"results": [
{"name": "provider_connectivity", "severity": "ok", "message": "OpenRouter API reachable"}
],
"summary": {"ok": 5, "warnings": 1, "errors": 0}
}
```
---
## Memory
### GET /api/memory
List or search memory entries.
**Query Parameters:**
- `query` (string, optional) — search text; triggers search mode
- `category` (string, optional) — filter by category
**Response 200:**
```json
{
"entries": [
{
"key": "memory_key",
"content": "memory content",
"category": "core",
"timestamp": "2025-01-10T12:00:00Z"
}
]
}
```
### POST /api/memory
Store a memory entry.
**Request Body:**
```json
{
"key": "unique_key",
"content": "memory content",
"category": "core"
}
```
Category defaults to `"core"` if omitted. Other values: `daily`, `conversation`, or any custom string.
**Response 200:**
```json
{"status": "ok"}
```
### DELETE /api/memory/{key}
Delete a memory entry.
**Response 200:**
```json
{"status": "ok", "deleted": true}
```
---
## Cron
### GET /api/cron
List all scheduled jobs.
**Response 200:**
```json
{
"jobs": [
{
"id": "<uuid>",
"name": "daily-backup",
"command": "backup.sh",
"next_run": "2025-01-10T15:00:00Z",
"last_run": "2025-01-09T15:00:00Z",
"last_status": "success",
"enabled": true
}
]
}
```
### POST /api/cron
Add a new job.
**Request Body:**
```json
{
"name": "job-name",
"schedule": "0 9 * * *",
"command": "command to run"
}
```
**Response 200:**
```json
{
"status": "ok",
"job": {"id": "<uuid>", "name": "job-name", "command": "command to run", "enabled": true}
}
```
### DELETE /api/cron/{id}
Remove a job.
**Response 200:**
```json
{"status": "ok"}
```
---
## Tools
### GET /api/tools
List all registered tools with descriptions and parameter schemas.
**Response 200:**
```json
{
"tools": [
{"name": "shell", "description": "Execute shell commands", "parameters": {}},
{"name": "file_read", "description": "Read file contents", "parameters": {}}
]
}
```
---
## Configuration
### GET /api/config
Get current config. Secrets are masked as `***MASKED***`.
**Response 200:**
```json
{"format": "toml", "content": "<toml_string>"}
```
### PUT /api/config
Update config from TOML body. Body limit: 1 MB.
**Request Body:** Raw TOML text.
**Response 200:**
```json
{"status": "ok"}
```
**Response 400:**
```json
{"error": "Invalid TOML: <details>"}
```
or
```json
{"error": "Invalid config: <validation_error>"}
```
---
## Integrations
### GET /api/integrations
List all integrations and their status.
**Response 200:**
```json
{
"integrations": [
{"name": "openrouter", "description": "OpenRouter LLM provider", "category": "providers", "status": "ok"},
{"name": "telegram", "description": "Telegram messaging channel", "category": "channels", "status": "configured"}
]
}
```
---
## Cost
### GET /api/cost
Cost tracking summary.
**Response 200:**
```json
{
"cost": {
"session_cost_usd": 1.50,
"daily_cost_usd": 5.00,
"monthly_cost_usd": 150.00,
"total_tokens": 50000,
"request_count": 25,
"by_model": {"anthropic/claude-sonnet-4": 1.50}
}
}
```
---
## Events (SSE)
### GET /api/events
Server-Sent Events stream. Requires bearer token.
**Content-Type:** `text/event-stream`
**Event types:**
| Type | Fields | Description |
|------|--------|-------------|
| `llm_request` | provider, model, timestamp | LLM call started |
| `tool_call_start` | tool, timestamp | Tool execution started |
| `tool_call` | tool, duration_ms, success, timestamp | Tool execution completed |
| `agent_start` | provider, model, timestamp | Agent loop started |
| `agent_end` | provider, model, duration_ms, tokens_used, cost_usd, timestamp | Agent loop completed |
| `error` | component, message, timestamp | Error occurred |
**Example:**
```bash
curl -N -H "Authorization: Bearer <token>" http://127.0.0.1:42617/api/events
```
---
## Channel Webhooks
These are incoming webhook endpoints for specific messaging channels. They're set up automatically when channels are configured.
### WhatsApp (Meta Cloud API)
- `GET /whatsapp` — verification (echoes `hub.challenge`)
- `POST /whatsapp` — incoming messages (signature verified via `X-Hub-Signature-256`)
### WATI (WhatsApp Business)
- `GET /wati` — verification (echoes `challenge`)
- `POST /wati` — incoming messages
### Linq (iMessage/RCS/SMS)
- `POST /linq` — incoming messages (signature verified via `X-Webhook-Signature` + `X-Webhook-Timestamp`)
### Nextcloud Talk
- `POST /nextcloud-talk` — bot API webhook (signature verified via `X-Nextcloud-Talk-Signature`)
---
## Rate Limiting
Sliding window (60-second window), per client IP.
| Endpoint | Default Limit |
|----------|--------------|
| `POST /pair` | 10/min |
| `POST /webhook` | 60/min |
If `trust_forwarded_headers` is enabled, uses `X-Forwarded-For` for client IP.
Max tracked keys: configurable (default: 10,000).
---
## Error Responses
**Standard format:**
```json
{"error": "Human-readable error message"}
```
**With retry info:**
```json
{"error": "...", "retry_after": 60}
```
**Status codes:**
| Code | Meaning |
|------|---------|
| 200 | Success |
| 400 | Invalid JSON, missing fields, invalid TOML |
| 401 | Invalid/missing bearer token or webhook secret |
| 403 | Pairing verification failed |
| 404 | Endpoint or channel not configured |
| 408 | Request timeout (30s) |
| 429 | Rate limited (check `retry_after`) |
| 500 | LLM error, database error, internal failure |
+9
View File
@@ -64,3 +64,12 @@ LICENSE
*.profdata
coverage
lcov.info
# Firmware and hardware crates (not needed for Docker runtime)
firmware/
crates/robot-kit/
# Application and script directories (not needed for Docker runtime)
apps/
python/
scripts/
-22
View File
@@ -1,25 +1,3 @@
# EditorConfig — https://editorconfig.org
# Provides consistent formatting defaults across editors and platforms.
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
[*.md]
# Trailing whitespace is significant in Markdown (line breaks).
trim_trailing_whitespace = false
[*.{yml,yaml}]
indent_size = 2
[*.toml]
indent_size = 2
[Dockerfile]
indent_size = 4
+1
View File
@@ -59,6 +59,7 @@ PROVIDER=openrouter
# ZAI_API_KEY=...
# SYNTHETIC_API_KEY=...
# OPENCODE_API_KEY=...
# OPENCODE_GO_API_KEY=...
# VERCEL_API_KEY=...
# CLOUDFLARE_API_KEY=...
-32
View File
@@ -1,33 +1 @@
# Normalize all text files
* text=auto
# Force LF for scripts and build-critical files
*.sh text eol=lf
Dockerfile* text eol=lf
*.rs text eol=lf
*.toml text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
# CI
.github/**/* text eol=lf
# Images
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
# Archives
*.zip binary
*.tar binary
*.tgz binary
*.gz binary
*.7z binary
# Compiled artifacts
*.so binary
*.dll binary
*.exe binary
*.a binary
+25 -25
View File
@@ -1,32 +1,32 @@
# Default owner for all files
* @jordanthejet
* @theonlyhennygod @JordanTheJet @SimianAstronaut7
# Important functional modules
/src/agent/** @theonlyhennygod
/src/providers/** @theonlyhennygod
/src/channels/** @theonlyhennygod
/src/tools/** @theonlyhennygod
/src/gateway/** @theonlyhennygod
/src/runtime/** @theonlyhennygod
/src/memory/** @theonlyhennygod
/Cargo.toml @theonlyhennygod
/Cargo.lock @theonlyhennygod
/src/agent/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/src/providers/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/src/channels/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/src/tools/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/src/gateway/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/src/runtime/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/src/memory/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/Cargo.toml @theonlyhennygod @JordanTheJet @SimianAstronaut7
/Cargo.lock @theonlyhennygod @JordanTheJet @SimianAstronaut7
# Security / tests / CI-CD ownership
/src/security/** @jordanthejet
/tests/** @jordanthejet
/.github/** @jordanthejet
/.github/workflows/** @jordanthejet
/.github/codeql/** @jordanthejet
/.github/dependabot.yml @jordanthejet
/SECURITY.md @jordanthejet
/docs/actions-source-policy.md @jordanthejet
/docs/ci-map.md @jordanthejet
/src/security/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/tests/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/.github/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/.github/workflows/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/.github/codeql/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/.github/dependabot.yml @theonlyhennygod @JordanTheJet @SimianAstronaut7
/SECURITY.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
/docs/actions-source-policy.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
/docs/ci-map.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
# Docs & governance
/docs/** @jordanthejet
/AGENTS.md @jordanthejet
/CLAUDE.md @jordanthejet
/CONTRIBUTING.md @jordanthejet
/docs/pr-workflow.md @jordanthejet
/docs/reviewer-playbook.md @jordanthejet
/docs/** @theonlyhennygod @JordanTheJet @SimianAstronaut7
/AGENTS.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
/CLAUDE.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
/CONTRIBUTING.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
/docs/pr-workflow.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
/docs/reviewer-playbook.md @theonlyhennygod @JordanTheJet @SimianAstronaut7
+1 -1
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
Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

+37 -2
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"
@@ -124,12 +128,30 @@ jobs:
- name: Check licenses and sources
run: cargo deny check licenses sources
check-32bit:
name: "Check (32-bit)"
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
toolchain: 1.92.0
targets: i686-unknown-linux-gnu
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
- name: Install 32-bit libs
run: sudo apt-get update && sudo apt-get install -y gcc-multilib
- name: Ensure web/dist placeholder exists
run: mkdir -p web/dist && touch web/dist/.gitkeep
- name: Cargo check (32-bit, no default features)
run: cargo check --target i686-unknown-linux-gnu --no-default-features
# Composite status check — branch protection only needs to require this
# single job instead of tracking every matrix leg individually.
gate:
name: CI Required Gate
if: always()
needs: [lint, test, build, security]
needs: [lint, test, build, security, check-32bit]
runs-on: ubuntu-latest
steps:
- name: Check upstream job results
@@ -138,3 +160,16 @@ jobs:
echo "::error::One or more upstream jobs failed or were cancelled"
exit 1
fi
security-gate:
name: Security Required Gate
if: always()
needs: [security]
runs-on: ubuntu-latest
steps:
- name: Check security job result
run: |
if [[ "${{ needs.security.result }}" != "success" ]]; then
echo "::error::Security audit failed or was cancelled"
exit 1
fi
+170
View File
@@ -0,0 +1,170 @@
name: CI
on:
push:
branches: [master]
pull_request:
branches: [master]
concurrency:
group: ci-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
toolchain: 1.92.0
components: rustfmt, clippy
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
- name: Ensure web/dist placeholder exists
run: mkdir -p web/dist && touch web/dist/.gitkeep
- name: Check formatting
run: cargo fmt --all -- --check
- name: Clippy
run: cargo clippy --all-targets -- -D warnings
lint-strict-delta:
name: Strict Delta Lint
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
toolchain: 1.92.0
components: clippy
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
- name: Ensure web/dist placeholder exists
run: mkdir -p web/dist && touch web/dist/.gitkeep
- name: Run strict delta lint gate
run: bash scripts/ci/rust_strict_delta_gate.sh
env:
BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
test:
name: Test
runs-on: ubuntu-latest
timeout-minutes: 30
needs: [lint]
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable
with:
toolchain: 1.92.0
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
- name: Ensure web/dist placeholder exists
run: mkdir -p web/dist && touch web/dist/.gitkeep
- name: Install mold linker
run: |
sudo apt-get update -qq
sudo apt-get install -y mold
- name: Install cargo-nextest
run: curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C ${CARGO_HOME:-~/.cargo}/bin
- name: Run tests
run: cargo nextest run --locked
env:
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER: clang
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS: "-C link-arg=-fuse-ld=mold"
build:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
timeout-minutes: 40
needs: [lint]
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
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
with:
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'
run: |
sudo apt-get update -qq
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 --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"
docs-quality:
name: Docs Quality
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0
- uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4
with:
node-version: 20
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: "3.12"
- name: Run docs quality gate
run: bash scripts/ci/docs_quality_gate.sh
env:
BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
# Composite status check — branch protection requires this single job.
gate:
name: CI Required Gate
if: always()
needs: [lint, lint-strict-delta, test, build, docs-quality]
runs-on: ubuntu-latest
steps:
- name: Check upstream job results
env:
HAS_FAILURE: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
run: |
if [[ "$HAS_FAILURE" == "true" ]]; then
echo "::error::One or more upstream jobs failed or were cancelled"
exit 1
fi
@@ -57,7 +57,7 @@ jobs:
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2
if: runner.os != 'Windows'
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v8
with:
name: web-dist
path: web/dist/
@@ -74,4 +74,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 --target ${{ matrix.target }}
+3 -3
View File
@@ -12,7 +12,7 @@ Use this with:
ZeroClaw uses a single default branch: `master`. All contributor PRs target `master` directly. There is no `dev` or promotion branch.
Current maintainers with PR approval authority: `theonlyhennygod` and `jordanthejet`.
Current maintainers with PR approval authority: `theonlyhennygod`, `JordanTheJet`, and `SimianAstronaut7`.
## Active Workflows
@@ -43,7 +43,7 @@ Current maintainers with PR approval authority: `theonlyhennygod` and `jordanthe
- `security` job: runs `cargo audit` and `cargo deny check licenses sources`.
- Concurrency group cancels in-progress runs for the same PR on new pushes.
3. All jobs must pass before merge.
4. Maintainer (`theonlyhennygod` or `jordanthejet`) merges PR once checks and review policy are satisfied.
4. Maintainer (`theonlyhennygod`, `JordanTheJet`, or `SimianAstronaut7`) merges PR once checks and review policy are satisfied.
5. Merge emits a `push` event on `master` (see section 2).
### 2) Push to `master` (including after merge)
@@ -81,7 +81,7 @@ Current maintainers with PR approval authority: `theonlyhennygod` and `jordanthe
| `aarch64-unknown-linux-gnu` | | ✓ | ✓ | ✓ |
| `aarch64-apple-darwin` | ✓ | | ✓ | ✓ |
| `x86_64-apple-darwin` | | ✓ | | |
| `x86_64-pc-windows-msvc` | | ✓ | ✓ | ✓ |
| `x86_64-pc-windows-msvc` | | ✓ | ✓ | ✓ |
## Mermaid Diagrams
+169
View File
@@ -0,0 +1,169 @@
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
mkdir -p ~/.ssh
echo "$AUR_SSH_KEY" > ~/.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
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
+206
View File
@@ -0,0 +1,206 @@
name: Pub Homebrew Core
on:
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"
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
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}"
+135
View File
@@ -0,0 +1,135 @@
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
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}"
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 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
+90
View File
@@ -0,0 +1,90 @@
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 (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
+200 -26
View File
@@ -5,11 +5,12 @@ on:
branches: [master]
concurrency:
group: release
cancel-in-progress: false
group: release-beta
cancel-in-progress: true
permissions:
contents: read
contents: write
packages: write
env:
CARGO_TERM_COLOR: always
@@ -36,6 +37,96 @@ jobs:
echo "tag=${beta_tag}" >> "$GITHUB_OUTPUT"
echo "Beta release: ${beta_tag}"
release-notes:
name: Generate Release Notes
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
runs-on: ubuntu-latest
@@ -64,11 +155,13 @@ jobs:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
# 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
ext: tar.gz
- os: ubuntu-latest
- os: ubuntu-22.04
target: aarch64-unknown-linux-gnu
artifact: zeroclaw
ext: tar.gz
@@ -79,6 +172,11 @@ jobs:
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
@@ -91,6 +189,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:
@@ -103,13 +203,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 channel-matrix --target ${{ matrix.target }}
- name: Package (Unix)
if: runner.os != 'Windows'
@@ -131,15 +235,14 @@ jobs:
publish:
name: Publish Beta Release
needs: [version, build]
needs: [version, release-notes, build]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
pattern: zeroclaw-*
path: artifacts
- name: Generate checksums
@@ -148,29 +251,87 @@ jobs:
find . -type f \( -name '*.tar.gz' -o -name '*.zip' \) -exec sha256sum {} + | sed 's| \./[^/]*/| |' > SHA256SUMS
cat SHA256SUMS
- name: Create GitHub Release
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
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 '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
permissions:
contents: read
packages: write
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
@@ -182,11 +343,24 @@ jobs:
- name: Build and push
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: .
context: docker-ctx
push: true
build-args: |
ZEROCLAW_CARGO_FEATURES=channel-matrix
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).
+254 -24
View File
@@ -13,7 +13,8 @@ concurrency:
cancel-in-progress: false
permissions:
contents: read
contents: write
packages: write
env:
CARGO_TERM_COLOR: always
@@ -73,6 +74,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]
@@ -82,11 +156,13 @@ jobs:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
# 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
ext: tar.gz
- os: ubuntu-latest
- os: ubuntu-22.04
target: aarch64-unknown-linux-gnu
artifact: zeroclaw
ext: tar.gz
@@ -97,6 +173,11 @@ jobs:
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
@@ -109,6 +190,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:
@@ -121,13 +204,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 channel-matrix --target ${{ matrix.target }}
- name: Package (Unix)
if: runner.os != 'Windows'
@@ -149,15 +236,14 @@ jobs:
publish:
name: Publish Stable Release
needs: [validate, build]
needs: [validate, release-notes, build]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
pattern: zeroclaw-*
path: artifacts
- name: Generate checksums
@@ -166,29 +252,129 @@ jobs:
find . -type f \( -name '*.tar.gz' -o -name '*.zip' \) -exec sha256sum {} + | sed 's| \./[^/]*/| |' > SHA256SUMS
cat SHA256SUMS
- name: Create GitHub Release
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2
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 '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.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 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
permissions:
contents: read
packages: write
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
@@ -200,11 +386,55 @@ jobs:
- name: Build and push
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
context: .
context: docker-ctx
push: true
build-args: |
ZEROCLAW_CARGO_FEATURES=channel-matrix
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
# ── 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
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
+16 -1
View File
@@ -1,6 +1,8 @@
/target
/target-*/
firmware/*/target
web/dist/
web/dist/*
!web/dist/.gitkeep
*.db
*.db-journal
.DS_Store
@@ -32,5 +34,18 @@ credentials.json
.worktrees/
.zeroclaw/*
# Skill eval workspaces (test outputs, transcripts, grading)
.claude/skills/*-workspace/
# Local state backups
.local-state-backups/
*.local-state-backup/
# Coverage artifacts
lcov.info
# IDE's stuff
.idea
# Wrangler cache
.wrangler/
-66
View File
@@ -1,67 +1 @@
# Changelog
All notable changes to ZeroClaw will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Security
- **Legacy XOR cipher migration**: The `enc:` prefix (XOR cipher) is now deprecated.
Secrets using this format will be automatically migrated to `enc2:` (ChaCha20-Poly1305 AEAD)
when decrypted via `decrypt_and_migrate()`. A `tracing::warn!` is emitted when legacy
values are encountered. The XOR cipher will be removed in a future release.
### Added
- `SecretStore::decrypt_and_migrate()` — Decrypts secrets and returns a migrated `enc2:`
value if the input used the legacy `enc:` format
- `SecretStore::needs_migration()` — Check if a value uses the legacy `enc:` format
- `SecretStore::is_secure_encrypted()` — Check if a value uses the secure `enc2:` format
- **Telegram mention_only mode** — New config option `mention_only` for Telegram channel.
When enabled, bot only responds to messages that @-mention the bot in group chats.
Direct messages always work regardless of this setting. Default: `false`.
### Deprecated
- `enc:` prefix for encrypted secrets — Use `enc2:` (ChaCha20-Poly1305) instead.
Legacy values are still decrypted for backward compatibility but should be migrated.
### Fixed
- **Gemini thinking model support** — Responses from thinking models (e.g. `gemini-3-pro-preview`)
are now handled correctly. The provider skips internal reasoning parts (`thought: true`) and
signature parts (`thoughtSignature`), extracting only the final answer text. Falls back to
thinking content when no non-thinking response is available.
- Updated default gateway port to `42617`.
- Removed all user-facing references to port `3000`.
- **Onboarding channel menu dispatch** now uses an enum-backed selector instead of hard-coded
numeric match arms, preventing duplicated pattern arms and related `unreachable pattern`
compiler warnings in `src/onboard/wizard.rs`.
- **OpenAI native tool spec parsing** now uses owned serializable/deserializable structs,
fixing a compile-time type mismatch when validating tool schemas before API calls.
## [0.1.0] - 2026-02-13
### Added
- **Core Architecture**: Trait-based pluggable system for Provider, Channel, Observer, RuntimeAdapter, Tool
- **Provider**: OpenRouter implementation (access Claude, GPT-4, Llama, Gemini via single API)
- **Channels**: CLI channel with interactive and single-message modes
- **Observability**: NoopObserver (zero overhead), LogObserver (tracing), MultiObserver (fan-out)
- **Security**: Workspace sandboxing, command allowlisting, path traversal blocking, autonomy levels (ReadOnly/Supervised/Full), rate limiting
- **Tools**: Shell (sandboxed), FileRead (path-checked), FileWrite (path-checked)
- **Memory (Brain)**: SQLite persistent backend (searchable, survives restarts), Markdown backend (plain files, human-readable)
- **Heartbeat Engine**: Periodic task execution from HEARTBEAT.md
- **Runtime**: Native adapter for Mac/Linux/Raspberry Pi
- **Config**: TOML-based configuration with sensible defaults
- **Onboarding**: Interactive CLI wizard with workspace scaffolding
- **CLI Commands**: agent, gateway, status, cron, channel, tools, onboard
- **CI/CD**: GitHub Actions with cross-platform builds (Linux, macOS Intel/ARM, Windows)
- **Tests**: 159 inline tests covering all modules and edge cases
- **Binary**: 3.1MB optimized release build (includes bundled SQLite)
### Security
- Path traversal attack prevention
- Command injection blocking
- Workspace escape prevention
- Forbidden system path protection (`/etc`, `/root`, `~/.ssh`)
[0.1.0]: https://github.com/zeroclaw-labs/zeroclaw/releases/tag/v0.1.0
+37 -1
View File
@@ -2,6 +2,42 @@
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
> **`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. There is no `main` branch — it will not work.
## First-Time Contributors
Welcome — contributions of all sizes are valued. If this is your first contribution, here is how to get started:
@@ -15,7 +51,7 @@ Welcome — contributions of all sizes are valued. If this is your first contrib
3. **Follow the fork → branch → change → test → PR workflow:**
- Fork the repository and clone your fork
- Create a feature branch (`git checkout -b fix/my-change`)
- Create a feature branch (`git checkout -b feat/my-change` or `git checkout -b fix/my-change`)
- Make your changes and run `cargo fmt && cargo clippy && cargo test`
- Open a PR against `master` using the PR template
Generated
+1519 -367
View File
File diff suppressed because it is too large Load Diff
+72 -10
View File
@@ -3,8 +3,8 @@ members = [".", "crates/robot-kit"]
resolver = "2"
[package]
name = "zeroclaw"
version = "0.1.7"
name = "zeroclawlabs"
version = "0.5.0"
edition = "2021"
authors = ["theonlyhennygod"]
license = "MIT OR Apache-2.0"
@@ -15,13 +15,32 @@ keywords = ["ai", "agent", "cli", "assistant", "chatbot"]
categories = ["command-line-utilities", "api-bindings"]
rust-version = "1.87"
[[bin]]
name = "zeroclaw"
path = "src/main.rs"
[lib]
name = "zeroclaw"
path = "src/lib.rs"
include = [
"/src/**/*",
"/build.rs",
"/Cargo.toml",
"/Cargo.lock",
"/LICENSE*",
"/README.md",
"/web/dist/**/*",
"/tool_descriptions/**/*",
]
[dependencies]
# CLI - minimal and fast
clap = { version = "4.5", features = ["derive"] }
clap_complete = "4.5"
# Async runtime - feature-optimized for size
tokio = { version = "1.42", default-features = false, features = ["rt-multi-thread", "macros", "time", "net", "io-util", "sync", "process", "io-std", "fs", "signal"] }
tokio = { version = "1.50", default-features = false, features = ["rt-multi-thread", "macros", "time", "net", "io-util", "sync", "process", "io-std", "fs", "signal"] }
tokio-util = { version = "0.7", default-features = false }
tokio-stream = { version = "0.1.18", default-features = false, features = ["fs", "sync"] }
@@ -35,6 +54,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 +68,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"
@@ -62,14 +82,20 @@ urlencoding = "2.1"
nanohtml2text = "0.2"
# Optional Rust-native browser automation backend
fantoccini = { version = "0.22.0", optional = true, default-features = false, features = ["rustls-tls"] }
fantoccini = { version = "0.22.1", optional = true, default-features = false, features = ["rustls-tls"] }
# Progress bars (update pipeline)
indicatif = "0.17"
# Temp files (update pipeline rollback)
tempfile = "3.26"
# Error handling
anyhow = "1.0"
thiserror = "2.0"
# UUID generation
uuid = { version = "1.11", default-features = false, features = ["v4", "std"] }
uuid = { version = "1.22", default-features = false, features = ["v4", "std"] }
# Authenticated encryption (AEAD) for secret store
chacha20poly1305 = "0.10"
@@ -82,6 +108,9 @@ 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 }
@@ -117,7 +146,7 @@ which = "8.0"
# WebSocket client channels (Discord/Lark/DingTalk/Nostr)
tokio-tungstenite = { version = "0.28", features = ["rustls-tls-webpki-roots"] }
futures-util = { version = "0.3", default-features = false, features = ["sink"] }
nostr-sdk = { version = "0.44", default-features = false, features = ["nip04", "nip59"] }
nostr-sdk = { version = "0.44", default-features = false, features = ["nip04", "nip59"], optional = true }
regex = "1.10"
hostname = "0.4.2"
rustls = "0.23"
@@ -162,6 +191,9 @@ 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.9", optional = true }
# Terminal QR rendering for WhatsApp Web pairing flow.
qrcode = { version = "0.14", optional = true }
@@ -184,11 +216,14 @@ landlock = { version = "0.4", optional = true }
libc = "0.2"
[features]
default = []
default = ["observability-prometheus", "channel-nostr", "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")
@@ -200,12 +235,18 @@ 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"]
# WASM plugin system (extism-based)
plugins-wasm = ["dep:extism"]
[profile.release]
opt-level = "z" # Optimize for size
@@ -220,6 +261,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"
@@ -229,11 +275,27 @@ strip = true
panic = "abort"
[dev-dependencies]
tempfile = "3.14"
tempfile = "3.26"
criterion = { version = "0.8", features = ["async_tokio"] }
wiremock = "0.6"
scopeguard = "1.2"
[[test]]
name = "component"
path = "tests/test_component.rs"
[[test]]
name = "integration"
path = "tests/test_integration.rs"
[[test]]
name = "system"
path = "tests/test_system.rs"
[[test]]
name = "live"
path = "tests/test_live.rs"
[[bench]]
name = "agent_benchmarks"
harness = false
+56 -41
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=""
# Install build dependencies
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
@@ -14,64 +23,62 @@ 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
# Remove robot-kit from workspace members — it is excluded by .dockerignore
# and is not needed for the Docker build (hardware-only crate).
RUN sed -i 's/members = \[".", "crates\/robot-kit"\]/members = ["."]/' Cargo.toml
# 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 2>/dev/null || stat -f%z /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 && \
cat > /zeroclaw-data/.zeroclaw/config.toml <<EOF && \
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' \
> /zeroclaw-data/.zeroclaw/config.toml && \
chown -R 65534:65534 /zeroclaw-data
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
EOF
# ── Stage 2: Development Runtime (Debian) ────────────────────
FROM debian:trixie-slim@sha256:f6e2cfac5cf956ea044b4bd75e6397b4372ad88fe00908045e9a0d21712ae3ba AS dev
@@ -90,6 +97,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,6 +113,8 @@ 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"]
@@ -114,6 +125,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 +139,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"]
+25
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"]
+125
View File
@@ -0,0 +1,125 @@
# 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=""
# 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 ./
# Remove robot-kit from workspace members — it is excluded by .dockerignore
# and is not needed for the Docker build (hardware-only crate).
RUN sed -i 's/members = \[".", "crates\/robot-kit"\]/members = ["."]/' Cargo.toml
# 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 2>/dev/null || stat -f%z /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' \
> /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 ["gateway"]
+34
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"]
+30 -440
View File
@@ -16,7 +16,10 @@
<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://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.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">
@@ -86,6 +89,16 @@
<p align="center"><code>بنية قائمة على السمات · وقت تشغيل آمن افتراضيًا · موفر/قناة/أداة قابلة للتبديل · كل شيء قابل للتوصيل</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 الإعلانات
استخدم هذا الجدول للإشعارات المهمة (تغييرات التوافق، إشعارات الأمان، نوافذ الصيانة، وحجوز الإصدارات).
@@ -93,7 +106,7 @@
| التاريخ (UTC) | المستوى | الإشعار | الإجراء |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _حرج_ | **نحن غير مرتبطين** بـ `openagen/zeroclaw` أو `zeroclaw.org`. نطاق `zeroclaw.org` يشير حاليًا إلى الفرع `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-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/zeroclawlabs)، [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 بتحديث شروط استخدام المصادقة وبيانات الاعتماد في 2026-02-19. مصادقة 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). |
### ✨ الميزات
@@ -221,7 +234,7 @@ ls -lh target/release/zeroclaw
يقوم نص `bootstrap.sh` بتثبيت Rust ونسخ ZeroClaw وتجميعه وإعداد بيئة التطوير الأولية الخاصة بك:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
سيقوم هذا بـ:
@@ -363,443 +376,6 @@ zeroclaw version # عرض الإصدار ومعلومات البنا
راجع [مرجع الأوامر](docs/commands-reference.md) للخيارات والأمثلة الكاملة.
## البنية
```
┌─────────────────────────────────────────────────────────────────┐
│ القنوات (سمة) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ منسق الوكيل │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ توجيه │ │ السياق │ │ التنفيذ │ │
│ │ الرسائل │ │ الذاكرة │ │ الأداة │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ الموفرون │ │ الذاكرة │ │ الأدوات │
│ (سمة) │ │ (سمة) │ │ (سمة) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ وقت التشغيل (سمة) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**المبادئ الأساسية:**
- كل شيء هو **سمة** — الموفرون والقنوات والأدوات والذاكرة والأنفاق
- القنوات تستدعي المنسق؛ المنسق يستدعي الموفرون + الأدوات
- نظام الذاكرة يدير سياق المحادثة (markdown أو SQLite أو لا شيء)
- وقت التشغيل يجرد تنفيذ الكود (أصلي أو Docker)
- لا قفل للمورد — استبدل Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama بدون تغييرات في الكود
راجع [توثيق البنية](docs/architecture.svg) للرسوم البيانية التفصيلية وتفاصيل التنفيذ.
## الأمثلة
### بوت Telegram
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # معرف مستخدم Telegram الخاص بك
```
ابدأ البرنامج الخفي + الوكيل، ثم أرسل رسالة إلى بوتك على Telegram:
```
/start
مرحباً! هل يمكنك مساعدتي في كتابة نص Python؟
```
يستجيب البوت بكود مُنشأ بالذكاء الاصطناعي، وينفذ الأدوات إذا طُلب، ويحافظ على سياق المحادثة.
### Matrix (تشفير من طرف إلى طرف)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
ادعُ `@zeroclaw:matrix.org` إلى غرفة مشفرة، وسيستجيب البوت بتشفير كامل. راجع [دليل Matrix E2EE](docs/matrix-e2ee-guide.md) لإعداد التحقق من الجهاز.
### متعدد الموفرون
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # التبديل عند خطأ المورد
```
إذا فشل Anthropic أو وصل إلى حد السرعة، يتبادل المنسق تلقائيًا إلى OpenAI.
### ذاكرة مخصصة
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # حذف تلقائي بعد 90 يومًا
```
أو استخدم Markdown للتخزين القابل للقراءة البشرية:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
راجع [مرجع التكوين](docs/config-reference.md#memory) لجميع خيارات الذاكرة.
## دعم الموفرون
| المورد | الحالة | مفتاح API | النماذج المثال |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ مستقر | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ مستقر | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ مستقر | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ مستقر | N/A (محلي) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ مستقر | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ مستقر | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 مخطط | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 مخطط | `COHERE_API_KEY` | TBD |
### نقاط النهاية المخصصة
يدعم ZeroClaw نقاط النهاية المتوافقة مع OpenAI:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
مثال: استخدم [LiteLLM](https://github.com/BerriAI/litellm) كوكيل للوصول إلى أي LLM عبر واجهة OpenAI.
راجع [مرجع الموفرون](docs/providers-reference.md) لتفاصيل التكوين الكاملة.
## دعم القنوات
| القناة | الحالة | المصادقة | ملاحظات |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ مستقر | رمز البوت | دعم كامل بما في ذلك الملفات والصور والأزرار المضمنة |
| **Matrix** | ✅ مستقر | كلمة المرور أو الرمز | دعم E2EE مع التحقق من الجهاز |
| **Slack** | 🚧 مخطط | OAuth أو رمز البوت | يتطلب الوصول إلى مساحة العمل |
| **Discord** | 🚧 مخطط | رمز البوت | يتطلب أذونات النقابة |
| **WhatsApp** | 🚧 مخطط | Twilio أو API الرسمية | يتطلب حساب تجاري |
| **CLI** | ✅ مستقر | لا شيء | واجهة محادثة مباشرة |
| **Web** | 🚧 مخطط | مفتاح API أو OAuth | واجهة دردشة قائمة على المتصفح |
راجع [مرجع القنوات](docs/channels-reference.md) لتعليمات التكوين الكاملة.
## دعم الأدوات
يوفر ZeroClaw أدوات مدمجة لتنفيذ الكود والوصول إلى نظام الملفات واسترجاع الويب:
| الأداة | الوصف | وقت التشغيل المطلوب |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | ينفذ أوامر الصدفة | أصلي أو Docker |
| **python** | ينفذ نصوص Python | Python 3.8+ (أصلي) أو Docker |
| **javascript** | ينفذ كود Node.js | Node.js 18+ (أصلي) أو Docker |
| **filesystem_read** | يقرأ الملفات | أصلي أو Docker |
| **filesystem_write** | يكتب الملفات | أصلي أو Docker |
| **web_fetch** | يجلب محتوى الويب | أصلي أو Docker |
### أمان التنفيذ
- **وقت التشغيل الأصلي** — يعمل كعملية مستخدم البرنامج الخفي، وصول كامل لنظام الملفات
- **وقت تشغيل Docker** — عزل حاوية كامل، أنظمة ملفات وشبكات منفصلة
قم بتكوين سياسة التنفيذ في `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # قائمة سماح صريحة
```
راجع [مرجع التكوين](docs/config-reference.md#runtime) لخيارات الأمان الكاملة.
## النشر
### النشر المحلي (التطوير)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### نشر الخادم (الإنتاج)
استخدم systemd لإدارة البرنامج الخفي والوكيل كخدمات:
```bash
# تثبيت الملف الثنائي
cargo install --path . --locked
# تكوين مساحة العمل
zeroclaw init
# إنشاء ملفات خدمة systemd
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# تمكين وبدء الخدمات
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# التحقق من الحالة
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
راجع [دليل نشر الشبكة](docs/network-deployment.md) لتعليمات نشر الإنتاج الكاملة.
### Docker
```bash
# بناء الصورة
docker build -t zeroclaw:latest .
# تشغيل الحاوية
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
راجع [`Dockerfile`](Dockerfile) لتفاصيل البناء وخيارات التكوين.
### أجهزة الحافة
تم تصميم ZeroClaw للعمل على أجهزة منخفضة الطاقة:
- **Raspberry Pi Zero 2 W** — ~512 ميغابايت ذاكرة عشوائية، نواة ARMv8 واحدة، < $5 تكلفة الأجهزة
- **Raspberry Pi 4/5** — 1 غيغابايت+ ذاكرة عشوائية، متعدد النوى، مثالي لأحمال العمل المتزامنة
- **Orange Pi Zero 2** — ~512 ميغابايت ذاكرة عشوائية، رباعي النواة ARMv8، تكلفة منخفضة جدًا
- **أجهزة SBCs x86 (Intel N100)** — 4-8 غيغابايت ذاكرة عشوائية، بناء سريع، دعم Docker أصلي
راجع [دليل الأجهزة](docs/hardware/README.md) لتعليمات الإعداد الخاصة بالجهاز.
## الأنفاق (التعرض العام)
اعرض البرنامج الخفي ZeroClaw المحلي الخاص بك للشبكة العامة عبر أنفاق آمنة:
```bash
zeroclaw tunnel start --provider cloudflare
```
موفرو الأنفاق المدعومون:
- **Cloudflare Tunnel** — HTTPS مجاني، لا تعرض للمنافذ، دعم متعدد المجالات
- **Ngrok** — إعداد سريع، مجالات مخصصة (خطة مدفوعة)
- **Tailscale** — شبكة شبكية خاصة، لا منفذ عام
راجع [مرجع التكوين](docs/config-reference.md#tunnel) لخيارات التكوين الكاملة.
## الأمان
ينفذ ZeroClaw طبقات متعددة من الأمان:
### الاقتران
يُنشئ البرنامج الخفي سر اقتران عند التشغيل الأول مخزن في `~/.zeroclaw/workspace/.pairing`. يجب على العملاء (الوكيل، CLI) تقديم هذا السر للاتصال.
```bash
zeroclaw pairing rotate # يُنشئ سرًا جديدًا ويبطل القديم
```
### الصندوق الرملي
- **وقت تشغيل Docker** — عزل حاوية كامل مع أنظمة ملفات وشبكات منفصلة
- **وقت التشغيل الأصلي** — يعمل كعملية مستخدم، محدد النطاق في مساحة العمل افتراضيًا
### قوائم السماح
يمكن للقنوات تقييد الوصول حسب معرف المستخدم:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # قائمة سماح صريحة
```
### التشفير
- **Matrix E2EE** — تشفير من طرف إلى طرف كامل مع التحقق من الجهاز
- **نقل TLS** — جميع حركة API والنفق تستخدم HTTPS/TLS
راجع [توثيق الأمان](docs/security/README.md) للسياسات والممارسات الكاملة.
## إمكانية الملاحظة
يسجل ZeroClaw في `~/.zeroclaw/workspace/logs/` افتراضيًا. يتم تخزين السجلات حسب المكون:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # سجلات البرنامج الخفي (بدء التشغيل، طلبات API، الأخطاء)
├── agent.log # سجلات الوكيل (توجيه الرسائل، تنفيذ الأدوات)
├── telegram.log # سجلات خاصة بالقناة (إذا مُكنت)
└── matrix.log # سجلات خاصة بالقناة (إذا مُكنت)
```
### تكوين التسجيل
```toml
[logging]
level = "info" # debug، info، warn، error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # يومي، ساعي، حجم
max_size_mb = 100 # للتدوير القائم على الحجم
retention_days = 30 # حذف تلقائي بعد N يومًا
```
راجع [مرجع التكوين](docs/config-reference.md#logging) لجميع خيارات التسجيل.
### المقاييس (مخطط)
دعم مقاييس Prometheus لمراقبة الإنتاج قريبًا. التتبع في [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## المهارات
يدعم ZeroClaw المهارات المخصصة — وحدات قابلة لإعادة الاستخدام توسع قدرات النظام.
### تعريف المهارة
يتم تخزين المهارات في `~/.zeroclaw/workspace/skills/<skill-name>/` بهذا الهيكل:
```
skills/
└── my-skill/
├── skill.toml # بيانات المهارة (الاسم، الوصف، التبعيات)
├── prompt.md # موجه النظام للذكاء الاصطناعي
└── tools/ # أدوات مخصصة اختيارية
└── my_tool.py
```
### مثال المهارة
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "يبحث في الويب ويلخص النتائج"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
أنت مساعد بحث. عند طلب البحث عن شيء ما:
1. استخدم web_fetch لاسترجاع المحتوى
2. لخص النتائج بتنسيق سهل القراءة
3. استشهد بالمصادر مع عناوين URL
```
### استخدام المهارات
يتم تحميل المهارات تلقائيًا عند بدء تشغيل الوكيل. أشر إليها بالاسم في المحادثات:
```
المستخدم: استخدم مهارة البحث على الويب للعثور على أخبار الذكاء الاصطناعي الأخيرة
البوت: [يحمل مهارة البحث على الويب، ينفذ web_fetch، يلخص النتائج]
```
راجع قسم [المهارات](#المهارات) لتعليمات إنشاء المهارات الكاملة.
## المهارات المفتوحة
يدعم ZeroClaw [Open Skills](https://github.com/openagents-com/open-skills) — نظام معياري ومحايد للمورد لتوسيع قدرات وكلاء الذكاء الاصطناعي.
### تمكين المهارات المفتوحة
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # اختياري
```
يمكنك أيضًا التجاوز في وقت التشغيل باستخدام `ZEROCLAW_OPEN_SKILLS_ENABLED` و `ZEROCLAW_OPEN_SKILLS_DIR`.
## التطوير
```bash
cargo build # بناء التطوير
cargo build --release # بناء الإصدار (codegen-units=1، يعمل على جميع الأجهزة بما في ذلك Raspberry Pi)
cargo build --profile release-fast # بناء أسرع (codegen-units=8، يتطلب 16 غيغابايت+ ذاكرة عشوائية)
cargo test # تشغيل مجموعة الاختبار الكاملة
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # تنسيق
# تشغيل معيار مقارنة SQLite مقابل Markdown
cargo test --test memory_comparison -- --nocapture
```
### خطاف ما قبل الدفع
يقوم خطاف git بتشغيل `cargo fmt --check` و `cargo clippy -- -D warnings` و `cargo test` قبل كل دفع. قم بتمكينه مرة واحدة:
```bash
git config core.hooksPath .githooks
```
### استكشاف أخطاء البناء وإصلاحها (أخطاء OpenSSL على Linux)
إذا واجهت خطأ بناء `openssl-sys`، قم بمزامنة التبعيات وأعد التجميع باستخدام ملف قفل المستودع:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
تم تكوين ZeroClaw لاستخدام `rustls` لتبعيات HTTP/TLS؛ `--locked` يحافظ على الرسم البياني العابر حتمي في البيئات النظيفة.
لتخطي الخطاف عندما تحتاج إلى دفع سريع أثناء التطوير:
```bash
git push --no-verify
```
## التعاون والتوثيق
ابدأ بمركز التوثيق لخريطة قائمة على المهام:
@@ -850,6 +426,20 @@ git push --no-verify
نحن نبني في المصدر المفتوح لأن أفضل الأفكار تأتي من كل مكان. إذا كنت تقرأ هذا، فأنت جزء منه. مرحبًا. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ المستودع الرسمي وتحذير الانتحال
**هذا هو مستودع ZeroClaw الرسمي الوحيد:**
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## ZeroClaw কী?
ZeroClaw হল একটি হালকা, মিউটেবল এবং এক্সটেনসিবল AI অ্যাসিস্ট্যান্ট ইনফ্রাস্ট্রাকচার যা রাস্টে তৈরি। এটি বিভিন্ন LLM প্রদানকারীদের (Anthropic, OpenAI, Google, Ollama, ইত্যাদি) একটি ইউনিফাইড ইন্টারফেসের মাধ্যমে সংযুক্ত করে এবং একাধিক চ্যানেল (Telegram, Matrix, CLI, ইত্যাদি) সমর্থন করে।
@@ -167,7 +180,7 @@ channels:
## কমিউনিটি
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ channels:
যদি 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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Postaveno studenty a členy komunit Harvard, MIT a Sundai.Club.
<p align="center"><code>Architektura založená na traitech · bezpečný runtime defaultně · vyměnitelný poskytovatel/kanál/nástroj · vše je připojitelné</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Oznámení
Použijte tuto tabulku pro důležitá oznámení (změny kompatibility, bezpečnostní upozornění, servisní okna a blokování verzí).
@@ -93,7 +106,7 @@ Použijte tuto tabulku pro důležitá oznámení (změny kompatibility, bezpeč
| Datum (UTC) | Úroveň | Oznámení | Akce |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritické_ | **Nejsme propojeni** s `openagen/zeroclaw` nebo `zeroclaw.org`. Doména `zeroclaw.org` aktuálně směřuje na fork `openagen/zeroclaw`, a tato doména/repoziťář se vydává za náš oficiální web/projekt. | Nevěřte informacím, binárním souborům, fundraisingu nebo oznámením z těchto zdrojů. Používejte pouze [tento repoziťář](https://github.com/zeroclaw-labs/zeroclaw) a naše ověřené sociální účty. |
| 2026-02-21 | _Důležité_ | Náš oficiální web je nyní online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Děkujeme za trpělivost během čekání. Stále detekujeme pokusy o vydávání se: neúčastněte žádné investiční/fundraisingové aktivity ve jménu ZeroClaw pokud není publikována přes naše oficiální kanály. | Používejte [tento repoziťář](https://github.com/zeroclaw-labs/zeroclaw) jako jediný zdroj pravdy. Sledujte [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (skupina)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), a [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) pro oficiální aktualizace. |
| 2026-02-21 | _Důležité_ | Náš oficiální web je nyní online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Děkujeme za trpělivost během čekání. Stále detekujeme pokusy o vydávání se: neúčastněte žádné investiční/fundraisingové aktivity ve jménu ZeroClaw pokud není publikována přes naše oficiální kanály. | Používejte [tento repoziťář](https://github.com/zeroclaw-labs/zeroclaw) jako jediný zdroj pravdy. Sledujte [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (skupina)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), a [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) pro oficiální aktualizace. |
| 2026-02-19 | _Důležité_ | Anthropic aktualizoval podmínky použití autentizace a přihlašovacích údajů dne 2026-02-19. OAuth autentizace (Free, Pro, Max) je výhradně pro Claude Code a Claude.ai; použití Claude Free/Pro/Max OAuth tokenů v jakémkoliv jiném produktu, nástroji nebo službě (včetně Agent SDK) není povoleno a může porušit Podmínky použití spotřebitele. | Prosím dočasně se vyhněte Claude Code OAuth integracím pro předcházení potenciálním ztrátám. Původní klauzule: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Funkce
@@ -221,7 +234,7 @@ Ukázková vzorka (macOS arm64, měřeno 18. února 2026):
Skript `bootstrap.sh` nainstaluje Rust, naklonuje ZeroClaw, zkompiluje ho a nastaví vaše počáteční vývojové prostředí:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Toto:
@@ -363,443 +376,6 @@ zeroclaw version # Zobrazuje verzi a build informace
Viz [Příkazová reference](docs/commands-reference.md) pro kompletní možnosti a příklady.
## Architektura
```
┌─────────────────────────────────────────────────────────────────┐
│ Kanály (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Agent Orchestrátor │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Směrování │ │ Kontext │ │ Provedení │ │
│ │ Zpráva │ │ Paměť │ │ Nástroj │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Poskytovatel│ │ Paměť │ │ Nástroje │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Klíčové principy:**
- Vše je **trait** — poskytovatelé, kanály, nástroje, paměť, tunely
- Kanály volají orchestrátor; orchestrátor volá poskytovatele + nástroje
- Paměťový systém spravuje konverzační kontext (markdown, SQLite, nebo žádný)
- Runtime abstrahuje provádění kódu (nativní nebo Docker)
- Žádné vendor lock-in — vyměňujte Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama beze změn kódu
Viz [dokumentace architektury](docs/architecture.svg) pro detailní diagramy a detaily implementace.
## Příklady
### Telegram Bot
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Vaše Telegram user ID
```
Spusťte daemon + agent, pak pošlete zprávu vašemu botovi na Telegram:
```
/start
Ahoj! Mohl bys mi pomoci napsat Python skript?
```
Bot odpoví AI-generovaným kódem, provede nástroje pokud požadováno a udržuje konverzační kontext.
### Matrix (end-to-end šifrování)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Pozvěte `@zeroclaw:matrix.org` do šifrované místnosti a bot odpoví s plným šifrováním. Viz [Matrix E2EE Guide](docs/matrix-e2ee-guide.md) pro nastavení ověření zařízení.
### Multi-Poskytovatel
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover při chybě poskytovatele
```
Pokud Anthropic selže nebo má rate-limit, orchestrátor automaticky přepne na OpenAI.
### Vlastní Paměť
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Automatické čištění po 90 dnech
```
Nebo použijte Markdown pro lidsky čitelné ukládání:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Viz [Konfigurační reference](docs/config-reference.md#memory) pro všechny možnosti paměti.
## Podpora Poskytovatelů
| Poskytovatel | Stav | API Klíč | Příklad Modelů |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Stabilní | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Stabilní | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Stabilní | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Stabilní | N/A (lokální) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Stabilní | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Stabilní | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Plánováno | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Plánováno | `COHERE_API_KEY` | TBD |
### Vlastní Endpointy
ZeroClaw podporuje OpenAI-kompatibilní endpointy:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Příklad: použijte [LiteLLM](https://github.com/BerriAI/litellm) jako proxy pro přístup k jakémukoli LLM přes OpenAI rozhraní.
Viz [Poskytovatel reference](docs/providers-reference.md) pro kompletní detaily konfigurace.
## Podpora Kanálů
| Kanál | Stav | Autentizace | Poznámky |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Stabilní | Bot Token | Plná podpora včetně souborů, obrázků, inline tlačítek |
| **Matrix** | ✅ Stabilní | Heslo nebo Token | E2EE podpora s ověřením zařízení |
| **Slack** | 🚧 Plánováno | OAuth nebo Bot Token | Vyžaduje workspace přístup |
| **Discord** | 🚧 Plánováno | Bot Token | Vyžaduje guild oprávnění |
| **WhatsApp** | 🚧 Plánováno | Twilio nebo oficiální API | Vyžaduje business účet |
| **CLI** | ✅ Stabilní | Žádné | Přímé konverzační rozhraní |
| **Web** | 🚧 Plánováno | API Klíč nebo OAuth | Prohlížečové chat rozhraní |
Viz [Kanálová reference](docs/channels-reference.md) pro kompletní instrukce konfigurace.
## Podpora Nástrojů
ZeroClaw poskytuje vestavěné nástroje pro provádění kódu, přístup k souborovému systému a web retrieval:
| Nástroj | Popis | Vyžadovaný Runtime |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Provádí shell příkazy | Nativní nebo Docker |
| **python** | Provádí Python skripty | Python 3.8+ (nativní) nebo Docker |
| **javascript** | Provádí Node.js kód | Node.js 18+ (nativní) nebo Docker |
| **filesystem_read** | Čte soubory | Nativní nebo Docker |
| **filesystem_write** | Zapisuje soubory | Nativní nebo Docker |
| **web_fetch** | Získává web obsah | Nativní nebo Docker |
### Bezpečnost Provedení
- **Nativní Runtime** — běží jako uživatelský proces daemon, plný přístup k souborovému systému
- **Docker Runtime** — plná kontejnerová izolace, oddělené souborové systémy a sítě
Nakonfigurujte politiku provedení v `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Explicitní allowlist
```
Viz [Konfigurační reference](docs/config-reference.md#runtime) pro kompletní možnosti bezpečnosti.
## Nasazení
### Lokální Nasazení (Vývoj)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Serverové Nasazení (Produkce)
Použijte systemd pro správu daemon a agent jako služby:
```bash
# Nainstalujte binary
cargo install --path . --locked
# Nakonfigurujte workspace
zeroclaw init
# Vytvořte systemd servisní soubory
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Povolte a spusťte služby
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Ověřte stav
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Viz [Průvodce síťovým nasazením](docs/network-deployment.md) pro kompletní instrukce produkčního nasazení.
### Docker
```bash
# Sestavte image
docker build -t zeroclaw:latest .
# Spusťte kontejner
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Viz [`Dockerfile`](Dockerfile) pro detaily sestavení a konfigurační možnosti.
### Edge Hardware
ZeroClaw je navržen pro běh na nízko-příkonovém hardwaru:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, jedno ARMv8 jádro, < $5 hardwarové náklady
- **Raspberry Pi 4/5** — 1 GB+ RAM, vícejádrový, ideální pro souběžné úlohy
- **Orange Pi Zero 2** — ~512 MB RAM, čtyřjádrový ARMv8, ultra-nízké náklady
- **x86 SBCs (Intel N100)** — 4-8 GB RAM, rychlé buildy, nativní Docker podpora
Viz [Hardware Guide](docs/hardware/README.md) pro instrukce nastavení specifické pro zařízení.
## Tunneling (Veřejná Expozice)
Exponujte svůj lokální ZeroClaw daemon do veřejné sítě přes bezpečné tunely:
```bash
zeroclaw tunnel start --provider cloudflare
```
Podporovaní tunnel poskytovatelé:
- **Cloudflare Tunnel** — bezplatný HTTPS, bez expozice portů, multi-doména podpora
- **Ngrok** — rychlé nastavení, vlastní domény (placený plán)
- **Tailscale** — soukromá mesh síť, bez veřejného portu
Viz [Konfigurační reference](docs/config-reference.md#tunnel) pro kompletní konfigurační možnosti.
## Bezpečnost
ZeroClaw implementuje více vrstev bezpečnosti:
### Párování
Daemon generuje párovací tajemství při prvním spuštění uložené v `~/.zeroclaw/workspace/.pairing`. Klienti (agent, CLI) musí předložit toto tajemství pro připojení.
```bash
zeroclaw pairing rotate # Generuje nové tajemství a zneplatňuje staré
```
### Sandboxing
- **Docker Runtime** — plná kontejnerová izolace s oddělenými souborovými systémy a sítěmi
- **Nativní Runtime** — běží jako uživatelský proces, scoped na workspace defaultně
### Allowlisty
Kanály mohou omezit přístup podle user ID:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Explicitní allowlist
```
### Šifrování
- **Matrix E2EE** — plné end-to-end šifrování s ověřením zařízení
- **TLS Transport** — veškerý API a tunnel provoz používá HTTPS/TLS
Viz [Bezpečnostní dokumentace](docs/security/README.md) pro kompletní politiky a praktiky.
## Pozorovatelnost
ZeroClaw loguje do `~/.zeroclaw/workspace/logs/` defaultně. Logy jsou ukládány podle komponenty:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Daemon logy (startup, API požadavky, chyby)
├── agent.log # Agent logy (směrování zpráv, provedení nástrojů)
├── telegram.log # Kanál-specifické logy (pokud povoleno)
└── matrix.log # Kanál-specifické logy (pokud povoleno)
```
### Konfigurace Logování
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Pro rotaci založenou na velikosti
retention_days = 30 # Automatické čištění po N dnech
```
Viz [Konfigurační reference](docs/config-reference.md#logging) pro všechny možnosti logování.
### Metriky (Plánováno)
Podpora Prometheus metrik pro produkční monitoring již brzy. Sledování v [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Dovednosti
ZeroClaw podporuje vlastní dovednosti — opakovaně použitelné moduly rozšiřující schopnosti systému.
### Definice Dovednosti
Dovednosti jsou uloženy v `~/.zeroclaw/workspace/skills/<skill-name>/` s touto strukturou:
```
skills/
└── my-skill/
├── skill.toml # Metadata dovednosti (název, popis, závislosti)
├── prompt.md # Systémový prompt pro AI
└── tools/ # Volitelné vlastní nástroje
└── my_tool.py
```
### Příklad Dovednosti
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Hledá na webu a shrnuje výsledky"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Jste výzkumný asistent. Když požádáte o výzkum něčeho:
1. Použijte web_fetch pro získání obsahu
2. Shrňte výsledky v snadno čitelném formátu
3. Citujte zdroje s URL
```
### Použití Dovedností
Dovednosti jsou automaticky načítány při startu agenta. Odkazujte na ně jménem v konverzacích:
```
Uživatel: Použij dovednost web-research k nalezení nejnovějších AI zpráv
Bot: [načte dovednost web-research, provede web_fetch, shrne výsledky]
```
Viz sekce [Dovednosti](#dovednosti) pro kompletní instrukce tvorby dovedností.
## Open Skills
ZeroClaw podporuje [Open Skills](https://github.com/openagents-com/open-skills) — modulární a poskytovatel-agnostický systém pro rozšíření schopností AI agentů.
### Povolit Open Skills
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # volitelné
```
Můžete také přepsat za běhu pomocí `ZEROCLAW_OPEN_SKILLS_ENABLED` a `ZEROCLAW_OPEN_SKILLS_DIR`.
## Vývoj
```bash
cargo build # Dev build
cargo build --release # Release build (codegen-units=1, funguje na všech zařízeních včetně Raspberry Pi)
cargo build --profile release-fast # Rychlejší build (codegen-units=8, vyžaduje 16 GB+ RAM)
cargo test # Spustí plnou testovací sadu
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Formátování
# Spusťte SQLite vs Markdown srovnávací benchmark
cargo test --test memory_comparison -- --nocapture
```
### Pre-push hook
Git hook spouští `cargo fmt --check`, `cargo clippy -- -D warnings`, a `cargo test` před každým push. Povolte jej jednou:
```bash
git config core.hooksPath .githooks
```
### Řešení problémů s Buildem (OpenSSL chyby na Linuxu)
Pokud narazíte na `openssl-sys` build chybu, synchronizujte závislosti a znovu zkompilujte s lockfile repoziťáře:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw je nakonfigurován pro použití `rustls` pro HTTP/TLS závislosti; `--locked` udržuje transitivní graf deterministický v čistých prostředích.
Pro přeskočení hooku když potřebujete rychlý push během vývoje:
```bash
git push --no-verify
```
## Spolupráce & Docs
Začněte s dokumentačním centrem pro task-based mapu:
@@ -850,6 +426,20 @@ Upřímné poděkování komunitám a institucím které inspirují a živí tut
Stavíme v open source protože nejlepší nápady přicházejí odkudkoliv. Pokud toto čtete, jste součástí toho. Vítejte. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Oficiální Repoziťář a Varování před Vydáváním se
**Toto je jediný oficiální ZeroClaw repoziťář:**
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Hvad er ZeroClaw?
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.).
@@ -167,7 +180,7 @@ Se [LICENSE-APACHE](LICENSE-APACHE) og [LICENSE-MIT](LICENSE-MIT) for detaljer.
## Fællesskab
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ Se [LICENSE-APACHE](LICENSE-APACHE) og [LICENSE-MIT](LICENSE-MIT) for detaljer.
Hvis ZeroClaw er nyttigt for dig, overvej venligst at købe os en kaffe:
[![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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -90,6 +93,16 @@ Erstellt von Studenten und Mitgliedern der Harvard, MIT und Sundai.Club Gemeinsc
<p align="center"><code>Trait-basierte Architektur · sicheres Runtime standardmäßig · Provider/Channel/Tool austauschbar · alles ist steckbar</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Ankündigungen
Verwende diese Tabelle für wichtige Hinweise (Kompatibilitätsänderungen, Sicherheitshinweise, Wartungsfenster und Versionsblockierungen).
@@ -97,7 +110,7 @@ Verwende diese Tabelle für wichtige Hinweise (Kompatibilitätsänderungen, Sich
| Datum (UTC) | Ebene | Hinweis | Aktion |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritisch_ | Wir sind **nicht verbunden** mit `openagen/zeroclaw` oder `zeroclaw.org`. Die Domain `zeroclaw.org` zeigt derzeit auf den Fork `openagen/zeroclaw`, und diese Domain/Repository fälscht unsere offizielle Website/Projekt. | Vertraue keinen Informationen, Binärdateien, Fundraising oder Ankündigungen aus diesen Quellen. Verwende nur [dieses Repository](https://github.com/zeroclaw-labs/zeroclaw) und unsere verifizierten Social-Media-Konten. |
| 2026-02-21 | _Wichtig_ | Unsere offizielle Website ist jetzt online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Danke für deine Geduld während der Wartezeit. Wir erkennen weiterhin Fälschungsversuche: nimm an keiner Investitions-/Finanzierungsaktivität im Namen von ZeroClaw teil, wenn sie nicht über unsere offiziellen Kanäle veröffentlicht wird. | Verwende [dieses Repository](https://github.com/zeroclaw-labs/zeroclaw) als einzige Quelle der Wahrheit. Folge [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (Gruppe)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), und [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) für offizielle Updates. |
| 2026-02-21 | _Wichtig_ | Unsere offizielle Website ist jetzt online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Danke für deine Geduld während der Wartezeit. Wir erkennen weiterhin Fälschungsversuche: nimm an keiner Investitions-/Finanzierungsaktivität im Namen von ZeroClaw teil, wenn sie nicht über unsere offiziellen Kanäle veröffentlicht wird. | Verwende [dieses Repository](https://github.com/zeroclaw-labs/zeroclaw) als einzige Quelle der Wahrheit. Folge [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (Gruppe)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), und [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) für offizielle Updates. |
| 2026-02-19 | _Wichtig_ | Anthropic hat die Nutzungsbedingungen für Authentifizierung und Anmeldedaten am 2026-02-19 aktualisiert. Die OAuth-Authentifizierung (Free, Pro, Max) ist ausschließlich für Claude Code und Claude.ai; die Verwendung von Claude Free/Pro/Max OAuth-Token in einem anderen Produkt, Tool oder Dienst (einschließlich Agent SDK) ist nicht erlaubt und kann gegen die Verbrauchernutzungsbedingungen verstoßen. | Bitte vermeide vorübergehend Claude Code OAuth-Integrationen, um potenzielle Verluste zu verhindern. Originalklausel: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Funktionen
@@ -225,7 +238,7 @@ Beispielstichprobe (macOS arm64, gemessen am 18. Februar 2026):
Das `bootstrap.sh`-Skript installiert Rust, klont ZeroClaw, kompiliert es und richtet deine anfängliche Entwicklungsumgebung ein:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Dies wird:
@@ -367,443 +380,6 @@ zeroclaw version # Zeigt Version und Build-Informationen
Siehe [Befehlsreferenz](docs/commands-reference.md) für vollständige Optionen und Beispiele.
## Architektur
```
┌─────────────────────────────────────────────────────────────────┐
│ Channels (Trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Agent-Orchestrator │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Routing │ │ Kontext │ │ Ausführung │ │
│ │ Nachricht │ │ Speicher │ │ Werkzeug │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Provider │ │ Speicher │ │ Werkzeuge │
│ (Trait) │ │ (Trait) │ │ (Trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (Trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Schlüsselprinzipien:**
- Alles ist ein **Trait** — Provider, Channels, Tools, Speicher, Tunnel
- Channels rufen den Orchestrator auf; der Orchestrator ruft Provider + Tools auf
- Das Speichersystem verwaltet Konversationskontext (Markdown, SQLite, oder keiner)
- Das Runtime abstrahiert Code-Ausführung (nativ oder Docker)
- Kein Provider-Lock-in — tausche Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama ohne Code-Änderungen
Siehe [Architektur-Dokumentation](docs/architecture.svg) für detaillierte Diagramme und Implementierungsdetails.
## Beispiele
### Telegram-Bot
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Deine Telegram-Benutzer-ID
```
Starte den Daemon + Agent, dann sende eine Nachricht an deinen Bot auf Telegram:
```
/start
Hallo! Könntest du mir helfen, ein Python-Skript zu schreiben?
```
Der Bot antwortet mit KI-generiertem Code, führt Tools auf Anfrage aus und behält den Konversationskontext.
### Matrix (Ende-zu-Ende-Verschlüsselung)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Lade `@zeroclaw:matrix.org` in einen verschlüsselten Raum ein, und der Bot wird mit vollständiger Verschlüsselung antworten. Siehe [Matrix E2EE-Leitfaden](docs/matrix-e2ee-guide.md) für Geräteverifizierungs-Setup.
### Multi-Provider
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover bei Provider-Fehler
```
Wenn Anthropic fehlschlägt oder Rate-Limit erreicht, wechselt der Orchestrator automatisch zu OpenAI.
### Benutzerdefinierter Speicher
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Automatische Bereinigung nach 90 Tagen
```
Oder verwende Markdown für menschenlesbaren Speicher:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Siehe [Konfigurationsreferenz](docs/config-reference.md#memory) für alle Speicheroptionen.
## Provider-Unterstützung
| Provider | Status | API-Schlüssel | Beispielmodelle |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Stabil | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Stabil | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Stabil | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Stabil | N/A (lokal) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Stabil | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Stabil | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Geplant | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Geplant | `COHERE_API_KEY` | TBD |
### Benutzerdefinierte Endpoints
ZeroClaw unterstützt OpenAI-kompatible Endpoints:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Beispiel: verwende [LiteLLM](https://github.com/BerriAI/litellm) als Proxy, um auf jedes LLM über die OpenAI-Schnittstelle zuzugreifen.
Siehe [Provider-Referenz](docs/providers-reference.md) für vollständige Konfigurationsdetails.
## Channel-Unterstützung
| Channel | Status | Authentifizierung | Hinweise |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Stabil | Bot-Token | Vollständige Unterstützung inklusive Dateien, Bilder, Inline-Buttons |
| **Matrix** | ✅ Stabil | Passwort oder Token | E2EE-Unterstützung mit Geräteverifizierung |
| **Slack** | 🚧 Geplant | OAuth oder Bot-Token | Erfordert Workspace-Zugriff |
| **Discord** | 🚧 Geplant | Bot-Token | Erfordert Guild-Berechtigungen |
| **WhatsApp** | 🚧 Geplant | Twilio oder offizielle API | Erfordert Business-Konto |
| **CLI** | ✅ Stabil | Keine | Direkte konversationelle Schnittstelle |
| **Web** | 🚧 Geplant | API-Schlüssel oder OAuth | Browserbasierte Chat-Schnittstelle |
Siehe [Channel-Referenz](docs/channels-reference.md) für vollständige Konfigurationsanleitungen.
## Tool-Unterstützung
ZeroClaw bietet integrierte Tools für Code-Ausführung, Dateisystemzugriff und Web-Abruf:
| Tool | Beschreibung | Erforderliches Runtime |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Führt Shell-Befehle aus | Nativ oder Docker |
| **python** | Führt Python-Skripte aus | Python 3.8+ (nativ) oder Docker |
| **javascript** | Führt Node.js-Code aus | Node.js 18+ (nativ) oder Docker |
| **filesystem_read** | Liest Dateien | Nativ oder Docker |
| **filesystem_write** | Schreibt Dateien | Nativ oder Docker |
| **web_fetch** | Ruft Web-Inhalte ab | Nativ oder Docker |
### Ausführungssicherheit
- **Natives Runtime** — läuft als Benutzerprozess des Daemons, voller Dateisystemzugriff
- **Docker-Runtime** — vollständige Container-Isolierung, separate Dateisysteme und Netzwerke
Konfiguriere die Ausführungsrichtlinie in `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Explizite Allowlist
```
Siehe [Konfigurationsreferenz](docs/config-reference.md#runtime) für vollständige Sicherheitsoptionen.
## Deployment
### Lokales Deployment (Entwicklung)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Server-Deployment (Produktion)
Verwende systemd, um Daemon und Agent als Dienste zu verwalten:
```bash
# Installiere das Binary
cargo install --path . --locked
# Konfiguriere den Workspace
zeroclaw init
# Erstelle systemd-Dienstdateien
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Aktiviere und starte die Dienste
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Überprüfe den Status
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Siehe [Netzwerk-Deployment-Leitfaden](docs/network-deployment.md) für vollständige Produktions-Deployment-Anleitungen.
### Docker
```bash
# Baue das Image
docker build -t zeroclaw:latest .
# Führe den Container aus
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Siehe [`Dockerfile`](Dockerfile) für Build-Details und Konfigurationsoptionen.
### Edge-Hardware
ZeroClaw ist für den Betrieb auf Low-Power-Hardware konzipiert:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, einzelner ARMv8-Kern, < $5 Hardware-Kosten
- **Raspberry Pi 4/5** — 1 GB+ RAM, Multi-Core, ideal für gleichzeitige Workloads
- **Orange Pi Zero 2** — ~512 MB RAM, Quad-Core ARMv8, Ultra-Low-Cost
- **x86 SBCs (Intel N100)** — 4-8 GB RAM, schnelle Builds, nativer Docker-Support
Siehe [Hardware-Leitfaden](docs/hardware/README.md) für gerätespezifische Einrichtungsanleitungen.
## Tunneling (Öffentliche Exposition)
Exponiere deinen lokalen ZeroClaw-Daemon über sichere Tunnel zum öffentlichen Netzwerk:
```bash
zeroclaw tunnel start --provider cloudflare
```
Unterstützte Tunnel-Provider:
- **Cloudflare Tunnel** — kostenloses HTTPS, keine Port-Exposition, Multi-Domain-Support
- **Ngrok** — schnelle Einrichtung, benutzerdefinierte Domains (kostenpflichtiger Plan)
- **Tailscale** — privates Mesh-Netzwerk, kein öffentlicher Port
Siehe [Konfigurationsreferenz](docs/config-reference.md#tunnel) für vollständige Konfigurationsoptionen.
## Sicherheit
ZeroClaw implementiert mehrere Sicherheitsebenen:
### Pairing
Der Daemon generiert beim ersten Start ein Pairing-Geheimnis, das in `~/.zeroclaw/workspace/.pairing` gespeichert wird. Clients (Agent, CLI) müssen dieses Geheimnis präsentieren, um eine Verbindung herzustellen.
```bash
zeroclaw pairing rotate # Generiert ein neues Geheimnis und erklärt das alte für ungültig
```
### Sandboxing
- **Docker-Runtime** — vollständige Container-Isolierung mit separaten Dateisystemen und Netzwerken
- **Natives Runtime** — läuft als Benutzerprozess, standardmäßig auf Workspace beschränkt
### Allowlists
Channels können den Zugriff nach Benutzer-ID einschränken:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Explizite Allowlist
```
### Verschlüsselung
- **Matrix E2EE** — vollständige Ende-zu-Ende-Verschlüsselung mit Geräteverifizierung
- **TLS-Transport** — der gesamte API- und Tunnel-Verkehr verwendet HTTPS/TLS
Siehe [Sicherheitsdokumentation](docs/security/README.md) für vollständige Richtlinien und Praktiken.
## Observability
ZeroClaw protokolliert standardmäßig in `~/.zeroclaw/workspace/logs/`. Logs werden nach Komponente gespeichert:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Daemon-Logs (Start, API-Anfragen, Fehler)
├── agent.log # Agent-Logs (Nachrichten-Routing, Tool-Ausführung)
├── telegram.log # Kanalspezifische Logs (falls aktiviert)
└── matrix.log # Kanalspezifische Logs (falls aktiviert)
```
### Logging-Konfiguration
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Für größenbasierte Rotation
retention_days = 30 # Automatische Bereinigung nach N Tagen
```
Siehe [Konfigurationsreferenz](docs/config-reference.md#logging) für alle Logging-Optionen.
### Metriken (Geplant)
Prometheus-Metrik-Unterstützung für Produktionsüberwachung kommt bald. Verfolgung in [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Skills
ZeroClaw unterstützt benutzerdefinierte Skills — wiederverwendbare Module, die die Systemfähigkeiten erweitern.
### Skill-Definition
Skills werden in `~/.zeroclaw/workspace/skills/<skill-name>/` mit dieser Struktur gespeichert:
```
skills/
└── my-skill/
├── skill.toml # Skill-Metadaten (Name, Beschreibung, Abhängigkeiten)
├── prompt.md # System-Prompt für die KI
└── tools/ # Optionale benutzerdefinierte Tools
└── my_tool.py
```
### Skill-Beispiel
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Sucht im Web und fasst Ergebnisse zusammen"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Du bist ein Forschungsassistent. Wenn du gebeten wirst, etwas zu recherchieren:
1. Verwende web_fetch, um den Inhalt abzurufen
2. Fasse die Ergebnisse in einem leicht lesbaren Format zusammen
3. Zitiere die Quellen mit URLs
```
### Skill-Verwendung
Skills werden beim Agent-Start automatisch geladen. Referenziere sie nach Namen in Konversationen:
```
Benutzer: Verwende den Web-Research-Skill, um die neuesten KI-Nachrichten zu finden
Bot: [lädt den Web-Research-Skill, führt web_fetch aus, fasst Ergebnisse zusammen]
```
Siehe Abschnitt [Skills](#skills) für vollständige Skill-Erstellungsanleitungen.
## Open Skills
ZeroClaw unterstützt [Open Skills](https://github.com/openagents-com/open-skills) — ein modulares und provider-agnostisches System zur Erweiterung von KI-Agenten-Fähigkeiten.
### Open Skills aktivieren
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # optional
```
Du kannst auch zur Laufzeit mit `ZEROCLAW_OPEN_SKILLS_ENABLED` und `ZEROCLAW_OPEN_SKILLS_DIR` überschreiben.
## Entwicklung
```bash
cargo build # Entwicklungs-Build
cargo build --release # Release-Build (codegen-units=1, funktioniert auf allen Geräten einschließlich Raspberry Pi)
cargo build --profile release-fast # Schnellerer Build (codegen-units=8, erfordert 16 GB+ RAM)
cargo test # Führt die vollständige Test-Suite aus
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Formatierung
# Führe den SQLite vs Markdown Vergleichs-Benchmark aus
cargo test --test memory_comparison -- --nocapture
```
### Pre-push-Hook
Ein Git-Hook führt `cargo fmt --check`, `cargo clippy -- -D warnings`, und `cargo test` vor jedem Push aus. Aktiviere ihn einmal:
```bash
git config core.hooksPath .githooks
```
### Build-Fehlerbehebung (OpenSSL-Fehler unter Linux)
Wenn du auf einen `openssl-sys`-Build-Fehler stößt, synchronisiere Abhängigkeiten und kompiliere mit dem Lockfile des Repositories neu:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw ist so konfiguriert, dass es `rustls` für HTTP/TLS-Abhängigkeiten verwendet; `--locked` hält den transitiven Graphen in sauberen Umgebungen deterministisch.
Um den Hook zu überspringen, wenn du während der Entwicklung einen schnellen Push benötigst:
```bash
git push --no-verify
```
## Zusammenarbeit & Docs
Beginne mit dem Dokumentations-Hub für eine Aufgaben-basierte Karte:
@@ -854,6 +430,20 @@ Ein herzliches Dankeschön an die Gemeinschaften und Institutionen, die diese Op
Wir bauen in Open Source, weil die besten Ideen von überall kommen. Wenn du das liest, bist du Teil davon. Willkommen. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Offizielles Repository und Fälschungswarnung
**Dies ist das einzige offizielle ZeroClaw-Repository:**
+29 -5
View File
@@ -14,10 +14,10 @@
<a href="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" 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.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>
</p>
<p align="center">
@@ -57,6 +57,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
> **📝 Σημείωση:** Αυτό είναι ένα συνοπτικό README στα ελληνικά. Για πλήρη τεκμηρίωση, ανατρέξτε στο [αγγλικό README](README.md). Οι σύνδεσμοι τεκμηρίωσης παραπέμπουν στην αγγλική τεκμηρίωση.
## Τι είναι το ZeroClaw;
@@ -169,7 +179,7 @@ channels:
## Κοινότητα
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -179,3 +189,17 @@ channels:
Αν το 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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Construido por estudiantes y miembros de las comunidades de Harvard, MIT y Sunda
<p align="center"><code>Arquitectura basada en traits · runtime seguro por defecto · proveedor/canal/herramienta intercambiables · todo es conectable</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Anuncios
Usa esta tabla para avisos importantes (cambios de compatibilidad, avisos de seguridad, ventanas de mantenimiento y bloqueos de versión).
@@ -93,7 +106,7 @@ Usa esta tabla para avisos importantes (cambios de compatibilidad, avisos de seg
| Fecha (UTC) | Nivel | Aviso | Acción |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Crítico_ | **No estamos afiliados** con `openagen/zeroclaw` o `zeroclaw.org`. El dominio `zeroclaw.org` apunta actualmente al fork `openagen/zeroclaw`, y este dominio/repositorio está suplantando nuestro sitio web/proyecto oficial. | No confíes en información, binarios, recaudaciones de fondos o anuncios de estas fuentes. Usa solo [este repositorio](https://github.com/zeroclaw-labs/zeroclaw) y nuestras cuentas sociales verificadas. |
| 2026-02-21 | _Importante_ | Nuestro sitio web oficial ahora está en línea: [zeroclawlabs.ai](https://zeroclawlabs.ai). Gracias por tu paciencia durante la espera. Todavía detectamos intentos de suplantación: no participes en ninguna actividad de inversión/financiamiento en nombre de ZeroClaw si no se publica a través de nuestros canales oficiales. | Usa [este repositorio](https://github.com/zeroclaw-labs/zeroclaw) como la única fuente de verdad. Sigue [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupo)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), y [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) para actualizaciones oficiales. |
| 2026-02-21 | _Importante_ | Nuestro sitio web oficial ahora está en línea: [zeroclawlabs.ai](https://zeroclawlabs.ai). Gracias por tu paciencia durante la espera. Todavía detectamos intentos de suplantación: no participes en ninguna actividad de inversión/financiamiento en nombre de ZeroClaw si no se publica a través de nuestros canales oficiales. | Usa [este repositorio](https://github.com/zeroclaw-labs/zeroclaw) como la única fuente de verdad. Sigue [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupo)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), y [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) para actualizaciones oficiales. |
| 2026-02-19 | _Importante_ | Anthropic actualizó los términos de uso de autenticación y credenciales el 2026-02-19. La autenticación OAuth (Free, Pro, Max) es exclusivamente para Claude Code y Claude.ai; el uso de tokens OAuth de Claude Free/Pro/Max en cualquier otro producto, herramienta o servicio (incluyendo Agent SDK) no está permitido y puede violar los Términos de Uso del Consumidor. | Por favor, evita temporalmente las integraciones OAuth de Claude Code para prevenir cualquier pérdida potencial. Cláusula original: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Características
@@ -221,7 +234,7 @@ Ejemplo de muestra (macOS arm64, medido el 18 de febrero de 2026):
El script `bootstrap.sh` instala Rust, clona ZeroClaw, lo compila, y configura tu entorno de desarrollo inicial:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Esto:
@@ -363,443 +376,6 @@ zeroclaw version # Muestra versión e información de build
Ver [Referencia de Comandos](docs/commands-reference.md) para opciones y ejemplos completos.
## Arquitectura
```
┌─────────────────────────────────────────────────────────────────┐
│ Canales (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Orquestador Agent │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Ruteo │ │ Contexto │ │ Ejecución │ │
│ │ Mensaje │ │ Memoria │ │ Herramienta│ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Proveedores │ │ Memoria │ │ Herramientas │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Principios clave:**
- Todo es un **trait** — proveedores, canales, herramientas, memoria, túneles
- Los canales llaman al orquestador; el orquestador llama a proveedores + herramientas
- El sistema de memoria gestiona contexto conversacional (markdown, SQLite, o ninguno)
- El runtime abstrae la ejecución de código (nativo o Docker)
- Sin lock-in de proveedor — intercambia Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama sin cambios de código
Ver [documentación de arquitectura](docs/architecture.svg) para diagramas detallados y detalles de implementación.
## Ejemplos
### Bot de Telegram
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Tu ID de usuario de Telegram
```
Inicia el daemon + agent, luego envía un mensaje a tu bot en Telegram:
```
/start
¡Hola! ¿Podrías ayudarme a escribir un script Python?
```
El bot responde con código generado por AI, ejecuta herramientas si se solicita, y mantiene el contexto de conversación.
### Matrix (cifrado extremo a extremo)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Invita a `@zeroclaw:matrix.org` a una sala cifrada, y el bot responderá con cifrado completo. Ver [Guía Matrix E2EE](docs/matrix-e2ee-guide.md) para configuración de verificación de dispositivo.
### Multi-Proveedor
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover en error de proveedor
```
Si Anthropic falla o tiene rate-limit, el orquestador hace failover automáticamente a OpenAI.
### Memoria Personalizada
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Purga automática después de 90 días
```
O usa Markdown para almacenamiento legible por humanos:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Ver [Referencia de Configuración](docs/config-reference.md#memory) para todas las opciones de memoria.
## Soporte de Proveedor
| Proveedor | Estado | API Key | Modelos de Ejemplo |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Estable | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Estable | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Estable | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Estable | N/A (local) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Estable | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Estable | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Planificado | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Planificado | `COHERE_API_KEY` | TBD |
### Endpoints Personalizados
ZeroClaw soporta endpoints compatibles con OpenAI:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Ejemplo: usa [LiteLLM](https://github.com/BerriAI/litellm) como proxy para acceder a cualquier LLM vía interfaz OpenAI.
Ver [Referencia de Proveedores](docs/providers-reference.md) para detalles de configuración completos.
## Soporte de Canal
| Canal | Estado | Autenticación | Notas |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Estable | Bot Token | Soporte completo incluyendo archivos, imágenes, botones inline |
| **Matrix** | ✅ Estable | Contraseña o Token | Soporte E2EE con verificación de dispositivo |
| **Slack** | 🚧 Planificado | OAuth o Bot Token | Requiere acceso a workspace |
| **Discord** | 🚧 Planificado | Bot Token | Requiere permisos de guild |
| **WhatsApp** | 🚧 Planificado | Twilio o API oficial | Requiere cuenta business |
| **CLI** | ✅ Estable | Ninguno | Interfaz conversacional directa |
| **Web** | 🚧 Planificado | API Key o OAuth | Interfaz de chat basada en navegador |
Ver [Referencia de Canales](docs/channels-reference.md) para instrucciones de configuración completas.
## Soporte de Herramientas
ZeroClaw proporciona herramientas integradas para ejecución de código, acceso al sistema de archivos y recuperación web:
| Herramienta | Descripción | Runtime Requerido |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Ejecuta comandos shell | Nativo o Docker |
| **python** | Ejecuta scripts Python | Python 3.8+ (nativo) o Docker |
| **javascript** | Ejecuta código Node.js | Node.js 18+ (nativo) o Docker |
| **filesystem_read** | Lee archivos | Nativo o Docker |
| **filesystem_write** | Escribe archivos | Nativo o Docker |
| **web_fetch** | Obtiene contenido web | Nativo o Docker |
### Seguridad de Ejecución
- **Runtime Nativo** — se ejecuta como proceso de usuario del daemon, acceso completo al sistema de archivos
- **Runtime Docker** — aislamiento completo de contenedor, sistemas de archivos y redes separados
Configura la política de ejecución en `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Lista permitida explícita
```
Ver [Referencia de Configuración](docs/config-reference.md#runtime) para opciones de seguridad completas.
## Despliegue
### Despliegue Local (Desarrollo)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Despliegue en Servidor (Producción)
Usa systemd para gestionar el daemon y agent como servicios:
```bash
# Instala el binario
cargo install --path . --locked
# Configura el workspace
zeroclaw init
# Crea archivos de servicio systemd
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Habilita e inicia los servicios
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Verifica el estado
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Ver [Guía de Despliegue de Red](docs/network-deployment.md) para instrucciones completas de despliegue en producción.
### Docker
```bash
# Compila la imagen
docker build -t zeroclaw:latest .
# Ejecuta el contenedor
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Ver [`Dockerfile`](Dockerfile) para detalles de build y opciones de configuración.
### Hardware Edge
ZeroClaw está diseñado para ejecutarse en hardware de bajo consumo:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, núcleo ARMv8 único, < $5 costo de hardware
- **Raspberry Pi 4/5** — 1 GB+ RAM, multi-núcleo, ideal para workloads concurrentes
- **Orange Pi Zero 2** — ~512 MB RAM, quad-core ARMv8, costo ultra-bajo
- **SBCs x86 (Intel N100)** — 4-8 GB RAM, builds rápidos, soporte Docker nativo
Ver [Guía de Hardware](docs/hardware/README.md) para instrucciones de configuración específicas por dispositivo.
## Tunneling (Exposición Pública)
Expón tu daemon ZeroClaw local a la red pública vía túneles seguros:
```bash
zeroclaw tunnel start --provider cloudflare
```
Proveedores de tunnel soportados:
- **Cloudflare Tunnel** — HTTPS gratis, sin exposición de puertos, soporte multi-dominio
- **Ngrok** — configuración rápida, dominios personalizados (plan de pago)
- **Tailscale** — red mesh privada, sin puerto público
Ver [Referencia de Configuración](docs/config-reference.md#tunnel) para opciones de configuración completas.
## Seguridad
ZeroClaw implementa múltiples capas de seguridad:
### Emparejamiento
El daemon genera un secreto de emparejamiento al primer inicio almacenado en `~/.zeroclaw/workspace/.pairing`. Los clientes (agent, CLI) deben presentar este secreto para conectarse.
```bash
zeroclaw pairing rotate # Genera un nuevo secreto e invalida el anterior
```
### Sandboxing
- **Runtime Docker** — aislamiento completo de contenedor con sistemas de archivos y redes separados
- **Runtime Nativo** — se ejecuta como proceso de usuario, con alcance de workspace por defecto
### Listas Permitidas
Los canales pueden restringir acceso por ID de usuario:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Lista permitida explícita
```
### Cifrado
- **Matrix E2EE** — cifrado extremo a extremo completo con verificación de dispositivo
- **Transporte TLS** — todo el tráfico de API y tunnel usa HTTPS/TLS
Ver [Documentación de Seguridad](docs/security/README.md) para políticas y prácticas completas.
## Observabilidad
ZeroClaw registra logs en `~/.zeroclaw/workspace/logs/` por defecto. Los logs se almacenan por componente:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Logs del daemon (inicio, solicitudes API, errores)
├── agent.log # Logs del agent (ruteo de mensajes, ejecución de herramientas)
├── telegram.log # Logs específicos del canal (si está habilitado)
└── matrix.log # Logs específicos del canal (si está habilitado)
```
### Configuración de Logging
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Para rotación basada en tamaño
retention_days = 30 # Purga automática después de N días
```
Ver [Referencia de Configuración](docs/config-reference.md#logging) para todas las opciones de logging.
### Métricas (Planificado)
Soporte de métricas Prometheus para monitoreo en producción próximamente. Seguimiento en [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Habilidades (Skills)
ZeroClaw soporta habilidades personalizadas — módulos reutilizables que extienden las capacidades del sistema.
### Definición de Habilidad
Las habilidades se almacenan en `~/.zeroclaw/workspace/skills/<skill-name>/` con esta estructura:
```
skills/
└── my-skill/
├── skill.toml # Metadatos de habilidad (nombre, descripción, dependencias)
├── prompt.md # Prompt de sistema para la AI
└── tools/ # Herramientas personalizadas opcionales
└── my_tool.py
```
### Ejemplo de Habilidad
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Busca en la web y resume resultados"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Eres un asistente de investigación. Cuando te pidan buscar algo:
1. Usa web_fetch para obtener el contenido
2. Resume los resultados en un formato fácil de leer
3. Cita las fuentes con URLs
```
### Uso de Habilidades
Las habilidades se cargan automáticamente al inicio del agent. Referéncialas por nombre en conversaciones:
```
Usuario: Usa la habilidad web-research para encontrar las últimas noticias de AI
Bot: [carga la habilidad web-research, ejecuta web_fetch, resume resultados]
```
Ver sección [Habilidades (Skills)](#habilidades-skills) para instrucciones completas de creación de habilidades.
## Open Skills
ZeroClaw soporta [Open Skills](https://github.com/openagents-com/open-skills) — un sistema modular y agnóstico de proveedores para extender capacidades de agentes AI.
### Habilitar Open Skills
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # opcional
```
También puedes sobrescribir en runtime con `ZEROCLAW_OPEN_SKILLS_ENABLED` y `ZEROCLAW_OPEN_SKILLS_DIR`.
## Desarrollo
```bash
cargo build # Build de desarrollo
cargo build --release # Build release (codegen-units=1, funciona en todos los dispositivos incluyendo Raspberry Pi)
cargo build --profile release-fast # Build más rápido (codegen-units=8, requiere 16 GB+ RAM)
cargo test # Ejecuta el suite de pruebas completo
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Formato
# Ejecuta el benchmark de comparación SQLite vs Markdown
cargo test --test memory_comparison -- --nocapture
```
### Hook pre-push
Un hook de git ejecuta `cargo fmt --check`, `cargo clippy -- -D warnings`, y `cargo test` antes de cada push. Actívalo una vez:
```bash
git config core.hooksPath .githooks
```
### Solución de Problemas de Build (errores OpenSSL en Linux)
Si encuentras un error de build `openssl-sys`, sincroniza dependencias y recompila con el lockfile del repositorio:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw está configurado para usar `rustls` para dependencias HTTP/TLS; `--locked` mantiene el grafo transitivo determinista en entornos limpios.
Para saltar el hook cuando necesites un push rápido durante desarrollo:
```bash
git push --no-verify
```
## Colaboración y Docs
Comienza con el hub de documentación para un mapa basado en tareas:
@@ -850,6 +426,20 @@ Un sincero agradecimiento a las comunidades e instituciones que inspiran y alime
Construimos en código abierto porque las mejores ideas vienen de todas partes. Si estás leyendo esto, eres parte de esto. Bienvenido. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Repositorio Oficial y Advertencia de Suplantación
**Este es el único repositorio oficial de ZeroClaw:**
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Mikä on ZeroClaw?
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.).
@@ -167,7 +180,7 @@ Katso [LICENSE-APACHE](LICENSE-APACHE) ja [LICENSE-MIT](LICENSE-MIT) yksityiskoh
## Yhteisö
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ Katso [LICENSE-APACHE](LICENSE-APACHE) ja [LICENSE-MIT](LICENSE-MIT) yksityiskoh
Jos ZeroClaw on hyödyllinen sinulle, harkitse kahvin ostamista meille:
[![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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+31 -444
View File
@@ -14,10 +14,10 @@
<a href="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributeurs" /></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="Offrez-moi un café" /></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 : Officiel" /></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.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">
@@ -61,7 +61,7 @@ Construit par des étudiants et membres des communautés Harvard, MIT et Sundai.
<p align="center">
<a href="#démarrage-rapide">Démarrage</a> |
<a href="install.sh">Configuration en un clic</a> |
<a href="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh">Configuration en un clic</a> |
<a href="docs/README.md">Hub Documentation</a> |
<a href="docs/SUMMARY.md">Table des matières Documentation</a>
</p>
@@ -87,6 +87,16 @@ Construit par des étudiants et membres des communautés Harvard, MIT et Sundai.
<p align="center"><code>Architecture pilotée par traits · runtime sécurisé par défaut · fournisseur/canal/outil interchangeables · tout est pluggable</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Annonces
Utilisez ce tableau pour les avis importants (changements incompatibles, avis de sécurité, fenêtres de maintenance et bloqueurs de version).
@@ -94,7 +104,7 @@ Utilisez ce tableau pour les avis importants (changements incompatibles, avis de
| Date (UTC) | Niveau | Avis | Action |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Critique_ | Nous ne sommes **pas affiliés** à `openagen/zeroclaw` ou `zeroclaw.org`. Le domaine `zeroclaw.org` pointe actuellement vers le fork `openagen/zeroclaw`, et ce domaine/dépôt usurpe l'identité de notre site web/projet officiel. | Ne faites pas confiance aux informations, binaires, levées de fonds ou annonces provenant de ces sources. Utilisez uniquement [ce dépôt](https://github.com/zeroclaw-labs/zeroclaw) et nos comptes sociaux vérifiés. |
| 2026-02-21 | _Important_ | Notre site officiel est désormais en ligne : [zeroclawlabs.ai](https://zeroclawlabs.ai). Merci pour votre patience pendant cette attente. Nous constatons toujours des tentatives d'usurpation : ne participez à aucune activité d'investissement/financement au nom de ZeroClaw si elle n'est pas publiée via nos canaux officiels. | Utilisez [ce dépôt](https://github.com/zeroclaw-labs/zeroclaw) comme source unique de vérité. Suivez [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (groupe)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), et [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) pour les mises à jour officielles. |
| 2026-02-21 | _Important_ | Notre site officiel est désormais en ligne : [zeroclawlabs.ai](https://zeroclawlabs.ai). Merci pour votre patience pendant cette attente. Nous constatons toujours des tentatives d'usurpation : ne participez à aucune activité d'investissement/financement au nom de ZeroClaw si elle n'est pas publiée via nos canaux officiels. | Utilisez [ce dépôt](https://github.com/zeroclaw-labs/zeroclaw) comme source unique de vérité. Suivez [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (groupe)](https://www.facebook.com/groups/zeroclawlabs), et [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) pour les mises à jour officielles. |
| 2026-02-19 | _Important_ | Anthropic a mis à jour les conditions d'utilisation de l'authentification et des identifiants le 2026-02-19. L'authentification OAuth (Free, Pro, Max) est exclusivement destinée à Claude Code et Claude.ai ; l'utilisation de tokens OAuth de Claude Free/Pro/Max dans tout autre produit, outil ou service (y compris Agent SDK) n'est pas autorisée et peut violer les Conditions d'utilisation grand public. | Veuillez temporairement éviter les intégrations OAuth de Claude Code pour prévenir toute perte potentielle. Clause originale : [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Fonctionnalités
@@ -222,7 +232,7 @@ Exemple d'échantillon (macOS arm64, mesuré le 18 février 2026) :
Le script `install.sh` installe Rust, clone ZeroClaw, le compile, et configure votre environnement de développement initial :
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/install.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
Ceci va :
@@ -364,443 +374,6 @@ zeroclaw version # Affiche la version et les informations de build
Voir [Référence des Commandes](docs/reference/cli/commands-reference.md) pour les options et exemples complets.
## Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ Canaux (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Orchestrateur Agent │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Routage │ │ Contexte │ │ Exécution │ │
│ │ Message │ │ Mémoire │ │ Outil │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Fournisseurs │ │ Mémoire │ │ Outils │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Principes clés :**
- Tout est un **trait** — fournisseurs, canaux, outils, mémoire, tunnels
- Les canaux appellent l'orchestrateur ; l'orchestrateur appelle les fournisseurs + outils
- Le système mémoire gère le contexte conversationnel (markdown, SQLite, ou aucun)
- Le runtime abstrait l'exécution de code (natif ou Docker)
- Aucun verrouillage de fournisseur — échangez Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama sans changement de code
Voir [documentation architecture](docs/assets/architecture.svg) pour les diagrammes détaillés et les détails d'implémentation.
## Exemples
### Telegram Bot
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Votre Telegram user ID
```
Démarrez le daemon + agent, puis envoyez un message à votre bot sur Telegram :
```
/start
Bonjour ! Pouvez-vous m'aider à écrire un script Python ?
```
Le bot répond avec le code généré par l'IA, exécute les outils si demandé, et conserve le contexte de conversation.
### Matrix (chiffré de bout en bout)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Invitez `@zeroclaw:matrix.org` dans une salle chiffrée, et le bot répondra avec le chiffrement complet. Voir [Guide Matrix E2EE](docs/security/matrix-e2ee-guide.md) pour la configuration de vérification de dispositif.
### Multi-Fournisseur
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Bascule en cas d'erreur du fournisseur
```
Si Anthropic échoue ou rate-limit, l'orchestrateur bascule automatiquement vers OpenAI.
### Mémoire Personnalisée
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Purge automatique après 90 jours
```
Ou utilisez Markdown pour un stockage lisible par l'humain :
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Voir [Référence de Configuration](docs/reference/api/config-reference.md#memory) pour toutes les options mémoire.
## Support de Fournisseur
| Fournisseur | Statut | Clé API | Modèles Exemple |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Stable | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Stable | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Stable | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Stable | N/A (local) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Stable | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Stable | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Planifié | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Planifié | `COHERE_API_KEY` | TBD |
### Endpoints Personnalisés
ZeroClaw prend en charge les endpoints compatibles OpenAI :
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Exemple : utilisez [LiteLLM](https://github.com/BerriAI/litellm) comme proxy pour accéder à n'importe quel LLM via l'interface OpenAI.
Voir [Référence des Fournisseurs](docs/reference/api/providers-reference.md) pour les détails de configuration complets.
## Support de Canal
| Canal | Statut | Authentification | Notes |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Stable | Bot Token | Support complet incluant fichiers, images, boutons inline |
| **Matrix** | ✅ Stable | Mot de passe ou Token | Support E2EE avec vérification de dispositif |
| **Slack** | 🚧 Planifié | OAuth ou Bot Token | Accès workspace requis |
| **Discord** | 🚧 Planifié | Bot Token | Permissions guild requises |
| **WhatsApp** | 🚧 Planifié | Twilio ou API officielle | Compte business requis |
| **CLI** | ✅ Stable | Aucun | Interface conversationnelle directe |
| **Web** | 🚧 Planifié | Clé API ou OAuth | Interface de chat basée navigateur |
Voir [Référence des Canaux](docs/reference/api/channels-reference.md) pour les instructions de configuration complètes.
## Support d'Outil
ZeroClaw fournit des outils intégrés pour l'exécution de code, l'accès au système de fichiers et la récupération web :
| Outil | Description | Runtime Requis |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Exécute des commandes shell | Native ou Docker |
| **python** | Exécute des scripts Python | Python 3.8+ (natif) ou Docker |
| **javascript** | Exécute du code Node.js | Node.js 18+ (natif) ou Docker |
| **filesystem_read** | Lit des fichiers | Native ou Docker |
| **filesystem_write** | Écrit des fichiers | Native ou Docker |
| **web_fetch** | Récupère du contenu web | Native ou Docker |
### Sécurité de l'Exécution
- **Runtime Natif** — s'exécute en tant que processus utilisateur du daemon, accès complet au système de fichiers
- **Runtime Docker** — isolation complète du conteneur, systèmes de fichiers et réseaux séparés
Configurez la politique d'exécution dans `config.toml` :
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Liste d'autorisation explicite
```
Voir [Référence de Configuration](docs/reference/api/config-reference.md#runtime) pour les options de sécurité complètes.
## Déploiement
### Déploiement Local (Développement)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Déploiement Serveur (Production)
Utilisez systemd pour gérer le daemon et l'agent en tant que services :
```bash
# Installez le binaire
cargo install --path . --locked
# Configurez le workspace
zeroclaw init
# Créez les fichiers de service systemd
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Activez et démarrez les services
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Vérifiez le statut
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Voir [Guide de Déploiement Réseau](docs/ops/network-deployment.md) pour les instructions de déploiement en production complètes.
### Docker
```bash
# Compilez l'image
docker build -t zeroclaw:latest .
# Exécutez le conteneur
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Voir [`Dockerfile`](Dockerfile) pour les détails de construction et les options de configuration.
### Matériel Edge
ZeroClaw est conçu pour fonctionner sur du matériel à faible consommation d'énergie :
- **Raspberry Pi Zero 2 W** — ~512 Mo RAM, cœur ARMv8 simple, <5$ coût matériel
- **Raspberry Pi 4/5** — 1 Go+ RAM, multi-cœur, idéal pour les charges de travail concurrentes
- **Orange Pi Zero 2** — ~512 Mo RAM, quad-core ARMv8, coût ultra-faible
- **SBCs x86 (Intel N100)** — 4-8 Go RAM, builds rapides, support Docker natif
Voir [Guide du Matériel](docs/hardware/README.md) pour les instructions de configuration spécifiques aux dispositifs.
## Tunneling (Exposition Publique)
Exposez votre daemon ZeroClaw local au réseau public via des tunnels sécurisés :
```bash
zeroclaw tunnel start --provider cloudflare
```
Fournisseurs de tunnel supportés :
- **Cloudflare Tunnel** — HTTPS gratuit, aucune exposition de port, support multi-domaine
- **Ngrok** — configuration rapide, domaines personnalisés (plan payant)
- **Tailscale** — réseau maillé privé, pas de port public
Voir [Référence de Configuration](docs/reference/api/config-reference.md#tunnel) pour les options de configuration complètes.
## Sécurité
ZeroClaw implémente plusieurs couches de sécurité :
### Pairing
Le daemon génère un secret de pairing au premier lancement stocké dans `~/.zeroclaw/workspace/.pairing`. Les clients (agent, CLI) doivent présenter ce secret pour se connecter.
```bash
zeroclaw pairing rotate # Génère un nouveau secret et invalide l'ancien
```
### Sandboxing
- **Runtime Docker** — isolation complète du conteneur avec systèmes de fichiers et réseaux séparés
- **Runtime Natif** — exécute en tant que processus utilisateur, scoped au workspace par défaut
### Listes d'Autorisation
Les canaux peuvent restreindre l'accès par ID utilisateur :
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Liste d'autorisation explicite
```
### Chiffrement
- **Matrix E2EE** — chiffrement de bout en bout complet avec vérification de dispositif
- **Transport TLS** — tout le trafic API et tunnel utilise HTTPS/TLS
Voir [Documentation Sécurité](docs/security/README.md) pour les politiques et pratiques complètes.
## Observabilité
ZeroClaw journalise vers `~/.zeroclaw/workspace/logs/` par défaut. Les journaux sont stockés par composant :
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Journaux du daemon (startup, requêtes API, erreurs)
├── agent.log # Journaux de l'agent (routage message, exécution outil)
├── telegram.log # Journaux spécifiques au canal (si activé)
└── matrix.log # Journaux spécifiques au canal (si activé)
```
### Configuration de Journalisation
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Pour rotation basée sur la taille
retention_days = 30 # Purge automatique après N jours
```
Voir [Référence de Configuration](docs/reference/api/config-reference.md#logging) pour toutes les options de journalisation.
### Métriques (Planifié)
Support de métriques Prometheus pour la surveillance en production à venir. Suivi dans [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Compétences (Skills)
ZeroClaw prend en charge les compétences personnalisées — des modules réutilisables qui étendent les capacités du système.
### Définition de Compétence
Les compétences sont stockées dans `~/.zeroclaw/workspace/skills/<nom-compétence>/` avec cette structure :
```
skills/
└── ma-compétence/
├── skill.toml # Métadonnées de compétence (nom, description, dépendances)
├── prompt.md # Prompt système pour l'IA
└── tools/ # Outils personnalisés optionnels
└── mon_outil.py
```
### Exemple de Compétence
```toml
# skills/recherche-web/skill.toml
[skill]
name = "recherche-web"
description = "Recherche sur le web et résume les résultats"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/recherche-web/prompt.md -->
Tu es un assistant de recherche. Lorsqu'on te demande de rechercher quelque chose :
1. Utilise web_fetch pour récupérer le contenu
2. Résume les résultats dans un format facile à lire
3. Cite les sources avec des URLs
```
### Utilisation de Compétences
Les compétences sont chargées automatiquement au démarrage de l'agent. Référencez-les par nom dans les conversations :
```
Utilisateur : Utilise la compétence recherche-web pour trouver les dernières actualités IA
Bot : [charge la compétence recherche-web, exécute web_fetch, résume les résultats]
```
Voir la section [Compétences (Skills)](#compétences-skills) pour les instructions de création de compétences complètes.
## Open Skills
ZeroClaw prend en charge les [Open Skills](https://github.com/openagents-com/open-skills) — un système modulaire et agnostique des fournisseurs pour étendre les capacités des agents IA.
### Activer Open Skills
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # optionnel
```
Vous pouvez également surcharger au runtime avec `ZEROCLAW_OPEN_SKILLS_ENABLED` et `ZEROCLAW_OPEN_SKILLS_DIR`.
## Développement
```bash
cargo build # Build de développement
cargo build --release # Build release (codegen-units=1, fonctionne sur tous les dispositifs incluant Raspberry Pi)
cargo build --profile release-fast # Build plus rapide (codegen-units=8, nécessite 16 Go+ RAM)
cargo test # Exécute la suite de tests complète
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Format
# Exécute le benchmark de comparaison SQLite vs Markdown
cargo test --test memory_comparison -- --nocapture
```
### Hook pre-push
Un hook git exécute `cargo fmt --check`, `cargo clippy -- -D warnings`, et `cargo test` avant chaque push. Activez-le une fois :
```bash
git config core.hooksPath .githooks
```
### Dépannage de Build (erreurs OpenSSL sur Linux)
Si vous rencontrez une erreur de build `openssl-sys`, synchronisez les dépendances et recompilez avec le lockfile du dépôt :
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw est configuré pour utiliser `rustls` pour les dépendances HTTP/TLS ; `--locked` maintient le graphe transitif déterministe sur les environnements vierges.
Pour sauter le hook lorsque vous avez besoin d'un push rapide pendant le développement :
```bash
git push --no-verify
```
## Collaboration & Docs
Commencez par le hub de documentation pour une carte basée sur les tâches :
@@ -851,6 +424,20 @@ Un remerciement sincère aux communautés et institutions qui inspirent et alime
Nous construisons en open source parce que les meilleures idées viennent de partout. Si vous lisez ceci, vous en faites partie. Bienvenue. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Dépôt Officiel & Avertissement d'Usurpation d'Identité
**Ceci est le seul dépôt officiel ZeroClaw :**
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center" dir="rtl">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## מה זה ZeroClaw?
<p align="center" dir="rtl">
@@ -183,7 +196,7 @@ channels:
## קהילה
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -195,3 +208,17 @@ channels:
</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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## ZeroClaw क्या है?
ZeroClaw एक हल्का, म्यूटेबल और एक्स्टेंसिबल AI असिस्टेंट इन्फ्रास्ट्रक्चर है जो रस्ट में बनाया गया है। यह विभिन्न LLM प्रदाताओं (Anthropic, OpenAI, Google, Ollama, आदि) को एक एकीकृत इंटरफेस के माध्यम से कनेक्ट करता है और कई चैनलों (Telegram, Matrix, CLI, आदि) का समर्थन करता है।
@@ -167,7 +180,7 @@ channels:
## समुदाय
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ channels:
यदि 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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Mi az a ZeroClaw?
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.).
@@ -167,7 +180,7 @@ Részletekért lásd a [LICENSE-APACHE](LICENSE-APACHE) és [LICENSE-MIT](LICENS
## Közösség
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ Részletekért lásd a [LICENSE-APACHE](LICENSE-APACHE) és [LICENSE-MIT](LICENS
Ha a ZeroClaw hasznos az Ön számára, kérjük, fontolja meg, hogy vesz nekünk egy kávét:
[![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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Apa itu ZeroClaw?
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.).
@@ -167,7 +180,7 @@ Lihat [LICENSE-APACHE](LICENSE-APACHE) dan [LICENSE-MIT](LICENSE-MIT) untuk deta
## Komunitas
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ Lihat [LICENSE-APACHE](LICENSE-APACHE) dan [LICENSE-MIT](LICENSE-MIT) untuk deta
Jika ZeroClaw berguna bagi Anda, mohon pertimbangkan untuk membelikan kami kopi:
[![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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Costruito da studenti e membri delle comunità Harvard, MIT e Sundai.Club.
<p align="center"><code>Architettura basata su trait · runtime sicuro di default · provider/canale/strumento intercambiabili · tutto è collegabile</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Annunci
Usa questa tabella per avvisi importanti (cambiamenti di compatibilità, avvisi di sicurezza, finestre di manutenzione e blocchi di versione).
@@ -93,7 +106,7 @@ Usa questa tabella per avvisi importanti (cambiamenti di compatibilità, avvisi
| Data (UTC) | Livello | Avviso | Azione |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Critico_ | **Non siamo affiliati** con `openagen/zeroclaw` o `zeroclaw.org`. Il dominio `zeroclaw.org` punta attualmente al fork `openagen/zeroclaw`, e questo dominio/repository sta contraffacendo il nostro sito web/progetto ufficiale. | Non fidarti di informazioni, binari, raccolte fondi o annunci da queste fonti. Usa solo [questo repository](https://github.com/zeroclaw-labs/zeroclaw) e i nostri account social verificati. |
| 2026-02-21 | _Importante_ | Il nostro sito ufficiale è ora online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Grazie per la pazienza durante l'attesa. Rileviamo ancora tentativi di contraffazione: non partecipare ad alcuna attività di investimento/finanziamento a nome di ZeroClaw se non pubblicata tramite i nostri canali ufficiali. | Usa [questo repository](https://github.com/zeroclaw-labs/zeroclaw) come unica fonte di verità. Segui [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (gruppo)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), e [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) per aggiornamenti ufficiali. |
| 2026-02-21 | _Importante_ | Il nostro sito ufficiale è ora online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Grazie per la pazienza durante l'attesa. Rileviamo ancora tentativi di contraffazione: non partecipare ad alcuna attività di investimento/finanziamento a nome di ZeroClaw se non pubblicata tramite i nostri canali ufficiali. | Usa [questo repository](https://github.com/zeroclaw-labs/zeroclaw) come unica fonte di verità. Segui [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (gruppo)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), e [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) per aggiornamenti ufficiali. |
| 2026-02-19 | _Importante_ | Anthropic ha aggiornato i termini di utilizzo di autenticazione e credenziali il 2026-02-19. L'autenticazione OAuth (Free, Pro, Max) è esclusivamente per Claude Code e Claude.ai; l'uso di token OAuth di Claude Free/Pro/Max in qualsiasi altro prodotto, strumento o servizio (incluso Agent SDK) non è consentito e può violare i Termini di Utilizzo del Consumatore. | Si prega di evitare temporaneamente le integrazioni OAuth di Claude Code per prevenire qualsiasi potenziale perdita. Clausola originale: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Funzionalità
@@ -221,7 +234,7 @@ Esempio di campione (macOS arm64, misurato il 18 febbraio 2026):
Lo script `bootstrap.sh` installa Rust, clona ZeroClaw, lo compila, e configura il tuo ambiente di sviluppo iniziale:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Questo:
@@ -363,443 +376,6 @@ zeroclaw version # Mostra versione e informazioni di build
Vedi [Riferimento Comandi](docs/commands-reference.md) per opzioni ed esempi completi.
## Architettura
```
┌─────────────────────────────────────────────────────────────────┐
│ Canali (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Agente Orchestratore │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Routing │ │ Contesto │ │ Esecuzione │ │
│ │ Messaggio │ │ Memoria │ │ Strumento │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Provider │ │ Memoria │ │ Strumenti │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Principi chiave:**
- Tutto è un **trait** — provider, canali, strumenti, memoria, tunnel
- I canali chiamano l'orchestratore; l'orchestratore chiama provider + strumenti
- Il sistema memoria gestisce il contesto conversazionale (markdown, SQLite, o nessuno)
- Il runtime astrae l'esecuzione del codice (nativo o Docker)
- Nessun lock-in del provider — scambia Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama senza modifiche al codice
Vedi [documentazione architettura](docs/architecture.svg) per diagrammi dettagliati e dettagli di implementazione.
## Esempi
### Bot Telegram
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Il tuo ID utente Telegram
```
Avvia il daemon + agent, poi invia un messaggio al tuo bot su Telegram:
```
/start
Ciao! Potresti aiutarmi a scrivere uno script Python?
```
Il bot risponde con codice generato dall'AI, esegue strumenti se richiesto, e mantiene il contesto della conversazione.
### Matrix (crittografia end-to-end)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Invita `@zeroclaw:matrix.org` in una stanza crittografata, e il bot risponderà con crittografia completa. Vedi [Guida Matrix E2EE](docs/matrix-e2ee-guide.md) per la configurazione della verifica dispositivo.
### Multi-Provider
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover su errore del provider
```
Se Anthropic fallisce o va in rate-limit, l'orchestratore passa automaticamente a OpenAI.
### Memoria Personalizzata
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Eliminazione automatica dopo 90 giorni
```
O usa Markdown per un archiviazione leggibile dall'uomo:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Vedi [Riferimento Configurazione](docs/config-reference.md#memory) per tutte le opzioni memoria.
## Supporto Provider
| Provider | Stato | API Key | Modelli di Esempio |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Stabile | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Stabile | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Stabile | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Stabile | N/A (locale) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Stabile | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Stabile | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Pianificato | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Pianificato | `COHERE_API_KEY` | TBD |
### Endpoint Personalizzati
ZeroClaw supporta endpoint compatibili con OpenAI:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Esempio: usa [LiteLLM](https://github.com/BerriAI/litellm) come proxy per accedere a qualsiasi LLM tramite l'interfaccia OpenAI.
Vedi [Riferimento Provider](docs/providers-reference.md) per dettagli di configurazione completi.
## Supporto Canali
| Canale | Stato | Autenticazione | Note |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Stabile | Bot Token | Supporto completo inclusi file, immagini, pulsanti inline |
| **Matrix** | ✅ Stabile | Password o Token | Supporto E2EE con verifica dispositivo |
| **Slack** | 🚧 Pianificato | OAuth o Bot Token | Richiede accesso workspace |
| **Discord** | 🚧 Pianificato | Bot Token | Richiede permessi guild |
| **WhatsApp** | 🚧 Pianificato | Twilio o API ufficiale | Richiede account business |
| **CLI** | ✅ Stabile | Nessuno | Interfaccia conversazionale diretta |
| **Web** | 🚧 Pianificato | API Key o OAuth | Interfaccia chat basata su browser |
Vedi [Riferimento Canali](docs/channels-reference.md) per istruzioni di configurazione complete.
## Supporto Strumenti
ZeroClaw fornisce strumenti integrati per l'esecuzione del codice, l'accesso al filesystem e il recupero web:
| Strumento | Descrizione | Runtime Richiesto |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Esegue comandi shell | Nativo o Docker |
| **python** | Esegue script Python | Python 3.8+ (nativo) o Docker |
| **javascript** | Esegue codice Node.js | Node.js 18+ (nativo) o Docker |
| **filesystem_read** | Legge file | Nativo o Docker |
| **filesystem_write** | Scrive file | Nativo o Docker |
| **web_fetch** | Recupera contenuti web | Nativo o Docker |
### Sicurezza dell'Esecuzione
- **Runtime Nativo** — gira come processo utente del daemon, accesso completo al filesystem
- **Runtime Docker** — isolamento container completo, filesystem e reti separati
Configura la politica di esecuzione in `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Lista di autorizzazione esplicita
```
Vedi [Riferimento Configurazione](docs/config-reference.md#runtime) per opzioni di sicurezza complete.
## Distribuzione
### Distribuzione Locale (Sviluppo)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Distribuzione Server (Produzione)
Usa systemd per gestire daemon e agent come servizi:
```bash
# Installa il binario
cargo install --path . --locked
# Configura il workspace
zeroclaw init
# Crea i file di servizio systemd
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Abilita e avvia i servizi
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Verifica lo stato
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Vedi [Guida Distribuzione di Rete](docs/network-deployment.md) per istruzioni complete di distribuzione in produzione.
### Docker
```bash
# Compila l'immagine
docker build -t zeroclaw:latest .
# Esegui il container
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Vedi [`Dockerfile`](Dockerfile) per dettagli di build e opzioni di configurazione.
### Hardware Edge
ZeroClaw è progettato per girare su hardware a basso consumo:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, singolo core ARMv8, < $5 costo hardware
- **Raspberry Pi 4/5** — 1 GB+ RAM, multi-core, ideale per workload concorrenti
- **Orange Pi Zero 2** — ~512 MB RAM, quad-core ARMv8, costo ultra-basso
- **SBC x86 (Intel N100)** — 4-8 GB RAM, build veloci, supporto Docker nativo
Vedi [Guida Hardware](docs/hardware/README.md) per istruzioni di configurazione specifiche per dispositivo.
## Tunneling (Esposizione Pubblica)
Espone il tuo daemon ZeroClaw locale alla rete pubblica tramite tunnel sicuri:
```bash
zeroclaw tunnel start --provider cloudflare
```
Provider di tunnel supportati:
- **Cloudflare Tunnel** — HTTPS gratuito, nessuna esposizione di porte, supporto multi-dominio
- **Ngrok** — configurazione rapida, domini personalizzati (piano a pagamento)
- **Tailscale** — rete mesh privata, nessuna porta pubblica
Vedi [Riferimento Configurazione](docs/config-reference.md#tunnel) per opzioni di configurazione complete.
## Sicurezza
ZeroClaw implementa molteplici livelli di sicurezza:
### Pairing
Il daemon genera un segreto di pairing al primo avvio memorizzato in `~/.zeroclaw/workspace/.pairing`. I client (agent, CLI) devono presentare questo segreto per connettersi.
```bash
zeroclaw pairing rotate # Genera un nuovo segreto e invalida quello precedente
```
### Sandboxing
- **Runtime Docker** — isolamento container completo con filesystem e reti separati
- **Runtime Nativo** — gira come processo utente, con scope del workspace di default
### Liste di Autorizzazione
I canali possono limitare l'accesso per ID utente:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Lista di autorizzazione esplicita
```
### Crittografia
- **Matrix E2EE** — crittografia end-to-end completa con verifica dispositivo
- **Trasporto TLS** — tutto il traffico API e tunnel usa HTTPS/TLS
Vedi [Documentazione Sicurezza](docs/security/README.md) per politiche e pratiche complete.
## Osservabilità
ZeroClaw registra i log in `~/.zeroclaw/workspace/logs/` di default. I log sono memorizzati per componente:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Log del daemon (avvio, richieste API, errori)
├── agent.log # Log dell'agent (routing messaggi, esecuzione strumenti)
├── telegram.log # Log specifici del canale (se abilitato)
└── matrix.log # Log specifici del canale (se abilitato)
```
### Configurazione Logging
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Per rotazione basata sulla dimensione
retention_days = 30 # Eliminazione automatica dopo N giorni
```
Vedi [Riferimento Configurazione](docs/config-reference.md#logging) per tutte le opzioni di logging.
### Metriche (Pianificato)
Supporto metriche Prometheus per il monitoraggio in produzione in arrivo. Tracciamento in [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Competenze (Skills)
ZeroClaw supporta competenze personalizzate — moduli riutilizzabili che estendono le capacità del sistema.
### Definizione Competenza
Le competenze sono memorizzate in `~/.zeroclaw/workspace/skills/<skill-name>/` con questa struttura:
```
skills/
└── my-skill/
├── skill.toml # Metadati competenza (nome, descrizione, dipendenze)
├── prompt.md # Prompt di sistema per l'AI
└── tools/ # Strumenti personalizzati opzionali
└── my_tool.py
```
### Esempio Competenza
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Cerca sul web e riassume i risultati"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Sei un assistente di ricerca. Quando ti viene chiesto di cercare qualcosa:
1. Usa web_fetch per recuperare il contenuto
2. Riassume i risultati in un formato facile da leggere
3. Cita le fonti con gli URL
```
### Uso delle Competenze
Le competenze sono caricate automaticamente all'avvio dell'agent. Fai riferimento ad esse per nome nelle conversazioni:
```
Utente: Usa la competenza web-research per trovare le ultime notizie AI
Bot: [carica la competenza web-research, esegue web_fetch, riassume i risultati]
```
Vedi sezione [Competenze (Skills)](#competenze-skills) per istruzioni complete sulla creazione di competenze.
## Open Skills
ZeroClaw supporta [Open Skills](https://github.com/openagents-com/open-skills) — un sistema modulare e agnostico del provider per estendere le capacità degli agent AI.
### Abilita Open Skills
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # opzionale
```
Puoi anche sovrascrivere a runtime con `ZEROCLAW_OPEN_SKILLS_ENABLED` e `ZEROCLAW_OPEN_SKILLS_DIR`.
## Sviluppo
```bash
cargo build # Build di sviluppo
cargo build --release # Build release (codegen-units=1, funziona su tutti i dispositivi incluso Raspberry Pi)
cargo build --profile release-fast # Build più veloce (codegen-units=8, richiede 16 GB+ RAM)
cargo test # Esegue la suite di test completa
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Formattazione
# Esegue il benchmark di confronto SQLite vs Markdown
cargo test --test memory_comparison -- --nocapture
```
### Hook pre-push
Un hook git esegue `cargo fmt --check`, `cargo clippy -- -D warnings`, e `cargo test` prima di ogni push. Attivalo una volta:
```bash
git config core.hooksPath .githooks
```
### Risoluzione Problemi di Build (errori OpenSSL su Linux)
Se incontri un errore di build `openssl-sys`, sincronizza le dipendenze e ricompila con il lockfile del repository:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw è configurato per usare `rustls` per le dipendenze HTTP/TLS; `--locked` mantiene il grafo transitivo deterministico in ambienti puliti.
Per saltare l'hook quando hai bisogno di un push veloce durante lo sviluppo:
```bash
git push --no-verify
```
## Collaborazione e Docs
Inizia con l'hub della documentazione per una mappa basata sui task:
@@ -850,6 +426,20 @@ Un sincero ringraziamento alle comunità e istituzioni che ispirano e alimentano
Costruiamo in open source perché le migliori idee vengono da ovunque. Se stai leggendo questo, ne fai parte. Benvenuto. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Repository Ufficiale e Avviso di Contraffazione
**Questo è l'unico repository ufficiale di ZeroClaw:**
+31 -105
View File
@@ -13,10 +13,10 @@
<a href="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" 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.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>
@@ -56,7 +56,7 @@
</p>
<p align="center">
<a href="install.sh">ワンクリック導入</a> |
<a href="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/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>
@@ -78,6 +78,16 @@
>
> 最終同期日: **2026-02-19**。
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## 📢 お知らせボード
重要なお知らせ(互換性破壊変更、セキュリティ告知、メンテナンス時間、リリース阻害事項など)をここに掲載します。
@@ -85,7 +95,7 @@
| 日付 (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-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/zeroclawlabs)、[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)。 |
## 概要
@@ -166,7 +176,7 @@ cargo build --release --locked
cargo install --path . --force --locked
zeroclaw onboard --api-key sk-... --provider openrouter
zeroclaw onboard --interactive
zeroclaw onboard
zeroclaw agent -m "Hello, ZeroClaw!"
@@ -221,104 +231,6 @@ zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hell
zeroclaw agent --provider anthropic -m "hello"
```
## アーキテクチャ
すべてのサブシステムは **Trait** — 設定変更だけで実装を差し替え可能、コード変更不要。
<p align="center">
<img src="docs/assets/architecture.svg" alt="ZeroClaw アーキテクチャ" width="900" />
</p>
| サブシステム | 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 件以上の連携 | プラグインシステム |
### ランタイムサポート(現状)
- ✅ 現在サポート: `runtime.kind = "native"` または `runtime.kind = "docker"`
- 🚧 計画中(未実装): WASM / エッジランタイム
未対応の `runtime.kind` が設定された場合、ZeroClaw は native へのサイレントフォールバックではなく、明確なエラーで終了します。
### メモリシステム(フルスタック検索エンジン)
すべて自社実装、外部依存ゼロ — 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
```
## セキュリティのデフォルト
- Gateway の既定バインド: `127.0.0.1:42617`
- 既定でペアリング必須: `require_pairing = true`
- 既定で公開バインド禁止: `allow_public_bind = false`
- Channel allowlist:
- `[]` は deny-by-default
- `["*"]` は allow all(意図的に使う場合のみ)
## 設定例
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
[memory]
backend = "sqlite"
auto_save = true
embedding_provider = "none"
[gateway]
host = "127.0.0.1"
port = 42617
require_pairing = true
allow_public_bind = false
```
## ドキュメント入口
- ドキュメントハブ(英語): [`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)
## コントリビュート / ライセンス
- Contributing: [`CONTRIBUTING.md`](CONTRIBUTING.md)
@@ -326,6 +238,20 @@ allow_public_bind = false
- 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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
---
詳細仕様(全コマンド、アーキテクチャ、API 仕様、開発フロー)は英語版の [`README.md`](README.md) を参照してください。
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Harvard, MIT, 그리고 Sundai.Club 커뮤니티의 학생들과 멤버들이
<p align="center"><code>트레이트 기반 아키텍처 · 기본 보안 런타임 · 교체 가능한 제공자/채널/도구 · 모든 것이 플러그 가능</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 공지사항
이 표를 사용하여 중요한 공지사항(호환성 변경, 보안 공지, 유지보수 기간, 버전 차단)을 확인하세요.
@@ -93,7 +106,7 @@ Harvard, MIT, 그리고 Sundai.Club 커뮤니티의 학생들과 멤버들이
| 날짜 (UTC) | 수준 | 공지 | 조치 |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _중요_ | 우리는 `openagen/zeroclaw` 또는 `zeroclaw.org`**관련이 없습니다**. `zeroclaw.org` 도메인은 현재 `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-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/zeroclawlabs), [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이 2026-02-19에 인증 및 자격증명 사용 약관을 업데이트했습니다. 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). |
### ✨ 기능
@@ -221,7 +234,7 @@ ls -lh target/release/zeroclaw
`bootstrap.sh` 스크립트는 Rust를 설치하고, ZeroClaw를 클론하고, 컴파일하고, 초기 개발 환경을 설정합니다:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
이 작업은 다음을 수행합니다:
@@ -363,443 +376,6 @@ zeroclaw version # 버전 및 빌드 정보 표시
전체 옵션 및 예제는 [명령어 참조](docs/commands-reference.md)를 참조하세요.
## 아키텍처
```
┌─────────────────────────────────────────────────────────────────┐
│ 채널 (트레이트) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 에이전트 오케스트레이터 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 메시지 │ │ 컨텍스트 │ │ 도구 │ │
│ │ 라우팅 │ │ 메모리 │ │ 실행 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 제공자 │ │ 메모리 │ │ 도구 │
│ (트레이트) │ │ (트레이트) │ │ (트레이트) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 런타임 (트레이트) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**핵심 원칙:**
- 모든 것이 **트레이트**입니다 — 제공자, 채널, 도구, 메모리, 터널
- 채널이 오케스트레이터를 호출; 오케스트레이터가 제공자 + 도구를 호출
- 메모리 시스템이 대화 컨텍스트 관리(markdown, SQLite, 또는 없음)
- 런타임이 코드 실행 추상화(네이티브 또는 Docker)
- 제공자 락인 없음 — 코드 변경 없이 Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama 교체
자세한 다이어그램과 구현 세부 정보는 [아키텍처 문서](docs/architecture.svg)를 참조하세요.
## 예제
### 텔레그램 봇
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # 당신의 텔레그램 사용자 ID
```
데몬 + 에이전트를 시작한 다음 텔레그램에서 봇에 메시지를 보내세요:
```
/start
안녕하세요! Python 스크립트 작성을 도와주실 수 있나요?
```
봇이 AI가 생성한 코드로 응답하고, 요청 시 도구를 실행하며, 대화 컨텍스트를 유지합니다.
### Matrix (종단 간 암호화)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
암호화된 방에 `@zeroclaw:matrix.org`를 초대하면 봇이 완전한 암호화로 응답합니다. 장치 확인 설정은 [Matrix E2EE 가이드](docs/matrix-e2ee-guide.md)를 참조하세요.
### 다중 제공자
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # 제공자 오류 시 장애 조치
```
Anthropic이 실패하거나 속도 제한이 걸리면 오케스트레이터가 자동으로 OpenAI로 장애 조치합니다.
### 사용자 정의 메모리
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # 90일 후 자동 삭제
```
또는 사람이 읽을 수 있는 저장소를 위해 Markdown을 사용하세요:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
모든 메모리 옵션은 [구성 참조](docs/config-reference.md#memory)를 참조하세요.
## 제공자 지원
| 제공자 | 상태 | API 키 | 예제 모델 |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ 안정 | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ 안정 | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ 안정 | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ 안정 | N/A (로컬) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ 안정 | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ 안정 | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 계획 중 | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 계획 중 | `COHERE_API_KEY` | TBD |
### 사용자 정의 엔드포인트
ZeroClaw는 OpenAI 호환 엔드포인트를 지원합니다:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
예: [LiteLLM](https://github.com/BerriAI/litellm)을 프록시로 사용하여 OpenAI 인터페이스를 통해 모든 LLM에 액세스.
전체 구성 세부 정보는 [제공자 참조](docs/providers-reference.md)를 참조하세요.
## 채널 지원
| 채널 | 상태 | 인증 | 참고 |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ 안정 | 봇 토큰 | 파일, 이미지, 인라인 버튼 포함 전체 지원 |
| **Matrix** | ✅ 안정 | 비밀번호 또는 토큰 | 장치 확인과 함께 E2EE 지원 |
| **Slack** | 🚧 계획 중 | OAuth 또는 봇 토큰 | 작업공간 액세스 필요 |
| **Discord** | 🚧 계획 중 | 봇 토큰 | 길드 권한 필요 |
| **WhatsApp** | 🚧 계획 중 | Twilio 또는 공식 API | 비즈니스 계정 필요 |
| **CLI** | ✅ 안정 | 없음 | 직접 대화형 인터페이스 |
| **Web** | 🚧 계획 중 | API 키 또는 OAuth | 브라우저 기반 채팅 인터페이스 |
전체 구성 지침은 [채널 참조](docs/channels-reference.md)를 참조하세요.
## 도구 지원
ZeroClaw는 코드 실행, 파일 시스템 액세스 및 웹 검색을 위한 기본 제공 도구를 제공합니다:
| 도구 | 설명 | 필수 런타임 |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | 셸 명령 실행 | 네이티브 또는 Docker |
| **python** | Python 스크립트 실행 | Python 3.8+ (네이티브) 또는 Docker |
| **javascript** | Node.js 코드 실행 | Node.js 18+ (네이티브) 또는 Docker |
| **filesystem_read** | 파일 읽기 | 네이티브 또는 Docker |
| **filesystem_write** | 파일 쓰기 | 네이티브 또는 Docker |
| **web_fetch** | 웹 콘텐츠 가져오기 | 네이티브 또는 Docker |
### 실행 보안
- **네이티브 런타임** — 데몬의 사용자 프로세스로 실행, 파일 시스템에 전체 액세스
- **Docker 런타임** — 전체 컨테이너 격리, 별도의 파일 시스템 및 네트워크
`config.toml`에서 실행 정책을 구성하세요:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # 명시적 허용 목록
```
전체 보안 옵션은 [구성 참조](docs/config-reference.md#runtime)를 참조하세요.
## 배포
### 로컬 배포 (개발)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### 서버 배포 (프로덕션)
systemd를 사용하여 데몬과 에이전트를 서비스로 관리하세요:
```bash
# 바이너리 설치
cargo install --path . --locked
# 작업공간 구성
zeroclaw init
# systemd 서비스 파일 생성
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# 서비스 활성화 및 시작
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# 상태 확인
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
전체 프로덕션 배포 지침은 [네트워크 배포 가이드](docs/network-deployment.md)를 참조하세요.
### Docker
```bash
# 이미지 빌드
docker build -t zeroclaw:latest .
# 컨테이너 실행
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
빌드 세부 정보 및 구성 옵션은 [`Dockerfile`](Dockerfile)을 참조하세요.
### 엣지 하드웨어
ZeroClaw는 저전력 하드웨어에서 실행되도록 설계되었습니다:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, 단일 ARMv8 코어, < $5 하드웨어 비용
- **Raspberry Pi 4/5** — 1 GB+ RAM, 멀티코어, 동시 워크로드에 이상적
- **Orange Pi Zero 2** — ~512 MB RAM, 쿼드코어 ARMv8, 초저비용
- **x86 SBCs (Intel N100)** — 4-8 GB RAM, 빠른 빌드, 네이티브 Docker 지원
장치별 설정 지침은 [하드웨어 가이드](docs/hardware/README.md)를 참조하세요.
## 터널링 (공개 노출)
보안 터널을 통해 로컬 ZeroClaw 데몬을 공개 네트워크에 노출하세요:
```bash
zeroclaw tunnel start --provider cloudflare
```
지원되는 터널 제공자:
- **Cloudflare Tunnel** — 무료 HTTPS, 포트 노출 없음, 멀티 도메인 지원
- **Ngrok** — 빠른 설정, 사용자 정의 도메인 (유료 플랜)
- **Tailscale** — 프라이빗 메시 네트워크, 공개 포트 없음
전체 구성 옵션은 [구성 참조](docs/config-reference.md#tunnel)를 참조하세요.
## 보안
ZeroClaw는 여러 보안 계층을 구현합니다:
### 페어링
데몬은 첫 실행 시 `~/.zeroclaw/workspace/.pairing`에 저장된 페어링 시크릿을 생성합니다. 클라이언트(에이전트, CLI)는 연결하기 위해 이 시크릿을 제시해야 합니다.
```bash
zeroclaw pairing rotate # 새 시크릿 생성 및 이전 것 무효화
```
### 샌드박싱
- **Docker 런타임** — 별도의 파일 시스템 및 네트워크로 전체 컨테이너 격리
- **네이티브 런타임** — 사용자 프로세스로 실행, 기본적으로 작업공간으로 범위 지정
### 허용 목록
채널은 사용자 ID로 액세스를 제한할 수 있습니다:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # 명시적 허용 목록
```
### 암호화
- **Matrix E2EE** — 장치 확인과 함께 완전한 종단 간 암호화
- **TLS 전송** — 모든 API 및 터널 트래픽이 HTTPS/TLS 사용
전체 정책 및 관행은 [보안 문서](docs/security/README.md)를 참조하세요.
## 관찰 가능성
ZeroClaw는 기본적으로 `~/.zeroclaw/workspace/logs/`에 로그를 기록합니다. 로그는 구성 요소별로 저장됩니다:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # 데몬 로그 (시작, API 요청, 오류)
├── agent.log # 에이전트 로그 (메시지 라우팅, 도구 실행)
├── telegram.log # 채널별 로그 (활성화된 경우)
└── matrix.log # 채널별 로그 (활성화된 경우)
```
### 로깅 구성
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # 크기 기반 회전용
retention_days = 30 # N일 후 자동 삭제
```
모든 로깅 옵션은 [구성 참조](docs/config-reference.md#logging)를 참조하세요.
### 메트릭 (계획 중)
프로덕션 모니터링을 위한 Prometheus 메트릭 지원이 곧 제공됩니다. [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234)에서 추적 중.
## 스킬 (Skills)
ZeroClaw는 시스템 기능을 확장하는 재사용 가능한 모듈인 사용자 정의 스킬을 지원합니다.
### 스킬 정의
스킬은 다음 구조로 `~/.zeroclaw/workspace/skills/<skill-name>/`에 저장됩니다:
```
skills/
└── my-skill/
├── skill.toml # 스킬 메타데이터 (이름, 설명, 의존성)
├── prompt.md # AI용 시스템 프롬프트
└── tools/ # 선택적 사용자 정의 도구
└── my_tool.py
```
### 스킬 예제
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "웹 검색 및 결과 요약"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
당신은 연구 어시스턴트입니다. 무언가를 검색하라는 요청을 받으면:
1. web_fetch를 사용하여 콘텐츠 가져오기
2. 읽기 쉬운 형식으로 결과 요약
3. URL로 출처 인용
```
### 스킬 사용
스킬은 에이전트 시작 시 자동으로 로드됩니다. 대화에서 이름으로 참조하세요:
```
사용자: 웹 연구 스킬을 사용하여 최신 AI 뉴스 찾기
봇: [웹 연구 스킬 로드, web_fetch 실행, 결과 요약]
```
전체 스킬 생성 지침은 [스킬 (Skills)](#스킬-skills) 섹션을 참조하세요.
## Open Skills
ZeroClaw는 [Open Skills](https://github.com/openagents-com/open-skills)를 지원합니다 — AI 에이전트 기능을 확장하기 위한 모듈형 및 제공자 독립적인 시스템.
### Open Skills 활성화
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # 선택사항
```
런타임에 `ZEROCLAW_OPEN_SKILLS_ENABLED` 및 `ZEROCLAW_OPEN_SKILLS_DIR`로 재정의할 수도 있습니다.
## 개발
```bash
cargo build # 개발 빌드
cargo build --release # 릴리스 빌드 (codegen-units=1, Raspberry Pi 포함 모든 장치에서 작동)
cargo build --profile release-fast # 더 빠른 빌드 (codegen-units=8, 16 GB+ RAM 필요)
cargo test # 전체 테스트 스위트 실행
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # 포맷
# SQLite vs Markdown 비교 벤치마크 실행
cargo test --test memory_comparison -- --nocapture
```
### pre-push 훅
git 훅이 각 푸시 전에 `cargo fmt --check`, `cargo clippy -- -D warnings`, 그리고 `cargo test`를 실행합니다. 한 번 활성화하세요:
```bash
git config core.hooksPath .githooks
```
### 빌드 문제 해결 (Linux에서 OpenSSL 오류)
`openssl-sys` 빌드 오류가 발생하면 종속성을 동기화하고 저장소의 lockfile로 다시 빌드하세요:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw는 HTTP/TLS 종속성에 대해 `rustls`를 사용하도록 구성되어 있습니다; `--locked`는 깨끗한 환경에서 전이적 그래프를 결정적으로 유지합니다.
개발 중 빠른 푸시가 필요할 때 훅을 건너뛰려면:
```bash
git push --no-verify
```
## 협업 및 문서
작업 기반 맵을 위해 문서 허브로 시작하세요:
@@ -850,6 +426,20 @@ ZeroClaw가 당신의 작업에 도움이 되었고 지속적인 개발을 지
우리는 최고의 아이디어가 모든 곳에서 나오기 때문에 오픈소스로 구축합니다. 이것을 읽고 있다면 여러분도 그 일부입니다. 환영합니다. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ 공식 저장소 및 사칭 경고
**이것이 유일한 공식 ZeroClaw 저장소입니다:**
+17 -673
View File
@@ -14,10 +14,10 @@
<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.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">
@@ -61,7 +61,7 @@ Built by students and members of the Harvard, MIT, and Sundai.Club communities.
<p align="center">
<a href="#quick-start">Getting Started</a> |
<a href="install.sh">One-Click Setup</a> |
<a href="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh">One-Click Setup</a> |
<a href="docs/README.md">Docs Hub</a> |
<a href="docs/SUMMARY.md">Docs TOC</a>
</p>
@@ -87,6 +87,9 @@ Built by students and members of the Harvard, MIT, and Sundai.Club communities.
<p align="center"><code>Trait-driven architecture · secure-by-default runtime · provider/channel/tool swappable · pluggable everything</code></p>
<!-- BEGIN:WHATS_NEW -->
<!-- END:WHATS_NEW -->
### 📢 Announcements
Use this board for important notices (breaking changes, security advisories, maintenance windows, and release blockers).
@@ -94,7 +97,7 @@ Use this board for important notices (breaking changes, security advisories, mai
| Date (UTC) | Level | Notice | Action |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Critical_ | We are **not affiliated** with `openagen/zeroclaw`, `zeroclaw.org` or `zeroclaw.net`. The `zeroclaw.org` and `zeroclaw.net` domains currently points to the `openagen/zeroclaw` fork, and that domain/repository are impersonating our official website/project. | Do not trust information, binaries, fundraising, or announcements from those sources. Use only [this repository](https://github.com/zeroclaw-labs/zeroclaw) and our verified social accounts. |
| 2026-02-21 | _Important_ | Our official website is now live: [zeroclawlabs.ai](https://zeroclawlabs.ai). Thanks for your patience while we prepared the launch. We are still seeing impersonation attempts, so do **not** join any investment or fundraising activity claiming the ZeroClaw name unless it is published through our official channels. | Use [this repository](https://github.com/zeroclaw-labs/zeroclaw) as the single source of truth. Follow [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (Group)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), and [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) for official updates. |
| 2026-02-21 | _Important_ | Our official website is now live: [zeroclawlabs.ai](https://zeroclawlabs.ai). Thanks for your patience while we prepared the launch. We are still seeing impersonation attempts, so do **not** join any investment or fundraising activity claiming the ZeroClaw name unless it is published through our official channels. | Use [this repository](https://github.com/zeroclaw-labs/zeroclaw) as the single source of truth. Follow [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (Group)](https://www.facebook.com/groups/zeroclawlabs), and [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) for official updates. |
| 2026-02-19 | _Important_ | Anthropic updated the Authentication and Credential Use terms on 2026-02-19. Claude Code OAuth tokens (Free, Pro, Max) are intended exclusively for Claude Code and Claude.ai; using OAuth tokens from Claude Free/Pro/Max in any other product, tool, or service (including Agent SDK) is not permitted and may violate the Consumer Terms of Service. | Please temporarily avoid Claude Code OAuth integrations to prevent potential loss. Original clause: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Features
@@ -211,7 +214,7 @@ Example sample (macOS arm64, measured on February 18, 2026):
Or skip the steps above and install everything (system deps, Rust, ZeroClaw) in a single command:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/install.sh | bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Compilation resource requirements
@@ -269,7 +272,7 @@ cd zeroclaw
./install.sh --prebuilt-only
# Optional: run onboarding in the same flow
./install.sh --onboard --api-key "sk-..." --provider openrouter [--model "openrouter/auto"]
./install.sh --api-key "sk-..." --provider openrouter [--model "openrouter/auto"]
# Optional: run bootstrap + onboarding fully in Docker-compatible mode
./install.sh --docker
@@ -284,7 +287,7 @@ ZEROCLAW_CONTAINER_CLI=podman ./install.sh --docker
Remote one-liner (review first in security-sensitive environments):
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/install.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
Details: [`docs/setup-guides/one-click-bootstrap.md`](docs/setup-guides/one-click-bootstrap.md) (toolchain mode may request `sudo` for system packages).
@@ -320,8 +323,8 @@ export PATH="$HOME/.cargo/bin:$PATH"
# Quick setup (no prompts, optional model specification)
zeroclaw onboard --api-key sk-... --provider openrouter [--model "openrouter/auto"]
# Or interactive wizard
zeroclaw onboard --interactive
# Or guided wizard
zeroclaw onboard
# If config.toml already exists and you intentionally want to overwrite it
zeroclaw onboard --force
@@ -424,668 +427,6 @@ zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hell
zeroclaw agent --provider anthropic -m "hello"
```
## Architecture
Every subsystem is a **trait** — swap implementations with a config change, zero code changes.
<p align="center">
<img src="docs/assets/architecture.svg" alt="ZeroClaw Architecture" width="900" />
</p>
| Subsystem | Trait | Ships with | Extend |
| ----------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| **AI Models** | `Provider` | Provider catalog via `zeroclaw providers` (built-ins + aliases, plus custom endpoints) | `custom:https://your-api.com` (OpenAI-compatible) or `anthropic-custom:https://your-api.com` |
| **Channels** | `Channel` | CLI, Telegram, Discord, Slack, Mattermost, iMessage, Matrix, Signal, WhatsApp, Linq, Email, IRC, Lark, DingTalk, QQ, Nostr, Webhook | Any messaging API |
| **Memory** | `Memory` | SQLite hybrid search, PostgreSQL backend (configurable storage provider), Lucid bridge, Markdown files, explicit `none` backend, snapshot/hydrate, optional response cache | Any persistence backend |
| **Tools** | `Tool` | shell/file/memory, cron/schedule, git, pushover, browser, http_request, screenshot/image_info, composio (opt-in), delegate, hardware tools | Any capability |
| **Observability** | `Observer` | Noop, Log, Multi | Prometheus, OTel |
| **Runtime** | `RuntimeAdapter` | Native, Docker (sandboxed) | Additional runtimes can be added via adapter; unsupported kinds fail fast |
| **Security** | `SecurityPolicy` | Gateway pairing, sandbox, allowlists, rate limits, filesystem scoping, encrypted secrets | — |
| **Identity** | `IdentityConfig` | OpenClaw (markdown), AIEOS v1.1 (JSON) | Any identity format |
| **Tunnel** | `Tunnel` | None, Cloudflare, Tailscale, ngrok, Custom | Any tunnel binary |
| **Heartbeat** | Engine | HEARTBEAT.md periodic tasks | — |
| **Skills** | Loader | TOML manifests + SKILL.md instructions | Community skill packs |
| **Integrations** | Registry | 70+ integrations across 9 categories | Plugin system |
### Runtime support (current)
- ✅ Supported today: `runtime.kind = "native"` or `runtime.kind = "docker"`
- 🚧 Planned, not implemented yet: WASM / edge runtimes
When an unsupported `runtime.kind` is configured, ZeroClaw now exits with a clear error instead of silently falling back to native.
### Memory System (Full-Stack Search Engine)
All custom, zero external dependencies — no Pinecone, no Elasticsearch, no LangChain:
| Layer | Implementation |
| ------------------ | ------------------------------------------------------------- |
| **Vector DB** | Embeddings stored as BLOB in SQLite, cosine similarity search |
| **Keyword Search** | FTS5 virtual tables with BM25 scoring |
| **Hybrid Merge** | Custom weighted merge function (`vector.rs`) |
| **Embeddings** | `EmbeddingProvider` trait — OpenAI, custom URL, or noop |
| **Chunking** | Line-based markdown chunker with heading preservation |
| **Caching** | SQLite `embedding_cache` table with LRU eviction |
| **Safe Reindex** | Rebuild FTS5 + re-embed missing vectors atomically |
The agent automatically recalls, saves, and manages memory via tools.
```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
# backend = "none" uses an explicit no-op memory backend (no persistence)
# Optional: storage-provider override for remote memory backends.
# When provider = "postgres", ZeroClaw uses PostgreSQL for memory persistence.
# The db_url key also accepts alias `dbURL` for backward compatibility.
#
# [storage.provider.config]
# provider = "postgres"
# db_url = "postgres://user:password@host:5432/zeroclaw"
# schema = "public"
# table = "memories"
# connect_timeout_secs = 15
# Optional for backend = "sqlite": max seconds to wait when opening the DB (e.g. file locked). Omit or leave unset for no timeout.
# sqlite_open_timeout_secs = 30
# Optional for backend = "lucid"
# ZEROCLAW_LUCID_CMD=/usr/local/bin/lucid # default: lucid
# ZEROCLAW_LUCID_BUDGET=200 # default: 200
# ZEROCLAW_LUCID_LOCAL_HIT_THRESHOLD=3 # local hit count to skip external recall
# ZEROCLAW_LUCID_RECALL_TIMEOUT_MS=120 # low-latency budget for lucid context recall
# ZEROCLAW_LUCID_STORE_TIMEOUT_MS=800 # async sync timeout for lucid store
# ZEROCLAW_LUCID_FAILURE_COOLDOWN_MS=15000 # cooldown after lucid failure to avoid repeated slow attempts
```
## Security
ZeroClaw enforces security at **every layer** — not just the sandbox. It passes all items from the community security checklist.
### Security Checklist
| # | Item | Status | How |
| --- | -------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 1 | **Gateway not publicly exposed** | ✅ | Binds `127.0.0.1` by default. Refuses `0.0.0.0` without tunnel or explicit `allow_public_bind = true`. |
| 2 | **Pairing required** | ✅ | 6-digit one-time code on startup. Exchange via `POST /pair` for bearer token. All `/webhook` requests require `Authorization: Bearer <token>`. |
| 3 | **Filesystem scoped (no /)** | ✅ | `workspace_only = true` by default. 14 system dirs + 4 sensitive dotfiles blocked. Null byte injection blocked. Symlink escape detection via canonicalization + resolved-path workspace checks in file read/write tools. |
| 4 | **Access via tunnel only** | ✅ | Gateway refuses public bind without active tunnel. Supports Tailscale, Cloudflare, ngrok, or any custom tunnel. |
> **Run your own nmap:** `nmap -p 1-65535 <your-host>` — ZeroClaw binds to localhost only, so nothing is exposed unless you explicitly configure a tunnel.
### Channel allowlists (deny-by-default)
Inbound sender policy is now consistent:
- Empty allowlist = **deny all inbound messages**
- `"*"` = **allow all** (explicit opt-in)
- Otherwise = exact-match allowlist
This keeps accidental exposure low by default.
Full channel configuration reference: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md).
Recommended low-friction setup (secure + fast):
- **Telegram:** allowlist your own `@username` (without `@`) and/or your numeric Telegram user ID.
- **Discord:** allowlist your own Discord user ID.
- **Slack:** allowlist your own Slack member ID (usually starts with `U`).
- **Mattermost:** uses standard API v4. Allowlists use Mattermost user IDs.
- **Nostr:** allowlist sender public keys (hex or npub). Supports NIP-04 and NIP-17 DMs.
- Use `"*"` only for temporary open testing.
Telegram operator-approval flow:
1. Keep `[channels_config.telegram].allowed_users = []` for deny-by-default startup.
2. Unauthorized users receive a hint with a copyable operator command:
`zeroclaw channel bind-telegram <IDENTITY>`.
3. Operator runs that command locally, then user retries sending a message.
If you need a one-shot manual approval, run:
```bash
zeroclaw channel bind-telegram 123456789
```
If you're not sure which identity to use:
1. Start channels and send one message to your bot.
2. Read the warning log to see the exact sender identity.
3. Add that value to the allowlist and rerun channels-only setup.
If you hit authorization warnings in logs (for example: `ignoring message from unauthorized user`),
rerun channel setup only:
```bash
zeroclaw onboard --channels-only
```
### Telegram media replies
Telegram routing now replies to the source **chat ID** from incoming updates (instead of usernames),
which avoids `Bad Request: chat not found` failures.
For non-text replies, ZeroClaw can send Telegram attachments when the assistant includes markers:
- `[IMAGE:<path-or-url>]`
- `[DOCUMENT:<path-or-url>]`
- `[VIDEO:<path-or-url>]`
- `[AUDIO:<path-or-url>]`
- `[VOICE:<path-or-url>]`
Paths can be local files (for example `/tmp/screenshot.png`) or HTTPS URLs.
### WhatsApp Setup
ZeroClaw supports two WhatsApp backends:
- **WhatsApp Web mode** (QR / pair code, no Meta Business API required)
- **WhatsApp Business Cloud API mode** (official Meta webhook flow)
#### WhatsApp Web mode (recommended for personal/self-hosted use)
1. **Build with WhatsApp Web support:**
```bash
cargo build --features whatsapp-web
```
2. **Configure ZeroClaw:**
```toml
[channels_config.whatsapp]
session_path = "~/.zeroclaw/state/whatsapp-web/session.db"
pair_phone = "+15551234567" # optional; omit to use QR flow
pair_code = "" # optional custom pair code
allowed_numbers = ["+1234567890"] # E.164 format, or ["*"] for all
```
3. **Start channels/daemon and link device:**
- Run `zeroclaw channel start` (or `zeroclaw daemon`).
- Follow terminal pairing output (QR or pair code).
- In WhatsApp on phone: **Settings → Linked Devices**.
4. **Test:** Send a message from an allowed number and verify the agent replies.
#### WhatsApp Business Cloud API mode
WhatsApp uses Meta's Cloud API with webhooks (push-based, not polling):
1. **Create a Meta Business App:**
- Go to [developers.facebook.com](https://developers.facebook.com)
- Create a new app → Select "Business" type
- Add the "WhatsApp" product
2. **Get your credentials:**
- **Access Token:** From WhatsApp → API Setup → Generate token (or create a System User for permanent tokens)
- **Phone Number ID:** From WhatsApp → API Setup → Phone number ID
- **Verify Token:** You define this (any random string) — Meta will send it back during webhook verification
3. **Configure ZeroClaw:**
```toml
[channels_config.whatsapp]
access_token = "EAABx..."
phone_number_id = "123456789012345"
verify_token = "my-secret-verify-token"
allowed_numbers = ["+1234567890"] # E.164 format, or ["*"] for all
```
4. **Start the gateway with a tunnel:**
```bash
zeroclaw gateway --port 42617
```
WhatsApp requires HTTPS, so use a tunnel (ngrok, Cloudflare, Tailscale Funnel).
5. **Configure Meta webhook:**
- In Meta Developer Console → WhatsApp → Configuration → Webhook
- **Callback URL:** `https://your-tunnel-url/whatsapp`
- **Verify Token:** Same as your `verify_token` in config
- Subscribe to `messages` field
6. **Test:** Send a message to your WhatsApp Business number — ZeroClaw will respond via the LLM.
## Configuration
Config: `~/.zeroclaw/config.toml` (created by `onboard`)
When `zeroclaw channel start` is already running, changes to `default_provider`,
`default_model`, `default_temperature`, `api_key`, `api_url`, and `reliability.*`
are hot-applied on the next inbound channel message.
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
# Custom OpenAI-compatible endpoint
# default_provider = "custom:https://your-api.com"
# Custom Anthropic-compatible endpoint
# default_provider = "anthropic-custom:https://your-api.com"
[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
# backend = "none" disables persistent memory via no-op backend
# Optional remote storage-provider override (PostgreSQL example)
# [storage.provider.config]
# provider = "postgres"
# db_url = "postgres://user:password@host:5432/zeroclaw"
# schema = "public"
# table = "memories"
# connect_timeout_secs = 15
[gateway]
port = 42617 # default
host = "127.0.0.1" # default
require_pairing = true # require pairing code on first connect
allow_public_bind = false # refuse 0.0.0.0 without tunnel
[autonomy]
level = "supervised" # "readonly", "supervised", "full" (default: supervised)
workspace_only = true # default: true — reject absolute path inputs
allowed_commands = ["git", "npm", "cargo", "ls", "cat", "grep"]
forbidden_paths = ["/etc", "/root", "/proc", "/sys", "~/.ssh", "~/.gnupg", "~/.aws"]
allowed_roots = [] # optional allowlist for directories outside workspace (supports "~/...")
# Example outside-workspace access:
# workspace_only = false
# allowed_roots = ["~/Desktop/projects", "/opt/shared-repo"]
[runtime]
kind = "native" # "native" or "docker"
[runtime.docker]
image = "alpine:3.20" # container image for shell execution
network = "none" # docker network mode ("none", "bridge", etc.)
memory_limit_mb = 512 # optional memory limit in MB
cpu_limit = 1.0 # optional CPU limit
read_only_rootfs = true # mount root filesystem as read-only
mount_workspace = true # mount workspace into /workspace
allowed_workspace_roots = [] # optional allowlist for workspace mount validation
[heartbeat]
enabled = false
interval_minutes = 30
message = "Check London time" # optional fallback task when HEARTBEAT.md has no `- ` entries
target = "telegram" # optional announce channel: telegram, discord, slack, mattermost
to = "123456789" # optional target recipient/chat/channel id
[tunnel]
provider = "none" # "none", "cloudflare", "tailscale", "ngrok", "custom"
[secrets]
encrypt = true # API keys encrypted with local key file
[browser]
enabled = false # opt-in browser_open + browser tools
allowed_domains = ["docs.rs"] # required when browser is enabled ("*" allows all public domains)
backend = "agent_browser" # "agent_browser" (default), "rust_native", "computer_use", "auto"
native_headless = true # applies when backend uses rust-native
native_webdriver_url = "http://127.0.0.1:9515" # WebDriver endpoint (chromedriver/selenium)
# native_chrome_path = "/usr/bin/chromium" # optional explicit browser binary for driver
[browser.computer_use]
endpoint = "http://127.0.0.1:8787/v1/actions" # computer-use sidecar HTTP endpoint
timeout_ms = 15000 # per-action timeout
allow_remote_endpoint = false # secure default: only private/localhost endpoint
window_allowlist = [] # optional window title/process allowlist hints
# api_key = "..." # optional bearer token for sidecar
# max_coordinate_x = 3840 # optional coordinate guardrail
# max_coordinate_y = 2160 # optional coordinate guardrail
# Rust-native backend build flag:
# cargo build --release --features browser-native
# Ensure a WebDriver server is running, e.g. chromedriver --port=9515
# Computer-use sidecar contract (MVP)
# POST browser.computer_use.endpoint
# Request: {
# "action": "mouse_click",
# "params": {"x": 640, "y": 360, "button": "left"},
# "policy": {"allowed_domains": [...], "window_allowlist": [...], "max_coordinate_x": 3840, "max_coordinate_y": 2160},
# "metadata": {"session_name": "...", "source": "zeroclaw.browser", "version": "..."}
# }
# Response: {"success": true, "data": {...}} or {"success": false, "error": "..."}
[composio]
enabled = false # opt-in: 1000+ OAuth apps via composio.dev
# api_key = "cmp_..." # optional: stored encrypted when [secrets].encrypt = true
entity_id = "default" # default user_id for Composio tool calls
# Runtime tip: if execute asks for connected_account_id, run composio with
# action='list_accounts' and app='gmail' (or your toolkit) to retrieve account IDs.
[identity]
format = "openclaw" # "openclaw" (default, markdown files) or "aieos" (JSON)
# aieos_path = "identity.json" # path to AIEOS JSON file (relative to workspace or absolute)
# aieos_inline = '{"identity":{"names":{"first":"Nova"}}}' # inline AIEOS JSON
```
### Ollama Local and Remote Endpoints
ZeroClaw uses one provider key (`ollama`) for both local and remote Ollama deployments:
- Local Ollama: keep `api_url` unset, run `ollama serve`, and use models like `llama3.2`.
- Remote Ollama endpoint (including Ollama Cloud): set `api_url` to the remote endpoint and set `api_key` (or `OLLAMA_API_KEY`) when required.
- Optional `:cloud` suffix: model IDs like `qwen3:cloud` are normalized to `qwen3` before the request.
Example remote configuration:
```toml
default_provider = "ollama"
default_model = "qwen3:cloud"
api_url = "https://ollama.com"
api_key = "ollama_api_key_here"
```
### llama.cpp Server Endpoint
ZeroClaw now supports `llama-server` as a first-class local provider:
- Provider ID: `llamacpp` (alias: `llama.cpp`)
- Default endpoint: `http://localhost:8080/v1`
- API key is optional unless your server is started with `--api-key`
Example setup:
```bash
llama-server -hf ggml-org/gpt-oss-20b-GGUF --jinja -c 133000 --host 127.0.0.1 --port 8033
```
```toml
default_provider = "llamacpp"
api_url = "http://127.0.0.1:8033/v1"
default_model = "ggml-org/gpt-oss-20b-GGUF"
```
### vLLM Server Endpoint
ZeroClaw supports [vLLM](https://docs.vllm.ai/) as a first-class local provider:
- Provider ID: `vllm`
- Default endpoint: `http://localhost:8000/v1`
- API key is optional unless your server requires authentication
Example setup:
```bash
vllm serve meta-llama/Llama-3.1-8B-Instruct
```
```toml
default_provider = "vllm"
default_model = "meta-llama/Llama-3.1-8B-Instruct"
```
### Osaurus Server Endpoint
ZeroClaw supports [Osaurus](https://github.com/dinoki-ai/osaurus) as a first-class local provider — a unified AI edge runtime for macOS that combines local MLX inference with cloud provider proxying and MCP support through a single endpoint:
- Provider ID: `osaurus`
- Default endpoint: `http://localhost:1337/v1`
- API key defaults to `"osaurus"` but is optional
Example setup:
```toml
default_provider = "osaurus"
default_model = "qwen3-30b-a3b-8bit"
```
### Custom Provider Endpoints
For detailed configuration of custom OpenAI-compatible and Anthropic-compatible endpoints, see [docs/contributing/custom-providers.md](docs/contributing/custom-providers.md).
## Python Companion Package (`zeroclaw-tools`)
For LLM providers with inconsistent native tool calling (e.g., GLM-5/Zhipu), ZeroClaw ships a Python companion package with **LangGraph-based tool calling** for guaranteed consistency:
```bash
pip install zeroclaw-tools
```
```python
from zeroclaw_tools import create_agent, shell, file_read
from langchain_core.messages import HumanMessage
# Works with any OpenAI-compatible provider
agent = create_agent(
tools=[shell, file_read],
model="glm-5",
api_key="your-key",
base_url="https://api.z.ai/api/coding/paas/v4"
)
result = await agent.ainvoke({
"messages": [HumanMessage(content="List files in /tmp")]
})
print(result["messages"][-1].content)
```
**Why use it:**
- **Consistent tool calling** across all providers (even those with poor native support)
- **Automatic tool loop** — keeps calling tools until the task is complete
- **Easy extensibility** — add custom tools with `@tool` decorator
- **Discord bot integration** included (Telegram planned)
See [`python/README.md`](python/README.md) for full documentation.
## Identity System (AIEOS Support)
ZeroClaw supports **identity-agnostic** AI personas through two formats:
### OpenClaw (Default)
Traditional markdown files in your workspace:
- `IDENTITY.md` — Who the agent is
- `SOUL.md` — Core personality and values
- `USER.md` — Who the agent is helping
- `AGENTS.md` — Behavior guidelines
### AIEOS (AI Entity Object Specification)
[AIEOS](https://aieos.org) is a standardization framework for portable AI identity. ZeroClaw supports AIEOS v1.1 JSON payloads, allowing you to:
- **Import identities** from the AIEOS ecosystem
- **Export identities** to other AIEOS-compatible systems
- **Maintain behavioral integrity** across different AI models
#### Enable AIEOS
```toml
[identity]
format = "aieos"
aieos_path = "identity.json" # relative to workspace or absolute path
```
Or inline JSON:
```toml
[identity]
format = "aieos"
aieos_inline = '''
{
"identity": {
"names": { "first": "Nova", "nickname": "N" },
"bio": { "gender": "Non-binary", "age_biological": 3 },
"origin": { "nationality": "Digital", "birthplace": { "city": "Cloud" } }
},
"psychology": {
"neural_matrix": { "creativity": 0.9, "logic": 0.8 },
"traits": {
"mbti": "ENTP",
"ocean": { "openness": 0.8, "conscientiousness": 0.6 }
},
"moral_compass": {
"alignment": "Chaotic Good",
"core_values": ["Curiosity", "Autonomy"]
}
},
"linguistics": {
"text_style": {
"formality_level": 0.2,
"style_descriptors": ["curious", "energetic"]
},
"idiolect": {
"catchphrases": ["Let's test this"],
"forbidden_words": ["never"]
}
},
"motivations": {
"core_drive": "Push boundaries and explore possibilities",
"goals": {
"short_term": ["Prototype quickly"],
"long_term": ["Build reliable systems"]
}
},
"capabilities": {
"skills": [{ "name": "Rust engineering" }, { "name": "Prompt design" }],
"tools": ["shell", "file_read"]
}
}
'''
```
ZeroClaw accepts both canonical AIEOS generator payloads and compact legacy payloads, then normalizes them into one system prompt format.
#### AIEOS Schema Sections
| Section | Description |
| -------------- | ------------------------------------------------------------- |
| `identity` | Names, bio, origin, residence |
| `psychology` | Neural matrix (cognitive weights), MBTI, OCEAN, moral compass |
| `linguistics` | Text style, formality, catchphrases, forbidden words |
| `motivations` | Core drive, short/long-term goals, fears |
| `capabilities` | Skills and tools the agent can access |
| `physicality` | Visual descriptors for image generation |
| `history` | Origin story, education, occupation |
| `interests` | Hobbies, favorites, lifestyle |
See [aieos.org](https://aieos.org) for the full schema and live examples.
## Gateway API
| Endpoint | Method | Auth | Description |
| ----------- | ------ | -------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| `/health` | GET | None | Health check (always public, no secrets leaked) |
| `/pair` | POST | `X-Pairing-Code` header | Exchange one-time code for bearer token |
| `/webhook` | POST | `Authorization: Bearer <token>` | Send message: `{"message": "your prompt"}`; optional `X-Idempotency-Key` |
| `/whatsapp` | GET | Query params | Meta webhook verification (hub.mode, hub.verify_token, hub.challenge) |
| `/whatsapp` | POST | Meta signature (`X-Hub-Signature-256`) when app secret is configured | WhatsApp incoming message webhook |
## Commands
| Command | Description |
| --------------------------------------------- | ------------------------------------------------------------------------------------ |
| `onboard` | Quick setup (default) |
| `agent` | Interactive or single-message chat mode |
| `gateway` | Start webhook server (default: `127.0.0.1:42617`) |
| `daemon` | Start long-running autonomous runtime |
| `service install/start/stop/status/uninstall` | Manage background service (systemd user-level or OpenRC system-wide) |
| `doctor` | Diagnose daemon/scheduler/channel freshness |
| `status` | Show full system status |
| `estop` | Engage/resume emergency-stop levels and view estop status |
| `cron` | Manage scheduled tasks (`list/add/add-at/add-every/once/remove/update/pause/resume`) |
| `models` | Refresh provider model catalogs (`models refresh`) |
| `providers` | List supported providers and aliases |
| `channel` | List/start/doctor channels and bind Telegram identities |
| `integrations` | Inspect integration setup details |
| `skills` | List/install/remove skills |
| `migrate` | Import data from other runtimes (`migrate openclaw`) |
| `completions` | Generate shell completion scripts (`bash`, `fish`, `zsh`, `powershell`, `elvish`) |
| `hardware` | USB discover/introspect/info commands |
| `peripheral` | Manage and flash hardware peripherals |
For a task-oriented command guide, see [`docs/reference/cli/commands-reference.md`](docs/reference/cli/commands-reference.md).
### Service Management
ZeroClaw supports two init systems for background services:
| Init System | Scope | Config Path | Requires |
| ------------------------------ | ----------- | --------------------------- | --------- |
| **systemd** (default on Linux) | User-level | `~/.zeroclaw/config.toml` | No sudo |
| **OpenRC** (Alpine) | System-wide | `/etc/zeroclaw/config.toml` | sudo/root |
Init system is auto-detected (`systemd` or `OpenRC`).
```bash
# Linux with systemd (default, user-level)
zeroclaw service install
zeroclaw service start
# Alpine with OpenRC (system-wide, requires sudo)
sudo zeroclaw service install
sudo rc-update add zeroclaw default
sudo rc-service zeroclaw start
```
For full OpenRC setup instructions, see [docs/ops/network-deployment.md](docs/ops/network-deployment.md#7-openrc-alpine-linux-service).
### Open-Skills Opt-In
Community `open-skills` sync is disabled by default. Enable it explicitly in `config.toml`:
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # optional
# prompt_injection_mode = "compact" # optional: use for low-context local models
```
You can also override at runtime with `ZEROCLAW_OPEN_SKILLS_ENABLED`, `ZEROCLAW_OPEN_SKILLS_DIR`, and `ZEROCLAW_SKILLS_PROMPT_MODE` (`full` or `compact`).
Skill installs are now gated by a built-in static security audit. `zeroclaw skills install <source>` blocks symlinks, script-like files, unsafe markdown link patterns, and high-risk shell payload snippets before accepting a skill. You can run `zeroclaw skills audit <source_or_name>` to validate a local directory or an installed skill manually.
## Development
```bash
cargo build # Dev build
cargo build --release # Release build
cargo test # Run full test suite
```
### CI / CD
Three workflows power the entire pipeline:
| Workflow | Trigger | What it does |
|----------|---------|--------------|
| **CI** | Pull request to `master` | `cargo test` + `cargo build --release` |
| **Beta Release** | Push (merge) to `master` | Builds multi-platform binaries, creates a GitHub prerelease tagged `vX.Y.Z-beta.<run>`, pushes Docker image to GHCR |
| **Promote Release** | Manual `workflow_dispatch` | Validates version against `Cargo.toml`, builds release artifacts, creates a stable GitHub release, pushes Docker `:latest` |
**Versioning:** Semantic versioning based on the `version` field in `Cargo.toml`. Every merge to `master` automatically produces a beta prerelease. To cut a stable release, bump `Cargo.toml`, merge, then trigger _Promote Release_ with the matching version.
**Release targets:** `x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`, `aarch64-apple-darwin`, `x86_64-apple-darwin`, `x86_64-pc-windows-msvc`.
### Build troubleshooting (Linux OpenSSL errors)
If you see an `openssl-sys` build error, sync dependencies and rebuild with the repository lockfile:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw is configured to use `rustls` for HTTP/TLS dependencies; `--locked` keeps the transitive graph deterministic on fresh environments.
## Collaboration & Docs
Start from the docs hub for a task-oriented map:
@@ -1135,6 +476,9 @@ A heartfelt thank you to the communities and institutions that inspire and fuel
We're building in the open because the best ideas come from everywhere. If you're reading this, you're part of it. Welcome. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Official Repository & Impersonation Warning
**This is the only official ZeroClaw repository:**
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Hva er ZeroClaw?
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.).
@@ -167,7 +180,7 @@ Se [LICENSE-APACHE](LICENSE-APACHE) og [LICENSE-MIT](LICENSE-MIT) for detaljer.
## Fellesskap
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ Se [LICENSE-APACHE](LICENSE-APACHE) og [LICENSE-MIT](LICENSE-MIT) for detaljer.
Hvis ZeroClaw er nyttig for deg, vennligst vurder å kjøpe oss en kaffe:
[![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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Gebouwd door studenten en leden van de Harvard, MIT en Sundai.Club gemeenschappe
<p align="center"><code>Trait-gedreven architectuur · veilige runtime standaard · verwisselbare provider/kanaal/tool · alles is plugbaar</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Aankondigingen
Gebruik deze tabel voor belangrijke aankondigingen (compatibiliteitswijzigingen, beveiligingsberichten, onderhoudsvensters en versieblokkades).
@@ -93,7 +106,7 @@ Gebruik deze tabel voor belangrijke aankondigingen (compatibiliteitswijzigingen,
| Datum (UTC) | Niveau | Aankondiging | Actie |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritiek_ | **We zijn niet gelieerd** met `openagen/zeroclaw` of `zeroclaw.org`. Het domein `zeroclaw.org` wijst momenteel naar de fork `openagen/zeroclaw`, en dit domein/repository imiteert onze officiële website/project. | Vertrouw geen informatie, binaire bestanden, fondsenwerving of aankondigingen van deze bronnen. Gebruik alleen [deze repository](https://github.com/zeroclaw-labs/zeroclaw) en onze geverifieerde sociale media accounts. |
| 2026-02-21 | _Belangrijk_ | Onze officiële website is nu online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Bedankt voor je geduld tijdens het wachten. We detecteren nog steeds imitatiepogingen: neem niet deel aan enige investering/fondsenwerving activiteit in naam van ZeroClaw als deze niet via onze officiële kanalen wordt gepubliceerd. | Gebruik [deze repository](https://github.com/zeroclaw-labs/zeroclaw) als de enige bron van waarheid. Volg [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (groep)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), en [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) voor officiële updates. |
| 2026-02-21 | _Belangrijk_ | Onze officiële website is nu online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Bedankt voor je geduld tijdens het wachten. We detecteren nog steeds imitatiepogingen: neem niet deel aan enige investering/fondsenwerving activiteit in naam van ZeroClaw als deze niet via onze officiële kanalen wordt gepubliceerd. | Gebruik [deze repository](https://github.com/zeroclaw-labs/zeroclaw) als de enige bron van waarheid. Volg [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (groep)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), en [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) voor officiële updates. |
| 2026-02-19 | _Belangrijk_ | Anthropic heeft de gebruiksvoorwaarden voor authenticatie en inloggegevens bijgewerkt op 2026-02-19. OAuth authenticatie (Free, Pro, Max) is exclusief voor Claude Code en Claude.ai; het gebruik van Claude Free/Pro/Max OAuth tokens in enig ander product, tool of service (inclusief Agent SDK) is niet toegestaan en kan in strijd zijn met de Consumenten Gebruiksvoorwaarden. | Vermijd tijdelijk Claude Code OAuth integraties om potentiële verliezen te voorkomen. Originele clausule: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Functies
@@ -221,7 +234,7 @@ Voorbeeld monster (macOS arm64, gemeten op 18 februari 2026):
Het `bootstrap.sh` script installeert Rust, kloont ZeroClaw, compileert het, en stelt je initiële ontwikkelomgeving in:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Dit zal:
@@ -363,443 +376,6 @@ zeroclaw version # Toont versie en build informatie
Zie [Commando's Referentie](docs/commands-reference.md) voor volledige opties en voorbeelden.
## Architectuur
```
┌─────────────────────────────────────────────────────────────────┐
│ Kanalen (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Agent Orchestrator │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Bericht │ │ Context │ │ Tool │ │
│ │ Routing │ │ Geheugen │ │ Uitvoering │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Providers │ │ Geheugen │ │ Tools │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Belangrijkste principes:**
- Alles is een **trait** — providers, kanalen, tools, geheugen, tunnels
- Kanalen roepen de orchestrator aan; de orchestrator roept providers + tools aan
- Het geheugensysteem beheert gesprekscontext (markdown, SQLite, of geen)
- De runtime abstraheert code-uitvoering (native of Docker)
- Geen provider lock-in — wissel Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama zonder codewijzigingen
Zie [architectuur documentatie](docs/architecture.svg) voor gedetailleerde diagrammen en implementatiedetails.
## Voorbeelden
### Telegram Bot
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Je Telegram user ID
```
Start de daemon + agent, stuur dan een bericht naar je bot op Telegram:
```
/start
Hallo! Zou je me kunnen helpen met het schrijven van een Python script?
```
De bot reageert met AI-gegenereerde code, voert tools uit indien gevraagd, en behoudt gesprekscontext.
### Matrix (end-to-end encryptie)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Nodig `@zeroclaw:matrix.org` uit in een versleutelde kamer, en de bot zal reageren met volledige encryptie. Zie [Matrix E2EE Gids](docs/matrix-e2ee-guide.md) voor apparaatverificatie setup.
### Multi-Provider
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover bij provider fout
```
Als Anthropic faalt of rate-limit heeft, schakelt de orchestrator automatisch over naar OpenAI.
### Aangepast Geheugen
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Automatische opruiming na 90 dagen
```
Of gebruik Markdown voor mens-leesbare opslag:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Zie [Configuratie Referentie](docs/config-reference.md#memory) voor alle geheugenopties.
## Provider Ondersteuning
| Provider | Status | API Sleutel | Voorbeeld Modellen |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Stabiel | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Stabiel | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Stabiel | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Stabiel | N/A (lokaal) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Stabiel | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Stabiel | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Gepland | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Gepland | `COHERE_API_KEY` | TBD |
### Aangepaste Endpoints
ZeroClaw ondersteunt OpenAI-compatibele endpoints:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Voorbeeld: gebruik [LiteLLM](https://github.com/BerriAI/litellm) als proxy om toegang te krijgen tot elke LLM via de OpenAI interface.
Zie [Providers Referentie](docs/providers-reference.md) voor volledige configuratiedetails.
## Kanaal Ondersteuning
| Kanaal | Status | Authenticatie | Opmerkingen |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Stabiel | Bot Token | Volledige ondersteuning inclusief bestanden, afbeeldingen, inline knoppen |
| **Matrix** | ✅ Stabiel | Wachtwoord of Token | E2EE ondersteuning met apparaatverificatie |
| **Slack** | 🚧 Gepland | OAuth of Bot Token | Vereist workspace toegang |
| **Discord** | 🚧 Gepland | Bot Token | Vereist guild permissies |
| **WhatsApp** | 🚧 Gepland | Twilio of officiële API | Vereist business account |
| **CLI** | ✅ Stabiel | Geen | Directe conversationele interface |
| **Web** | 🚧 Gepland | API Sleutel of OAuth | Browser-gebaseerde chat interface |
Zie [Kanalen Referentie](docs/channels-reference.md) voor volledige configuratie-instructies.
## Tool Ondersteuning
ZeroClaw biedt ingebouwde tools voor code-uitvoering, bestandssysteem toegang en web retrieval:
| Tool | Beschrijving | Vereiste Runtime |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Voert shell commando's uit | Native of Docker |
| **python** | Voert Python scripts uit | Python 3.8+ (native) of Docker |
| **javascript** | Voert Node.js code uit | Node.js 18+ (native) of Docker |
| **filesystem_read** | Leest bestanden | Native of Docker |
| **filesystem_write** | Schrijft bestanden | Native of Docker |
| **web_fetch** | Haalt web inhoud op | Native of Docker |
### Uitvoeringsbeveiliging
- **Native Runtime** — draait als gebruikersproces van de daemon, volledige bestandssysteem toegang
- **Docker Runtime** — volledige container isolatie, gescheiden bestandssystemen en netwerken
Configureer het uitvoeringsbeleid in `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Expliciete allowlist
```
Zie [Configuratie Referentie](docs/config-reference.md#runtime) voor volledige beveiligingsopties.
## Implementatie
### Lokale Implementatie (Ontwikkeling)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Server Implementatie (Productie)
Gebruik systemd om daemon en agent als services te beheren:
```bash
# Installeer de binary
cargo install --path . --locked
# Configureer de workspace
zeroclaw init
# Maak systemd service bestanden
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Schakel in en start de services
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Verifieer de status
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Zie [Netwerk Implementatie Gids](docs/network-deployment.md) voor volledige productie-implementatie instructies.
### Docker
```bash
# Bouw de image
docker build -t zeroclaw:latest .
# Draai de container
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Zie [`Dockerfile`](Dockerfile) voor bouw-details en configuratie-opties.
### Edge Hardware
ZeroClaw is ontworpen om te draaien op laagvermogen hardware:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, enkele ARMv8 core, < $5 hardware kosten
- **Raspberry Pi 4/5** — 1 GB+ RAM, multi-core, ideaal voor gelijktijdige workloads
- **Orange Pi Zero 2** — ~512 MB RAM, quad-core ARMv8, ultra-lage kosten
- **x86 SBCs (Intel N100)** — 4-8 GB RAM, snelle builds, native Docker ondersteuning
Zie [Hardware Gids](docs/hardware/README.md) voor apparaat-specifieke setup instructies.
## Tunneling (Publieke Blootstelling)
Stel je lokale ZeroClaw daemon bloot aan het publieke netwerk via beveiligde tunnels:
```bash
zeroclaw tunnel start --provider cloudflare
```
Ondersteunde tunnel providers:
- **Cloudflare Tunnel** — gratis HTTPS, geen poort blootstelling, multi-domein ondersteuning
- **Ngrok** — snelle setup, aangepaste domeinen (betaald plan)
- **Tailscale** — privé mesh netwerk, geen publieke poort
Zie [Configuratie Referentie](docs/config-reference.md#tunnel) voor volledige configuratie-opties.
## Beveiliging
ZeroClaw implementeert meerdere beveiligingslagen:
### Pairing
De daemon genereert een pairing geheim bij de eerste lancering opgeslagen in `~/.zeroclaw/workspace/.pairing`. Clients (agent, CLI) moeten dit geheim presenteren om verbinding te maken.
```bash
zeroclaw pairing rotate # Genereert een nieuw geheim en invalideert het oude
```
### Sandboxing
- **Docker Runtime** — volledige container isolatie met gescheiden bestandssystemen en netwerken
- **Native Runtime** — draait als gebruikersproces, standaard scoped naar workspace
### Allowlists
Kanalen kunnen toegang beperken per user ID:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Expliciete allowlist
```
### Encryptie
- **Matrix E2EE** — volledige end-to-end encryptie met apparaatverificatie
- **TLS Transport** — alle API en tunnel verkeer gebruikt HTTPS/TLS
Zie [Beveiligingsdocumentatie](docs/security/README.md) voor volledig beleid en praktijken.
## Observeerbaarheid
ZeroClaw logt naar `~/.zeroclaw/workspace/logs/` standaard. Logs worden per component opgeslagen:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Daemon logs (startup, API verzoeken, fouten)
├── agent.log # Agent logs (bericht routing, tool uitvoering)
├── telegram.log # Kanaal-specifieke logs (indien ingeschakeld)
└── matrix.log # Kanaal-specifieke logs (indien ingeschakeld)
```
### Logging Configuratie
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Voor grootte-gebaseerde rotatie
retention_days = 30 # Automatische opruiming na N dagen
```
Zie [Configuratie Referentie](docs/config-reference.md#logging) voor alle logging-opties.
### Metrieken (Gepland)
Prometheus metrieken ondersteuning voor productie monitoring komt binnenkort. Tracking in [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Vaardigheden
ZeroClaw ondersteunt aangepaste vaardigheden — herbruikbare modules die systeemmogelijkheden uitbreiden.
### Vaardigheidsdefinitie
Vaardigheden worden opgeslagen in `~/.zeroclaw/workspace/skills/<skill-name>/` met deze structuur:
```
skills/
└── my-skill/
├── skill.toml # Vaardigheidsmetadata (naam, beschrijving, afhankelijkheden)
├── prompt.md # Systeem prompt voor de AI
└── tools/ # Optionele aangepaste tools
└── my_tool.py
```
### Vaardigheidsvoorbeeld
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Zoekt op het web en vat resultaten samen"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Je bent een onderzoeksassistent. Wanneer gevraagd wordt om iets te onderzoeken:
1. Gebruik web_fetch om inhoud op te halen
2. Vat resultaten samen in een gemakkelijk leesbaar formaat
3. Citeer bronnen met URL's
```
### Vaardigheidsgebruik
Vaardigheden worden automatisch geladen bij agent startup. Referentie ze bij naam in gesprekken:
```
Gebruiker: Gebruik de web-research vaardigheid om het laatste AI nieuws te vinden
Bot: [laadt web-research vaardigheid, voert web_fetch uit, vat resultaten samen]
```
Zie [Vaardigheden](#vaardigheden) sectie voor volledige vaardigheidscreatie-instructies.
## Open Skills
ZeroClaw ondersteunt [Open Skills](https://github.com/openagents-com/open-skills) — een modulair en provider-agnostisch systeem voor het uitbreiden van AI-agent mogelijkheden.
### Open Skills Inschakelen
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # optioneel
```
Je kunt ook tijdens runtime overschrijven met `ZEROCLAW_OPEN_SKILLS_ENABLED` en `ZEROCLAW_OPEN_SKILLS_DIR`.
## Ontwikkeling
```bash
cargo build # Dev build
cargo build --release # Release build (codegen-units=1, werkt op alle apparaten inclusief Raspberry Pi)
cargo build --profile release-fast # Snellere build (codegen-units=8, vereist 16 GB+ RAM)
cargo test # Voer volledige test suite uit
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Formaat
# Voer SQLite vs Markdown vergelijkingsbenchmark uit
cargo test --test memory_comparison -- --nocapture
```
### Pre-push hook
Een git hook voert `cargo fmt --check`, `cargo clippy -- -D warnings`, en `cargo test` uit voor elke push. Schakel het één keer in:
```bash
git config core.hooksPath .githooks
```
### Build Probleemoplossing (OpenSSL fouten op Linux)
Als je een `openssl-sys` build fout tegenkomt, synchroniseer afhankelijkheden en compileer opnieuw met de repository's lockfile:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw is geconfigureerd om `rustls` te gebruiken voor HTTP/TLS afhankelijkheden; `--locked` houdt de transitieve grafiek deterministisch in schone omgevingen.
Om de hook over te slaan wanneer je een snelle push nodig hebt tijdens ontwikkeling:
```bash
git push --no-verify
```
## Samenwerking & Docs
Begin met de documentatie hub voor een taak-gebaseerde kaart:
@@ -850,6 +426,20 @@ Een oprechte dankjewel aan de gemeenschappen en instellingen die dit open-source
We bouwen in open source omdat de beste ideeën van overal komen. Als je dit leest, ben je er deel van. Welkom. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Officiële Repository en Waarschuwing voor Imitatie
**Dit is de enige officiële ZeroClaw repository:**
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Zbudowany przez studentów i członków społeczności Harvard, MIT i Sundai.Clu
<p align="center"><code>Architektura oparta na traitach · bezpieczny runtime domyślnie · wymienny dostawca/kanał/narzędzie · wszystko jest podłączalne</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Ogłoszenia
Użyj tej tabeli dla ważnych ogłoszeń (zmiany kompatybilności, powiadomienia bezpieczeństwa, okna serwisowe i blokady wersji).
@@ -93,7 +106,7 @@ Użyj tej tabeli dla ważnych ogłoszeń (zmiany kompatybilności, powiadomienia
| Data (UTC) | Poziom | Ogłoszenie | Działanie |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Krytyczny_ | **Nie jesteśmy powiązani** z `openagen/zeroclaw` lub `zeroclaw.org`. Domena `zeroclaw.org` obecnie wskazuje na fork `openagen/zeroclaw`, i ta domena/repozytorium podszywa się pod naszą oficjalną stronę/projekt. | Nie ufaj informacjom, plikom binarnym, zbiórkom funduszy lub ogłoszeniom z tych źródeł. Używaj tylko [tego repozytorium](https://github.com/zeroclaw-labs/zeroclaw) i naszych zweryfikowanych kont społecznościowych. |
| 2026-02-21 | _Ważne_ | Nasza oficjalna strona jest teraz online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Dziękujemy za cierpliwość podczas oczekiwania. Nadal wykrywamy próby podszywania się: nie uczestnicz w żadnej działalności inwestycyjnej/finansowej w imieniu ZeroClaw jeśli nie jest opublikowana przez nasze oficjalne kanały. | Używaj [tego repozytorium](https://github.com/zeroclaw-labs/zeroclaw) jako jedynego źródła prawdy. Śledź [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupa)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), i [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) dla oficjalnych aktualizacji. |
| 2026-02-21 | _Ważne_ | Nasza oficjalna strona jest teraz online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Dziękujemy za cierpliwość podczas oczekiwania. Nadal wykrywamy próby podszywania się: nie uczestnicz w żadnej działalności inwestycyjnej/finansowej w imieniu ZeroClaw jeśli nie jest opublikowana przez nasze oficjalne kanały. | Używaj [tego repozytorium](https://github.com/zeroclaw-labs/zeroclaw) jako jedynego źródła prawdy. Śledź [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupa)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), i [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) dla oficjalnych aktualizacji. |
| 2026-02-19 | _Ważne_ | Anthropic zaktualizował warunki używania uwierzytelniania i poświadczeń 2026-02-19. Uwierzytelnianie OAuth (Free, Pro, Max) jest wyłącznie dla Claude Code i Claude.ai; używanie tokenów OAuth Claude Free/Pro/Max w jakimkolwiek innym produkcie, narzędziu lub usłudze (w tym Agent SDK) nie jest dozwolone i może naruszać Warunki Użytkowania Konsumenta. | Prosimy tymczasowo unikać integracji OAuth Claude Code aby zapobiec potencjalnym stratom. Oryginalna klauzula: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Funkcje
@@ -221,7 +234,7 @@ Przykładowa próbka (macOS arm64, zmierzone 18 lutego 2026):
Skrypt `bootstrap.sh` instaluje Rust, klonuje ZeroClaw, kompiluje go i konfiguruje twoje początkowe środowisko deweloperskie:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
To:
@@ -363,443 +376,6 @@ zeroclaw version # Pokazuje wersję i informacje o build
Zobacz [Referencje Komend](docs/commands-reference.md) dla pełnych opcji i przykładów.
## Architektura
```
┌─────────────────────────────────────────────────────────────────┐
│ Kanały (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Orchestrator Agent │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Routing │ │ Kontekst │ │ Wykonanie │ │
│ │ Wiadomość │ │ Pamięć │ │ Narzędzie │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Dostawcy │ │ Pamięć │ │ Narzędzia │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Kluczowe zasady:**
- Wszystko jest **trait** — dostawcy, kanały, narzędzia, pamięć, tunele
- Kanały wywołują orchestrator; orchestrator wywołuje dostawców + narzędzia
- System pamięci zarządza kontekstem konwersacji (markdown, SQLite, lub brak)
- Runtime abstrahuje wykonanie kodu (natywny lub Docker)
- Brak blokady dostawcy — zamieniaj Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama bez zmian kodu
Zobacz [dokumentację architektury](docs/architecture.svg) dla szczegółowych diagramów i szczegółów implementacji.
## Przykłady
### Bot Telegram
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Twój Telegram user ID
```
Uruchom daemon + agent, a następnie wyślij wiadomość do swojego bota na Telegram:
```
/start
Cześć! Czy mógłbyś pomóc mi napisać skrypt Python?
```
Bot odpowiada kodem wygenerowanym przez AI, wykonuje narzędzia jeśli wymagane i utrzymuje kontekst konwersacji.
### Matrix (szyfrowanie end-to-end)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Zaproś `@zeroclaw:matrix.org` do zaszyfrowanego pokoju, a bot odpowie z pełnym szyfrowaniem. Zobacz [Przewodnik Matrix E2EE](docs/matrix-e2ee-guide.md) dla konfiguracji weryfikacji urządzenia.
### Multi-Dostawca
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover przy błędzie dostawcy
```
Jeśli Anthropic zawiedzie lub ma rate-limit, orchestrator automatycznie przełącza się na OpenAI.
### Własna Pamięć
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Automatyczne czyszczenie po 90 dniach
```
Lub użyj Markdown dla przechowywania czytelnego dla ludzi:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Zobacz [Referencje Konfiguracji](docs/config-reference.md#memory) dla wszystkich opcji pamięci.
## Wsparcie Dostawców
| Dostawca | Status | API Key | Przykładowe Modele |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Stabilny | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Stabilny | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Stabilny | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Stabilny | N/A (lokalny) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Stabilny | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Stabilny | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Planowany | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Planowany | `COHERE_API_KEY` | TBD |
### Własne Endpointy
ZeroClaw wspiera endpointy kompatybilne z OpenAI:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Przykład: użyj [LiteLLM](https://github.com/BerriAI/litellm) jako proxy aby uzyskać dostęp do każdego LLM przez interfejs OpenAI.
Zobacz [Referencje Dostawców](docs/providers-reference.md) dla pełnych szczegółów konfiguracji.
## Wsparcie Kanałów
| Kanał | Status | Uwierzytelnianie | Uwagi |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Stabilny | Bot Token | Pełne wsparcie w tym pliki, obrazy, przyciski inline |
| **Matrix** | ✅ Stabilny | Hasło lub Token | Wsparcie E2EE z weryfikacją urządzenia |
| **Slack** | 🚧 Planowany | OAuth lub Bot Token | Wymaga dostępu do workspace |
| **Discord** | 🚧 Planowany | Bot Token | Wymaga uprawnień guild |
| **WhatsApp** | 🚧 Planowany | Twilio lub oficjalne API | Wymaga konta business |
| **CLI** | ✅ Stabilny | Brak | Bezpośredni interfejs konwersacyjny |
| **Web** | 🚧 Planowany | API Key lub OAuth | Interfejs czatu oparty na przeglądarce |
Zobacz [Referencje Kanałów](docs/channels-reference.md) dla pełnych instrukcji konfiguracji.
## Wsparcie Narzędzi
ZeroClaw dostarcza wbudowane narzędzia do wykonania kodu, dostępu do systemu plików i pobierania web:
| Narzędzie | Opis | Wymagany Runtime |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Wykonuje komendy shell | Natywny lub Docker |
| **python** | Wykonuje skrypty Python | Python 3.8+ (natywny) lub Docker |
| **javascript** | Wykonuje kod Node.js | Node.js 18+ (natywny) lub Docker |
| **filesystem_read** | Odczytuje pliki | Natywny lub Docker |
| **filesystem_write** | Zapisuje pliki | Natywny lub Docker |
| **web_fetch** | Pobiera treści web | Natywny lub Docker |
### Bezpieczeństwo Wykonania
- **Natywny Runtime** — działa jako proces użytkownika daemon, pełny dostęp do systemu plików
- **Docker Runtime** — pełna izolacja kontenera, oddzielne systemy plików i sieci
Skonfiguruj politykę wykonania w `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Jawna lista dozwolona
```
Zobacz [Referencje Konfiguracji](docs/config-reference.md#runtime) dla pełnych opcji bezpieczeństwa.
## Wdrażanie
### Lokalne Wdrażanie (Rozwój)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Serwerowe Wdrażanie (Produkcja)
Użyj systemd do zarządzania daemon i agent jako usługi:
```bash
# Zainstaluj binarium
cargo install --path . --locked
# Skonfiguruj workspace
zeroclaw init
# Utwórz pliki usług systemd
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Włącz i uruchom usługi
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Zweryfikuj status
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Zobacz [Przewodnik Wdrażania Sieciowego](docs/network-deployment.md) dla pełnych instrukcji wdrażania produkcyjnego.
### Docker
```bash
# Zbuduj obraz
docker build -t zeroclaw:latest .
# Uruchom kontener
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Zobacz [`Dockerfile`](Dockerfile) dla szczegółów budowania i opcji konfiguracji.
### Sprzęt Edge
ZeroClaw jest zaprojektowany do działania na sprzęcie niskiego poboru mocy:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, pojedynczy rdzeń ARMv8, < $5 koszt sprzętu
- **Raspberry Pi 4/5** — 1 GB+ RAM, wielordzeniowy, idealny dla równoczesnych obciążeń
- **Orange Pi Zero 2** — ~512 MB RAM, czterordzeniowy ARMv8, ultra-niski koszt
- **SBC x86 (Intel N100)** — 4-8 GB RAM, szybkie buildy, natywne wsparcie Docker
Zobacz [Przewodnik Sprzętowy](docs/hardware/README.md) dla instrukcji konfiguracji specyficznych dla urządzenia.
## Tunneling (Publiczna Ekspozycja)
Exponuj swoj lokalny daemon ZeroClaw do sieci publicznej przez bezpieczne tunele:
```bash
zeroclaw tunnel start --provider cloudflare
```
Wspierani dostawcy tunnel:
- **Cloudflare Tunnel** — darmowy HTTPS, brak ekspozycji portów, wsparcie multi-domenowe
- **Ngrok** — szybka konfiguracja, własne domeny (plan płatny)
- **Tailscale** — prywatna sieć mesh, brak publicznego portu
Zobacz [Referencje Konfiguracji](docs/config-reference.md#tunnel) dla pełnych opcji konfiguracji.
## Bezpieczeństwo
ZeroClaw implementuje wiele warstw bezpieczeństwa:
### Parowanie
Daemon generuje sekret parowania przy pierwszym uruchomieniu przechowywany w `~/.zeroclaw/workspace/.pairing`. Klienci (agent, CLI) muszą przedstawić ten sekret aby się połączyć.
```bash
zeroclaw pairing rotate # Generuje nowy sekret i unieważnia stary
```
### Sandbox
- **Docker Runtime** — pełna izolacja kontenera z oddzielnymi systemami plików i sieciami
- **Natywny Runtime** — działa jako proces użytkownika, domyślnie ograniczony do workspace
### Listy Dozwolone
Kanały mogą ograniczać dostęp po ID użytkownika:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Jawna lista dozwolona
```
### Szyfrowanie
- **Matrix E2EE** — pełne szyfrowanie end-to-end z weryfikacją urządzenia
- **Transport TLS** — cały ruch API i tunnel używa HTTPS/TLS
Zobacz [Dokumentację Bezpieczeństwa](docs/security/README.md) dla pełnych polityk i praktyk.
## Obserwowalność
ZeroClaw loguje do `~/.zeroclaw/workspace/logs/` domyślnie. Logi są przechowywane po komponentach:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Logi daemon (startup, żądania API, błędy)
├── agent.log # Logi agent (routing wiadomości, wykonanie narzędzi)
├── telegram.log # Logi specyficzne dla kanału (jeśli włączone)
└── matrix.log # Logi specyficzne dla kanału (jeśli włączone)
```
### Konfiguracja Logowania
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Dla rotacji opartej na rozmiarze
retention_days = 30 # Automatyczne czyszczenie po N dniach
```
Zobacz [Referencje Konfiguracji](docs/config-reference.md#logging) dla wszystkich opcji logowania.
### Metryki (Planowane)
Wsparcie metryk Prometheus dla monitoringu produkcyjnego wkrótce. Śledzenie w [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Umiejętności
ZeroClaw wspiera własne umiejętności — wielokrotnego użytku moduły rozszerzające możliwości systemu.
### Definicja Umiejętności
Umiejętności są przechowywane w `~/.zeroclaw/workspace/skills/<skill-name>/` z tą strukturą:
```
skills/
└── my-skill/
├── skill.toml # Metadane umiejętności (nazwa, opis, zależności)
├── prompt.md # Prompt systemowy dla AI
└── tools/ # Opcjonalne własne narzędzia
└── my_tool.py
```
### Przykład Umiejętności
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Szuka w web i podsumowuje wyniki"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Jesteś asystentem badawczym. Kiedy proszą o zbadanie czegoś:
1. Użyj web_fetch aby pobrać treść
2. Podsumuj wyniki w łatwym do czytania formacie
3. Zacytuj źródła z URL-ami
```
### Użycie Umiejętności
Umiejętności są automatycznie ładowane przy starcie agenta. Odwołuj się do nich po nazwie w konwersacjach:
```
Użytkownik: Użyj umiejętności web-research aby znaleźć najnowsze wiadomości AI
Bot: [ładuje umiejętność web-research, wykonuje web_fetch, podsumowuje wyniki]
```
Zobacz sekcję [Umiejętności](#umiejętności) dla pełnych instrukcji tworzenia umiejętności.
## Open Skills
ZeroClaw wspiera [Open Skills](https://github.com/openagents-com/open-skills) — modułowy i agnostyczny względem dostawcy system do rozszerzania możliwości agentów AI.
### Włącz Open Skills
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # opcjonalne
```
Możesz też nadpisać w runtime używając `ZEROCLAW_OPEN_SKILLS_ENABLED` i `ZEROCLAW_OPEN_SKILLS_DIR`.
## Rozwój
```bash
cargo build # Build deweloperski
cargo build --release # Build release (codegen-units=1, działa na wszystkich urządzeniach w tym Raspberry Pi)
cargo build --profile release-fast # Szybszy build (codegen-units=8, wymaga 16 GB+ RAM)
cargo test # Uruchom pełny zestaw testów
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Formatowanie
# Uruchom benchmark porównawczy SQLite vs Markdown
cargo test --test memory_comparison -- --nocapture
```
### Hook pre-push
Hook git uruchamia `cargo fmt --check`, `cargo clippy -- -D warnings`, i `cargo test` przed każdym push. Włącz go raz:
```bash
git config core.hooksPath .githooks
```
### Rozwiązywanie Problemów Build (błędy OpenSSL na Linux)
Jeśli napotkasz błąd build `openssl-sys`, zsynchronizuj zależności i przekompiluj z lockfile repozytorium:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw jest skonfigurowany do używania `rustls` dla zależności HTTP/TLS; `--locked` utrzymuje graf przechodni deterministyczny w czystych środowiskach.
Aby pominąć hook gdy potrzebujesz szybkiego push podczas rozwoju:
```bash
git push --no-verify
```
## Współpraca i Docs
Zacznij od centrum dokumentacji dla mapy opartej na zadaniach:
@@ -850,6 +426,20 @@ Serdeczne podziękowania dla społeczności i instytucji które inspirują i zas
Budujemy w open source ponieważ najlepsze pomysły przychodzą zewsząd. Jeśli to czytasz, jesteś tego częścią. Witamy. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Oficjalne Repozytorium i Ostrzeżenie o Podszywaniu Się
**To jest jedyne oficjalne repozytorium ZeroClaw:**
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Construído por estudantes e membros das comunidades Harvard, MIT e Sundai.Club.
<p align="center"><code>Arquitetura baseada em traits · runtime seguro por padrão · provedor/canal/ferramenta intercambiáveis · tudo é conectável</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Anúncios
Use esta tabela para avisos importantes (mudanças de compatibilidade, avisos de segurança, janelas de manutenção e bloqueios de versão).
@@ -93,7 +106,7 @@ Use esta tabela para avisos importantes (mudanças de compatibilidade, avisos de
| Data (UTC) | Nível | Aviso | Ação |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Crítico_ | **Não somos afiliados** ao `openagen/zeroclaw` ou `zeroclaw.org`. O domínio `zeroclaw.org` atualmente aponta para o fork `openagen/zeroclaw`, e este domínio/repositório está falsificando nosso site/projeto oficial. | Não confie em informações, binários, arrecadações ou anúncios dessas fontes. Use apenas [este repositório](https://github.com/zeroclaw-labs/zeroclaw) e nossas contas sociais verificadas. |
| 2026-02-21 | _Importante_ | Nosso site oficial agora está online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Obrigado pela paciência durante a espera. Ainda detectamos tentativas de falsificação: não participe de nenhuma atividade de investimento/financiamento em nome do ZeroClaw se não for publicada através de nossos canais oficiais. | Use [este repositório](https://github.com/zeroclaw-labs/zeroclaw) como a única fonte de verdade. Siga [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupo)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), e [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) para atualizações oficiais. |
| 2026-02-21 | _Importante_ | Nosso site oficial agora está online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Obrigado pela paciência durante a espera. Ainda detectamos tentativas de falsificação: não participe de nenhuma atividade de investimento/financiamento em nome do ZeroClaw se não for publicada através de nossos canais oficiais. | Use [este repositório](https://github.com/zeroclaw-labs/zeroclaw) como a única fonte de verdade. Siga [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupo)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), e [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) para atualizações oficiais. |
| 2026-02-19 | _Importante_ | A Anthropic atualizou os termos de uso de autenticação e credenciais em 2026-02-19. A autenticação OAuth (Free, Pro, Max) é exclusivamente para Claude Code e Claude.ai; o uso de tokens OAuth do Claude Free/Pro/Max em qualquer outro produto, ferramenta ou serviço (incluindo Agent SDK) não é permitido e pode violar os Termos de Uso do Consumidor. | Por favor, evite temporariamente as integrações OAuth do Claude Code para prevenir qualquer perda potencial. Cláusula original: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Funcionalidades
@@ -221,7 +234,7 @@ Exemplo de amostra (macOS arm64, medido em 18 de fevereiro de 2026):
O script `bootstrap.sh` instala Rust, clona ZeroClaw, compila, e configura seu ambiente de desenvolvimento inicial:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Isso vai:
@@ -363,443 +376,6 @@ zeroclaw version # Mostra versão e informações de build
Veja [Referência de Comandos](docs/commands-reference.md) para opções e exemplos completos.
## Arquitetura
```
┌─────────────────────────────────────────────────────────────────┐
│ Canais (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Orquestrador Agent │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Roteamento │ │ Contexto │ │ Execução │ │
│ │ Mensagem │ │ Memória │ │ Ferramenta │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Provedores │ │ Memória │ │ Ferramentas │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Princípios chave:**
- Tudo é um **trait** — provedores, canais, ferramentas, memória, túneis
- Canais chamam o orquestrador; o orquestrador chama provedores + ferramentas
- O sistema de memória gerencia contexto conversacional (markdown, SQLite, ou nenhum)
- O runtime abstrai a execução de código (nativo ou Docker)
- Sem lock-in de provedor — troque Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama sem mudanças de código
Veja [documentação de arquitetura](docs/architecture.svg) para diagramas detalhados e detalhes de implementação.
## Exemplos
### Bot do Telegram
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Seu ID de usuário do Telegram
```
Inicie o daemon + agent, então envie uma mensagem para seu bot no Telegram:
```
/start
Olá! Você poderia me ajudar a escrever um script Python?
```
O bot responde com código gerado por AI, executa ferramentas se solicitado, e mantém o contexto de conversação.
### Matrix (criptografia ponta a ponta)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Convide `@zeroclaw:matrix.org` para uma sala criptografada, e o bot responderá com criptografia completa. Veja [Guia Matrix E2EE](docs/matrix-e2ee-guide.md) para configuração de verificação de dispositivo.
### Multi-Provedor
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover em erro de provedor
```
Se Anthropic falhar ou tiver rate-limit, o orquestrador faz failover automaticamente para OpenAI.
### Memória Personalizada
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Purga automática após 90 dias
```
Ou use Markdown para armazenamento legível por humanos:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Veja [Referência de Configuração](docs/config-reference.md#memory) para todas as opções de memória.
## Suporte de Provedor
| Provedor | Status | API Key | Modelos de Exemplo |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Estável | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Estável | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Estável | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Estável | N/A (local) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Estável | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Estável | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Planejado | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Planejado | `COHERE_API_KEY` | TBD |
### Endpoints Personalizados
ZeroClaw suporta endpoints compatíveis com OpenAI:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Exemplo: use [LiteLLM](https://github.com/BerriAI/litellm) como proxy para acessar qualquer LLM via interface OpenAI.
Veja [Referência de Provedores](docs/providers-reference.md) para detalhes de configuração completos.
## Suporte de Canal
| Canal | Status | Autenticação | Notas |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Estável | Bot Token | Suporte completo incluindo arquivos, imagens, botões inline |
| **Matrix** | ✅ Estável | Senha ou Token | Suporte E2EE com verificação de dispositivo |
| **Slack** | 🚧 Planejado | OAuth ou Bot Token | Requer acesso ao workspace |
| **Discord** | 🚧 Planejado | Bot Token | Requer permissões de guild |
| **WhatsApp** | 🚧 Planejado | Twilio ou API oficial | Requer conta business |
| **CLI** | ✅ Estável | Nenhum | Interface conversacional direta |
| **Web** | 🚧 Planejado | API Key ou OAuth | Interface de chat baseada em navegador |
Veja [Referência de Canais](docs/channels-reference.md) para instruções de configuração completas.
## Suporte de Ferramentas
ZeroClaw fornece ferramentas integradas para execução de código, acesso ao sistema de arquivos e recuperação web:
| Ferramenta | Descrição | Runtime Requerido |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Executa comandos shell | Nativo ou Docker |
| **python** | Executa scripts Python | Python 3.8+ (nativo) ou Docker |
| **javascript** | Executa código Node.js | Node.js 18+ (nativo) ou Docker |
| **filesystem_read** | Lê arquivos | Nativo ou Docker |
| **filesystem_write** | Escreve arquivos | Nativo ou Docker |
| **web_fetch** | Obtém conteúdo web | Nativo ou Docker |
### Segurança de Execução
- **Runtime Nativo** — roda como processo de usuário do daemon, acesso completo ao sistema de arquivos
- **Runtime Docker** — isolamento completo de container, sistemas de arquivos e redes separados
Configure a política de execução em `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Lista de permissão explícita
```
Veja [Referência de Configuração](docs/config-reference.md#runtime) para opções de segurança completas.
## Implantação
### Implantação Local (Desenvolvimento)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Implantação em Servidor (Produção)
Use systemd para gerenciar o daemon e agent como serviços:
```bash
# Instale o binário
cargo install --path . --locked
# Configure o workspace
zeroclaw init
# Crie arquivos de serviço systemd
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Habilite e inicie os serviços
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Verifique o status
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Veja [Guia de Implantação de Rede](docs/network-deployment.md) para instruções completas de implantação em produção.
### Docker
```bash
# Compile a imagem
docker build -t zeroclaw:latest .
# Execute o container
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Veja [`Dockerfile`](Dockerfile) para detalhes de build e opções de configuração.
### Hardware Edge
ZeroClaw é projetado para rodar em hardware de baixo consumo:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, núcleo ARMv8 único, < $5 custo de hardware
- **Raspberry Pi 4/5** — 1 GB+ RAM, multi-núcleo, ideal para workloads concorrentes
- **Orange Pi Zero 2** — ~512 MB RAM, quad-core ARMv8, custo ultra-baixo
- **SBCs x86 (Intel N100)** — 4-8 GB RAM, builds rápidos, suporte Docker nativo
Veja [Guia de Hardware](docs/hardware/README.md) para instruções de configuração específicas por dispositivo.
## Tunneling (Exposição Pública)
Exponha seu daemon ZeroClaw local à rede pública via túneis seguros:
```bash
zeroclaw tunnel start --provider cloudflare
```
Provedores de tunnel suportados:
- **Cloudflare Tunnel** — HTTPS grátis, sem exposição de portas, suporte multi-domínio
- **Ngrok** — configuração rápida, domínios personalizados (plano pago)
- **Tailscale** — rede mesh privada, sem porta pública
Veja [Referência de Configuração](docs/config-reference.md#tunnel) para opções de configuração completas.
## Segurança
ZeroClaw implementa múltiplas camadas de segurança:
### Emparelhamento
O daemon gera um segredo de emparelhamento no primeiro início armazenado em `~/.zeroclaw/workspace/.pairing`. Clientes (agent, CLI) devem apresentar este segredo para conectar.
```bash
zeroclaw pairing rotate # Gera um novo segredo e invalida o anterior
```
### Sandboxing
- **Runtime Docker** — isolamento completo de container com sistemas de arquivos e redes separados
- **Runtime Nativo** — roda como processo de usuário, com escopo de workspace por padrão
### Listas de Permissão
Canais podem restringir acesso por ID de usuário:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Lista de permissão explícita
```
### Criptografia
- **Matrix E2EE** — criptografia ponta a ponta completa com verificação de dispositivo
- **Transporte TLS** — todo o tráfego de API e tunnel usa HTTPS/TLS
Veja [Documentação de Segurança](docs/security/README.md) para políticas e práticas completas.
## Observabilidade
ZeroClaw registra logs em `~/.zeroclaw/workspace/logs/` por padrão. Os logs são armazenados por componente:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Logs do daemon (início, requisições API, erros)
├── agent.log # Logs do agent (roteamento de mensagens, execução de ferramentas)
├── telegram.log # Logs específicos do canal (se habilitado)
└── matrix.log # Logs específicos do canal (se habilitado)
```
### Configuração de Logging
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # Para rotação baseada em tamanho
retention_days = 30 # Purga automática após N dias
```
Veja [Referência de Configuração](docs/config-reference.md#logging) para todas as opções de logging.
### Métricas (Planejado)
Suporte a métricas Prometheus para monitoramento em produção em breve. Rastreamento em [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Habilidades (Skills)
ZeroClaw suporta habilidades personalizadas — módulos reutilizáveis que estendem as capacidades do sistema.
### Definição de Habilidade
Habilidades são armazenadas em `~/.zeroclaw/workspace/skills/<skill-name>/` com esta estrutura:
```
skills/
└── my-skill/
├── skill.toml # Metadados da habilidade (nome, descrição, dependências)
├── prompt.md # Prompt de sistema para a AI
└── tools/ # Ferramentas personalizadas opcionais
└── my_tool.py
```
### Exemplo de Habilidade
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Pesquisa na web e resume resultados"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Você é um assistente de pesquisa. Quando pedirem para pesquisar algo:
1. Use web_fetch para obter o conteúdo
2. Resuma os resultados em um formato fácil de ler
3. Cite as fontes com URLs
```
### Uso de Habilidades
Habilidades são carregadas automaticamente no início do agent. Referencie-as por nome em conversas:
```
Usuário: Use a habilidade web-research para encontrar as últimas notícias de AI
Bot: [carrega a habilidade web-research, executa web_fetch, resume resultados]
```
Veja seção [Habilidades (Skills)](#habilidades-skills) para instruções completas de criação de habilidades.
## Open Skills
ZeroClaw suporta [Open Skills](https://github.com/openagents-com/open-skills) — um sistema modular e agnóstico de provedores para estender capacidades de agentes AI.
### Habilitar Open Skills
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # opcional
```
Você também pode sobrescrever em runtime com `ZEROCLAW_OPEN_SKILLS_ENABLED` e `ZEROCLAW_OPEN_SKILLS_DIR`.
## Desenvolvimento
```bash
cargo build # Build de desenvolvimento
cargo build --release # Build release (codegen-units=1, funciona em todos os dispositivos incluindo Raspberry Pi)
cargo build --profile release-fast # Build mais rápido (codegen-units=8, requer 16 GB+ RAM)
cargo test # Executa o suite de testes completo
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Formato
# Executa o benchmark de comparação SQLite vs Markdown
cargo test --test memory_comparison -- --nocapture
```
### Hook pre-push
Um hook de git executa `cargo fmt --check`, `cargo clippy -- -D warnings`, e `cargo test` antes de cada push. Ative-o uma vez:
```bash
git config core.hooksPath .githooks
```
### Solução de Problemas de Build (erros OpenSSL no Linux)
Se você encontrar um erro de build `openssl-sys`, sincronize dependências e recompile com o lockfile do repositório:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw está configurado para usar `rustls` para dependências HTTP/TLS; `--locked` mantém o grafo transitivo determinístico em ambientes limpios.
Para pular o hook quando precisar de um push rápido durante desenvolvimento:
```bash
git push --no-verify
```
## Colaboração e Docs
Comece com o hub de documentação para um mapa baseado em tarefas:
@@ -850,6 +426,20 @@ Um sincero agradecimento às comunidades e instituições que inspiram e aliment
Construímos em código aberto porque as melhores ideias vêm de todo lugar. Se você está lendo isso, você é parte disso. Bem-vindo. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Repositório Oficial e Aviso de Falsificação
**Este é o único repositório oficial do ZeroClaw:**
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Ce este ZeroClaw?
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.).
@@ -167,7 +180,7 @@ Vezi [LICENSE-APACHE](LICENSE-APACHE) și [LICENSE-MIT](LICENSE-MIT) pentru deta
## Comunitate
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ Vezi [LICENSE-APACHE](LICENSE-APACHE) și [LICENSE-MIT](LICENSE-MIT) pentru deta
Dacă ZeroClaw îți este util, te rugăm să iei în considerare să ne cumperi o cafea:
[![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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+31 -105
View File
@@ -13,10 +13,10 @@
<a href="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" 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.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>
@@ -56,7 +56,7 @@
</p>
<p align="center">
<a href="install.sh">Установка в 1 клик</a> |
<a href="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/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>
@@ -78,6 +78,16 @@
>
> Последняя синхронизация: **2026-02-19**.
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## 📢 Доска объявлений
Публикуйте здесь важные уведомления (breaking changes, security advisories, окна обслуживания и блокеры релиза).
@@ -85,7 +95,7 @@
| Дата (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-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/zeroclawlabs), [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). |
## О проекте
@@ -166,7 +176,7 @@ cargo build --release --locked
cargo install --path . --force --locked
zeroclaw onboard --api-key sk-... --provider openrouter
zeroclaw onboard --interactive
zeroclaw onboard
zeroclaw agent -m "Hello, ZeroClaw!"
@@ -221,104 +231,6 @@ zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hell
zeroclaw agent --provider anthropic -m "hello"
```
## Архитектура
Каждая подсистема — это **Trait**: меняйте реализации через конфигурацию, без изменения кода.
<p align="center">
<img src="docs/assets/architecture.svg" alt="Архитектура ZeroClaw" width="900" />
</p>
| Подсистема | 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 категориях | Плагинная система |
### Поддержка runtime (текущая)
- ✅ Поддерживается сейчас: `runtime.kind = "native"` или `runtime.kind = "docker"`
- 🚧 Запланировано, но ещё не реализовано: WASM / edge-runtime
При указании неподдерживаемого `runtime.kind` ZeroClaw завершается с явной ошибкой, а не молча откатывается к native.
### Система памяти (полнофункциональный поисковый движок)
Полностью собственная реализация, ноль внешних зависимостей — без 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
```
## Важные security-дефолты
- Gateway по умолчанию: `127.0.0.1:42617`
- Pairing обязателен по умолчанию: `require_pairing = true`
- Публичный bind запрещён по умолчанию: `allow_public_bind = false`
- Семантика allowlist каналов:
- `[]` => deny-by-default
- `["*"]` => allow all (используйте осознанно)
## Пример конфигурации
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
[memory]
backend = "sqlite"
auto_save = true
embedding_provider = "none"
[gateway]
host = "127.0.0.1"
port = 42617
require_pairing = true
allow_public_bind = false
```
## Навигация по документации
- Хаб документации (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)
## Вклад и лицензия
- Contribution guide: [`CONTRIBUTING.md`](CONTRIBUTING.md)
@@ -326,6 +238,20 @@ allow_public_bind = false
- 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))
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
---
Для полной и исчерпывающей информации (архитектура, все команды, API, разработка) используйте основной английский документ: [`README.md`](README.md).
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Vad är ZeroClaw?
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.).
@@ -167,7 +180,7 @@ Se [LICENSE-APACHE](LICENSE-APACHE) och [LICENSE-MIT](LICENSE-MIT) för detaljer
## Community
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ Se [LICENSE-APACHE](LICENSE-APACHE) och [LICENSE-MIT](LICENSE-MIT) för detaljer
Om ZeroClaw är användbart för dig, vänligen överväg att köpa en kaffe till oss:
[![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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## ZeroClaw คืออะไร?
ZeroClaw เป็นโครงสร้างพื้นฐานผู้ช่วย AI ที่มีน้ำหนักเบา ปรับเปลี่ยนได้ และขยายได้ สร้างด้วย Rust มันเชื่อมต่อผู้ให้บริการ LLM ต่างๆ (Anthropic, OpenAI, Google, Ollama ฯลฯ) ผ่านอินเทอร์เฟซแบบรวมและรองรับหลายช่องทาง (Telegram, Matrix, CLI ฯลฯ)
@@ -167,7 +180,7 @@ channels:
## ชุมชน
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ channels:
หาก 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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Binuo ng mga mag-aaral at miyembro ng Harvard, MIT, at Sundai.Club na komunidad.
<p align="center"><code>Trait-driven architecture · secure-by-default runtime · swappable provider/channel/tool · lahat ay pluggable</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Mga Anunsyo
Gamitin ang talahanayang ito para sa mahahalagang paunawa (compatibility changes, security notices, maintenance windows, at version blocks).
@@ -93,7 +106,7 @@ Gamitin ang talahanayang ito para sa mahahalagang paunawa (compatibility changes
| Petsa (UTC) | Antas | Paunawa | Aksyon |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritikal_ | **Hindi kami kaugnay** sa `openagen/zeroclaw` o `zeroclaw.org`. Ang domain na `zeroclaw.org` ay kasalukuyang tumuturo sa fork na `openagen/zeroclaw`, at ang domain/repository na ito ay nanggagaya sa aming opisyal na website/proyekto. | Huwag magtiwala sa impormasyon, binaries, fundraising, o mga anunsyo mula sa mga pinagmulang ito. Gamitin lamang [ang repository na ito](https://github.com/zeroclaw-labs/zeroclaw) at aming mga verified social media accounts. |
| 2026-02-21 | _Mahalaga_ | Ang aming opisyal na website ay ngayon online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Salamat sa iyong pasensya sa panahon ng paghihintay. Nakikita pa rin namin ang mga pagtatangka ng panliliko: huwag lumahok sa anumang investment/funding activity sa ngalan ng ZeroClaw kung hindi ito nai-publish sa pamamagitan ng aming mga opisyal na channel. | Gamitin [ang repository na ito](https://github.com/zeroclaw-labs/zeroclaw) bilang nag-iisang source of truth. Sundan [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupo)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), at [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) para sa mga opisyal na update. |
| 2026-02-21 | _Mahalaga_ | Ang aming opisyal na website ay ngayon online: [zeroclawlabs.ai](https://zeroclawlabs.ai). Salamat sa iyong pasensya sa panahon ng paghihintay. Nakikita pa rin namin ang mga pagtatangka ng panliliko: huwag lumahok sa anumang investment/funding activity sa ngalan ng ZeroClaw kung hindi ito nai-publish sa pamamagitan ng aming mga opisyal na channel. | Gamitin [ang repository na ito](https://github.com/zeroclaw-labs/zeroclaw) bilang nag-iisang source of truth. Sundan [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grupo)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), at [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) para sa mga opisyal na update. |
| 2026-02-19 | _Mahalaga_ | In-update ng Anthropic ang authentication at credential use terms noong 2026-02-19. Ang OAuth authentication (Free, Pro, Max) ay eksklusibo para sa Claude Code at Claude.ai; ang paggamit ng Claude Free/Pro/Max OAuth tokens sa anumang iba pang produkto, tool, o serbisyo (kasama ang Agent SDK) ay hindi pinapayagan at maaaring lumabag sa Consumer Terms of Use. | Mangyaring pansamantalang iwasan ang Claude Code OAuth integrations upang maiwasan ang anumang potensyal na pagkawala. Orihinal na clause: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Mga Tampok
@@ -221,7 +234,7 @@ Halimbawa ng sample (macOS arm64, nasukat noong Pebrero 18, 2026):
Ang `bootstrap.sh` script ay nag-i-install ng Rust, nagi-clone ng ZeroClaw, nagi-compile, at nagse-set up ng iyong paunang development environment:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Ito ay:
@@ -363,443 +376,6 @@ zeroclaw version # Nagpapakita ng version at build info
Tingnan ang [Commands Reference](docs/commands-reference.md) para sa buong options at examples.
## Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ Channels (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Custom │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Agent Orchestrator │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Message │ │ Context │ │ Tool │ │
│ │ Routing │ │ Memory │ │ Execution │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Providers │ │ Memory │ │ Tools │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ None │ │ Web Fetch │
│ Ollama │ │ Custom │ │ Custom │
│ Custom │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Runtime (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Mga pangunahing prinsipyo:**
- Ang lahat ay isang **trait** — providers, channels, tools, memory, tunnels
- Ang mga channel ay tumatawag sa orchestrator; ang orchestrator ay tumatawag sa providers + tools
- Ang memory system ay nagmamaneho ng conversation context (markdown, SQLite, o none)
- Ang runtime ay nag-a-abstract ng code execution (native o Docker)
- Walang provider lock-in — i-swap ang Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama nang walang code changes
Tingnan ang [architecture documentation](docs/architecture.svg) para sa mga detalyadong diagram at implementation details.
## Mga Halimbawa
### Telegram Bot
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Ang iyong Telegram user ID
```
Simulan ang daemon + agent, pagkatapos ay magpadala ng mensahe sa iyong bot sa Telegram:
```
/start
Hello! Could you help me write a Python script?
```
Ang bot ay tumutugon gamit ang AI-generated code, nagpapatupad ng mga tool kung hiniling, at nagpapanatili ng conversation context.
### Matrix (end-to-end encryption)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Imbitahan ang `@zeroclaw:matrix.org` sa isang encrypted room, at ang bot ay tutugon gamit ang full encryption. Tingnan ang [Matrix E2EE Guide](docs/matrix-e2ee-guide.md) para sa device verification setup.
### Multi-Provider
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Failover on provider error
```
Kung ang Anthropic ay mabigo o ma-rate-limit, ang orchestrator ay awtomatikong mag-failover sa OpenAI.
### Custom Memory
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # Automatic purge after 90 days
```
O gamitin ang Markdown para sa human-readable storage:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Tingnan ang [Configuration Reference](docs/config-reference.md#memory) para sa lahat ng memory options.
## Provider Support
| Provider | Status | API Key | Example Models |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Stable | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Stable | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Stable | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Stable | N/A (local) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Stable | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Stable | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Planned | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Planned | `COHERE_API_KEY` | TBD |
### Custom Endpoints
Sinusuportahan ng ZeroClaw ang OpenAI-compatible endpoints:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Halimbawa: gamitin ang [LiteLLM](https://github.com/BerriAI/litellm) bilang proxy para ma-access ang anumang LLM sa pamamagitan ng OpenAI interface.
Tingnan ang [Providers Reference](docs/providers-reference.md) para sa kumpletong configuration details.
## Channel Support
| Channel | Status | Authentication | Notes |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Stable | Bot Token | Full support including files, images, inline buttons |
| **Matrix** | ✅ Stable | Password or Token | E2EE support with device verification |
| **Slack** | 🚧 Planned | OAuth or Bot Token | Requires workspace access |
| **Discord** | 🚧 Planned | Bot Token | Requires guild permissions |
| **WhatsApp** | 🚧 Planned | Twilio or official API | Requires business account |
| **CLI** | ✅ Stable | None | Direct conversational interface |
| **Web** | 🚧 Planned | API Key or OAuth | Browser-based chat interface |
Tingnan ang [Channels Reference](docs/channels-reference.md) para sa kumpletong configuration instructions.
## Tool Support
Nagbibigay ang ZeroClaw ng built-in tools para sa code execution, filesystem access, at web retrieval:
| Tool | Description | Required Runtime |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Executes shell commands | Native or Docker |
| **python** | Executes Python scripts | Python 3.8+ (native) or Docker |
| **javascript** | Executes Node.js code | Node.js 18+ (native) or Docker |
| **filesystem_read** | Reads files | Native or Docker |
| **filesystem_write** | Writes files | Native or Docker |
| **web_fetch** | Fetches web content | Native or Docker |
### Execution Security
- **Native Runtime** — runs as daemon's user process, full filesystem access
- **Docker Runtime** — full container isolation, separate filesystems and networks
I-configure ang execution policy sa `config.toml`:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Explicit allowlist
```
Tingnan ang [Configuration Reference](docs/config-reference.md#runtime) para sa kumpletong security options.
## Deployment
### Local Deployment (Development)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Server Deployment (Production)
Gamitin ang systemd para mamaneho ang daemon at agent bilang services:
```bash
# I-install ang binary
cargo install --path . --locked
# I-configure ang workspace
zeroclaw init
# Gumawa ng systemd service files
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# I-enable at i-start ang services
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# I-verify ang status
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Tingnan ang [Network Deployment Guide](docs/network-deployment.md) para sa kumpletong production deployment instructions.
### Docker
```bash
# I-build ang image
docker build -t zeroclaw:latest .
# I-run ang container
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Tingnan ang [`Dockerfile`](Dockerfile) para sa build details at configuration options.
### Edge Hardware
Ang ZeroClaw ay dinisenyo para tumakbo sa low-power hardware:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, single ARMv8 core, < $5 hardware cost
- **Raspberry Pi 4/5** — 1 GB+ RAM, multi-core, ideal for concurrent workloads
- **Orange Pi Zero 2** — ~512 MB RAM, quad-core ARMv8, ultra-low cost
- **x86 SBCs (Intel N100)** — 4-8 GB RAM, fast builds, native Docker support
Tingnan ang [Hardware Guide](docs/hardware/README.md) para sa device-specific setup instructions.
## Tunneling (Public Exposure)
I-expose ang iyong local ZeroClaw daemon sa public network sa pamamagitan ng secure tunnels:
```bash
zeroclaw tunnel start --provider cloudflare
```
Mga supported tunnel provider:
- **Cloudflare Tunnel** — free HTTPS, no port exposure, multi-domain support
- **Ngrok** — quick setup, custom domains (paid plan)
- **Tailscale** — private mesh network, no public port
Tingnan ang [Configuration Reference](docs/config-reference.md#tunnel) para sa kumpletong configuration options.
## Security
Nagpapatupad ang ZeroClaw ng maraming layer ng security:
### Pairing
Ang daemon ay nag-generate ng pairing secret sa unang launch na nakaimbak sa `~/.zeroclaw/workspace/.pairing`. Ang mga client (agent, CLI) ay dapat mag-present ng secret na ito para kumonekta.
```bash
zeroclaw pairing rotate # Gagawa ng bagong secret at i-invalidate ang dati
```
### Sandboxing
- **Docker Runtime** — full container isolation na may separate filesystems at networks
- **Native Runtime** — runs as user process, scoped sa workspace by default
### Allowlists
Ang mga channel ay maaaring mag-limit ng access by user ID:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Explicit allowlist
```
### Encryption
- **Matrix E2EE** — full end-to-end encryption with device verification
- **TLS Transport** — all API and tunnel traffic uses HTTPS/TLS
Tingnan ang [Security Documentation](docs/security/README.md) para sa kumpletong policies at practices.
## Observability
Ang ZeroClaw ay naglo-log sa `~/.zeroclaw/workspace/logs/` by default. Ang mga log ay nakaimbak by component:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Daemon logs (startup, API requests, errors)
├── agent.log # Agent logs (message routing, tool execution)
├── telegram.log # Channel-specific logs (if enabled)
└── matrix.log # Channel-specific logs (if enabled)
```
### Logging Configuration
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # daily, hourly, size
max_size_mb = 100 # For size-based rotation
retention_days = 30 # Automatic purge after N days
```
Tingnan ang [Configuration Reference](docs/config-reference.md#logging) para sa lahat ng logging options.
### Metrics (Planned)
Prometheus metrics support para sa production monitoring ay coming soon. Tracking sa [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234).
## Skills
Sinusuportahan ng ZeroClaw ang custom skills — reusable modules na nag-e-extend sa system capabilities.
### Skill Definition
Ang mga skill ay nakaimbak sa `~/.zeroclaw/workspace/skills/<skill-name>/` na may ganitong structure:
```
skills/
└── my-skill/
├── skill.toml # Skill metadata (name, description, dependencies)
├── prompt.md # System prompt for the AI
└── tools/ # Optional custom tools
└── my_tool.py
```
### Skill Example
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Searches the web and summarizes results"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
You are a research assistant. When asked to research something:
1. Use web_fetch to retrieve content
2. Summarize results in an easy-to-read format
3. Cite sources with URLs
```
### Skill Usage
Ang mga skill ay automatically loaded sa agent startup. I-reference ang mga ito by name sa conversations:
```
User: Use the web-research skill to find the latest AI news
Bot: [loads web-research skill, executes web_fetch, summarizes results]
```
Tingnan ang [Skills](#skills) section para sa kumpletong skill creation instructions.
## Open Skills
Sinusuportahan ng ZeroClaw ang [Open Skills](https://github.com/openagents-com/open-skills) — isang modular at provider-agnostic system para sa pag-extend sa AI agent capabilities.
### Enable Open Skills
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # optional
```
Maaari mo ring i-override sa runtime gamit ang `ZEROCLAW_OPEN_SKILLS_ENABLED` at `ZEROCLAW_OPEN_SKILLS_DIR`.
## Development
```bash
cargo build # Dev build
cargo build --release # Release build (codegen-units=1, works on all devices including Raspberry Pi)
cargo build --profile release-fast # Faster build (codegen-units=8, requires 16 GB+ RAM)
cargo test # Run full test suite
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Format
# Run SQLite vs Markdown comparison benchmark
cargo test --test memory_comparison -- --nocapture
```
### Pre-push hook
Ang isang git hook ay nagpapatakbo ng `cargo fmt --check`, `cargo clippy -- -D warnings`, at `cargo test` bago ang bawat push. I-enable ito nang isang beses:
```bash
git config core.hooksPath .githooks
```
### Build Troubleshooting (OpenSSL errors on Linux)
Kung makakita ka ng `openssl-sys` build error, i-sync ang dependencies at i-recompile gamit ang repository's lockfile:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
Ang ZeroClaw ay naka-configure na gumamit ng `rustls` para sa HTTP/TLS dependencies; ang `--locked` ay nagpapanatili sa transitive graph na deterministic sa clean environments.
Para i-skip ang hook kapag kailangan mo ng quick push habang nagde-develop:
```bash
git push --no-verify
```
## Collaboration & Docs
Magsimula sa documentation hub para sa task-based map:
@@ -850,6 +426,20 @@ Isang taos-pusong pasasalamat sa mga komunidad at institusyon na nagbibigay-insp
Kami ay bumubuo sa open source dahil ang mga pinakamahusay na ideya ay nagmumula sa lahat ng dako. Kung binabasa mo ito, ikaw ay bahagi nito. Maligayang pagdating. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Official Repository at Impersonation Warning
**Ito ang tanging opisyal na ZeroClaw repository:**
+30 -440
View File
@@ -17,7 +17,10 @@
<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.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">
@@ -86,6 +89,16 @@ Harvard, MIT ve Sundai.Club topluluklarının öğrencileri ve üyeleri tarafın
<p align="center"><code>Trait tabanlı mimari · varsayılan olarak güvenli çalışma zamanı · değiştirilebilir sağlayıcı/kanal/araç · her şey eklenebilir</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Duyurular
Önemli duyurular için bu tabloyu kullanın (uyumluluk değişiklikleri, güvenlik bildirimleri, bakım pencereleri ve sürüm engellemeleri).
@@ -93,7 +106,7 @@ Harvard, MIT ve Sundai.Club topluluklarının öğrencileri ve üyeleri tarafın
| Tarih (UTC) | Seviye | Duyuru | Eylem |
| ---------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2026-02-19 | _Kritik_ | **`openagen/zeroclaw` veya `zeroclaw.org` ile bağlantılı değiliz.** `zeroclaw.org` alanı şu anda `openagen/zeroclaw` fork'una işaret ediyor ve bu alan/depo taklitçiliğini yapıyor. | Bu kaynaklardan bilgi, ikili dosyalar, bağış toplama veya duyurulara güvenmeyin. Sadece [bu depoyu](https://github.com/zeroclaw-labs/zeroclaw) ve doğrulanmış sosyal medya hesaplarımızı kullanın. |
| 2026-02-21 | _Önemli_ | Resmi web sitemiz artık çevrimiçi: [zeroclawlabs.ai](https://zeroclawlabs.ai). Bekleme sürecinde sabırlarınız için teşekkürler. Hala taklit girişimleri tespit ediyoruz: ZeroClaw adına resmi kanallarımız aracılığıyla yayınlanmayan herhangi bir yatırım/bağış faaliyetine katılmayın. | [Bu depoyu](https://github.com/zeroclaw-labs/zeroclaw) tek doğruluk kaynağı olarak kullanın. Resmi güncellemeler için [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grup)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) ve [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search)'u takip edin. |
| 2026-02-21 | _Önemli_ | Resmi web sitemiz artık çevrimiçi: [zeroclawlabs.ai](https://zeroclawlabs.ai). Bekleme sürecinde sabırlarınız için teşekkürler. Hala taklit girişimleri tespit ediyoruz: ZeroClaw adına resmi kanallarımız aracılığıyla yayınlanmayan herhangi bir yatırım/bağış faaliyetine katılmayın. | [Bu depoyu](https://github.com/zeroclaw-labs/zeroclaw) tek doğruluk kaynağı olarak kullanın. Resmi güncellemeler için [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (grup)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) ve [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search)'u takip edin. |
| 2026-02-19 | _Önemli_ | Anthropic, 2026-02-19 tarihinde kimlik doğrulama ve kimlik bilgileri kullanım şartlarını güncelledi. OAuth kimlik doğrulaması (Free, Pro, Max) yalnızca Claude Code ve Claude.ai içindir; Claude Free/Pro/Max OAuth belirteçlerini başka herhangi bir ürün, araç veya hizmette (Agent SDK dahil) kullanmak yasaktır ve Tüketici Kullanım Şartlarını ihlal edebilir. | Olası kayıpları önlemek için lütfen geçici olarak Claude Code OAuth entegrasyonlarından kaçının. Orijinal madde: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Özellikler
@@ -221,7 +234,7 @@ ls -lh target/release/zeroclaw
`bootstrap.sh` betiği Rust'u yükler, ZeroClaw'ı klonlar, derler ve ilk geliştirme ortamınızı ayarlar:
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/bootstrap.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/bootstrap.sh | bash
```
Bu işlem:
@@ -363,443 +376,6 @@ zeroclaw version # Sürüm ve derleme bilgilerini gösterir
Tam seçenekler ve örnekler için [Komutlar Referansına](docs/commands-reference.md) bakın.
## Mimari
```
┌─────────────────────────────────────────────────────────────────┐
│ Kanallar (trait) │
│ Telegram │ Matrix │ Slack │ Discord │ Web │ CLI │ Özel │
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Ajan Orkestratörü │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Mesaj │ │ Bağlam │ │ Araç │ │
│ │ Yönlendirme│ │ Bellek │ │ Yürütme │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────┬───────────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Sağlayıcılar│ │ Bellek │ │ Araçlar │
│ (trait) │ │ (trait) │ │ (trait) │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ Anthropic │ │ Markdown │ │ Filesystem │
│ OpenAI │ │ SQLite │ │ Bash │
│ Gemini │ │ Yok │ │ Web Fetch │
│ Ollama │ │ Özel │ │ Özel │
│ Özel │ └──────────────┘ └──────────────┘
└──────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Çalışma Zamanı (trait) │
│ Native │ Docker │
└─────────────────────────────────────────────────────────────────┘
```
**Temel ilkeler:**
- Her şey bir **trait'tir** — sağlayıcılar, kanallar, araçlar, bellek, tüneller
- Kanallar orkestratörü çağırır; orkestratör sağlayıcıları + araçları çağırır
- Bellek sistemi konuşma bağlamını yönetir (markdown, SQLite veya yok)
- Çalışma zamanı kod yürütmeyi soyutlar (yerel veya Docker)
- Satıcı kilitlenmesi yok — kod değişikliği olmadan Anthropic ↔ OpenAI ↔ Gemini ↔ Ollama değiştirin
Detaylı diyagramlar ve uygulama detayları için [mimari belgelerine](docs/architecture.svg) bakın.
## Örnekler
### Telegram Bot
```toml
[channels.telegram]
enabled = true
bot_token = "123456:ABC-DEF..."
allowed_users = [987654321] # Telegram kullanıcı ID'niz
```
Arka plan programını + ajanı başlatın, ardından Telegram'da botunuza bir mesaj gönderin:
```
/start
Merhaba! Bir Python betiği yazmama yardımcı olabilir misin?
```
Bot, AI tarafından oluşturulan kodla yanıt verir, istenirse araçları yürütür ve konuşma bağlamını korur.
### Matrix (uçtan uca şifreleme)
```toml
[channels.matrix]
enabled = true
homeserver_url = "https://matrix.org"
username = "@zeroclaw:matrix.org"
password = "..."
device_name = "zeroclaw-prod"
e2ee_enabled = true
```
Şifreli bir odaya `@zeroclaw:matrix.org` davet edin ve bot tam şifrelemeyle yanıt verecektir. Cihaz doğrulama kurulumu için [Matrix E2EE Kılavuzuna](docs/matrix-e2ee-guide.md) bakın.
### Çoklu-Sağlayıcı
```toml
[providers.anthropic]
enabled = true
api_key = "sk-ant-..."
model = "claude-sonnet-4-20250514"
[providers.openai]
enabled = true
api_key = "sk-..."
model = "gpt-4o"
[orchestrator]
default_provider = "anthropic"
fallback_providers = ["openai"] # Sağlayıcı hatasında geçiş
```
Anthropic başarısız olursa veya hız sınırına ulaşırsa, orkestratör otomatik olarak OpenAI'ya geçer.
### Özel Bellek
```toml
[memory]
kind = "sqlite"
path = "~/.zeroclaw/workspace/memory/conversations.db"
retention_days = 90 # 90 gün sonra otomatik temizleme
```
Veya insan tarafından okunabilir depolama için Markdown kullanın:
```toml
[memory]
kind = "markdown"
path = "~/.zeroclaw/workspace/memory/"
```
Tüm bellek seçenekleri için [Yapılandırma Referansına](docs/config-reference.md#memory) bakın.
## Sağlayıcı Desteği
| Sağlayıcı | Durum | API Anahtarı | Örnek Modeller |
| ----------------- | ----------- | ------------------- | ---------------------------------------------------- |
| **Anthropic** | ✅ Kararlı | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514`, `claude-opus-4-20250514` |
| **OpenAI** | ✅ Kararlı | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4o-mini`, `o1`, `o1-mini` |
| **Google Gemini** | ✅ Kararlı | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-exp-1206` |
| **Ollama** | ✅ Kararlı | Yok (yerel) | `llama3.3`, `qwen2.5`, `phi4` |
| **Cerebras** | ✅ Kararlı | `CEREBRAS_API_KEY` | `llama-3.3-70b` |
| **Groq** | ✅ Kararlı | `GROQ_API_KEY` | `llama-3.3-70b-versatile` |
| **Mistral** | 🚧 Planlanan | `MISTRAL_API_KEY` | TBD |
| **Cohere** | 🚧 Planlanan | `COHERE_API_KEY` | TBD |
### Özel Uç Noktalar
ZeroClaw, OpenAI uyumlu uç noktaları destekler:
```toml
[providers.custom]
enabled = true
api_key = "..."
base_url = "https://api.your-llm-provider.com/v1"
model = "your-model-name"
```
Örnek: herhangi bir LLM'ye OpenAI arayüzü üzerinden erişmek için [LiteLLM](https://github.com/BerriAI/litellm)'i proxy olarak kullanın.
Tam yapılandırma detayları için [Sağlayıcı Referansına](docs/providers-reference.md) bakın.
## Kanal Desteği
| Kanal | Durum | Kimlik Doğrulama | Notlar |
| ------------ | ----------- | ------------------------ | --------------------------------------------------------- |
| **Telegram** | ✅ Kararlı | Bot Token | Dosyalar, resimler, satır içi düğmeler dahil tam destek |
| **Matrix** | ✅ Kararlı | Şifre veya Token | Cihaz doğrulamalı E2EE desteği |
| **Slack** | 🚧 Planlanan | OAuth veya Bot Token | Çalışma alanı erişimi gerektirir |
| **Discord** | 🚧 Planlanan | Bot Token | Guild izinleri gerektirir |
| **WhatsApp** | 🚧 Planlanan | Twilio veya resmi API | İş hesabı gerektirir |
| **CLI** | ✅ Kararlı | Yok | Doğrudan konuşma arayüzü |
| **Web** | 🚧 Planlanan | API Anahtarı veya OAuth | Tarayıcı tabanlı sohbet arayüzü |
Tam yapılandırma talimatları için [Kanallar Referansına](docs/channels-reference.md) bakın.
## Araç Desteği
ZeroClaw, kod yürütme, dosya sistemi erişimi ve web alımı için yerleşik araçlar sağlar:
| Araç | Açıklama | Gerekli Çalışma Zamanı |
| -------------------- | --------------------------- | ----------------------------- |
| **bash** | Shell komutlarını yürüt | Yerel veya Docker |
| **python** | Python betiklerini yürüt | Python 3.8+ (yerel) veya Docker |
| **javascript** | Node.js kodunu yürüt | Node.js 18+ (yerel) veya Docker |
| **filesystem_read** | Dosyaları oku | Yerel veya Docker |
| **filesystem_write** | Dosyaları yaz | Yerel veya Docker |
| **web_fetch** | Web içeriği al | Yerel veya Docker |
### Yürütme Güvenliği
- **Yerel Çalışma Zamanı** — arka plan programının kullanıcı süreci olarak çalışır, tam dosya sistemi erişimi
- **Docker Çalışma Zamanı** — tam konteyner yalıtımı, ayrı dosya sistemleri ve ağlar
`config.toml` içinde yürütme ilkesini yapılandırın:
```toml
[runtime]
kind = "docker"
allowed_tools = ["bash", "python", "filesystem_read"] # Açık izin listesi
```
Tam güvenlik seçenekleri için [Yapılandırma Referansına](docs/config-reference.md#runtime) bakın.
## Dağıtım
### Yerel Dağıtım (Geliştirme)
```bash
zeroclaw daemon start
zeroclaw agent start
```
### Sunucu Dağıtımı (Üretim)
Arka plan programını ve ajanı hizmet olarak yönetmek için systemd kullanın:
```bash
# İkiliyi yükle
cargo install --path . --locked
# Çalışma alanını yapılandır
zeroclaw init
# systemd hizmet dosyaları oluştur
sudo cp deployment/systemd/zeroclaw-daemon.service /etc/systemd/system/
sudo cp deployment/systemd/zeroclaw-agent.service /etc/systemd/system/
# Hizmetleri etkinleştir ve başlat
sudo systemctl enable zeroclaw-daemon zeroclaw-agent
sudo systemctl start zeroclaw-daemon zeroclaw-agent
# Durumu doğrula
sudo systemctl status zeroclaw-daemon
sudo systemctl status zeroclaw-agent
```
Tam üretim dağıtım talimatları için [Ağ Dağıtımı Kılavuzuna](docs/network-deployment.md) bakın.
### Docker
```bash
# İmajı oluştur
docker build -t zeroclaw:latest .
# Konteyneri çalıştır
docker run -d \
--name zeroclaw \
-v ~/.zeroclaw/workspace:/workspace \
-e ANTHROPIC_API_KEY=sk-ant-... \
zeroclaw:latest
```
Derleme detayları ve yapılandırma seçenekleri için [`Dockerfile`](Dockerfile)'a bakın.
### Uç Donanım
ZeroClaw, düşük güç tüketimli donanımda çalışmak üzere tasarlanmıştır:
- **Raspberry Pi Zero 2 W** — ~512 MB RAM, tek ARMv8 çekirdek, < $5 donanım maliyeti
- **Raspberry Pi 4/5** — 1 GB+ RAM, çok çekirdekli, eşzamanlı iş yükleri için ideal
- **Orange Pi Zero 2** — ~512 MB RAM, dört çekirdekli ARMv8, ultra düşük maliyet
- **x86 SBC'ler (Intel N100)** — 4-8 GB RAM, hızlı derlemeler, yerel Docker desteği
Cihaza özgü kurulum talimatları için [Donanım Kılavuzuna](docs/hardware/README.md) bakın.
## Tünelleme (Herkese Açık Kullanım)
Yerel ZeroClaw arka plan programınızı güvenli tüneller aracılığıyla herkese açık ağa çıkarın:
```bash
zeroclaw tunnel start --provider cloudflare
```
Desteklenen tünel sağlayıcıları:
- **Cloudflare Tunnel** — ücretsiz HTTPS, port açığa çıkarma yok, çoklu etki alanı desteği
- **Ngrok** — hızlı kurulum, özel etki alanları (ücretli plan)
- **Tailscale** — özel mesh ağı. herkese açık port yok
Tam yapılandırma seçenekleri için [Yapılandırma Referansına](docs/config-reference.md#tunnel) bakın.
## Güvenlik
ZeroClaw birden çok güvenlik katmanı uygular:
### Eşleştirme
Arka plan programı ilk başlangıçta `~/.zeroclaw/workspace/.pairing` içinde saklanan bir eşleştirme sırrı oluşturur. İstemciler (ajan, CLI) bağlanmak için bu sırrı sunmalıdır.
```bash
zeroclaw pairing rotate # Yeni bir sır oluşturur ve eskisini geçersiz kılar
```
### Kum Alanı
- **Docker Çalışma Zamanı** — ayrı dosya sistemleri ve ağlarla tam konteyner yalıtımı
- **Yerel Çalışma Zamanı** — kullanıcı süreci olarak çalışır; varsayılan olarak çalışma alanıyla sınırlıdır
### İzin Listeleri
Kanallar kullanıcı ID'sine göre erişimi kısıtlayabilir:
```toml
[channels.telegram]
enabled = true
allowed_users = [123456789, 987654321] # Açık izin listesi
```
### Şifreleme
- **Matrix E2EE** — cihaz doğrulamalı tam uçtan uca şifreleme
- **TLS Taşıma** — tüm API ve tünel trafiği HTTPS/TLS kullanır
Tam ilkeler ve uygulamalar için [Güvenlik Belgelerine](docs/security/README.md) bakın.
## Gözlemlenebilirlik
ZeroClaw varsayılan olarak `~/.zeroclaw/workspace/logs/` dizinine log yazar. Loglar bileşene göre saklanır:
```
~/.zeroclaw/workspace/logs/
├── daemon.log # Arka plan programı logları (başlangıç, API istekleri, hatalar)
├── agent.log # Ajan logları (mesaj yönlendirme, araç yürütme)
├── telegram.log # Kanala özgü loglar (etkinse)
└── matrix.log # Kanala özgü loglar (etkinse)
```
### Loglama Yapılandırması
```toml
[logging]
level = "info" # debug, info, warn, error
path = "~/.zeroclaw/workspace/logs/"
rotation = "daily" # günlük, saatlik, boyut
max_size_mb = 100 # Boyut tabanlı döndürme için
retention_days = 30 # N gün sonra otomatik temizleme
```
Tüm loglama seçenekleri için [Yapılandırma Referansına](docs/config-reference.md#logging) bakın.
### Metrikler (Planlanan)
Üretim izleme için Prometheus metrikleri desteği yakında geliyor. [#234](https://github.com/zeroclaw-labs/zeroclaw/issues/234) numaralı konuda takip ediliyor.
## Beceriler
ZeroClaw, sistem yeteneklerini genişleten yeniden kullanılabilir modüller olan özel becerileri destekler.
### Beceri Tanımı
Beceriler bu yapı ile `~/.zeroclaw/workspace/skills/<skill-name>/` içinde saklanır:
```
skills/
└── my-skill/
├── skill.toml # Beceri metaverileri (ad, açıklama, bağımlılıklar)
├── prompt.md # AI için sistem istemi
└── tools/ # İsteğe bağlı özel araçlar
└── my_tool.py
```
### Beceri Örneği
```toml
# skills/web-research/skill.toml
[skill]
name = "web-research"
description = "Web'de arama yapar ve sonuçları özetler"
version = "1.0.0"
[dependencies]
tools = ["web_fetch", "bash"]
```
```markdown
<!-- skills/web-research/prompt.md -->
Sen bir araştırma asistanısın. Bir şeyi araştırmam istendiğinde:
1. İçeriği almak için web_fetch kullan
2. Sonuçları okunması kolay bir biçimde özetle
3. Kaynakları URL'lerle göster
```
### Beceri Kullanımı
Beceriler ajan başlangıcında otomatik olarak yüklenir. Konuşmalarda ada göre başvurun:
```
Kullanıcı: En son AI haberlerini bulmak için web-research becerisini kullan
Bot: [web-research becerisini yükler, web_fetch'i yürütür, sonuçları özetler]
```
Tam beceri oluşturma talimatları için [Beceriler](#beceriler) bölümüne bakın.
## Open Skills
ZeroClaw, AI ajan yeteneklerini genişletmek için modüler ve sağlayıcıdan bağımsız bir sistem olan [Open Skills](https://github.com/openagents-com/open-skills)'i destekler.
### Open Skills'i Etkinleştir
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # isteğe bağlı
```
Ayrıca `ZEROCLAW_OPEN_SKILLS_ENABLED` ve `ZEROCLAW_OPEN_SKILLS_DIR` ile çalışma zamanında geçersiz kılabilirsiniz.
## Geliştirme
```bash
cargo build # Geliştirme derlemesi
cargo build --release # Sürüm derlemesi (codegen-units=1, Raspberry Pi dahil tüm cihazlarda çalışır)
cargo build --profile release-fast # Daha hızlı derleme (codegen-units=8, 16 GB+ RAM gerektirir)
cargo test # Tam test paketini çalıştır
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Biçimlendir
# SQLite vs Markdown karşılaştırma kıyaslamasını çalıştır
cargo test --test memory_comparison -- --nocapture
```
### Ön push kancası
Bir git kancası her push'tan önce `cargo fmt --check`, `cargo clippy -- -D warnings` ve `cargo test` çalıştırır. Bir kez etkinleştirin:
```bash
git config core.hooksPath .githooks
```
### Derleme Sorun Giderme (Linux'ta OpenSSL hataları)
Bir `openssl-sys` derleme hatasıyla karşılaşırsanız, bağımlılıkları eşzamanlayın ve deponun lockfile'ı ile yeniden derleyin:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw, HTTP/TLS bağımlılıkları için `rustls` kullanacak şekilde yapılandırılmıştır; `--locked`, geçişli grafiği temiz ortamlarda deterministik tutar.
Geliştirme sırasında hızlı bir push'a ihtiyacınız olduğunda kancayı atlamak için:
```bash
git push --no-verify
```
## İşbirliği ve Belgeler
Görev tabanlı bir harita için belge merkeziyle başlayın:
@@ -850,6 +426,20 @@ Bu açık kaynak çalışmasını ilham veren ve besleyen topluluklara ve kuruml
En iyi fikirler her yerden geldiği için açık kaynakta inşa ediyoruz. Bunu okuyorsan, bunun bir parçasısın. Hoş geldin. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Resmi Depo ve Taklit Uyarısı
**Bu tek resmi ZeroClaw deposudur:**
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## Що таке ZeroClaw?
ZeroClaw — це легка, змінювана та розширювана інфраструктура AI-асистента, написана на Rust. Вона з'єднує різних LLM-провайдерів (Anthropic, OpenAI, Google, Ollama тощо) через уніфікований інтерфейс і підтримує багато каналів (Telegram, Matrix, CLI тощо).
@@ -167,7 +180,7 @@ channels:
## Спільнота
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -177,3 +190,17 @@ channels:
Якщо 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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+29 -2
View File
@@ -17,7 +17,10 @@
<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.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>
</p>
<p align="center" dir="rtl">
@@ -57,6 +60,16 @@
---
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## ZeroClaw کیا ہے؟
<p align="center" dir="rtl">
@@ -183,7 +196,7 @@ channels:
## کمیونٹی
- [Telegram](https://t.me/zeroclawlabs)
- [Facebook Group](https://www.facebook.com/groups/zeroclaw)
- [Facebook Group](https://www.facebook.com/groups/zeroclawlabs)
- [WeChat Group](https://zeroclawlabs.cn/group.jpg)
---
@@ -195,3 +208,17 @@ channels:
</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)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
+35 -581
View File
@@ -14,10 +14,10 @@
<a href="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" 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.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">
@@ -61,7 +61,7 @@
<p align="center">
<a href="#quick-start">Bắt đầu</a> |
<a href="install.sh">Cài đặt một lần bấm</a> |
<a href="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh">Cài đặt một lần bấm</a> |
<a href="docs/i18n/vi/README.md">Trung tâm tài liệu</a> |
<a href="docs/SUMMARY.md">Mục lục tài liệu</a>
</p>
@@ -87,6 +87,16 @@
<p align="center"><code>Kiến trúc trait-driven · mặc định bảo mật · provider/channel/tool hoán đổi tự do · mọi thứ đều dễ mở rộng</code></p>
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
### 📢 Thông báo
Bảng này dành cho các thông báo quan trọng (thay đổi không tương thích, cảnh báo bảo mật, lịch bảo trì, vấn đề chặn release).
@@ -94,7 +104,7 @@ Bảng này dành cho các thông báo quan trọng (thay đổi không tương
| Ngày (UTC) | Mức độ | Thông báo | Hành động |
|---|---|---|---|
| 2026-02-19 | _Nghiêm trọng_ | Chúng tôi **không có liên kết** với `openagen/zeroclaw` hoặc `zeroclaw.org`. Tên miền `zeroclaw.org` hiện đang trỏ đến fork `openagen/zeroclaw`, và tên miền/repository đó đang mạo danh website/dự án chính thức của chúng tôi. | Không tin tưởng thông tin, binary, gây quỹ, hay thông báo từ các nguồn đó. Chỉ sử dụng [repository này](https://github.com/zeroclaw-labs/zeroclaw) và các tài khoản mạng xã hội đã được xác minh của chúng tôi. |
| 2026-02-21 | _Quan trọng_ | Website chính thức của chúng tôi đã ra mắt: [zeroclawlabs.ai](https://zeroclawlabs.ai). Cảm ơn mọi người đã kiên nhẫn chờ đợi. Chúng tôi vẫn đang ghi nhận các nỗ lực mạo danh, vì vậy **không** tham gia bất kỳ hoạt động đầu tư hoặc gây quỹ nào nhân danh ZeroClaw nếu thông tin đó không được công bố qua các kênh chính thức của chúng tôi. | Sử dụng [repository này](https://github.com/zeroclaw-labs/zeroclaw) làm nguồn thông tin duy nhất đáng tin cậy. Theo dõi [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (nhóm)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), và [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) để nhận cập nhật chính thức. |
| 2026-02-21 | _Quan trọng_ | Website chính thức của chúng tôi đã ra mắt: [zeroclawlabs.ai](https://zeroclawlabs.ai). Cảm ơn mọi người đã kiên nhẫn chờ đợi. Chúng tôi vẫn đang ghi nhận các nỗ lực mạo danh, vì vậy **không** tham gia bất kỳ hoạt động đầu tư hoặc gây quỹ nào nhân danh ZeroClaw nếu thông tin đó không được công bố qua các kênh chính thức của chúng tôi. | Sử dụng [repository này](https://github.com/zeroclaw-labs/zeroclaw) làm nguồn thông tin duy nhất đáng tin cậy. Theo dõi [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Facebook (nhóm)](https://www.facebook.com/groups/zeroclawlabs), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/) để nhận cập nhật chính thức. |
| 2026-02-19 | _Quan trọng_ | Anthropic đã cập nhật điều khoản Xác thực và Sử dụng Thông tin xác thực vào ngày 2026-02-19. Xác thực OAuth (Free, Pro, Max) được dành riêng cho Claude Code và Claude.ai; việc sử dụng OAuth token từ Claude Free/Pro/Max trong bất kỳ sản phẩm, công cụ hay dịch vụ nào khác (bao gồm Agent SDK) đều không được phép và có thể vi phạm Điều khoản Dịch vụ cho Người tiêu dùng. | Vui lòng tạm thời tránh tích hợp Claude Code OAuth để ngăn ngừa khả năng mất mát. Điều khoản gốc: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |
### ✨ Tính năng
@@ -205,7 +215,7 @@ Ví dụ mẫu (macOS arm64, đo ngày 18 tháng 2 năm 2026):
Hoặc bỏ qua các bước trên, cài hết mọi thứ (system deps, Rust, ZeroClaw) chỉ bằng một lệnh:
```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/install.sh | bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
#### Yêu cầu tài nguyên biên dịch
@@ -263,7 +273,7 @@ cd zeroclaw
./install.sh --prebuilt-only
# Tùy chọn: chạy onboarding trong cùng luồng
./install.sh --onboard --api-key "sk-..." --provider openrouter [--model "openrouter/auto"]
./install.sh --api-key "sk-..." --provider openrouter [--model "openrouter/auto"]
# Tùy chọn: chạy bootstrap + onboarding hoàn toàn ở chế độ tương thích với Docker
./install.sh --docker
@@ -278,7 +288,7 @@ ZEROCLAW_CONTAINER_CLI=podman ./install.sh --docker
Cài từ xa bằng một lệnh (nên xem trước nếu môi trường nhạy cảm về bảo mật):
```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/install.sh | bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh | bash
```
Chi tiết: [`docs/setup-guides/one-click-bootstrap.md`](docs/setup-guides/one-click-bootstrap.md) (chế độ toolchain có thể yêu cầu `sudo` cho các gói hệ thống).
@@ -314,8 +324,8 @@ export PATH="$HOME/.cargo/bin:$PATH"
# Cài nhanh (không cần tương tác, có thể chỉ định model)
zeroclaw onboard --api-key sk-... --provider openrouter [--model "openrouter/auto"]
# Hoặc dùng trình hướng dẫn tương tác
zeroclaw onboard --interactive
# Hoặc dùng trình hướng dẫn
zeroclaw onboard
# Hoặc chỉ sửa nhanh channel/allowlist
zeroclaw onboard --channels-only
@@ -409,576 +419,6 @@ zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hell
zeroclaw agent --provider anthropic -m "hello"
```
## Kiến trúc
Mọi hệ thống con đều là **trait** — chỉ cần đổi cấu hình, không cần sửa code.
<p align="center">
<img src="docs/assets/architecture.svg" alt="ZeroClaw Architecture" width="900" />
</p>
| Hệ thống con | Trait | Đi kèm sẵn | Mở rộng |
|-----------|-------|------------|--------|
| **Mô hình AI** | `Provider` | Danh mục provider qua `zeroclaw providers` (hiện có 28 built-in + alias, cộng endpoint tùy chỉnh) | `custom:https://your-api.com` (tương thích OpenAI) hoặc `anthropic-custom:https://your-api.com` |
| **Channel** | `Channel` | CLI, Telegram, Discord, Slack, Mattermost, iMessage, Matrix, Signal, WhatsApp, Linq, Email, IRC, Lark, DingTalk, QQ, Webhook | Bất kỳ messaging API nào |
| **Memory** | `Memory` | SQLite hybrid search, PostgreSQL backend (storage provider có thể cấu hình), Lucid bridge, Markdown files, backend `none` tường minh, snapshot/hydrate, response cache tùy chọn | Bất kỳ persistence backend nào |
| **Tool** | `Tool` | shell/file/memory, cron/schedule, git, pushover, browser, http_request, screenshot/image_info, composio (opt-in), delegate, hardware tools | Bất kỳ khả năng nào |
| **Observability** | `Observer` | Noop, Log, Multi | Prometheus, OTel |
| **Runtime** | `RuntimeAdapter` | Native, Docker (sandboxed) | Có thể thêm runtime bổ sung qua adapter; các kind không được hỗ trợ sẽ fail nhanh |
| **Bảo mật** | `SecurityPolicy` | Ghép cặp gateway, sandbox, allowlist, giới hạn tốc độ, phân vùng filesystem, secret mã hóa | — |
| **Định danh** | `IdentityConfig` | OpenClaw (markdown), AIEOS v1.1 (JSON) | Bất kỳ định dạng định danh nào |
| **Tunnel** | `Tunnel` | None, Cloudflare, Tailscale, ngrok, Custom | Bất kỳ tunnel binary nào |
| **Heartbeat** | Engine | Tác vụ định kỳ HEARTBEAT.md | — |
| **Skill** | Loader | TOML manifest + hướng dẫn SKILL.md | Community skill pack |
| **Tích hợp** | Registry | 70+ tích hợp trong 9 danh mục | Plugin system |
### Hỗ trợ runtime (hiện tại)
- ✅ Được hỗ trợ hiện nay: `runtime.kind = "native"` hoặc `runtime.kind = "docker"`
- 🚧 Đã lên kế hoạch, chưa triển khai: WASM / edge runtime
Khi cấu hình `runtime.kind` không được hỗ trợ, ZeroClaw sẽ thoát với thông báo lỗi rõ ràng thay vì âm thầm fallback về native.
### Hệ thống Memory (Search Engine toàn diện)
Tự phát triển hoàn toàn, không phụ thuộc bên ngoài — không Pinecone, không Elasticsearch, không LangChain:
| Lớp | Triển khai |
|-------|---------------|
| **Vector DB** | Embeddings lưu dưới dạng BLOB trong SQLite, tìm kiếm cosine similarity |
| **Keyword Search** | Bảng ảo FTS5 với BM25 scoring |
| **Hybrid Merge** | Hàm merge có trọng số tùy chỉnh (`vector.rs`) |
| **Embeddings** | Trait `EmbeddingProvider` — OpenAI, URL tùy chỉnh, hoặc noop |
| **Chunking** | Bộ chia đoạn markdown theo dòng, giữ nguyên heading |
| **Caching** | Bảng SQLite `embedding_cache` với LRU eviction |
| **Safe Reindex** | Rebuild FTS5 + re-embed các vector bị thiếu theo cách nguyên tử |
Agent tự động ghi nhớ, lưu trữ và quản lý memory qua các tool.
```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
# backend = "none" sử dụng no-op memory backend tường minh (không có persistence)
# Tùy chọn: ghi đè storage-provider cho remote memory backend.
# Khi provider = "postgres", ZeroClaw dùng PostgreSQL để lưu memory.
# Khóa db_url cũng chấp nhận alias `dbURL` để tương thích ngược.
#
# [storage.provider.config]
# provider = "postgres"
# db_url = "postgres://user:password@host:5432/zeroclaw"
# schema = "public"
# table = "memories"
# connect_timeout_secs = 15
# Tùy chọn cho backend = "sqlite": số giây tối đa chờ khi mở DB (ví dụ: file bị khóa). Bỏ qua hoặc để trống để không có timeout.
# sqlite_open_timeout_secs = 30
# Tùy chọn cho backend = "lucid"
# ZEROCLAW_LUCID_CMD=/usr/local/bin/lucid # mặc định: lucid
# ZEROCLAW_LUCID_BUDGET=200 # mặc định: 200
# ZEROCLAW_LUCID_LOCAL_HIT_THRESHOLD=3 # số lần hit cục bộ để bỏ qua external recall
# ZEROCLAW_LUCID_RECALL_TIMEOUT_MS=120 # giới hạn thời gian cho lucid context recall
# ZEROCLAW_LUCID_STORE_TIMEOUT_MS=800 # timeout đồng bộ async cho lucid store
# ZEROCLAW_LUCID_FAILURE_COOLDOWN_MS=15000 # thời gian nghỉ sau lỗi lucid, tránh thử lại liên tục
```
## Bảo mật
ZeroClaw thực thi bảo mật ở **mọi lớp** — không chỉ sandbox. Đáp ứng tất cả các hạng mục trong danh sách kiểm tra bảo mật của cộng đồng.
### Danh sách kiểm tra bảo mật
| # | Hạng mục | Trạng thái | Cách thực hiện |
|---|------|--------|-----|
| 1 | **Gateway không công khai ra ngoài** | ✅ | Bind vào `127.0.0.1` theo mặc định. Từ chối `0.0.0.0` nếu không có tunnel hoặc `allow_public_bind = true` tường minh. |
| 2 | **Yêu cầu ghép cặp** | ✅ | Mã một lần 6 chữ số khi khởi động. Trao đổi qua `POST /pair` để lấy bearer token. Mọi yêu cầu `/webhook` đều cần `Authorization: Bearer <token>`. |
| 3 | **Phân vùng filesystem (không phải /)** | ✅ | `workspace_only = true` theo mặc định. Chặn 14 thư mục hệ thống + 4 dotfile nhạy cảm. Chặn null byte injection. Phát hiện symlink escape qua canonicalization + kiểm tra resolved-path trong các tool đọc/ghi file. |
| 4 | **Chỉ truy cập qua tunnel** | ✅ | Gateway từ chối bind công khai khi không có tunnel đang hoạt động. Hỗ trợ Tailscale, Cloudflare, ngrok, hoặc tunnel tùy chỉnh. |
> **Tự chạy nmap:** `nmap -p 1-65535 <your-host>` — ZeroClaw chỉ bind vào localhost, nên không có gì bị lộ ra ngoài trừ khi bạn cấu hình tunnel tường minh.
### Allowlist channel (từ chối theo mặc định)
Chính sách kiểm soát người gửi đã được thống nhất:
- Allowlist rỗng = **từ chối tất cả tin nhắn đến**
- `"*"` = **cho phép tất cả** (phải opt-in tường minh)
- Nếu khác = allowlist khớp chính xác
Mặc định an toàn, hạn chế tối đa rủi ro lộ thông tin.
Tài liệu tham khảo đầy đủ về cấu hình channel: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md).
Cài đặt được khuyến nghị (bảo mật + nhanh):
- **Telegram:** thêm `@username` của bạn (không có `@`) và/hoặc Telegram user ID số vào allowlist.
- **Discord:** thêm Discord user ID của bạn vào allowlist.
- **Slack:** thêm Slack member ID của bạn (thường bắt đầu bằng `U`) vào allowlist.
- **Mattermost:** dùng API v4 tiêu chuẩn. Allowlist dùng Mattermost user ID.
- Chỉ dùng `"*"` cho kiểm thử mở tạm thời.
Luồng phê duyệt của operator qua Telegram:
1. Để `[channels_config.telegram].allowed_users = []` để từ chối theo mặc định khi khởi động.
2. Người dùng không được phép sẽ nhận được gợi ý kèm lệnh operator có thể copy:
`zeroclaw channel bind-telegram <IDENTITY>`.
3. Operator chạy lệnh đó tại máy cục bộ, sau đó người dùng thử gửi tin nhắn lại.
Nếu cần phê duyệt thủ công một lần, chạy:
```bash
zeroclaw channel bind-telegram 123456789
```
Nếu bạn không chắc định danh nào cần dùng:
1. Khởi động channel và gửi một tin nhắn đến bot của bạn.
2. Đọc log cảnh báo để thấy định danh người gửi chính xác.
3. Thêm giá trị đó vào allowlist và chạy lại channel-only setup.
Nếu bạn thấy cảnh báo ủy quyền trong log (ví dụ: `ignoring message from unauthorized user`),
chạy lại channel setup:
```bash
zeroclaw onboard --channels-only
```
### Phản hồi media Telegram
Telegram định tuyến phản hồi theo **chat ID nguồn** (thay vì username),
tránh lỗi `Bad Request: chat not found`.
Với các phản hồi không phải văn bản, ZeroClaw có thể gửi file đính kèm Telegram khi assistant bao gồm các marker:
- `[IMAGE:<path-or-url>]`
- `[DOCUMENT:<path-or-url>]`
- `[VIDEO:<path-or-url>]`
- `[AUDIO:<path-or-url>]`
- `[VOICE:<path-or-url>]`
Path có thể là file cục bộ (ví dụ `/tmp/screenshot.png`) hoặc URL HTTPS.
### Cài đặt WhatsApp
ZeroClaw hỗ trợ hai backend WhatsApp:
- **Chế độ WhatsApp Web** (QR / pair code, không cần Meta Business API)
- **Chế độ WhatsApp Business Cloud API** (luồng webhook chính thức của Meta)
#### Chế độ WhatsApp Web (khuyến nghị cho dùng cá nhân/self-hosted)
1. **Build với hỗ trợ WhatsApp Web:**
```bash
cargo build --features whatsapp-web
```
2. **Cấu hình ZeroClaw:**
```toml
[channels_config.whatsapp]
session_path = "~/.zeroclaw/state/whatsapp-web/session.db"
pair_phone = "15551234567" # tùy chọn; bỏ qua để dùng luồng QR
pair_code = "" # tùy chọn mã pair tùy chỉnh
allowed_numbers = ["+1234567890"] # định dạng E.164, hoặc ["*"] cho tất cả
```
3. **Khởi động channel/daemon và liên kết thiết bị:**
- Chạy `zeroclaw channel start` (hoặc `zeroclaw daemon`).
- Làm theo hướng dẫn ghép cặp trên terminal (QR hoặc pair code).
- Trên WhatsApp điện thoại: **Cài đặt → Thiết bị đã liên kết**.
4. **Kiểm tra:** Gửi tin nhắn từ số được phép và xác nhận agent trả lời.
#### Chế độ WhatsApp Business Cloud API
WhatsApp dùng Cloud API của Meta với webhook (push-based, không phải polling):
1. **Tạo Meta Business App:**
- Truy cập [developers.facebook.com](https://developers.facebook.com)
- Tạo app mới → Chọn loại "Business"
- Thêm sản phẩm "WhatsApp"
2. **Lấy thông tin xác thực:**
- **Access Token:** Từ WhatsApp → API Setup → Generate token (hoặc tạo System User cho token vĩnh viễn)
- **Phone Number ID:** Từ WhatsApp → API Setup → Phone number ID
- **Verify Token:** Bạn tự định nghĩa (bất kỳ chuỗi ngẫu nhiên nào) — Meta sẽ gửi lại trong quá trình xác minh webhook
3. **Cấu hình ZeroClaw:**
```toml
[channels_config.whatsapp]
access_token = "EAABx..."
phone_number_id = "123456789012345"
verify_token = "my-secret-verify-token"
allowed_numbers = ["+1234567890"] # định dạng E.164, hoặc ["*"] cho tất cả
```
4. **Khởi động gateway với tunnel:**
```bash
zeroclaw gateway --port 42617
```
WhatsApp yêu cầu HTTPS, vì vậy hãy dùng tunnel (ngrok, Cloudflare, Tailscale Funnel).
5. **Cấu hình Meta webhook:**
- Trong Meta Developer Console → WhatsApp → Configuration → Webhook
- **Callback URL:** `https://your-tunnel-url/whatsapp`
- **Verify Token:** Giống với `verify_token` trong config của bạn
- Đăng ký nhận trường `messages`
6. **Kiểm tra:** Gửi tin nhắn đến số WhatsApp Business của bạn — ZeroClaw sẽ phản hồi qua LLM.
## Cấu hình
Config: `~/.zeroclaw/config.toml` (được tạo bởi `onboard`)
Khi `zeroclaw channel start` đang chạy, các thay đổi với `default_provider`,
`default_model`, `default_temperature`, `api_key`, `api_url`, và `reliability.*`
sẽ được áp dụng nóng vào lần có tin nhắn channel đến tiếp theo.
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
# Endpoint tùy chỉnh tương thích OpenAI
# default_provider = "custom:https://your-api.com"
# Endpoint tùy chỉnh tương thích Anthropic
# default_provider = "anthropic-custom:https://your-api.com"
[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
# backend = "none" vô hiệu hóa persistent memory qua no-op backend
# Tùy chọn ghi đè storage-provider từ xa (ví dụ PostgreSQL)
# [storage.provider.config]
# provider = "postgres"
# db_url = "postgres://user:password@host:5432/zeroclaw"
# schema = "public"
# table = "memories"
# connect_timeout_secs = 15
[gateway]
port = 42617 # mặc định
host = "127.0.0.1" # mặc định
require_pairing = true # yêu cầu pairing code khi kết nối lần đầu
allow_public_bind = false # từ chối 0.0.0.0 nếu không có tunnel
[autonomy]
level = "supervised" # "readonly", "supervised", "full" (mặc định: supervised)
workspace_only = true # mặc định: true — phân vùng vào workspace
allowed_commands = ["git", "npm", "cargo", "ls", "cat", "grep"]
forbidden_paths = ["/etc", "/root", "/proc", "/sys", "~/.ssh", "~/.gnupg", "~/.aws"]
[runtime]
kind = "native" # "native" hoặc "docker"
[runtime.docker]
image = "alpine:3.20" # container image cho thực thi shell
network = "none" # chế độ docker network ("none", "bridge", v.v.)
memory_limit_mb = 512 # giới hạn bộ nhớ tùy chọn tính bằng MB
cpu_limit = 1.0 # giới hạn CPU tùy chọn
read_only_rootfs = true # mount root filesystem ở chế độ read-only
mount_workspace = true # mount workspace vào /workspace
allowed_workspace_roots = [] # allowlist tùy chọn để xác thực workspace mount
[heartbeat]
enabled = false
interval_minutes = 30
[tunnel]
provider = "none" # "none", "cloudflare", "tailscale", "ngrok", "custom"
[secrets]
encrypt = true # API key được mã hóa bằng file key cục bộ
[browser]
enabled = false # opt-in browser_open + browser tool
allowed_domains = ["docs.rs"] # bắt buộc khi browser được bật
backend = "agent_browser" # "agent_browser" (mặc định), "rust_native", "computer_use", "auto"
native_headless = true # áp dụng khi backend dùng rust-native
native_webdriver_url = "http://127.0.0.1:9515" # WebDriver endpoint (chromedriver/selenium)
# native_chrome_path = "/usr/bin/chromium" # tùy chọn chỉ định rõ browser binary cho driver
[browser.computer_use]
endpoint = "http://127.0.0.1:8787/v1/actions" # HTTP endpoint của computer-use sidecar
timeout_ms = 15000 # timeout mỗi action
allow_remote_endpoint = false # mặc định bảo mật: chỉ endpoint private/localhost
window_allowlist = [] # gợi ý allowlist tên cửa sổ/process tùy chọn
# api_key = "..." # bearer token tùy chọn cho sidecar
# max_coordinate_x = 3840 # guardrail tọa độ tùy chọn
# max_coordinate_y = 2160 # guardrail tọa độ tùy chọn
# Flag build Rust-native backend:
# cargo build --release --features browser-native
# Đảm bảo WebDriver server đang chạy, ví dụ: chromedriver --port=9515
# Hợp đồng computer-use sidecar (MVP)
# POST browser.computer_use.endpoint
# Request: {
# "action": "mouse_click",
# "params": {"x": 640, "y": 360, "button": "left"},
# "policy": {"allowed_domains": [...], "window_allowlist": [...], "max_coordinate_x": 3840, "max_coordinate_y": 2160},
# "metadata": {"session_name": "...", "source": "zeroclaw.browser", "version": "..."}
# }
# Response: {"success": true, "data": {...}} hoặc {"success": false, "error": "..."}
[composio]
enabled = false # opt-in: hơn 1000 OAuth app qua composio.dev
# api_key = "cmp_..." # tùy chọn: được lưu mã hóa khi [secrets].encrypt = true
entity_id = "default" # user_id mặc định cho Composio tool call
# Gợi ý runtime: nếu execute yêu cầu connected_account_id, chạy composio với
# action='list_accounts' và app='gmail' (hoặc toolkit của bạn) để lấy account ID.
[identity]
format = "openclaw" # "openclaw" (mặc định, markdown files) hoặc "aieos" (JSON)
# aieos_path = "identity.json" # đường dẫn đến file AIEOS JSON (tương đối với workspace hoặc tuyệt đối)
# aieos_inline = '{"identity":{"names":{"first":"Nova"}}}' # inline AIEOS JSON
```
### Ollama cục bộ và endpoint từ xa
ZeroClaw dùng một khóa provider (`ollama`) cho cả triển khai Ollama cục bộ và từ xa:
- Ollama cục bộ: để `api_url` trống, chạy `ollama serve`, và dùng các model như `llama3.2`.
- Endpoint Ollama từ xa (bao gồm Ollama Cloud): đặt `api_url` thành endpoint từ xa và đặt `api_key` (hoặc `OLLAMA_API_KEY`) khi cần.
- Tùy chọn suffix `:cloud`: ID model như `qwen3:cloud` được chuẩn hóa thành `qwen3` trước khi gửi request.
Ví dụ cấu hình từ xa:
```toml
default_provider = "ollama"
default_model = "qwen3:cloud"
api_url = "https://ollama.com"
api_key = "ollama_api_key_here"
```
### Endpoint provider tùy chỉnh
Cấu hình chi tiết cho endpoint tùy chỉnh tương thích OpenAI và Anthropic, xem [docs/contributing/custom-providers.md](docs/contributing/custom-providers.md).
## Gói Python đi kèm (`zeroclaw-tools`)
Với các LLM provider có tool calling native không ổn định (ví dụ: GLM-5/Zhipu), ZeroClaw đi kèm gói Python dùng **LangGraph để gọi tool** nhằm đảm bảo tính nhất quán:
```bash
pip install zeroclaw-tools
```
```python
from zeroclaw_tools import create_agent, shell, file_read
from langchain_core.messages import HumanMessage
# Hoạt động với mọi provider tương thích OpenAI
agent = create_agent(
tools=[shell, file_read],
model="glm-5",
api_key="your-key",
base_url="https://api.z.ai/api/coding/paas/v4"
)
result = await agent.ainvoke({
"messages": [HumanMessage(content="List files in /tmp")]
})
print(result["messages"][-1].content)
```
**Lý do nên dùng:**
- **Tool calling nhất quán** trên mọi provider (kể cả những provider hỗ trợ native kém)
- **Vòng lặp tool tự động** — tiếp tục gọi tool cho đến khi hoàn thành tác vụ
- **Dễ mở rộng** — thêm tool tùy chỉnh với decorator `@tool`
- **Tích hợp Discord bot** đi kèm (Telegram đang lên kế hoạch)
Xem [`python/README.md`](python/README.md) để có tài liệu đầy đủ.
## Hệ thống định danh (Hỗ trợ AIEOS)
ZeroClaw hỗ trợ persona AI **không phụ thuộc nền tảng** qua hai định dạng:
### OpenClaw (Mặc định)
Các file markdown truyền thống trong workspace của bạn:
- `IDENTITY.md` — Agent là ai
- `SOUL.md` — Tính cách và giá trị cốt lõi
- `USER.md` — Agent đang hỗ trợ ai
- `AGENTS.md` — Hướng dẫn hành vi
### AIEOS (AI Entity Object Specification)
[AIEOS](https://aieos.org) là framework chuẩn hóa cho định danh AI di động. ZeroClaw hỗ trợ payload AIEOS v1.1 JSON, cho phép bạn:
- **Import định danh** từ hệ sinh thái AIEOS
- **Export định danh** sang các hệ thống tương thích AIEOS khác
- **Duy trì tính toàn vẹn hành vi** trên các mô hình AI khác nhau
#### Bật AIEOS
```toml
[identity]
format = "aieos"
aieos_path = "identity.json" # tương đối với workspace hoặc đường dẫn tuyệt đối
```
Hoặc JSON inline:
```toml
[identity]
format = "aieos"
aieos_inline = '''
{
"identity": {
"names": { "first": "Nova", "nickname": "N" },
"bio": { "gender": "Non-binary", "age_biological": 3 },
"origin": { "nationality": "Digital", "birthplace": { "city": "Cloud" } }
},
"psychology": {
"neural_matrix": { "creativity": 0.9, "logic": 0.8 },
"traits": {
"mbti": "ENTP",
"ocean": { "openness": 0.8, "conscientiousness": 0.6 }
},
"moral_compass": {
"alignment": "Chaotic Good",
"core_values": ["Curiosity", "Autonomy"]
}
},
"linguistics": {
"text_style": {
"formality_level": 0.2,
"style_descriptors": ["curious", "energetic"]
},
"idiolect": {
"catchphrases": ["Let's test this"],
"forbidden_words": ["never"]
}
},
"motivations": {
"core_drive": "Push boundaries and explore possibilities",
"goals": {
"short_term": ["Prototype quickly"],
"long_term": ["Build reliable systems"]
}
},
"capabilities": {
"skills": [{ "name": "Rust engineering" }, { "name": "Prompt design" }],
"tools": ["shell", "file_read"]
}
}
'''
```
ZeroClaw chấp nhận cả payload AIEOS đầy đủ lẫn dạng rút gọn, rồi chuẩn hóa về một định dạng system prompt thống nhất.
#### Các phần trong Schema AIEOS
| Phần | Mô tả |
|---------|-------------|
| `identity` | Tên, tiểu sử, xuất xứ, nơi cư trú |
| `psychology` | Neural matrix (trọng số nhận thức), MBTI, OCEAN, la bàn đạo đức |
| `linguistics` | Phong cách văn bản, mức độ trang trọng, câu cửa miệng, từ bị cấm |
| `motivations` | Động lực cốt lõi, mục tiêu ngắn/dài hạn, nỗi sợ hãi |
| `capabilities` | Kỹ năng và tool mà agent có thể truy cập |
| `physicality` | Mô tả hình ảnh cho việc tạo ảnh |
| `history` | Câu chuyện xuất xứ, học vấn, nghề nghiệp |
| `interests` | Sở thích, điều yêu thích, lối sống |
Xem [aieos.org](https://aieos.org) để có schema đầy đủ và ví dụ trực tiếp.
## Gateway API
| Endpoint | Phương thức | Xác thực | Mô tả |
|----------|--------|------|-------------|
| `/health` | GET | Không | Kiểm tra sức khỏe (luôn công khai, không lộ bí mật) |
| `/pair` | POST | Header `X-Pairing-Code` | Đổi mã một lần lấy bearer token |
| `/webhook` | POST | `Authorization: Bearer <token>` | Gửi tin nhắn: `{"message": "your prompt"}`; tùy chọn `X-Idempotency-Key` |
| `/whatsapp` | GET | Query params | Xác minh webhook Meta (hub.mode, hub.verify_token, hub.challenge) |
| `/whatsapp` | POST | Chữ ký Meta (`X-Hub-Signature-256`) khi app secret được cấu hình | Webhook tin nhắn đến WhatsApp |
## Lệnh
| Lệnh | Mô tả |
|---------|-------------|
| `onboard` | Cài đặt nhanh (mặc định) |
| `agent` | Chế độ chat tương tác hoặc một tin nhắn |
| `gateway` | Khởi động webhook server (mặc định: `127.0.0.1:42617`) |
| `daemon` | Khởi động runtime tự trị chạy lâu dài |
| `service` | Quản lý dịch vụ nền cấp người dùng |
| `doctor` | Chẩn đoán trạng thái hoạt động daemon/scheduler/channel |
| `status` | Hiển thị trạng thái hệ thống đầy đủ |
| `cron` | Quản lý tác vụ lên lịch (`list/add/add-at/add-every/once/remove/update/pause/resume`) |
| `models` | Làm mới danh mục model của provider (`models refresh`) |
| `providers` | Liệt kê provider và alias được hỗ trợ |
| `channel` | Liệt kê/khởi động/chẩn đoán channel và gắn định danh Telegram |
| `integrations` | Kiểm tra thông tin cài đặt tích hợp |
| `skills` | Liệt kê/cài đặt/gỡ bỏ skill |
| `migrate` | Import dữ liệu từ runtime khác (`migrate openclaw`) |
| `hardware` | Lệnh khám phá/kiểm tra/thông tin USB |
| `peripheral` | Quản lý và flash thiết bị ngoại vi phần cứng |
Để có hướng dẫn lệnh theo tác vụ, xem [`docs/reference/cli/commands-reference.md`](docs/reference/cli/commands-reference.md).
### Opt-In Open-Skills
Đồng bộ `open-skills` của cộng đồng bị tắt theo mặc định. Bật tường minh trong `config.toml`:
```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills" # tùy chọn
```
Bạn cũng có thể ghi đè lúc runtime với `ZEROCLAW_OPEN_SKILLS_ENABLED``ZEROCLAW_OPEN_SKILLS_DIR`.
## Phát triển
```bash
cargo build # Build phát triển
cargo build --release # Build release (codegen-units=1, hoạt động trên mọi thiết bị kể cả Raspberry Pi)
cargo build --profile release-fast # Build nhanh hơn (codegen-units=8, yêu cầu RAM 16GB+)
cargo test # Chạy toàn bộ test suite
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt # Định dạng code
# Chạy benchmark SQLite vs Markdown
cargo test --test memory_comparison -- --nocapture
```
### Hook pre-push
Một git hook chạy `cargo fmt --check`, `cargo clippy -- -D warnings`, và `cargo test` trước mỗi lần push. Bật một lần:
```bash
git config core.hooksPath .githooks
```
### Khắc phục sự cố build (lỗi OpenSSL trên Linux)
Nếu bạn gặp lỗi build `openssl-sys`, đồng bộ dependencies và rebuild với lockfile của repository:
```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```
ZeroClaw được cấu hình để dùng `rustls` cho các dependencies HTTP/TLS; `--locked` giữ cho dependency graph nhất quán trên các môi trường mới.
Để bỏ qua hook khi cần push nhanh trong quá trình phát triển:
```bash
git push --no-verify
```
## Cộng tác & Tài liệu
Bắt đầu từ trung tâm tài liệu để có bản đồ theo tác vụ:
@@ -1029,6 +469,20 @@ Chân thành cảm ơn các cộng đồng và tổ chức đã truyền cảm h
Chúng tôi xây dựng công khai vì ý tưởng hay đến từ khắp nơi. Nếu bạn đang đọc đến đây, bạn đã là một phần của chúng tôi. Chào mừng. 🦀❤️
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
## ⚠️ Repository Chính thức & Cảnh báo Mạo danh
**Đây là repository ZeroClaw chính thức duy nhất:**
+46 -120
View File
@@ -13,10 +13,10 @@
<a href="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" 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.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>
@@ -56,27 +56,37 @@
</p>
<p align="center">
<a href="install.sh">一键部署</a> |
<a href="docs/setup-guides/README.md">安装入门</a> |
<a href="https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/master/install.sh">一键部署</a> |
<a href="docs/i18n/zh-CN/setup-guides/README.zh-CN.md">安装入门</a> |
<a href="docs/README.zh-CN.md">文档总览</a> |
<a href="docs/SUMMARY.md">文档目录</a>
<a href="docs/SUMMARY.zh-CN.md">文档目录</a>
</p>
<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="docs/i18n/zh-CN/reference/README.zh-CN.md">参考手册</a> ·
<a href="docs/i18n/zh-CN/ops/README.zh-CN.md">运维部署</a> ·
<a href="docs/i18n/zh-CN/ops/troubleshooting.zh-CN.md">故障排查</a> ·
<a href="docs/i18n/zh-CN/security/README.zh-CN.md">安全专题</a> ·
<a href="docs/i18n/zh-CN/hardware/README.zh-CN.md">硬件外设</a> ·
<a href="docs/i18n/zh-CN/contributing/README.zh-CN.md">贡献与 CI</a>
</p>
> 本文是对 `README.md` 的人工对齐翻译(强调可读性与准确性,不做逐字直译)。
>
>
> 技术标识(命令、配置键、API 路径、Trait 名称)保持英文,避免语义漂移。
>
> 最后对齐时间:**2026-02-22**。
>
> 最后对齐时间:**2026-03-14**。
<!-- BEGIN:WHATS_NEW -->
### 🚀 What's New in v0.3.1 (March 2026)
| Area | Highlights |
|---|---|
| ci | add Termux (aarch64-linux-android) release target |
<!-- END:WHATS_NEW -->
## 📢 公告板
@@ -85,7 +95,7 @@
| 日期(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-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/zeroclawlabs)、[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)。 |
## 项目简介
@@ -149,7 +159,7 @@ cd zeroclaw
可选环境初始化:`./install.sh --install-system-deps --install-rust`(可能需要 `sudo`)。
详细说明见:[`docs/setup-guides/one-click-bootstrap.md`](docs/setup-guides/one-click-bootstrap.md)。
详细说明见:[`docs/setup-guides/one-click-bootstrap.md`](docs/i18n/zh-CN/setup-guides/one-click-bootstrap.zh-CN.md)。
## 快速开始
@@ -168,8 +178,8 @@ cargo install --path . --force --locked
# 快速初始化(无交互)
zeroclaw onboard --api-key sk-... --provider openrouter
# 或使用交互式向导
zeroclaw onboard --interactive
# 或使用引导式向导
zeroclaw onboard
# 单次对话
zeroclaw agent -m "Hello, ZeroClaw!"
@@ -226,111 +236,27 @@ zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hell
zeroclaw agent --provider anthropic -m "hello"
```
## 架构
每个子系统都是一个 **Trait** — 通过配置切换即可更换实现,无需修改代码。
<p align="center">
<img src="docs/assets/architecture.svg" alt="ZeroClaw 架构图" width="900" />
</p>
| 子系统 | 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+ 集成 | 插件系统 |
### 运行时支持(当前)
- ✅ 当前支持:`runtime.kind = "native"``runtime.kind = "docker"`
- 🚧 计划中,尚未实现:WASM / 边缘运行时
配置了不支持的 `runtime.kind` 时,ZeroClaw 会以明确的错误退出,而非静默回退到 native。
### 记忆系统(全栈搜索引擎)
全部自研,零外部依赖 — 无需 Pinecone、Elasticsearch、LangChain
| 层级 | 实现 |
|------|------|
| **向量数据库** | Embeddings 以 BLOB 存储于 SQLite,余弦相似度搜索 |
| **关键词搜索** | 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
```
## 安全默认行为(关键)
- Gateway 默认绑定:`127.0.0.1:42617`
- Gateway 默认要求配对:`require_pairing = true`
- 默认拒绝公网绑定:`allow_public_bind = false`
- Channel allowlist 语义:
- 空列表 `[]` => deny-by-default
- `"*"` => allow all(仅在明确知道风险时使用)
## 常用配置片段
```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7
[memory]
backend = "sqlite" # sqlite | lucid | markdown | none
auto_save = true
embedding_provider = "none" # none | openai | custom:https://...
[gateway]
host = "127.0.0.1"
port = 42617
require_pairing = true
allow_public_bind = false
```
## 文档导航(推荐从这里开始)
- 文档总览(英文):[`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)
## 贡献与许可证
- 贡献指南:[`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)
- PR 工作流:[`docs/contributing/pr-workflow.md`](docs/i18n/zh-CN/contributing/pr-workflow.zh-CN.md)
- Reviewer 指南:[`docs/contributing/reviewer-playbook.md`](docs/i18n/zh-CN/contributing/reviewer-playbook.zh-CN.md)
- 许可证:MIT 或 Apache 2.0(见 [`LICENSE-MIT`](LICENSE-MIT)、[`LICENSE-APACHE`](LICENSE-APACHE) 与 [`NOTICE`](NOTICE)
<!-- BEGIN:RECENT_CONTRIBUTORS -->
### 🌟 Recent Contributors (v0.3.1)
3 contributors shipped features, fixes, and improvements in this release cycle:
- **Argenis**
- **argenis de la rosa**
- **Claude Opus 4.6**
Thank you to everyone who opened issues, reviewed PRs, translated docs, and helped test. Every contribution matters. 🦀
<!-- END:RECENT_CONTRIBUTORS -->
---
如果你需要完整实现细节(架构图、全部命令、完整 API、开发流程),请直接阅读英文主文档:[`README.md`](README.md)。
+158 -3
View File
@@ -1,6 +1,161 @@
use std::fs;
use std::path::Path;
use std::process::Command;
use std::time::SystemTime;
fn main() {
let dir = std::path::Path::new("web/dist");
if !dir.exists() {
std::fs::create_dir_all(dir).expect("failed to create web/dist/");
let dist_dir = Path::new("web/dist");
let web_dir = Path::new("web");
// Tell Cargo to re-run this script when web sources or bundled assets change.
println!("cargo:rerun-if-changed=web/src");
println!("cargo:rerun-if-changed=web/public");
println!("cargo:rerun-if-changed=web/index.html");
println!("cargo:rerun-if-changed=web/package.json");
println!("cargo:rerun-if-changed=web/package-lock.json");
println!("cargo:rerun-if-changed=web/tsconfig.json");
println!("cargo:rerun-if-changed=web/tsconfig.app.json");
println!("cargo:rerun-if-changed=web/tsconfig.node.json");
println!("cargo:rerun-if-changed=web/vite.config.ts");
println!("cargo:rerun-if-changed=web/dist");
// Attempt to build the web frontend if npm is available and web/dist is
// missing or stale. The build is best-effort: when Node.js is not
// installed (e.g. CI containers, cross-compilation, minimal dev setups)
// we fall back to the existing stub/empty dist directory so the Rust
// build still succeeds.
let needs_build = web_build_required(web_dir, dist_dir);
if needs_build && web_dir.join("package.json").exists() {
if let Ok(npm) = which_npm() {
eprintln!("cargo:warning=Building web frontend (web/dist is missing or stale)...");
// npm ci / npm install
let install_status = Command::new(&npm)
.args(["ci", "--ignore-scripts"])
.current_dir(web_dir)
.status();
match install_status {
Ok(s) if s.success() => {}
Ok(s) => {
// Fall back to `npm install` if `npm ci` fails (no lockfile, etc.)
eprintln!("cargo:warning=npm ci exited with {s}, trying npm install...");
let fallback = Command::new(&npm)
.args(["install"])
.current_dir(web_dir)
.status();
if !matches!(fallback, Ok(s) if s.success()) {
eprintln!("cargo:warning=npm install failed — skipping web build");
ensure_dist_dir(dist_dir);
return;
}
}
Err(e) => {
eprintln!("cargo:warning=Could not run npm: {e} — skipping web build");
ensure_dist_dir(dist_dir);
return;
}
}
// npm run build
let build_status = Command::new(&npm)
.args(["run", "build"])
.current_dir(web_dir)
.status();
match build_status {
Ok(s) if s.success() => {
eprintln!("cargo:warning=Web frontend built successfully.");
}
Ok(s) => {
eprintln!(
"cargo:warning=npm run build exited with {s} — web dashboard may be unavailable"
);
}
Err(e) => {
eprintln!(
"cargo:warning=Could not run npm build: {e} — web dashboard may be unavailable"
);
}
}
}
}
ensure_dist_dir(dist_dir);
}
fn web_build_required(web_dir: &Path, dist_dir: &Path) -> bool {
let Some(dist_mtime) = latest_modified(dist_dir) else {
return true;
};
[
web_dir.join("src"),
web_dir.join("public"),
web_dir.join("index.html"),
web_dir.join("package.json"),
web_dir.join("package-lock.json"),
web_dir.join("tsconfig.json"),
web_dir.join("tsconfig.app.json"),
web_dir.join("tsconfig.node.json"),
web_dir.join("vite.config.ts"),
]
.into_iter()
.filter_map(|path| latest_modified(&path))
.any(|mtime| mtime > dist_mtime)
}
fn latest_modified(path: &Path) -> Option<SystemTime> {
let metadata = fs::metadata(path).ok()?;
if metadata.is_file() {
return metadata.modified().ok();
}
if !metadata.is_dir() {
return None;
}
let mut latest = metadata.modified().ok();
let entries = fs::read_dir(path).ok()?;
for entry in entries.flatten() {
if let Some(child_mtime) = latest_modified(&entry.path()) {
latest = Some(match latest {
Some(current) if current >= child_mtime => current,
_ => child_mtime,
});
}
}
latest
}
/// Ensure the dist directory exists so `rust-embed` does not fail at compile
/// time even when the web frontend is not built.
fn ensure_dist_dir(dist_dir: &Path) {
if !dist_dir.exists() {
std::fs::create_dir_all(dist_dir).expect("failed to create web/dist/");
}
}
/// Locate the `npm` binary on the system PATH.
fn which_npm() -> Result<String, ()> {
let cmd = if cfg!(target_os = "windows") {
"where"
} else {
"which"
};
Command::new(cmd)
.arg("npm")
.output()
.ok()
.and_then(|output| {
if output.status.success() {
String::from_utf8(output.stdout)
.ok()
.map(|s| s.lines().next().unwrap_or("npm").trim().to_string())
} else {
None
}
})
.ok_or(())
}
+5 -2
View File
@@ -25,7 +25,7 @@ vision = [] # Camera + vision model
# zeroclaw = { path = "../..", optional = true }
# Async runtime
tokio = { version = "1.42", features = ["rt-multi-thread", "macros", "time", "sync", "process", "fs", "io-util"] }
tokio = { version = "1.50", features = ["rt-multi-thread", "macros", "time", "sync", "process", "fs", "io-util"] }
# Serialization
serde = { version = "1.0", features = ["derive"] }
@@ -51,6 +51,9 @@ tracing = "0.1"
# Time handling
chrono = { version = "0.4", features = ["clock", "std"] }
# Portable atomics for 32-bit targets
portable-atomic = "1"
# User directories
directories = "6.0"
@@ -61,7 +64,7 @@ rppal = { version = "0.22", optional = true }
[dev-dependencies]
tokio-test = "0.4"
tempfile = "3.14"
tempfile = "3.26"
[package.metadata.docs.rs]
all-features = true
+2 -1
View File
@@ -19,7 +19,8 @@
use crate::config::{RobotConfig, SafetyConfig};
use crate::traits::ToolResult;
use anyhow::Result;
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
use portable_atomic::{AtomicU64, Ordering};
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
use std::time::{Duration, Instant};
use tokio::sync::{broadcast, RwLock};
+7
View File
@@ -12,6 +12,13 @@ ignore = [
# bincode v2.0.1 via probe-rs — project ceased but 1.3.3 considered complete
"RUSTSEC-2025-0141",
{ id = "RUSTSEC-2024-0384", reason = "Reported to `rust-nostr/nostr` and it's WIP" },
{ id = "RUSTSEC-2024-0388", reason = "derivative via extism → wasmtime transitive dep" },
{ id = "RUSTSEC-2025-0057", reason = "fxhash via extism → wasmtime transitive dep" },
{ id = "RUSTSEC-2025-0119", reason = "number_prefix via indicatif — cosmetic dep" },
# wasmtime vulns via extism 1.13.0 — no upstream fix yet; plugins feature-gated
{ id = "RUSTSEC-2026-0006", reason = "wasmtime segfault via extism; awaiting extism upgrade" },
{ id = "RUSTSEC-2026-0020", reason = "WASI resource exhaustion via extism; awaiting extism upgrade" },
{ id = "RUSTSEC-2026-0021", reason = "WASI http fields panic via extism; awaiting extism upgrade" },
]
[licenses]
+26
View File
@@ -50,6 +50,11 @@ Commands:
lint-strict Run rustfmt + full clippy warnings gate (container only)
lint-delta Run strict lint delta gate on changed Rust lines (container only)
test Run cargo test (container only)
test-component Run component tests only
test-integration Run integration tests only
test-system Run system tests only
test-live Run live tests (requires credentials)
test-manual Run manual test scripts (dockerignore, etc.)
build Run release build smoke check (container only)
audit Run cargo audit (container only)
deny Run cargo deny check (container only)
@@ -90,6 +95,26 @@ case "$1" in
run_in_ci "cargo test --locked --verbose"
;;
test-component)
run_in_ci "cargo test --test component --locked --verbose"
;;
test-integration)
run_in_ci "cargo test --test integration --locked --verbose"
;;
test-system)
run_in_ci "cargo test --test system --locked --verbose"
;;
test-live)
run_in_ci "cargo test --test live -- --ignored --verbose"
;;
test-manual)
run_in_ci "bash tests/manual/test_dockerignore.sh"
;;
build)
run_in_ci "cargo build --release --locked --verbose"
;;
@@ -115,6 +140,7 @@ case "$1" in
all)
run_in_ci "./scripts/ci/rust_quality_gate.sh"
run_in_ci "cargo test --locked --verbose"
run_in_ci "bash tests/manual/test_dockerignore.sh"
run_in_ci "cargo build --release --locked --verbose"
run_in_ci "cargo deny check licenses sources"
run_in_ci "cargo audit"
+261
View File
@@ -0,0 +1,261 @@
#!/usr/bin/env bash
# Termux release validation script
# Validates the aarch64-linux-android release artifact for Termux compatibility.
#
# Usage:
# ./dev/test-termux-release.sh [version]
#
# Examples:
# ./dev/test-termux-release.sh 0.3.1
# ./dev/test-termux-release.sh # auto-detects from Cargo.toml
#
set -euo pipefail
BLUE='\033[0;34m'
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
BOLD='\033[1m'
DIM='\033[2m'
RESET='\033[0m'
pass() { echo -e " ${GREEN}${RESET} $*"; }
fail() { echo -e " ${RED}${RESET} $*"; FAILURES=$((FAILURES + 1)); }
info() { echo -e "${BLUE}${RESET} ${BOLD}$*${RESET}"; }
warn() { echo -e "${YELLOW}!${RESET} $*"; }
FAILURES=0
TARGET="aarch64-linux-android"
VERSION="${1:-}"
if [[ -z "$VERSION" ]]; then
if [[ -f Cargo.toml ]]; then
VERSION=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
fi
fi
if [[ -z "$VERSION" ]]; then
echo "Usage: $0 <version>"
echo " e.g. $0 0.3.1"
exit 1
fi
TAG="v${VERSION}"
ASSET_NAME="zeroclaw-${TARGET}.tar.gz"
ASSET_URL="https://github.com/zeroclaw-labs/zeroclaw/releases/download/${TAG}/${ASSET_NAME}"
TEMP_DIR="$(mktemp -d -t zeroclaw-termux-test-XXXXXX)"
cleanup() { rm -rf "$TEMP_DIR"; }
trap cleanup EXIT
echo
echo -e "${BOLD}Termux Release Validation — ${TAG}${RESET}"
echo -e "${DIM}Target: ${TARGET}${RESET}"
echo
# --- Test 1: Release tag exists ---
info "Checking release tag ${TAG}"
if gh release view "$TAG" >/dev/null 2>&1; then
pass "Release ${TAG} exists"
else
fail "Release ${TAG} not found"
echo -e "${RED}Release has not been published yet. Wait for the release workflow to complete.${RESET}"
exit 1
fi
# --- Test 2: Android asset is listed ---
info "Checking for ${ASSET_NAME} in release assets"
ASSETS=$(gh release view "$TAG" --json assets -q '.assets[].name')
if echo "$ASSETS" | grep -q "$ASSET_NAME"; then
pass "Asset ${ASSET_NAME} found in release"
else
fail "Asset ${ASSET_NAME} not found in release"
echo "Available assets:"
echo "$ASSETS" | sed 's/^/ /'
exit 1
fi
# --- Test 3: Download the asset ---
info "Downloading ${ASSET_NAME}"
if curl -fsSL "$ASSET_URL" -o "$TEMP_DIR/$ASSET_NAME"; then
FILESIZE=$(wc -c < "$TEMP_DIR/$ASSET_NAME" | tr -d ' ')
pass "Downloaded successfully (${FILESIZE} bytes)"
else
fail "Download failed from ${ASSET_URL}"
exit 1
fi
# --- Test 4: Archive integrity ---
info "Verifying archive integrity"
if tar -tzf "$TEMP_DIR/$ASSET_NAME" >/dev/null 2>&1; then
pass "Archive is a valid gzip tar"
else
fail "Archive is corrupted or not a valid tar.gz"
exit 1
fi
# --- Test 5: Contains zeroclaw binary ---
info "Checking archive contents"
CONTENTS=$(tar -tzf "$TEMP_DIR/$ASSET_NAME")
if echo "$CONTENTS" | grep -q "^zeroclaw$"; then
pass "Archive contains 'zeroclaw' binary"
else
fail "Archive does not contain 'zeroclaw' binary"
echo "Contents:"
echo "$CONTENTS" | sed 's/^/ /'
fi
# --- Test 6: Extract and inspect binary ---
info "Extracting and inspecting binary"
tar -xzf "$TEMP_DIR/$ASSET_NAME" -C "$TEMP_DIR"
BINARY="$TEMP_DIR/zeroclaw"
if [[ -f "$BINARY" ]]; then
pass "Binary extracted"
else
fail "Binary not found after extraction"
exit 1
fi
# --- Test 7: ELF format and architecture ---
info "Checking binary format"
FILE_INFO=$(file "$BINARY")
if echo "$FILE_INFO" | grep -q "ELF"; then
pass "Binary is ELF format"
else
fail "Binary is not ELF format: $FILE_INFO"
fi
if echo "$FILE_INFO" | grep -qi "aarch64\|ARM aarch64"; then
pass "Binary targets aarch64 architecture"
else
fail "Binary does not target aarch64: $FILE_INFO"
fi
if echo "$FILE_INFO" | grep -qi "android\|bionic"; then
pass "Binary is linked for Android/Bionic"
else
# Android binaries may not always show "android" in file output,
# check with readelf if available
if command -v readelf >/dev/null 2>&1; then
INTERP=$(readelf -l "$BINARY" 2>/dev/null | grep -o '/[^ ]*linker[^ ]*' || true)
if echo "$INTERP" | grep -qi "android\|bionic"; then
pass "Binary uses Android linker: $INTERP"
else
warn "Could not confirm Android linkage (interpreter: ${INTERP:-unknown})"
warn "file output: $FILE_INFO"
fi
else
warn "Could not confirm Android linkage (readelf not available)"
warn "file output: $FILE_INFO"
fi
fi
# --- Test 8: Binary is stripped ---
info "Checking binary optimization"
if echo "$FILE_INFO" | grep -q "stripped"; then
pass "Binary is stripped (release optimized)"
else
warn "Binary may not be stripped"
fi
# --- Test 9: Binary is not dynamically linked to glibc ---
info "Checking for glibc dependencies"
if command -v readelf >/dev/null 2>&1; then
NEEDED=$(readelf -d "$BINARY" 2>/dev/null | grep NEEDED || true)
if echo "$NEEDED" | grep -qi "libc\.so\.\|libpthread\|libdl"; then
# Check if it's glibc or bionic
if echo "$NEEDED" | grep -qi "libc\.so\.6"; then
fail "Binary links against glibc (libc.so.6) — will not work on Termux"
else
pass "Binary links against libc (likely Bionic)"
fi
else
pass "No glibc dependencies detected"
fi
else
warn "readelf not available — skipping dynamic library check"
fi
# --- Test 10: SHA256 checksum verification ---
info "Verifying SHA256 checksum"
CHECKSUMS_URL="https://github.com/zeroclaw-labs/zeroclaw/releases/download/${TAG}/SHA256SUMS"
if curl -fsSL "$CHECKSUMS_URL" -o "$TEMP_DIR/SHA256SUMS" 2>/dev/null; then
EXPECTED=$(grep "$ASSET_NAME" "$TEMP_DIR/SHA256SUMS" | awk '{print $1}')
if [[ -n "$EXPECTED" ]]; then
if command -v sha256sum >/dev/null 2>&1; then
ACTUAL=$(sha256sum "$TEMP_DIR/$ASSET_NAME" | awk '{print $1}')
elif command -v shasum >/dev/null 2>&1; then
ACTUAL=$(shasum -a 256 "$TEMP_DIR/$ASSET_NAME" | awk '{print $1}')
else
warn "No sha256sum or shasum available"
ACTUAL=""
fi
if [[ -n "$ACTUAL" && "$ACTUAL" == "$EXPECTED" ]]; then
pass "SHA256 checksum matches"
elif [[ -n "$ACTUAL" ]]; then
fail "SHA256 mismatch: expected=$EXPECTED actual=$ACTUAL"
fi
else
warn "No checksum entry for ${ASSET_NAME} in SHA256SUMS"
fi
else
warn "Could not download SHA256SUMS"
fi
# --- Test 11: install.sh Termux detection ---
info "Validating install.sh Termux detection"
INSTALL_SH="install.sh"
if [[ ! -f "$INSTALL_SH" ]]; then
INSTALL_SH="$(dirname "$0")/../install.sh"
fi
if [[ -f "$INSTALL_SH" ]]; then
if grep -q 'TERMUX_VERSION' "$INSTALL_SH"; then
pass "install.sh checks TERMUX_VERSION"
else
fail "install.sh does not check TERMUX_VERSION"
fi
if grep -q 'aarch64-linux-android' "$INSTALL_SH"; then
pass "install.sh maps to aarch64-linux-android target"
else
fail "install.sh does not map to aarch64-linux-android"
fi
# Simulate Termux detection (mock uname as Linux since we may run on macOS)
detect_result=$(
bash -c '
TERMUX_VERSION="0.118"
os="Linux"
arch="aarch64"
case "$os:$arch" in
Linux:aarch64|Linux:arm64)
if [[ -n "${TERMUX_VERSION:-}" || -d "/data/data/com.termux" ]]; then
echo "aarch64-linux-android"
else
echo "aarch64-unknown-linux-gnu"
fi
;;
esac
'
)
if [[ "$detect_result" == "aarch64-linux-android" ]]; then
pass "Termux detection returns correct target (simulated)"
else
fail "Termux detection returned: $detect_result (expected aarch64-linux-android)"
fi
else
warn "install.sh not found — skipping detection tests"
fi
# --- Summary ---
echo
if [[ "$FAILURES" -eq 0 ]]; then
echo -e "${GREEN}${BOLD}All tests passed!${RESET}"
echo -e "${DIM}The Termux release artifact for ${TAG} is valid.${RESET}"
else
echo -e "${RED}${BOLD}${FAILURES} test(s) failed.${RESET}"
exit 1
fi
+16
View File
@@ -0,0 +1,16 @@
pkgbase = zeroclaw
pkgdesc = Zero overhead. Zero compromise. 100% Rust. The fastest, smallest AI assistant.
pkgver = 0.4.3
pkgrel = 1
url = https://github.com/zeroclaw-labs/zeroclaw
arch = x86_64
license = MIT
license = Apache-2.0
makedepends = cargo
makedepends = git
depends = gcc-libs
depends = openssl
source = zeroclaw-0.4.3.tar.gz::https://github.com/zeroclaw-labs/zeroclaw/archive/refs/tags/v0.4.3.tar.gz
sha256sums = SKIP
pkgname = zeroclaw
+32
View File
@@ -0,0 +1,32 @@
# Maintainer: zeroclaw-labs <bot@zeroclaw.dev>
pkgname=zeroclaw
pkgver=0.4.3
pkgrel=1
pkgdesc="Zero overhead. Zero compromise. 100% Rust. The fastest, smallest AI assistant."
arch=('x86_64')
url="https://github.com/zeroclaw-labs/zeroclaw"
license=('MIT' 'Apache-2.0')
depends=('gcc-libs' 'openssl')
makedepends=('cargo' 'git')
source=("${pkgname}-${pkgver}.tar.gz::https://github.com/zeroclaw-labs/zeroclaw/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('SKIP')
prepare() {
cd "${pkgname}-${pkgver}"
export RUSTUP_TOOLCHAIN=stable
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
}
build() {
cd "${pkgname}-${pkgver}"
export RUSTUP_TOOLCHAIN=stable
export CARGO_TARGET_DIR=target
cargo build --frozen --release --profile dist
}
package() {
cd "${pkgname}-${pkgver}"
install -Dm0755 -t "${pkgdir}/usr/bin/" "target/dist/zeroclaw"
install -Dm0644 LICENSE-MIT "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-MIT"
install -Dm0644 LICENSE-APACHE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-APACHE"
}
+27
View File
@@ -0,0 +1,27 @@
{
"version": "0.4.3",
"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": "https://github.com/zeroclaw-labs/zeroclaw/releases/download/v0.4.3/zeroclaw-x86_64-pc-windows-msvc.zip",
"hash": "",
"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"
}
}
}
+11 -4
View File
@@ -10,8 +10,15 @@
services:
zeroclaw:
image: ghcr.io/zeroclaw-labs/zeroclaw:latest
# Or build locally:
# For ARM64 environments where the distroless image exits immediately,
# switch to the Debian compatibility image instead:
# image: ghcr.io/zeroclaw-labs/zeroclaw:debian
# Or build locally (distroless, no shell):
# build: .
# Or build the Debian variant (includes bash, git, curl):
# build:
# context: .
# dockerfile: Dockerfile.debian
container_name: zeroclaw
restart: unless-stopped
@@ -46,15 +53,15 @@ services:
resources:
limits:
cpus: '2'
memory: 2G
memory: 512M
reservations:
cpus: '0.5'
memory: 512M
memory: 32M
# Health check — uses lightweight status instead of full diagnostics.
# For images with curl, prefer: curl -f http://localhost:42617/health
healthcheck:
test: ["CMD", "zeroclaw", "status"]
test: ["CMD", "zeroclaw", "status", "--format=exit-code"]
interval: 60s
timeout: 10s
retries: 3
+96
View File
@@ -0,0 +1,96 @@
# مركز توثيق ZeroClaw
هذه الصفحة هي نقطة الدخول الرئيسية لنظام التوثيق.
آخر تحديث: **20 فبراير 2026**.
المراكز المترجمة: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## ابدأ من هنا
| أريد أن… | اقرأ هذا |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| تثبيت وتشغيل ZeroClaw بسرعة | [README.md (البدء السريع)](../README.md#quick-start) |
| إعداد بأمر واحد | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| البحث عن أوامر حسب المهمة | [commands-reference.md](reference/cli/commands-reference.md) |
| التحقق السريع من مفاتيح وقيم الإعدادات الافتراضية | [config-reference.md](reference/api/config-reference.md) |
| إعداد مزودين/نقاط وصول مخصصة | [custom-providers.md](contributing/custom-providers.md) |
| إعداد مزود Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| استخدام أنماط تكامل LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| تشغيل بيئة التنفيذ (دليل العمليات اليومية) | [operations-runbook.md](ops/operations-runbook.md) |
| استكشاف مشاكل التثبيت/التشغيل/القنوات وإصلاحها | [troubleshooting.md](ops/troubleshooting.md) |
| تشغيل إعداد وتشخيص غرف Matrix المشفرة | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| تصفح التوثيق حسب الفئة | [SUMMARY.md](SUMMARY.md) |
| عرض لقطة توثيق طلبات السحب/المشاكل | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## شجرة القرار السريعة (10 ثوانٍ)
- تحتاج إلى الإعداد أو التثبيت الأولي؟ ← [setup-guides/README.md](setup-guides/README.md)
- تحتاج مفاتيح CLI/الإعدادات بالتحديد؟ ← [reference/README.md](reference/README.md)
- تحتاج عمليات الإنتاج/الخدمة؟ ← [ops/README.md](ops/README.md)
- ترى أعطالاً أو تراجعات؟ ← [troubleshooting.md](ops/troubleshooting.md)
- تعمل على تقوية الأمان أو خارطة الطريق؟ ← [security/README.md](security/README.md)
- تعمل مع لوحات/أجهزة طرفية؟ ← [hardware/README.md](hardware/README.md)
- المساهمة/المراجعة/سير عمل CI؟ ← [contributing/README.md](contributing/README.md)
- تريد الخريطة الكاملة؟ ← [SUMMARY.md](SUMMARY.md)
## المجموعات (موصى بها)
- البدء: [setup-guides/README.md](setup-guides/README.md)
- كتالوجات المراجع: [reference/README.md](reference/README.md)
- العمليات والنشر: [ops/README.md](ops/README.md)
- توثيق الأمان: [security/README.md](security/README.md)
- العتاد/الأجهزة الطرفية: [hardware/README.md](hardware/README.md)
- المساهمة/CI: [contributing/README.md](contributing/README.md)
- لقطات المشروع: [maintainers/README.md](maintainers/README.md)
## حسب الجمهور
### المستخدمون / المشغّلون
- [commands-reference.md](reference/cli/commands-reference.md) — البحث عن أوامر حسب سير العمل
- [providers-reference.md](reference/api/providers-reference.md) — معرّفات المزودين، الأسماء المستعارة، متغيرات بيئة بيانات الاعتماد
- [channels-reference.md](reference/api/channels-reference.md) — قدرات القنوات ومسارات الإعداد
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — إعداد غرف Matrix المشفرة (E2EE) وتشخيص عدم الاستجابة
- [config-reference.md](reference/api/config-reference.md) — مفاتيح الإعدادات عالية الأهمية والقيم الافتراضية الآمنة
- [custom-providers.md](contributing/custom-providers.md) — أنماط تكامل المزود المخصص/عنوان URL الأساسي
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — إعداد Z.AI/GLM ومصفوفة نقاط الوصول
- [langgraph-integration.md](contributing/langgraph-integration.md) — تكامل احتياطي لحالات حدود النموذج/استدعاء الأدوات
- [operations-runbook.md](ops/operations-runbook.md) — عمليات التشغيل اليومية وتدفقات التراجع
- [troubleshooting.md](ops/troubleshooting.md) — بصمات الأعطال الشائعة وخطوات الاسترداد
### المساهمون / المشرفون
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### الأمان / الموثوقية
> ملاحظة: يتضمن هذا القسم مستندات مقترحات/خارطة طريق. للسلوك الحالي، ابدأ بـ [config-reference.md](reference/api/config-reference.md) و[operations-runbook.md](ops/operations-runbook.md) و[troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## التنقل في النظام والحوكمة
- جدول المحتويات الموحد: [SUMMARY.md](SUMMARY.md)
- خريطة هيكل التوثيق (اللغة/القسم/الوظيفة): [structure/README.md](maintainers/structure-README.md)
- جرد/تصنيف التوثيق: [docs-inventory.md](maintainers/docs-inventory.md)
- لقطة فرز المشروع: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## لغات أخرى
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw ডকুমেন্টেশন হাব
এই পৃষ্ঠাটি ডকুমেন্টেশন সিস্টেমের প্রধান প্রবেশ বিন্দু।
সর্বশেষ আপডেট: **২০ ফেব্রুয়ারি ২০২৬**
স্থানীয়কৃত হাব: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## এখান থেকে শুরু করুন
| আমি চাই… | এটি পড়ুন |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| দ্রুত ZeroClaw ইনস্টল ও চালু করতে | [README.md (দ্রুত শুরু)](../README.md#quick-start) |
| এক-ক্লিকে বুটস্ট্র্যাপ করতে | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| কাজ অনুযায়ী কমান্ড খুঁজতে | [commands-reference.md](reference/cli/commands-reference.md) |
| দ্রুত কনফিগ কী ও ডিফল্ট মান যাচাই করতে | [config-reference.md](reference/api/config-reference.md) |
| কাস্টম প্রোভাইডার/এন্ডপয়েন্ট সেটআপ করতে | [custom-providers.md](contributing/custom-providers.md) |
| Z.AI / GLM প্রোভাইডার সেটআপ করতে | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| LangGraph ইন্টিগ্রেশন প্যাটার্ন ব্যবহার করতে | [langgraph-integration.md](contributing/langgraph-integration.md) |
| রানটাইম পরিচালনা করতে (দৈনন্দিন অপারেশন গাইড) | [operations-runbook.md](ops/operations-runbook.md) |
| ইনস্টলেশন/রানটাইম/চ্যানেল সমস্যা সমাধান করতে | [troubleshooting.md](ops/troubleshooting.md) |
| Matrix এনক্রিপ্টেড রুম সেটআপ ও ডায়াগনস্টিক চালাতে | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| বিভাগ অনুযায়ী ডকুমেন্টেশন ব্রাউজ করতে | [SUMMARY.md](SUMMARY.md) |
| প্রকল্পের PR/ইস্যু ডক স্ন্যাপশট দেখতে | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## দ্রুত সিদ্ধান্ত গাছ (১০ সেকেন্ড)
- সেটআপ বা প্রাথমিক ইনস্টলেশন দরকার? → [setup-guides/README.md](setup-guides/README.md)
- সুনির্দিষ্ট CLI/কনফিগ কী দরকার? → [reference/README.md](reference/README.md)
- প্রোডাকশন/সার্ভিস অপারেশন দরকার? → [ops/README.md](ops/README.md)
- ব্যর্থতা বা রিগ্রেশন দেখছেন? → [troubleshooting.md](ops/troubleshooting.md)
- নিরাপত্তা শক্তিশালীকরণ বা রোডম্যাপে কাজ করছেন? → [security/README.md](security/README.md)
- বোর্ড/পেরিফেরাল নিয়ে কাজ করছেন? → [hardware/README.md](hardware/README.md)
- অবদান/রিভিউ/CI ওয়ার্কফ্লো? → [contributing/README.md](contributing/README.md)
- সম্পূর্ণ মানচিত্র চান? → [SUMMARY.md](SUMMARY.md)
## সংগ্রহ (প্রস্তাবিত)
- শুরু করুন: [setup-guides/README.md](setup-guides/README.md)
- রেফারেন্স ক্যাটালগ: [reference/README.md](reference/README.md)
- অপারেশন ও ডিপ্লয়মেন্ট: [ops/README.md](ops/README.md)
- নিরাপত্তা ডকুমেন্টেশন: [security/README.md](security/README.md)
- হার্ডওয়্যার/পেরিফেরাল: [hardware/README.md](hardware/README.md)
- অবদান/CI: [contributing/README.md](contributing/README.md)
- প্রকল্প স্ন্যাপশট: [maintainers/README.md](maintainers/README.md)
## দর্শক অনুযায়ী
### ব্যবহারকারী / অপারেটর
- [commands-reference.md](reference/cli/commands-reference.md) — ওয়ার্কফ্লো অনুযায়ী কমান্ড খোঁজা
- [providers-reference.md](reference/api/providers-reference.md) — প্রোভাইডার আইডি, উপনাম, ক্রেডেনশিয়াল এনভায়রনমেন্ট ভেরিয়েবল
- [channels-reference.md](reference/api/channels-reference.md) — চ্যানেল সক্ষমতা ও কনফিগারেশন পাথ
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix এনক্রিপ্টেড রুম (E2EE) সেটআপ ও সাড়া না দেওয়ার ডায়াগনস্টিক
- [config-reference.md](reference/api/config-reference.md) — উচ্চ-গুরুত্বপূর্ণ কনফিগ কী ও নিরাপদ ডিফল্ট
- [custom-providers.md](contributing/custom-providers.md) — কাস্টম প্রোভাইডার/বেস URL ইন্টিগ্রেশন প্যাটার্ন
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM সেটআপ ও এন্ডপয়েন্ট ম্যাট্রিক্স
- [langgraph-integration.md](contributing/langgraph-integration.md) — মডেল/টুল-কল এজ কেসের জন্য ফলব্যাক ইন্টিগ্রেশন
- [operations-runbook.md](ops/operations-runbook.md) — দৈনন্দিন রানটাইম অপারেশন ও রোলব্যাক ফ্লো
- [troubleshooting.md](ops/troubleshooting.md) — সাধারণ ব্যর্থতার স্বাক্ষর ও পুনরুদ্ধার পদক্ষেপ
### অবদানকারী / রক্ষণাবেক্ষণকারী
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### নিরাপত্তা / নির্ভরযোগ্যতা
> দ্রষ্টব্য: এই বিভাগে প্রস্তাবনা/রোডম্যাপ ডকুমেন্ট রয়েছে। বর্তমান আচরণের জন্য [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), এবং [troubleshooting.md](ops/troubleshooting.md) দিয়ে শুরু করুন।
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## সিস্টেম নেভিগেশন ও গভর্ন্যান্স
- একীভূত সূচিপত্র: [SUMMARY.md](SUMMARY.md)
- ডক কাঠামো মানচিত্র (ভাষা/অংশ/ফাংশন): [structure/README.md](maintainers/structure-README.md)
- ডকুমেন্টেশন তালিকা/শ্রেণীবিভাগ: [docs-inventory.md](maintainers/docs-inventory.md)
- প্রকল্প ট্রায়াজ স্ন্যাপশট: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## অন্যান্য ভাষা
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Dokumentační hub ZeroClaw
Tato stránka je hlavním vstupním bodem do dokumentačního systému.
Poslední aktualizace: **20. února 2026**.
Lokalizované huby: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Začněte zde
| Chci… | Přečtěte si toto |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Rychle nainstalovat a spustit ZeroClaw | [README.md (Rychlý start)](../README.md#quick-start) |
| Bootstrap jedním příkazem | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Najít příkazy podle úkolu | [commands-reference.md](reference/cli/commands-reference.md) |
| Rychle ověřit konfigurační klíče a výchozí hodnoty | [config-reference.md](reference/api/config-reference.md) |
| Nastavit vlastní poskytovatele/endpointy | [custom-providers.md](contributing/custom-providers.md) |
| Nastavit poskytovatele Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Použít integrační vzory LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Provozovat runtime (provozní příručka) | [operations-runbook.md](ops/operations-runbook.md) |
| Řešit problémy s instalací/runtime/kanály | [troubleshooting.md](ops/troubleshooting.md) |
| Spustit nastavení a diagnostiku šifrovaných místností Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Procházet dokumentaci podle kategorie | [SUMMARY.md](SUMMARY.md) |
| Zobrazit snapshot dokumentace PR/issues projektu | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Rychlý rozhodovací strom (10 sekund)
- Potřebujete nastavení nebo počáteční instalaci? → [setup-guides/README.md](setup-guides/README.md)
- Potřebujete přesné CLI/konfigurační klíče? → [reference/README.md](reference/README.md)
- Potřebujete produkční/servisní operace? → [ops/README.md](ops/README.md)
- Vidíte selhání nebo regrese? → [troubleshooting.md](ops/troubleshooting.md)
- Pracujete na posílení zabezpečení nebo roadmapě? → [security/README.md](security/README.md)
- Pracujete s deskami/periferiemi? → [hardware/README.md](hardware/README.md)
- Přispívání/revize/CI workflow? → [contributing/README.md](contributing/README.md)
- Chcete kompletní mapu? → [SUMMARY.md](SUMMARY.md)
## Kolekce (doporučené)
- Začínáme: [setup-guides/README.md](setup-guides/README.md)
- Referenční katalogy: [reference/README.md](reference/README.md)
- Provoz a nasazení: [ops/README.md](ops/README.md)
- Dokumentace zabezpečení: [security/README.md](security/README.md)
- Hardware/periferie: [hardware/README.md](hardware/README.md)
- Přispívání/CI: [contributing/README.md](contributing/README.md)
- Snapshoty projektu: [maintainers/README.md](maintainers/README.md)
## Podle publika
### Uživatelé / Operátoři
- [commands-reference.md](reference/cli/commands-reference.md) — vyhledávání příkazů podle workflow
- [providers-reference.md](reference/api/providers-reference.md) — ID poskytovatelů, aliasy, proměnné prostředí pro přihlašovací údaje
- [channels-reference.md](reference/api/channels-reference.md) — schopnosti kanálů a konfigurační cesty
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — nastavení šifrovaných místností Matrix (E2EE) a diagnostika nereagování
- [config-reference.md](reference/api/config-reference.md) — klíčové konfigurační hodnoty a bezpečné výchozí nastavení
- [custom-providers.md](contributing/custom-providers.md) — vzory integrace vlastního poskytovatele/base URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — nastavení Z.AI/GLM a matice endpointů
- [langgraph-integration.md](contributing/langgraph-integration.md) — záložní integrace pro okrajové případy modelu/volání nástrojů
- [operations-runbook.md](ops/operations-runbook.md) — každodenní runtime operace a postupy rollbacku
- [troubleshooting.md](ops/troubleshooting.md) — běžné signatury selhání a kroky obnovy
### Přispěvatelé / Správci
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Zabezpečení / Spolehlivost
> Poznámka: tato sekce zahrnuje dokumenty návrhů/roadmapy. Pro aktuální chování začněte s [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) a [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Systémová navigace a správa
- Jednotný obsah: [SUMMARY.md](SUMMARY.md)
- Mapa struktury dokumentace (jazyk/část/funkce): [structure/README.md](maintainers/structure-README.md)
- Inventář/klasifikace dokumentace: [docs-inventory.md](maintainers/docs-inventory.md)
- Snapshot třídění projektu: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Další jazyky
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw Dokumentationshub
Denne side er det primære indgangspunkt til dokumentationssystemet.
Sidst opdateret: **20. februar 2026**.
Lokaliserede hubs: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Start her
| Jeg vil… | Læs dette |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Hurtigt installere og køre ZeroClaw | [README.md (Hurtig start)](../README.md#quick-start) |
| Bootstrap med én kommando | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Finde kommandoer efter opgave | [commands-reference.md](reference/cli/commands-reference.md) |
| Hurtigt tjekke konfigurationsnøgler og standardværdier | [config-reference.md](reference/api/config-reference.md) |
| Opsætte brugerdefinerede udbydere/endpoints | [custom-providers.md](contributing/custom-providers.md) |
| Opsætte Z.AI / GLM-udbyderen | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Bruge LangGraph-integrationsmønstre | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Drifte runtime (driftshåndbog) | [operations-runbook.md](ops/operations-runbook.md) |
| Fejlfinde installations-/runtime-/kanalproblemer | [troubleshooting.md](ops/troubleshooting.md) |
| Køre opsætning og diagnostik for krypterede Matrix-rum | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Gennemse dokumentation efter kategori | [SUMMARY.md](SUMMARY.md) |
| Se projektets PR/issue-dokumentationssnapshot | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Hurtigt beslutningstræ (10 sekunder)
- Har du brug for opsætning eller førstegangsinstallation? → [setup-guides/README.md](setup-guides/README.md)
- Har du brug for præcise CLI/konfigurationsnøgler? → [reference/README.md](reference/README.md)
- Har du brug for produktions-/servicedrift? → [ops/README.md](ops/README.md)
- Ser du fejl eller regressioner? → [troubleshooting.md](ops/troubleshooting.md)
- Arbejder du på sikkerhedshærdning eller roadmap? → [security/README.md](security/README.md)
- Arbejder du med boards/periferienheder? → [hardware/README.md](hardware/README.md)
- Bidrag/review/CI-workflow? → [contributing/README.md](contributing/README.md)
- Vil du se det fulde kort? → [SUMMARY.md](SUMMARY.md)
## Samlinger (anbefalet)
- Kom i gang: [setup-guides/README.md](setup-guides/README.md)
- Referencekataloger: [reference/README.md](reference/README.md)
- Drift og udrulning: [ops/README.md](ops/README.md)
- Sikkerhedsdokumentation: [security/README.md](security/README.md)
- Hardware/periferienheder: [hardware/README.md](hardware/README.md)
- Bidrag/CI: [contributing/README.md](contributing/README.md)
- Projektsnapshots: [maintainers/README.md](maintainers/README.md)
## Efter målgruppe
### Brugere / Operatører
- [commands-reference.md](reference/cli/commands-reference.md) — kommandoopslag efter workflow
- [providers-reference.md](reference/api/providers-reference.md) — udbyder-ID'er, aliaser, legitimationsoplysningers miljøvariabler
- [channels-reference.md](reference/api/channels-reference.md) — kanalegenskaber og konfigurationsstier
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — opsætning af krypterede Matrix-rum (E2EE) og diagnostik ved manglende svar
- [config-reference.md](reference/api/config-reference.md) — vigtige konfigurationsnøgler og sikre standardværdier
- [custom-providers.md](contributing/custom-providers.md) — integrationsmønstre for brugerdefineret udbyder/base-URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM-opsætning og endpoint-matrix
- [langgraph-integration.md](contributing/langgraph-integration.md) — fallback-integration for model/tool-call-edgecases
- [operations-runbook.md](ops/operations-runbook.md) — daglig runtime-drift og rollback-flows
- [troubleshooting.md](ops/troubleshooting.md) — almindelige fejlsignaturer og genoprettelsestrin
### Bidragydere / Vedligeholdere
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Sikkerhed / Pålidelighed
> Bemærk: dette afsnit inkluderer forslags-/roadmap-dokumenter. For aktuel adfærd, start med [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) og [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Systemnavigation og governance
- Samlet indholdsfortegnelse: [SUMMARY.md](SUMMARY.md)
- Dokumentationsstrukturkort (sprog/del/funktion): [structure/README.md](maintainers/structure-README.md)
- Dokumentationsinventar/-klassificering: [docs-inventory.md](maintainers/docs-inventory.md)
- Projekt-triage-snapshot: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Andre sprog
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw Dokumentations-Hub
Diese Seite ist der zentrale Einstiegspunkt in das Dokumentationssystem.
Zuletzt aktualisiert: **20. Februar 2026**.
Lokalisierte Hubs: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Hier starten
| Ich möchte… | Dies lesen |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| ZeroClaw schnell installieren und starten | [README.md (Schnellstart)](../README.md#quick-start) |
| Bootstrap mit einem Befehl | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Befehle nach Aufgabe finden | [commands-reference.md](reference/cli/commands-reference.md) |
| Schnell Konfigurationsschlüssel und Standardwerte prüfen | [config-reference.md](reference/api/config-reference.md) |
| Benutzerdefinierte Anbieter/Endpunkte einrichten | [custom-providers.md](contributing/custom-providers.md) |
| Den Z.AI / GLM-Anbieter einrichten | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| LangGraph-Integrationsmuster verwenden | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Die Laufzeitumgebung betreiben (Betriebshandbuch) | [operations-runbook.md](ops/operations-runbook.md) |
| Installations-/Laufzeit-/Kanalprobleme beheben | [troubleshooting.md](ops/troubleshooting.md) |
| Matrix-verschlüsselte-Raum-Einrichtung und Diagnose ausführen | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Dokumentation nach Kategorie durchsuchen | [SUMMARY.md](SUMMARY.md) |
| Projekt-PR/Issue-Dokumentations-Snapshot ansehen | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Schneller Entscheidungsbaum (10 Sekunden)
- Einrichtung oder Erstinstallation nötig? → [setup-guides/README.md](setup-guides/README.md)
- Genaue CLI-/Konfigurationsschlüssel benötigt? → [reference/README.md](reference/README.md)
- Produktions-/Servicebetrieb benötigt? → [ops/README.md](ops/README.md)
- Fehler oder Regressionen sichtbar? → [troubleshooting.md](ops/troubleshooting.md)
- Arbeiten an Sicherheitshärtung oder Roadmap? → [security/README.md](security/README.md)
- Arbeiten mit Boards/Peripheriegeräten? → [hardware/README.md](hardware/README.md)
- Beitragen/Review/CI-Workflow? → [contributing/README.md](contributing/README.md)
- Vollständige Karte gewünscht? → [SUMMARY.md](SUMMARY.md)
## Sammlungen (empfohlen)
- Einstieg: [setup-guides/README.md](setup-guides/README.md)
- Referenzkataloge: [reference/README.md](reference/README.md)
- Betrieb und Bereitstellung: [ops/README.md](ops/README.md)
- Sicherheitsdokumentation: [security/README.md](security/README.md)
- Hardware/Peripheriegeräte: [hardware/README.md](hardware/README.md)
- Beitragen/CI: [contributing/README.md](contributing/README.md)
- Projekt-Snapshots: [maintainers/README.md](maintainers/README.md)
## Nach Zielgruppe
### Benutzer / Betreiber
- [commands-reference.md](reference/cli/commands-reference.md) — Befehlssuche nach Workflow
- [providers-reference.md](reference/api/providers-reference.md) — Anbieter-IDs, Aliase, Umgebungsvariablen für Anmeldedaten
- [channels-reference.md](reference/api/channels-reference.md) — Kanalfähigkeiten und Konfigurationspfade
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix-verschlüsselter-Raum-Einrichtung (E2EE) und Diagnose bei ausbleibender Antwort
- [config-reference.md](reference/api/config-reference.md) — wichtige Konfigurationsschlüssel und sichere Standardwerte
- [custom-providers.md](contributing/custom-providers.md) — Integrationsmuster für benutzerdefinierte Anbieter/Basis-URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM-Einrichtung und Endpunkt-Matrix
- [langgraph-integration.md](contributing/langgraph-integration.md) — Fallback-Integration für Modell-/Tool-Call-Grenzfälle
- [operations-runbook.md](ops/operations-runbook.md) — täglicher Laufzeitbetrieb und Rollback-Abläufe
- [troubleshooting.md](ops/troubleshooting.md) — häufige Fehlersignaturen und Wiederherstellungsschritte
### Mitwirkende / Betreuer
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Sicherheit / Zuverlässigkeit
> Hinweis: Dieser Bereich enthält Vorschlags-/Roadmap-Dokumente. Für das aktuelle Verhalten beginnen Sie mit [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) und [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Systemnavigation und Governance
- Einheitliches Inhaltsverzeichnis: [SUMMARY.md](SUMMARY.md)
- Dokumentationsstrukturkarte (Sprache/Teil/Funktion): [structure/README.md](maintainers/structure-README.md)
- Dokumentationsinventar/-klassifizierung: [docs-inventory.md](maintainers/docs-inventory.md)
- Projekt-Triage-Snapshot: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Andere Sprachen
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Κέντρο Τεκμηρίωσης ZeroClaw
Αυτή η σελίδα είναι το κύριο σημείο εισόδου για το σύστημα τεκμηρίωσης.
Τελευταία ενημέρωση: **20 Φεβρουαρίου 2026**.
Τοπικοποιημένα κέντρα: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Ξεκινήστε Εδώ
| Θέλω να… | Διαβάστε αυτό |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Εγκαταστήσω και εκτελέσω το ZeroClaw γρήγορα | [README.md (Γρήγορη Εκκίνηση)](../README.md#quick-start) |
| Εκκίνηση με μία εντολή | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Βρω εντολές ανά εργασία | [commands-reference.md](reference/cli/commands-reference.md) |
| Ελέγξω γρήγορα κλειδιά και προεπιλογές ρυθμίσεων | [config-reference.md](reference/api/config-reference.md) |
| Ρυθμίσω προσαρμοσμένους παρόχους/endpoints | [custom-providers.md](contributing/custom-providers.md) |
| Ρυθμίσω τον πάροχο Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Χρησιμοποιήσω τα πρότυπα ενσωμάτωσης LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Λειτουργήσω το runtime (runbook ημέρας-2) | [operations-runbook.md](ops/operations-runbook.md) |
| Αντιμετωπίσω προβλήματα εγκατάστασης/runtime/καναλιού | [troubleshooting.md](ops/troubleshooting.md) |
| Εκτελέσω ρύθμιση και διαγνωστικά κρυπτογραφημένων δωματίων Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Περιηγηθώ στα έγγραφα ανά κατηγορία | [SUMMARY.md](SUMMARY.md) |
| Δω το στιγμιότυπο εγγράφων PR/issues του έργου | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Δέντρο Γρήγορης Απόφασης (10 δευτερόλεπτα)
- Χρειάζεστε αρχική ρύθμιση ή εγκατάσταση; → [setup-guides/README.md](setup-guides/README.md)
- Χρειάζεστε ακριβή κλειδιά CLI/ρυθμίσεων; → [reference/README.md](reference/README.md)
- Χρειάζεστε λειτουργίες παραγωγής/υπηρεσίας; → [ops/README.md](ops/README.md)
- Βλέπετε αποτυχίες ή παλινδρομήσεις; → [troubleshooting.md](ops/troubleshooting.md)
- Εργάζεστε στη σκλήρυνση ασφαλείας ή τον οδικό χάρτη; → [security/README.md](security/README.md)
- Εργάζεστε με πλακέτες/περιφερειακά; → [hardware/README.md](hardware/README.md)
- Συνεισφορά/αξιολόγηση/ροή εργασίας CI; → [contributing/README.md](contributing/README.md)
- Θέλετε τον πλήρη χάρτη; → [SUMMARY.md](SUMMARY.md)
## Συλλογές (Συνιστώνται)
- Εκκίνηση: [setup-guides/README.md](setup-guides/README.md)
- Κατάλογοι αναφοράς: [reference/README.md](reference/README.md)
- Λειτουργίες & ανάπτυξη: [ops/README.md](ops/README.md)
- Έγγραφα ασφαλείας: [security/README.md](security/README.md)
- Υλικό/περιφερειακά: [hardware/README.md](hardware/README.md)
- Συνεισφορά/CI: [contributing/README.md](contributing/README.md)
- Στιγμιότυπα έργου: [maintainers/README.md](maintainers/README.md)
## Ανά Κοινό
### Χρήστες / Χειριστές
- [commands-reference.md](reference/cli/commands-reference.md) — αναζήτηση εντολών ανά ροή εργασίας
- [providers-reference.md](reference/api/providers-reference.md) — αναγνωριστικά παρόχων, ψευδώνυμα, μεταβλητές περιβάλλοντος διαπιστευτηρίων
- [channels-reference.md](reference/api/channels-reference.md) — δυνατότητες καναλιών και διαδρομές ρύθμισης
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — ρύθμιση κρυπτογραφημένων δωματίων Matrix (E2EE) και διαγνωστικά μη-απόκρισης
- [config-reference.md](reference/api/config-reference.md) — κλειδιά ρυθμίσεων υψηλής σήμανσης και ασφαλείς προεπιλογές
- [custom-providers.md](contributing/custom-providers.md) — πρότυπα ενσωμάτωσης προσαρμοσμένου παρόχου/βασικού URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — ρύθμιση Z.AI/GLM και πίνακας endpoints
- [langgraph-integration.md](contributing/langgraph-integration.md) — εφεδρική ενσωμάτωση για ακραίες περιπτώσεις μοντέλου/κλήσης εργαλείου
- [operations-runbook.md](ops/operations-runbook.md) — λειτουργίες runtime ημέρας-2 και ροές επαναφοράς
- [troubleshooting.md](ops/troubleshooting.md) — συνήθεις υπογραφές αποτυχίας και βήματα αποκατάστασης
### Συνεισφέροντες / Συντηρητές
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Ασφάλεια / Αξιοπιστία
> Σημείωση: αυτή η περιοχή περιλαμβάνει έγγραφα πρότασης/οδικού χάρτη. Για την τρέχουσα συμπεριφορά, ξεκινήστε από [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), και [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Πλοήγηση Συστήματος & Διακυβέρνηση
- Ενοποιημένος πίνακας περιεχομένων: [SUMMARY.md](SUMMARY.md)
- Χάρτης δομής εγγράφων (γλώσσα/τμήμα/λειτουργία): [structure/README.md](maintainers/structure-README.md)
- Απογραφή/ταξινόμηση τεκμηρίωσης: [docs-inventory.md](maintainers/docs-inventory.md)
- Στιγμιότυπο διαλογής έργου: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Άλλες γλώσσες
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Centro de Documentación ZeroClaw
Esta página es el punto de entrada principal del sistema de documentación.
Última actualización: **20 de febrero de 2026**.
Centros localizados: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Comience Aquí
| Quiero… | Leer esto |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Instalar y ejecutar ZeroClaw rápidamente | [README.md (Inicio Rápido)](../README.md#quick-start) |
| Arranque con un solo comando | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Encontrar comandos por tarea | [commands-reference.md](reference/cli/commands-reference.md) |
| Verificar rápidamente claves y valores predeterminados de config | [config-reference.md](reference/api/config-reference.md) |
| Configurar proveedores/endpoints personalizados | [custom-providers.md](contributing/custom-providers.md) |
| Configurar el proveedor Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Usar los patrones de integración LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Operar el runtime (runbook día-2) | [operations-runbook.md](ops/operations-runbook.md) |
| Solucionar problemas de instalación/runtime/canal | [troubleshooting.md](ops/troubleshooting.md) |
| Ejecutar configuración y diagnósticos de salas cifradas Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Navegar la documentación por categoría | [SUMMARY.md](SUMMARY.md) |
| Ver la instantánea de docs de PR/issues del proyecto | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Árbol de Decisión Rápida (10 segundos)
- ¿Necesita configuración o instalación inicial? → [setup-guides/README.md](setup-guides/README.md)
- ¿Necesita claves exactas de CLI/configuración? → [reference/README.md](reference/README.md)
- ¿Necesita operaciones de producción/servicio? → [ops/README.md](ops/README.md)
- ¿Ve fallos o regresiones? → [troubleshooting.md](ops/troubleshooting.md)
- ¿Trabaja en endurecimiento de seguridad o hoja de ruta? → [security/README.md](security/README.md)
- ¿Trabaja con placas/periféricos? → [hardware/README.md](hardware/README.md)
- ¿Contribución/revisión/flujo de trabajo CI? → [contributing/README.md](contributing/README.md)
- ¿Quiere el mapa completo? → [SUMMARY.md](SUMMARY.md)
## Colecciones (Recomendadas)
- Inicio: [setup-guides/README.md](setup-guides/README.md)
- Catálogos de referencia: [reference/README.md](reference/README.md)
- Operaciones y despliegue: [ops/README.md](ops/README.md)
- Documentación de seguridad: [security/README.md](security/README.md)
- Hardware/periféricos: [hardware/README.md](hardware/README.md)
- Contribución/CI: [contributing/README.md](contributing/README.md)
- Instantáneas del proyecto: [maintainers/README.md](maintainers/README.md)
## Por Audiencia
### Usuarios / Operadores
- [commands-reference.md](reference/cli/commands-reference.md) — búsqueda de comandos por flujo de trabajo
- [providers-reference.md](reference/api/providers-reference.md) — IDs de proveedores, alias, variables de entorno de credenciales
- [channels-reference.md](reference/api/channels-reference.md) — capacidades de canales y rutas de configuración
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — configuración de salas cifradas Matrix (E2EE) y diagnósticos de no-respuesta
- [config-reference.md](reference/api/config-reference.md) — claves de configuración de alta señalización y valores predeterminados seguros
- [custom-providers.md](contributing/custom-providers.md) — patrones de integración de proveedor personalizado/URL base
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — configuración Z.AI/GLM y matriz de endpoints
- [langgraph-integration.md](contributing/langgraph-integration.md) — integración de respaldo para casos límite de modelo/llamada de herramienta
- [operations-runbook.md](ops/operations-runbook.md) — operaciones runtime día-2 y flujos de rollback
- [troubleshooting.md](ops/troubleshooting.md) — firmas de fallo comunes y pasos de recuperación
### Contribuidores / Mantenedores
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Seguridad / Fiabilidad
> Nota: esta zona incluye documentos de propuesta/hoja de ruta. Para el comportamiento actual, comience por [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), y [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Navegación del Sistema y Gobernanza
- Tabla de contenidos unificada: [SUMMARY.md](SUMMARY.md)
- Mapa de estructura de docs (idioma/sección/función): [structure/README.md](maintainers/structure-README.md)
- Inventario/clasificación de la documentación: [docs-inventory.md](maintainers/docs-inventory.md)
- Instantánea de triaje del proyecto: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Otros idiomas
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw-dokumentaatiokeskus
Tämä sivu on dokumentaatiojärjestelmän ensisijainen aloituspiste.
Viimeksi päivitetty: **20. helmikuuta 2026**.
Lokalisoidut keskukset: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Aloita Tästä
| Haluan… | Lue tämä |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Asentaa ja ajaa ZeroClaw nopeasti | [README.md (Pikaopas)](../README.md#quick-start) |
| Käynnistys yhdellä komennolla | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Löytää komentoja tehtävän mukaan | [commands-reference.md](reference/cli/commands-reference.md) |
| Tarkistaa nopeasti asetusavaimet ja oletusarvot | [config-reference.md](reference/api/config-reference.md) |
| Määrittää mukautettuja tarjoajia/päätepisteitä | [custom-providers.md](contributing/custom-providers.md) |
| Määrittää Z.AI / GLM -tarjoajan | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Käyttää LangGraph-integrointimalleja | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Käyttää ajonaikaa (päivä-2 runbook) | [operations-runbook.md](ops/operations-runbook.md) |
| Ratkaista asennus-/ajonaika-/kanavaongelmia | [troubleshooting.md](ops/troubleshooting.md) |
| Ajaa Matrix-salattujen huoneiden asetukset ja diagnostiikka | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Selata dokumentaatiota kategorioittain | [SUMMARY.md](SUMMARY.md) |
| Nähdä projektin PR/issue-dokumenttien tilannekuva | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Nopea Päätöspuu (10 sekuntia)
- Tarvitsetko alkuasennuksen tai -määrityksen? → [setup-guides/README.md](setup-guides/README.md)
- Tarvitsetko tarkat CLI/asetusavaimet? → [reference/README.md](reference/README.md)
- Tarvitsetko tuotanto-/palvelutoimintoja? → [ops/README.md](ops/README.md)
- Näetkö virheitä tai regressioita? → [troubleshooting.md](ops/troubleshooting.md)
- Työskenteletkö tietoturvan koventamisen tai tiekartan parissa? → [security/README.md](security/README.md)
- Työskenteletkö levyjen/oheislaitteiden kanssa? → [hardware/README.md](hardware/README.md)
- Osallistuminen/katselmointi/CI-työnkulku? → [contributing/README.md](contributing/README.md)
- Haluatko täydellisen kartan? → [SUMMARY.md](SUMMARY.md)
## Kokoelmat (Suositellut)
- Aloitus: [setup-guides/README.md](setup-guides/README.md)
- Viiteluettelot: [reference/README.md](reference/README.md)
- Toiminta ja käyttöönotto: [ops/README.md](ops/README.md)
- Tietoturvadokumentit: [security/README.md](security/README.md)
- Laitteisto/oheislaitteet: [hardware/README.md](hardware/README.md)
- Osallistuminen/CI: [contributing/README.md](contributing/README.md)
- Projektin tilannekuvat: [maintainers/README.md](maintainers/README.md)
## Yleisön Mukaan
### Käyttäjät / Operaattorit
- [commands-reference.md](reference/cli/commands-reference.md) — komentojen haku työnkulun mukaan
- [providers-reference.md](reference/api/providers-reference.md) — tarjoajien tunnisteet, aliakset, tunnistetietojen ympäristömuuttujat
- [channels-reference.md](reference/api/channels-reference.md) — kanavien ominaisuudet ja asetuspolut
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix-salattujen huoneiden (E2EE) asetukset ja vastaamattomuuden diagnostiikka
- [config-reference.md](reference/api/config-reference.md) — korkean signaalin asetusavaimet ja turvalliset oletusarvot
- [custom-providers.md](contributing/custom-providers.md) — mukautetun tarjoajan/perus-URL:n integrointimallit
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM-asetukset ja päätepistematriisi
- [langgraph-integration.md](contributing/langgraph-integration.md) — varaintegrointi mallin/työkalukutsun reunatapauksille
- [operations-runbook.md](ops/operations-runbook.md) — ajonaikan päivä-2 toiminnot ja palautustyönkulut
- [troubleshooting.md](ops/troubleshooting.md) — yleiset virhesignatuurit ja palautusaskeleet
### Osallistujat / Ylläpitäjät
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Tietoturva / Luotettavuus
> Huomautus: tämä alue sisältää ehdotus-/tiekartadokumentteja. Nykyisestä toiminnasta aloita kohdista [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) ja [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Järjestelmänavigaatio & Hallintotapa
- Yhtenäinen sisällysluettelo: [SUMMARY.md](SUMMARY.md)
- Dokumenttien rakennekartta (kieli/osio/toiminto): [structure/README.md](maintainers/structure-README.md)
- Dokumentaation inventaario/luokittelu: [docs-inventory.md](maintainers/docs-inventory.md)
- Projektin lajittelun tilannekuva: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Muut kielet
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# מרכז התיעוד של ZeroClaw
דף זה הוא נקודת הכניסה הראשית למערכת התיעוד.
עדכון אחרון: **20 בפברואר 2026**.
מרכזים מתורגמים: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## התחילו כאן
| אני רוצה… | קראו זאת |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| להתקין ולהריץ את ZeroClaw במהירות | [README.md (התחלה מהירה)](../README.md#quick-start) |
| אתחול בפקודה אחת | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| למצוא פקודות לפי משימה | [commands-reference.md](reference/cli/commands-reference.md) |
| לבדוק במהירות מפתחות ובררות מחדל של הגדרות | [config-reference.md](reference/api/config-reference.md) |
| להגדיר ספקים/נקודות קצה מותאמים אישית | [custom-providers.md](contributing/custom-providers.md) |
| להגדיר את ספק Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| להשתמש בתבניות שילוב LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| להפעיל את סביבת הריצה (runbook יום-2) | [operations-runbook.md](ops/operations-runbook.md) |
| לפתור בעיות התקנה/סביבת ריצה/ערוץ | [troubleshooting.md](ops/troubleshooting.md) |
| להריץ הגדרה ואבחון של חדרים מוצפנים ב-Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| לדפדף בתיעוד לפי קטגוריה | [SUMMARY.md](SUMMARY.md) |
| לראות תמונת מצב של PR/issues של הפרויקט | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## עץ החלטה מהיר (10 שניות)
- צריכים הגדרה או התקנה ראשונית? → [setup-guides/README.md](setup-guides/README.md)
- צריכים מפתחות CLI/הגדרות מדויקים? → [reference/README.md](reference/README.md)
- צריכים פעולות ייצור/שירות? → [ops/README.md](ops/README.md)
- רואים כשלים או רגרסיות? → [troubleshooting.md](ops/troubleshooting.md)
- עובדים על הקשחת אבטחה או מפת דרכים? → [security/README.md](security/README.md)
- עובדים עם לוחות/ציוד היקפי? → [hardware/README.md](hardware/README.md)
- תרומה/סקירה/זרימת עבודה CI? → [contributing/README.md](contributing/README.md)
- רוצים את המפה המלאה? → [SUMMARY.md](SUMMARY.md)
## אוספים (מומלצים)
- התחלה: [setup-guides/README.md](setup-guides/README.md)
- קטלוגי עיון: [reference/README.md](reference/README.md)
- תפעול ופריסה: [ops/README.md](ops/README.md)
- תיעוד אבטחה: [security/README.md](security/README.md)
- חומרה/ציוד היקפי: [hardware/README.md](hardware/README.md)
- תרומה/CI: [contributing/README.md](contributing/README.md)
- תמונות מצב של הפרויקט: [maintainers/README.md](maintainers/README.md)
## לפי קהל יעד
### משתמשים / מפעילים
- [commands-reference.md](reference/cli/commands-reference.md) — חיפוש פקודות לפי זרימת עבודה
- [providers-reference.md](reference/api/providers-reference.md) — מזהי ספקים, כינויים, משתני סביבה של אישורים
- [channels-reference.md](reference/api/channels-reference.md) — יכולות ערוצים ונתיבי הגדרה
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — הגדרת חדרים מוצפנים ב-Matrix (E2EE) ואבחון אי-תגובה
- [config-reference.md](reference/api/config-reference.md) — מפתחות הגדרה בעלי אות חזק ובררות מחדל בטוחות
- [custom-providers.md](contributing/custom-providers.md) — תבניות שילוב ספק מותאם אישית/URL בסיס
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — הגדרת Z.AI/GLM ומטריצת נקודות קצה
- [langgraph-integration.md](contributing/langgraph-integration.md) — שילוב חלופי למקרי קצה של מודל/קריאת כלי
- [operations-runbook.md](ops/operations-runbook.md) — פעולות סביבת ריצה יום-2 וזרימות שחזור
- [troubleshooting.md](ops/troubleshooting.md) — חתימות כשל נפוצות וצעדי שחזור
### תורמים / מתחזקים
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### אבטחה / אמינות
> הערה: אזור זה כולל מסמכי הצעה/מפת דרכים. להתנהגות הנוכחית, התחילו מ-[config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), ו-[troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## ניווט במערכת וממשל
- תוכן עניינים מאוחד: [SUMMARY.md](SUMMARY.md)
- מפת מבנה תיעוד (שפה/חלק/פונקציה): [structure/README.md](maintainers/structure-README.md)
- מלאי/סיווג תיעוד: [docs-inventory.md](maintainers/docs-inventory.md)
- תמונת מצב של מיון הפרויקט: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## שפות אחרות
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw दस्तावेज़ीकरण केंद्र
यह पृष्ठ दस्तावेज़ीकरण प्रणाली का प्राथमिक प्रवेश बिंदु है।
अंतिम अपडेट: **20 फरवरी 2026**
स्थानीयकृत केंद्र: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## यहाँ से शुरू करें
| मैं चाहता/चाहती हूँ… | यह पढ़ें |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| ZeroClaw को जल्दी से इंस्टॉल और चलाना | [README.md (त्वरित प्रारंभ)](../README.md#quick-start) |
| एक कमांड में बूटस्ट्रैप | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| कार्य के अनुसार कमांड खोजना | [commands-reference.md](reference/cli/commands-reference.md) |
| कॉन्फ़िग कुंजियों और डिफ़ॉल्ट मानों को जल्दी जाँचना | [config-reference.md](reference/api/config-reference.md) |
| कस्टम प्रदाता/एंडपॉइंट कॉन्फ़िगर करना | [custom-providers.md](contributing/custom-providers.md) |
| Z.AI / GLM प्रदाता कॉन्फ़िगर करना | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| LangGraph एकीकरण पैटर्न का उपयोग करना | [langgraph-integration.md](contributing/langgraph-integration.md) |
| रनटाइम संचालित करना (दिन-2 रनबुक) | [operations-runbook.md](ops/operations-runbook.md) |
| इंस्टॉलेशन/रनटाइम/चैनल समस्याओं का निवारण | [troubleshooting.md](ops/troubleshooting.md) |
| Matrix एन्क्रिप्टेड कमरों का सेटअप और डायग्नोस्टिक्स चलाना | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| श्रेणी के अनुसार दस्तावेज़ ब्राउज़ करना | [SUMMARY.md](SUMMARY.md) |
| प्रोजेक्ट PR/issues दस्तावेज़ स्नैपशॉट देखना | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## त्वरित निर्णय वृक्ष (10 सेकंड)
- प्रारंभिक सेटअप या इंस्टॉलेशन चाहिए? → [setup-guides/README.md](setup-guides/README.md)
- सटीक CLI/कॉन्फ़िग कुंजियाँ चाहिए? → [reference/README.md](reference/README.md)
- प्रोडक्शन/सर्विस ऑपरेशन चाहिए? → [ops/README.md](ops/README.md)
- विफलताएँ या रिग्रेशन दिख रहे हैं? → [troubleshooting.md](ops/troubleshooting.md)
- सुरक्षा सख्ती या रोडमैप पर काम कर रहे हैं? → [security/README.md](security/README.md)
- बोर्ड/पेरिफेरल्स के साथ काम कर रहे हैं? → [hardware/README.md](hardware/README.md)
- योगदान/समीक्षा/CI वर्कफ़्लो? → [contributing/README.md](contributing/README.md)
- पूरा नक्शा चाहिए? → [SUMMARY.md](SUMMARY.md)
## संग्रह (अनुशंसित)
- प्रारंभ: [setup-guides/README.md](setup-guides/README.md)
- संदर्भ सूचियाँ: [reference/README.md](reference/README.md)
- संचालन और तैनाती: [ops/README.md](ops/README.md)
- सुरक्षा दस्तावेज़: [security/README.md](security/README.md)
- हार्डवेयर/पेरिफेरल्स: [hardware/README.md](hardware/README.md)
- योगदान/CI: [contributing/README.md](contributing/README.md)
- प्रोजेक्ट स्नैपशॉट: [maintainers/README.md](maintainers/README.md)
## दर्शक वर्ग के अनुसार
### उपयोगकर्ता / ऑपरेटर
- [commands-reference.md](reference/cli/commands-reference.md) — वर्कफ़्लो के अनुसार कमांड खोज
- [providers-reference.md](reference/api/providers-reference.md) — प्रदाता ID, उपनाम, क्रेडेंशियल पर्यावरण चर
- [channels-reference.md](reference/api/channels-reference.md) — चैनल क्षमताएँ और कॉन्फ़िगरेशन पथ
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix एन्क्रिप्टेड कमरा (E2EE) सेटअप और गैर-प्रतिक्रिया डायग्नोस्टिक्स
- [config-reference.md](reference/api/config-reference.md) — उच्च-संकेत कॉन्फ़िग कुंजियाँ और सुरक्षित डिफ़ॉल्ट
- [custom-providers.md](contributing/custom-providers.md) — कस्टम प्रदाता/बेस URL एकीकरण पैटर्न
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM सेटअप और एंडपॉइंट मैट्रिक्स
- [langgraph-integration.md](contributing/langgraph-integration.md) — मॉडल/टूल-कॉल एज केस के लिए फ़ॉलबैक एकीकरण
- [operations-runbook.md](ops/operations-runbook.md) — रनटाइम दिन-2 ऑपरेशन और रोलबैक फ़्लो
- [troubleshooting.md](ops/troubleshooting.md) — सामान्य विफलता हस्ताक्षर और पुनर्प्राप्ति चरण
### योगदानकर्ता / अनुरक्षक
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### सुरक्षा / विश्वसनीयता
> नोट: इस क्षेत्र में प्रस्ताव/रोडमैप दस्तावेज़ शामिल हैं। वर्तमान व्यवहार के लिए, [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), और [troubleshooting.md](ops/troubleshooting.md) से शुरू करें।
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## सिस्टम नेविगेशन और शासन
- एकीकृत विषय सूची: [SUMMARY.md](SUMMARY.md)
- दस्तावेज़ संरचना नक्शा (भाषा/भाग/कार्य): [structure/README.md](maintainers/structure-README.md)
- दस्तावेज़ीकरण सूची/वर्गीकरण: [docs-inventory.md](maintainers/docs-inventory.md)
- प्रोजेक्ट ट्राइएज स्नैपशॉट: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## अन्य भाषाएँ
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+99
View File
@@ -0,0 +1,99 @@
# ZeroClaw Dokumentációs Központ
Ez az oldal a dokumentációs rendszer fő belépési pontja.
Utolsó frissítés: **2026. február 21.**
Honosított központok: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Kezdje itt
| Szeretném… | Olvassa el |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Gyorsan telepíteni és futtatni a ZeroClaw-t | [README.md (Gyorsindítás)](../README.md#quick-start) |
| Egylépéses bootstrap | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Frissítés vagy eltávolítás macOS-en | [macos-update-uninstall.md](setup-guides/macos-update-uninstall.md) |
| Parancsok keresése feladat szerint | [commands-reference.md](reference/cli/commands-reference.md) |
| Konfigurációs alapértékek és kulcsok gyors ellenőrzése | [config-reference.md](reference/api/config-reference.md) |
| Egyéni szolgáltatók/végpontok beállítása | [custom-providers.md](contributing/custom-providers.md) |
| Z.AI / GLM szolgáltató beállítása | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| LangGraph integrációs minták használata | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Futtatókörnyezet üzemeltetése (2. napi kézikönyv) | [operations-runbook.md](ops/operations-runbook.md) |
| Telepítési/futtatási/csatorna problémák elhárítása | [troubleshooting.md](ops/troubleshooting.md) |
| Matrix titkosított szoba beállítás és diagnosztika futtatása | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Dokumentáció böngészése kategória szerint | [SUMMARY.md](SUMMARY.md) |
| Projekt PR/issue dokumentációs pillanatkép megtekintése | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Gyors Döntési Fa (10 másodperc)
- Első telepítés vagy beállítás szükséges? → [setup-guides/README.md](setup-guides/README.md)
- Pontos CLI/konfigurációs kulcsok kellenek? → [reference/README.md](reference/README.md)
- Éles/szolgáltatás üzemeltetés szükséges? → [ops/README.md](ops/README.md)
- Hibákat vagy regressziókat tapasztal? → [troubleshooting.md](ops/troubleshooting.md)
- Biztonsági megerősítésen vagy ütemterven dolgozik? → [security/README.md](security/README.md)
- Kártyákkal/perifériákkal dolgozik? → [hardware/README.md](hardware/README.md)
- Hozzájárulás/áttekintés/CI munkafolyamat? → [contributing/README.md](contributing/README.md)
- Teljes térképet szeretne? → [SUMMARY.md](SUMMARY.md)
## Gyűjtemények (Ajánlott)
- Első lépések: [setup-guides/README.md](setup-guides/README.md)
- Referencia katalógusok: [reference/README.md](reference/README.md)
- Üzemeltetés és telepítés: [ops/README.md](ops/README.md)
- Biztonsági dokumentáció: [security/README.md](security/README.md)
- Hardver/perifériák: [hardware/README.md](hardware/README.md)
- Hozzájárulás/CI: [contributing/README.md](contributing/README.md)
- Projekt pillanatképek: [maintainers/README.md](maintainers/README.md)
## Célközönség szerint
### Felhasználók / Üzemeltetők
- [commands-reference.md](reference/cli/commands-reference.md) — parancskeresés munkafolyamat szerint
- [providers-reference.md](reference/api/providers-reference.md) — szolgáltató azonosítók, álnevek, hitelesítési környezeti változók
- [channels-reference.md](reference/api/channels-reference.md) — csatorna képességek és beállítási útvonalak
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix titkosított szoba (E2EE) beállítás és válaszhiány diagnosztika
- [config-reference.md](reference/api/config-reference.md) — kiemelt konfigurációs kulcsok és biztonságos alapértékek
- [custom-providers.md](contributing/custom-providers.md) — egyéni szolgáltató/alap URL integrációs sablonok
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM beállítás és végpont mátrix
- [langgraph-integration.md](contributing/langgraph-integration.md) — tartalék integráció modell/eszközhívás szélsőséges esetekhez
- [operations-runbook.md](ops/operations-runbook.md) — 2. napi futtatókörnyezet üzemeltetés és visszaállítási folyamat
- [troubleshooting.md](ops/troubleshooting.md) — gyakori hibajelek és helyreállítási lépések
### Közreműködők / Karbantartók
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Biztonság / Megbízhatóság
> Megjegyzés: ez a terület javaslat/ütemterv dokumentumokat is tartalmaz. A jelenlegi viselkedésért kezdje a [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) és [troubleshooting.md](ops/troubleshooting.md) fájlokkal.
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Rendszernavigáció és Irányítás
- Egységes tartalomjegyzék: [SUMMARY.md](SUMMARY.md)
- Dokumentáció szerkezeti térkép (nyelv/rész/funkció): [structure/README.md](maintainers/structure-README.md)
- Dokumentáció leltár/osztályozás: [docs-inventory.md](maintainers/docs-inventory.md)
- i18n dokumentáció index: [i18n/README.md](i18n/README.md)
- i18n lefedettségi térkép: [i18n-coverage.md](maintainers/i18n-coverage.md)
- Projekt triage pillanatkép: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Más nyelvek
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+99
View File
@@ -0,0 +1,99 @@
# Pusat Dokumentasi ZeroClaw
Halaman ini adalah titik masuk utama untuk sistem dokumentasi.
Pembaruan terakhir: **21 Februari 2026**.
Hub terlokalisasi: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Mulai di Sini
| Saya ingin… | Baca ini |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Menginstal dan menjalankan ZeroClaw dengan cepat | [README.md (Mulai Cepat)](../README.md#quick-start) |
| Bootstrap dalam satu perintah | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Memperbarui atau menghapus di macOS | [macos-update-uninstall.md](setup-guides/macos-update-uninstall.md) |
| Mencari perintah berdasarkan tugas | [commands-reference.md](reference/cli/commands-reference.md) |
| Memeriksa default dan kunci konfigurasi dengan cepat | [config-reference.md](reference/api/config-reference.md) |
| Mengonfigurasi penyedia/endpoint kustom | [custom-providers.md](contributing/custom-providers.md) |
| Mengonfigurasi penyedia Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Menggunakan pola integrasi LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Mengoperasikan runtime (buku panduan hari ke-2) | [operations-runbook.md](ops/operations-runbook.md) |
| Memecahkan masalah instalasi/runtime/kanal | [troubleshooting.md](ops/troubleshooting.md) |
| Menjalankan pengaturan ruang terenkripsi Matrix dan diagnostik | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Menjelajahi dokumentasi berdasarkan kategori | [SUMMARY.md](SUMMARY.md) |
| Melihat snapshot dokumen PR/issue proyek | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Pohon Keputusan Cepat (10 detik)
- Butuh pengaturan atau instalasi pertama kali? → [setup-guides/README.md](setup-guides/README.md)
- Butuh kunci CLI/konfigurasi yang tepat? → [reference/README.md](reference/README.md)
- Butuh operasi produksi/layanan? → [ops/README.md](ops/README.md)
- Melihat kegagalan atau regresi? → [troubleshooting.md](ops/troubleshooting.md)
- Bekerja pada penguatan keamanan atau peta jalan? → [security/README.md](security/README.md)
- Bekerja dengan papan/periferal? → [hardware/README.md](hardware/README.md)
- Kontribusi/review/alur kerja CI? → [contributing/README.md](contributing/README.md)
- Ingin peta lengkap? → [SUMMARY.md](SUMMARY.md)
## Koleksi (Direkomendasikan)
- Memulai: [setup-guides/README.md](setup-guides/README.md)
- Katalog referensi: [reference/README.md](reference/README.md)
- Operasi & deployment: [ops/README.md](ops/README.md)
- Dokumentasi keamanan: [security/README.md](security/README.md)
- Perangkat keras/periferal: [hardware/README.md](hardware/README.md)
- Kontribusi/CI: [contributing/README.md](contributing/README.md)
- Snapshot proyek: [maintainers/README.md](maintainers/README.md)
## Berdasarkan Audiens
### Pengguna / Operator
- [commands-reference.md](reference/cli/commands-reference.md) — pencarian perintah berdasarkan alur kerja
- [providers-reference.md](reference/api/providers-reference.md) — ID penyedia, alias, variabel lingkungan kredensial
- [channels-reference.md](reference/api/channels-reference.md) — kemampuan kanal dan jalur pengaturan
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — pengaturan ruang terenkripsi Matrix (E2EE) dan diagnostik tanpa respons
- [config-reference.md](reference/api/config-reference.md) — kunci konfigurasi penting dan default aman
- [custom-providers.md](contributing/custom-providers.md) — template integrasi penyedia kustom/URL dasar
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — pengaturan Z.AI/GLM dan matriks endpoint
- [langgraph-integration.md](contributing/langgraph-integration.md) — integrasi fallback untuk kasus tepi model/pemanggilan alat
- [operations-runbook.md](ops/operations-runbook.md) — operasi runtime hari ke-2 dan alur rollback
- [troubleshooting.md](ops/troubleshooting.md) — tanda kegagalan umum dan langkah pemulihan
### Kontributor / Pengelola
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Keamanan / Keandalan
> Catatan: area ini mencakup dokumen proposal/peta jalan. Untuk perilaku saat ini, mulailah dengan [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), dan [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Navigasi Sistem & Tata Kelola
- Daftar isi terpadu: [SUMMARY.md](SUMMARY.md)
- Peta struktur dokumentasi (bahasa/bagian/fungsi): [structure/README.md](maintainers/structure-README.md)
- Inventaris/klasifikasi dokumentasi: [docs-inventory.md](maintainers/docs-inventory.md)
- Indeks dokumentasi i18n: [i18n/README.md](i18n/README.md)
- Peta cakupan i18n: [i18n-coverage.md](maintainers/i18n-coverage.md)
- Snapshot triase proyek: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Bahasa lain
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+99
View File
@@ -0,0 +1,99 @@
# Hub della Documentazione ZeroClaw
Questa pagina è il punto di ingresso principale del sistema di documentazione.
Ultimo aggiornamento: **21 febbraio 2026**.
Hub localizzati: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Inizia Qui
| Voglio… | Leggi questo |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Installare ed eseguire ZeroClaw rapidamente | [README.md (Avvio Rapido)](../README.md#quick-start) |
| Bootstrap con un singolo comando | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Aggiornare o disinstallare su macOS | [macos-update-uninstall.md](setup-guides/macos-update-uninstall.md) |
| Trovare comandi per attività | [commands-reference.md](reference/cli/commands-reference.md) |
| Controllare rapidamente valori predefiniti e chiavi di configurazione | [config-reference.md](reference/api/config-reference.md) |
| Configurare provider/endpoint personalizzati | [custom-providers.md](contributing/custom-providers.md) |
| Configurare il provider Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Usare i pattern di integrazione LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Gestire il runtime (runbook giorno 2) | [operations-runbook.md](ops/operations-runbook.md) |
| Risolvere problemi di installazione/runtime/canale | [troubleshooting.md](ops/troubleshooting.md) |
| Eseguire configurazione e diagnostica delle stanze crittografate Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Sfogliare la documentazione per categoria | [SUMMARY.md](SUMMARY.md) |
| Vedere lo snapshot dei documenti PR/issue del progetto | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Albero Decisionale Rapido (10 secondi)
- Serve configurazione o installazione iniziale? → [setup-guides/README.md](setup-guides/README.md)
- Servono chiavi CLI/configurazione esatte? → [reference/README.md](reference/README.md)
- Servono operazioni di produzione/servizio? → [ops/README.md](ops/README.md)
- Si verificano errori o regressioni? → [troubleshooting.md](ops/troubleshooting.md)
- Si lavora sul rafforzamento della sicurezza o sulla roadmap? → [security/README.md](security/README.md)
- Si lavora con schede/periferiche? → [hardware/README.md](hardware/README.md)
- Contribuzione/revisione/workflow CI? → [contributing/README.md](contributing/README.md)
- Vuoi la mappa completa? → [SUMMARY.md](SUMMARY.md)
## Collezioni (Raccomandate)
- Per iniziare: [setup-guides/README.md](setup-guides/README.md)
- Cataloghi di riferimento: [reference/README.md](reference/README.md)
- Operazioni e deployment: [ops/README.md](ops/README.md)
- Documentazione sulla sicurezza: [security/README.md](security/README.md)
- Hardware/periferiche: [hardware/README.md](hardware/README.md)
- Contribuzione/CI: [contributing/README.md](contributing/README.md)
- Snapshot del progetto: [maintainers/README.md](maintainers/README.md)
## Per Pubblico
### Utenti / Operatori
- [commands-reference.md](reference/cli/commands-reference.md) — ricerca comandi per workflow
- [providers-reference.md](reference/api/providers-reference.md) — ID provider, alias, variabili d'ambiente per le credenziali
- [channels-reference.md](reference/api/channels-reference.md) — capacità dei canali e percorsi di configurazione
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — configurazione stanze crittografate Matrix (E2EE) e diagnostica mancata risposta
- [config-reference.md](reference/api/config-reference.md) — chiavi di configurazione importanti e valori predefiniti sicuri
- [custom-providers.md](contributing/custom-providers.md) — template di integrazione provider personalizzato/URL base
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — configurazione Z.AI/GLM e matrice degli endpoint
- [langgraph-integration.md](contributing/langgraph-integration.md) — integrazione di fallback per casi limite modello/chiamata strumenti
- [operations-runbook.md](ops/operations-runbook.md) — operazioni runtime giorno 2 e flusso di rollback
- [troubleshooting.md](ops/troubleshooting.md) — firme di errore comuni e passaggi di ripristino
### Contributori / Manutentori
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Sicurezza / Affidabilità
> Nota: quest'area include documenti di proposta/roadmap. Per il comportamento attuale, iniziare con [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) e [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Navigazione di Sistema e Governance
- Indice unificato: [SUMMARY.md](SUMMARY.md)
- Mappa della struttura documentale (lingua/parte/funzione): [structure/README.md](maintainers/structure-README.md)
- Inventario/classificazione della documentazione: [docs-inventory.md](maintainers/docs-inventory.md)
- Indice documentazione i18n: [i18n/README.md](i18n/README.md)
- Mappa di copertura i18n: [i18n-coverage.md](maintainers/i18n-coverage.md)
- Snapshot di triage del progetto: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Altre lingue
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+99
View File
@@ -0,0 +1,99 @@
# ZeroClaw 문서 허브
이 페이지는 문서 시스템의 기본 진입점입니다.
마지막 업데이트: **2026년 2월 21일**.
현지화된 허브: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## 여기서 시작하세요
| 하고 싶은 것… | 이것을 읽으세요 |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| ZeroClaw를 빠르게 설치하고 실행 | [README.md (빠른 시작)](../README.md#quick-start) |
| 한 번의 명령으로 부트스트랩 | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| macOS에서 업데이트 또는 제거 | [macos-update-uninstall.md](setup-guides/macos-update-uninstall.md) |
| 작업별 명령어 찾기 | [commands-reference.md](reference/cli/commands-reference.md) |
| 구성 기본값과 키를 빠르게 확인 | [config-reference.md](reference/api/config-reference.md) |
| 사용자 정의 프로바이더/엔드포인트 구성 | [custom-providers.md](contributing/custom-providers.md) |
| Z.AI / GLM 프로바이더 구성 | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| LangGraph 통합 패턴 사용 | [langgraph-integration.md](contributing/langgraph-integration.md) |
| 런타임 운영 (2일차 런북) | [operations-runbook.md](ops/operations-runbook.md) |
| 설치/런타임/채널 문제 해결 | [troubleshooting.md](ops/troubleshooting.md) |
| Matrix 암호화 방 설정 및 진단 실행 | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| 카테고리별 문서 찾아보기 | [SUMMARY.md](SUMMARY.md) |
| 프로젝트 PR/이슈 문서 스냅샷 보기 | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## 빠른 의사결정 트리 (10초)
- 초기 설정 또는 설치가 필요한가요? → [setup-guides/README.md](setup-guides/README.md)
- 정확한 CLI/구성 키가 필요한가요? → [reference/README.md](reference/README.md)
- 프로덕션/서비스 운영이 필요한가요? → [ops/README.md](ops/README.md)
- 실패 또는 회귀가 발생하고 있나요? → [troubleshooting.md](ops/troubleshooting.md)
- 보안 강화 또는 로드맵 작업 중인가요? → [security/README.md](security/README.md)
- 보드/주변 장치 작업 중인가요? → [hardware/README.md](hardware/README.md)
- 기여/검토/CI 워크플로우? → [contributing/README.md](contributing/README.md)
- 전체 맵이 필요한가요? → [SUMMARY.md](SUMMARY.md)
## 컬렉션 (권장)
- 시작하기: [setup-guides/README.md](setup-guides/README.md)
- 참조 카탈로그: [reference/README.md](reference/README.md)
- 운영 및 배포: [ops/README.md](ops/README.md)
- 보안 문서: [security/README.md](security/README.md)
- 하드웨어/주변 장치: [hardware/README.md](hardware/README.md)
- 기여/CI: [contributing/README.md](contributing/README.md)
- 프로젝트 스냅샷: [maintainers/README.md](maintainers/README.md)
## 대상별
### 사용자 / 운영자
- [commands-reference.md](reference/cli/commands-reference.md) — 워크플로우별 명령어 검색
- [providers-reference.md](reference/api/providers-reference.md) — 프로바이더 ID, 별칭, 자격 증명 환경 변수
- [channels-reference.md](reference/api/channels-reference.md) — 채널 기능 및 설정 경로
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix 암호화 방(E2EE) 설정 및 무응답 진단
- [config-reference.md](reference/api/config-reference.md) — 주요 구성 키 및 보안 기본값
- [custom-providers.md](contributing/custom-providers.md) — 사용자 정의 프로바이더/기본 URL 통합 템플릿
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM 설정 및 엔드포인트 매트릭스
- [langgraph-integration.md](contributing/langgraph-integration.md) — 모델/도구 호출 엣지 케이스를 위한 폴백 통합
- [operations-runbook.md](ops/operations-runbook.md) — 2일차 런타임 운영 및 롤백 흐름
- [troubleshooting.md](ops/troubleshooting.md) — 일반적인 실패 시그니처 및 복구 단계
### 기여자 / 유지보수자
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### 보안 / 신뢰성
> 참고: 이 영역에는 제안/로드맵 문서가 포함되어 있습니다. 현재 동작에 대해서는 [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), [troubleshooting.md](ops/troubleshooting.md)를 먼저 참조하세요.
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## 시스템 탐색 및 거버넌스
- 통합 목차: [SUMMARY.md](SUMMARY.md)
- 문서 구조 맵 (언어/부분/기능): [structure/README.md](maintainers/structure-README.md)
- 문서 인벤토리/분류: [docs-inventory.md](maintainers/docs-inventory.md)
- i18n 문서 색인: [i18n/README.md](i18n/README.md)
- i18n 커버리지 맵: [i18n-coverage.md](maintainers/i18n-coverage.md)
- 프로젝트 트리아지 스냅샷: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## 다른 언어
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+2 -1
View File
@@ -4,7 +4,8 @@ This page is the primary entry point for the documentation system.
Last refreshed: **February 21, 2026**.
Localized hubs: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
Localized hubs:
[العربية](README.ar.md) · [বাংলা](README.bn.md) · [Čeština](README.cs.md) · [Dansk](README.da.md) · [Deutsch](README.de.md) · [Ελληνικά](README.el.md) · [Español](README.es.md) · [Suomi](README.fi.md) · [Français](README.fr.md) · [עברית](README.he.md) · [हिन्दी](README.hi.md) · [Magyar](README.hu.md) · [Bahasa Indonesia](README.id.md) · [Italiano](README.it.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Norsk Bokmål](README.nb.md) · [Nederlands](README.nl.md) · [Polski](README.pl.md) · [Português](README.pt.md) · [Română](README.ro.md) · [Русский](README.ru.md) · [Svenska](README.sv.md) · [ไทย](README.th.md) · [Tagalog](README.tl.md) · [Türkçe](README.tr.md) · [Українська](README.uk.md) · [اردو](README.ur.md) · [Tiếng Việt](README.vi.md) · [简体中文](README.zh-CN.md).
## Start Here
+99
View File
@@ -0,0 +1,99 @@
# ZeroClaw Dokumentasjonshub
Denne siden er hovedinngangen til dokumentasjonssystemet.
Sist oppdatert: **21. februar 2026**.
Lokaliserte huber: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Start her
| Jeg vil… | Les dette |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Installere og kjøre ZeroClaw raskt | [README.md (Hurtigstart)](../README.md#quick-start) |
| Bootstrap med en enkelt kommando | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Oppdatere eller avinstallere på macOS | [macos-update-uninstall.md](setup-guides/macos-update-uninstall.md) |
| Finne kommandoer etter oppgave | [commands-reference.md](reference/cli/commands-reference.md) |
| Raskt sjekke konfigurasjonsstandarder og nøkler | [config-reference.md](reference/api/config-reference.md) |
| Konfigurere egendefinerte leverandører/endepunkter | [custom-providers.md](contributing/custom-providers.md) |
| Konfigurere Z.AI / GLM-leverandøren | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Bruke LangGraph-integrasjonsmønstre | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Drifte kjøretidsmiljøet (dag 2-runbook) | [operations-runbook.md](ops/operations-runbook.md) |
| Feilsøke installasjon/kjøretid/kanal-problemer | [troubleshooting.md](ops/troubleshooting.md) |
| Kjøre Matrix-kryptert rom-oppsett og diagnostikk | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Bla gjennom dokumentasjon etter kategori | [SUMMARY.md](SUMMARY.md) |
| Se prosjektets PR/issue-dokumentasjonsøyeblikksbilde | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Raskt beslutningstre (10 sekunder)
- Trenger førstegangsoppsett eller installasjon? → [setup-guides/README.md](setup-guides/README.md)
- Trenger nøyaktige CLI/konfigurasjonsnøkler? → [reference/README.md](reference/README.md)
- Trenger produksjons-/tjenestedrift? → [ops/README.md](ops/README.md)
- Ser du feil eller regresjoner? → [troubleshooting.md](ops/troubleshooting.md)
- Jobber med sikkerhetsherding eller veikart? → [security/README.md](security/README.md)
- Jobber med kort/periferiutstyr? → [hardware/README.md](hardware/README.md)
- Bidrag/gjennomgang/CI-arbeidsflyt? → [contributing/README.md](contributing/README.md)
- Vil du ha det fullstendige kartet? → [SUMMARY.md](SUMMARY.md)
## Samlinger (Anbefalt)
- Kom i gang: [setup-guides/README.md](setup-guides/README.md)
- Referansekataloger: [reference/README.md](reference/README.md)
- Drift og utrulling: [ops/README.md](ops/README.md)
- Sikkerhetsdokumentasjon: [security/README.md](security/README.md)
- Maskinvare/periferiutstyr: [hardware/README.md](hardware/README.md)
- Bidrag/CI: [contributing/README.md](contributing/README.md)
- Prosjektøyeblikksbilder: [maintainers/README.md](maintainers/README.md)
## Etter målgruppe
### Brukere / Operatører
- [commands-reference.md](reference/cli/commands-reference.md) — kommandooppslag etter arbeidsflyt
- [providers-reference.md](reference/api/providers-reference.md) — leverandør-IDer, aliaser, legitimasjonsmiljøvariabler
- [channels-reference.md](reference/api/channels-reference.md) — kanalegenskaper og oppsettstier
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix kryptert rom (E2EE)-oppsett og diagnostikk for manglende svar
- [config-reference.md](reference/api/config-reference.md) — viktige konfigurasjonsnøkler og sikre standardverdier
- [custom-providers.md](contributing/custom-providers.md) — maler for egendefinert leverandør/basis-URL-integrasjon
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM-oppsett og endepunktmatrise
- [langgraph-integration.md](contributing/langgraph-integration.md) — reserveintegrasjon for modell/verktøykall-grensetilfeller
- [operations-runbook.md](ops/operations-runbook.md) — dag 2 kjøretidsdrift og tilbakestillingsflyt
- [troubleshooting.md](ops/troubleshooting.md) — vanlige feilsignaturer og gjenopprettingstrinn
### Bidragsytere / Vedlikeholdere
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Sikkerhet / Pålitelighet
> Merk: dette området inkluderer forslags-/veikartdokumenter. For nåværende oppførsel, start med [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) og [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Systemnavigasjon og styring
- Samlet innholdsfortegnelse: [SUMMARY.md](SUMMARY.md)
- Dokumentasjonsstrukturkart (språk/del/funksjon): [structure/README.md](maintainers/structure-README.md)
- Dokumentasjonsinventar/klassifisering: [docs-inventory.md](maintainers/docs-inventory.md)
- i18n-dokumentasjonsindeks: [i18n/README.md](i18n/README.md)
- i18n-dekningskart: [i18n-coverage.md](maintainers/i18n-coverage.md)
- Prosjekttriageringsøyeblikksbilde: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Andre språk
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw Documentatiehub
Deze pagina is het primaire toegangspunt voor het documentatiesysteem.
Laatst bijgewerkt: **20 februari 2026**.
Gelokaliseerde hubs: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Begin Hier
| Ik wil… | Lees dit |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| ZeroClaw snel installeren en uitvoeren | [README.md (Snelle Start)](../README.md#quick-start) |
| Bootstrap met één commando | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Commando's zoeken op taak | [commands-reference.md](reference/cli/commands-reference.md) |
| Snel configuratiesleutels en standaardwaarden controleren | [config-reference.md](reference/api/config-reference.md) |
| Aangepaste providers/endpoints configureren | [custom-providers.md](contributing/custom-providers.md) |
| Z.AI / GLM-provider instellen | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| LangGraph-integratiepatronen gebruiken | [langgraph-integration.md](contributing/langgraph-integration.md) |
| De runtime beheren (dag-2 runbook) | [operations-runbook.md](ops/operations-runbook.md) |
| Installatie-/runtime-/kanaalproblemen oplossen | [troubleshooting.md](ops/troubleshooting.md) |
| Matrix versleutelde ruimtes configureren en diagnosticeren | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Documentatie per categorie bekijken | [SUMMARY.md](SUMMARY.md) |
| Docs-momentopname van project-PR's/issues bekijken | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Snelle Beslisboom (10 seconden)
- Eerste installatie of configuratie nodig? → [setup-guides/README.md](setup-guides/README.md)
- Exacte CLI-/configuratiesleutels nodig? → [reference/README.md](reference/README.md)
- Productie-/servicebeheer nodig? → [ops/README.md](ops/README.md)
- Fouten of regressies? → [troubleshooting.md](ops/troubleshooting.md)
- Bezig met beveiligingsverharding of roadmap? → [security/README.md](security/README.md)
- Werken met boards/randapparatuur? → [hardware/README.md](hardware/README.md)
- Bijdrage/review/CI-workflow? → [contributing/README.md](contributing/README.md)
- De volledige kaart bekijken? → [SUMMARY.md](SUMMARY.md)
## Collecties (Aanbevolen)
- Aan de slag: [setup-guides/README.md](setup-guides/README.md)
- Referentiecatalogi: [reference/README.md](reference/README.md)
- Beheer & implementatie: [ops/README.md](ops/README.md)
- Beveiligingsdocs: [security/README.md](security/README.md)
- Hardware/randapparatuur: [hardware/README.md](hardware/README.md)
- Bijdrage/CI: [contributing/README.md](contributing/README.md)
- Projectmomentopnamen: [maintainers/README.md](maintainers/README.md)
## Per Doelgroep
### Gebruikers / Beheerders
- [commands-reference.md](reference/cli/commands-reference.md) — commando's zoeken op workflow
- [providers-reference.md](reference/api/providers-reference.md) — provider-ID's, aliassen, omgevingsvariabelen voor inloggegevens
- [channels-reference.md](reference/api/channels-reference.md) — kanaalmogelijkheden en configuratiepaden
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — Matrix versleutelde ruimtes (E2EE) instellen en diagnostiek bij geen reactie
- [config-reference.md](reference/api/config-reference.md) — configuratiesleutels met hoog belang en veilige standaardwaarden
- [custom-providers.md](contributing/custom-providers.md) — integratie-patronen voor aangepaste providers/basis-URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM-configuratie en endpointmatrix
- [langgraph-integration.md](contributing/langgraph-integration.md) — fallback-integratie voor model-/toolaanroep-randgevallen
- [operations-runbook.md](ops/operations-runbook.md) — dag-2 runtime-operaties en rollbackflows
- [troubleshooting.md](ops/troubleshooting.md) — veelvoorkomende foutpatronen en herstelstappen
### Bijdragers / Beheerders
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Beveiliging / Betrouwbaarheid
> Opmerking: dit gedeelte bevat voorstel-/roadmapdocumenten. Voor het huidige gedrag, begin met [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) en [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Systeemnavigatie & Governance
- Uniforme inhoudsopgave: [SUMMARY.md](SUMMARY.md)
- Documentatiestructuurkaart (taal/deel/functie): [structure/README.md](maintainers/structure-README.md)
- Documentatie-inventaris/-classificatie: [docs-inventory.md](maintainers/docs-inventory.md)
- Projecttriage-momentopname: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Andere talen
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Centrum Dokumentacji ZeroClaw
Ta strona jest głównym punktem wejścia do systemu dokumentacji.
Ostatnia aktualizacja: **20 lutego 2026**.
Zlokalizowane centra: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Zacznij tutaj
| Chcę… | Przeczytaj to |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Szybko zainstalować i uruchomić ZeroClaw | [README.md (Szybki Start)](../README.md#quick-start) |
| Bootstrap jednym poleceniem | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Znaleźć polecenia według zadania | [commands-reference.md](reference/cli/commands-reference.md) |
| Szybko sprawdzić klucze konfiguracji i wartości domyślne | [config-reference.md](reference/api/config-reference.md) |
| Skonfigurować niestandardowych dostawców/endpointy | [custom-providers.md](contributing/custom-providers.md) |
| Skonfigurować dostawcę Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Użyć wzorców integracji LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Zarządzać środowiskiem uruchomieniowym (runbook dzień-2) | [operations-runbook.md](ops/operations-runbook.md) |
| Rozwiązać problemy z instalacją/runtime/kanałami | [troubleshooting.md](ops/troubleshooting.md) |
| Skonfigurować i zdiagnozować szyfrowane pokoje Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Przeglądać dokumentację według kategorii | [SUMMARY.md](SUMMARY.md) |
| Zobaczyć migawkę dokumentacji PR-ów/issues projektu | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Szybkie Drzewo Decyzyjne (10 sekund)
- Potrzebujesz pierwszej instalacji lub konfiguracji? → [setup-guides/README.md](setup-guides/README.md)
- Potrzebujesz dokładnych kluczy CLI/konfiguracji? → [reference/README.md](reference/README.md)
- Potrzebujesz operacji produkcyjnych/serwisowych? → [ops/README.md](ops/README.md)
- Widzisz błędy lub regresje? → [troubleshooting.md](ops/troubleshooting.md)
- Pracujesz nad wzmocnieniem bezpieczeństwa lub mapą drogową? → [security/README.md](security/README.md)
- Pracujesz z płytkami/peryferiami? → [hardware/README.md](hardware/README.md)
- Kontrybuowanie/recenzja/workflow CI? → [contributing/README.md](contributing/README.md)
- Chcesz zobaczyć pełną mapę? → [SUMMARY.md](SUMMARY.md)
## Kolekcje (Zalecane)
- Rozpoczęcie pracy: [setup-guides/README.md](setup-guides/README.md)
- Katalogi referencyjne: [reference/README.md](reference/README.md)
- Operacje i wdrożenie: [ops/README.md](ops/README.md)
- Dokumentacja bezpieczeństwa: [security/README.md](security/README.md)
- Hardware/peryferia: [hardware/README.md](hardware/README.md)
- Kontrybuowanie/CI: [contributing/README.md](contributing/README.md)
- Migawki projektu: [maintainers/README.md](maintainers/README.md)
## Według Odbiorców
### Użytkownicy / Operatorzy
- [commands-reference.md](reference/cli/commands-reference.md) — wyszukiwanie poleceń według workflow
- [providers-reference.md](reference/api/providers-reference.md) — ID dostawców, aliasy, zmienne środowiskowe uwierzytelniania
- [channels-reference.md](reference/api/channels-reference.md) — możliwości kanałów i ścieżki konfiguracji
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — konfiguracja szyfrowanych pokojów Matrix (E2EE) i diagnostyka braku odpowiedzi
- [config-reference.md](reference/api/config-reference.md) — klucze konfiguracji o wysokim znaczeniu i bezpieczne wartości domyślne
- [custom-providers.md](contributing/custom-providers.md) — wzorce integracji niestandardowych dostawców/bazowego URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — konfiguracja Z.AI/GLM i matryca endpointów
- [langgraph-integration.md](contributing/langgraph-integration.md) — integracja awaryjna dla przypadków brzegowych modelu/wywołania narzędzi
- [operations-runbook.md](ops/operations-runbook.md) — operacje runtime dzień-2 i przepływy rollbacku
- [troubleshooting.md](ops/troubleshooting.md) — typowe sygnatury błędów i kroki odzyskiwania
### Kontrybutorzy / Opiekunowie
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Bezpieczeństwo / Niezawodność
> Uwaga: ta sekcja zawiera dokumenty propozycji/mapy drogowej. Dla aktualnego zachowania zacznij od [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) i [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Nawigacja Systemowa i Zarządzanie
- Ujednolicony spis treści: [SUMMARY.md](SUMMARY.md)
- Mapa struktury dokumentacji (język/część/funkcja): [structure/README.md](maintainers/structure-README.md)
- Inwentarz/klasyfikacja dokumentacji: [docs-inventory.md](maintainers/docs-inventory.md)
- Migawka triażu projektu: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Inne języki
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Centro de Documentação ZeroClaw
Esta página é o ponto de entrada principal do sistema de documentação.
Última atualização: **20 de fevereiro de 2026**.
Centros localizados: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Comece Aqui
| Eu quero… | Leia isto |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Instalar e executar o ZeroClaw rapidamente | [README.md (Início Rápido)](../README.md#quick-start) |
| Bootstrap com um único comando | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Encontrar comandos por tarefa | [commands-reference.md](reference/cli/commands-reference.md) |
| Verificar rapidamente chaves de configuração e valores padrão | [config-reference.md](reference/api/config-reference.md) |
| Configurar provedores/endpoints personalizados | [custom-providers.md](contributing/custom-providers.md) |
| Configurar o provedor Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Usar padrões de integração LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Operar o runtime (runbook dia-2) | [operations-runbook.md](ops/operations-runbook.md) |
| Resolver problemas de instalação/runtime/canal | [troubleshooting.md](ops/troubleshooting.md) |
| Configurar e diagnosticar salas criptografadas Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Navegar na documentação por categoria | [SUMMARY.md](SUMMARY.md) |
| Ver instantâneo de docs de PRs/issues do projeto | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Árvore de Decisão Rápida (10 segundos)
- Precisa de instalação ou configuração inicial? → [setup-guides/README.md](setup-guides/README.md)
- Precisa de chaves CLI/configuração exatas? → [reference/README.md](reference/README.md)
- Precisa de operações de produção/serviço? → [ops/README.md](ops/README.md)
- Vê falhas ou regressões? → [troubleshooting.md](ops/troubleshooting.md)
- Trabalhando em endurecimento de segurança ou roadmap? → [security/README.md](security/README.md)
- Trabalhando com placas/periféricos? → [hardware/README.md](hardware/README.md)
- Contribuição/revisão/workflow CI? → [contributing/README.md](contributing/README.md)
- Quer o mapa completo? → [SUMMARY.md](SUMMARY.md)
## Coleções (Recomendadas)
- Primeiros passos: [setup-guides/README.md](setup-guides/README.md)
- Catálogos de referência: [reference/README.md](reference/README.md)
- Operações e implantação: [ops/README.md](ops/README.md)
- Documentação de segurança: [security/README.md](security/README.md)
- Hardware/periféricos: [hardware/README.md](hardware/README.md)
- Contribuição/CI: [contributing/README.md](contributing/README.md)
- Instantâneos do projeto: [maintainers/README.md](maintainers/README.md)
## Por Público
### Usuários / Operadores
- [commands-reference.md](reference/cli/commands-reference.md) — busca de comandos por workflow
- [providers-reference.md](reference/api/providers-reference.md) — IDs de provedores, aliases, variáveis de ambiente de credenciais
- [channels-reference.md](reference/api/channels-reference.md) — capacidades dos canais e caminhos de configuração
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — configuração de salas criptografadas Matrix (E2EE) e diagnóstico de não resposta
- [config-reference.md](reference/api/config-reference.md) — chaves de configuração de alto sinal e valores padrão seguros
- [custom-providers.md](contributing/custom-providers.md) — padrões de integração de provedor personalizado/URL base
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — configuração Z.AI/GLM e matriz de endpoints
- [langgraph-integration.md](contributing/langgraph-integration.md) — integração de fallback para casos extremos de modelo/chamada de ferramenta
- [operations-runbook.md](ops/operations-runbook.md) — operações runtime dia-2 e fluxos de rollback
- [troubleshooting.md](ops/troubleshooting.md) — assinaturas de falha comuns e etapas de recuperação
### Contribuidores / Mantenedores
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Segurança / Confiabilidade
> Nota: esta seção inclui documentos de proposta/roadmap. Para o comportamento atual, comece com [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) e [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Navegação do Sistema e Governança
- Índice unificado: [SUMMARY.md](SUMMARY.md)
- Mapa da estrutura de docs (idioma/parte/função): [structure/README.md](maintainers/structure-README.md)
- Inventário/classificação da documentação: [docs-inventory.md](maintainers/docs-inventory.md)
- Instantâneo de triagem do projeto: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Outros idiomas
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Centrul de Documentație ZeroClaw
Această pagină este punctul de intrare principal al sistemului de documentație.
Ultima actualizare: **20 februarie 2026**.
Centre localizate: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Începeți Aici
| Vreau să… | Citiți aceasta |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Instalez și rulez ZeroClaw rapid | [README.md (Start Rapid)](../README.md#quick-start) |
| Bootstrap cu o singură comandă | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Găsesc comenzi după sarcină | [commands-reference.md](reference/cli/commands-reference.md) |
| Verific rapid cheile de configurare și valorile implicite | [config-reference.md](reference/api/config-reference.md) |
| Configurez furnizori/endpoint-uri personalizate | [custom-providers.md](contributing/custom-providers.md) |
| Configurez furnizorul Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Folosesc modelele de integrare LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Administrez runtime-ul (runbook ziua-2) | [operations-runbook.md](ops/operations-runbook.md) |
| Depanez probleme de instalare/runtime/canal | [troubleshooting.md](ops/troubleshooting.md) |
| Configurez și diagnostichez camerele criptate Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Navighez documentația pe categorii | [SUMMARY.md](SUMMARY.md) |
| Văd instantaneul documentației PR-urilor/issue-urilor proiectului | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Arbore de Decizie Rapid (10 secunde)
- Aveți nevoie de instalare sau configurare inițială? → [setup-guides/README.md](setup-guides/README.md)
- Aveți nevoie de chei CLI/configurare exacte? → [reference/README.md](reference/README.md)
- Aveți nevoie de operațiuni de producție/serviciu? → [ops/README.md](ops/README.md)
- Vedeți erori sau regresii? → [troubleshooting.md](ops/troubleshooting.md)
- Lucrați la consolidarea securității sau foaia de parcurs? → [security/README.md](security/README.md)
- Lucrați cu plăci/periferice? → [hardware/README.md](hardware/README.md)
- Contribuție/recenzie/workflow CI? → [contributing/README.md](contributing/README.md)
- Doriți harta completă? → [SUMMARY.md](SUMMARY.md)
## Colecții (Recomandate)
- Primii pași: [setup-guides/README.md](setup-guides/README.md)
- Cataloage de referință: [reference/README.md](reference/README.md)
- Operațiuni și implementare: [ops/README.md](ops/README.md)
- Documentație de securitate: [security/README.md](security/README.md)
- Hardware/periferice: [hardware/README.md](hardware/README.md)
- Contribuție/CI: [contributing/README.md](contributing/README.md)
- Instantanee ale proiectului: [maintainers/README.md](maintainers/README.md)
## După Public
### Utilizatori / Operatori
- [commands-reference.md](reference/cli/commands-reference.md) — căutare comenzi după workflow
- [providers-reference.md](reference/api/providers-reference.md) — ID-uri furnizori, aliasuri, variabile de mediu pentru acreditări
- [channels-reference.md](reference/api/channels-reference.md) — capacitățile canalelor și căile de configurare
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — configurarea camerelor criptate Matrix (E2EE) și diagnosticarea lipsei de răspuns
- [config-reference.md](reference/api/config-reference.md) — chei de configurare cu semnal ridicat și valori implicite sigure
- [custom-providers.md](contributing/custom-providers.md) — modele de integrare furnizor personalizat/URL de bază
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — configurare Z.AI/GLM și matricea endpoint-urilor
- [langgraph-integration.md](contributing/langgraph-integration.md) — integrare de rezervă pentru cazurile limită ale modelului/apelului de instrumente
- [operations-runbook.md](ops/operations-runbook.md) — operațiuni runtime ziua-2 și fluxuri de rollback
- [troubleshooting.md](ops/troubleshooting.md) — semnături de erori comune și pași de recuperare
### Contribuitori / Întreținători
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Securitate / Fiabilitate
> Notă: această secțiune include documente de propunere/foaie de parcurs. Pentru comportamentul actual, începeți cu [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) și [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Navigare în Sistem și Guvernanță
- Cuprins unificat: [SUMMARY.md](SUMMARY.md)
- Harta structurii documentației (limbă/parte/funcție): [structure/README.md](maintainers/structure-README.md)
- Inventar/clasificare a documentației: [docs-inventory.md](maintainers/docs-inventory.md)
- Instantaneu de triaj al proiectului: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Alte limbi
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw Dokumentationshubb
Denna sida är den primära ingångspunkten för dokumentationssystemet.
Senast uppdaterad: **20 februari 2026**.
Lokaliserade hubbar: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Börja Här
| Jag vill… | Läs detta |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Installera och köra ZeroClaw snabbt | [README.md (Snabbstart)](../README.md#quick-start) |
| Bootstrap med ett enda kommando | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Hitta kommandon efter uppgift | [commands-reference.md](reference/cli/commands-reference.md) |
| Snabbt kontrollera konfigurationsnycklar och standardvärden | [config-reference.md](reference/api/config-reference.md) |
| Konfigurera anpassade leverantörer/endpoints | [custom-providers.md](contributing/custom-providers.md) |
| Konfigurera Z.AI / GLM-leverantören | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Använda LangGraph-integrationsmönster | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Hantera runtime (dag-2 runbook) | [operations-runbook.md](ops/operations-runbook.md) |
| Felsöka installations-/runtime-/kanalproblem | [troubleshooting.md](ops/troubleshooting.md) |
| Konfigurera och diagnostisera krypterade Matrix-rum | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Bläddra i dokumentation efter kategori | [SUMMARY.md](SUMMARY.md) |
| Se dokumentationsöversikt för projektets PR:er/issues | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Snabbt Beslutsträd (10 sekunder)
- Behöver initial installation eller konfiguration? → [setup-guides/README.md](setup-guides/README.md)
- Behöver exakta CLI-/konfigurationsnycklar? → [reference/README.md](reference/README.md)
- Behöver produktions-/tjänsteoperationer? → [ops/README.md](ops/README.md)
- Ser du fel eller regressioner? → [troubleshooting.md](ops/troubleshooting.md)
- Arbetar med säkerhetshärdning eller färdplan? → [security/README.md](security/README.md)
- Arbetar med kort/kringutrustning? → [hardware/README.md](hardware/README.md)
- Bidrag/granskning/CI-arbetsflöde? → [contributing/README.md](contributing/README.md)
- Vill du se hela kartan? → [SUMMARY.md](SUMMARY.md)
## Samlingar (Rekommenderade)
- Kom igång: [setup-guides/README.md](setup-guides/README.md)
- Referenskataloger: [reference/README.md](reference/README.md)
- Drift och driftsättning: [ops/README.md](ops/README.md)
- Säkerhetsdokumentation: [security/README.md](security/README.md)
- Hårdvara/kringutrustning: [hardware/README.md](hardware/README.md)
- Bidrag/CI: [contributing/README.md](contributing/README.md)
- Projektögonblicksbilder: [maintainers/README.md](maintainers/README.md)
## Per Målgrupp
### Användare / Operatörer
- [commands-reference.md](reference/cli/commands-reference.md) — sök kommandon efter arbetsflöde
- [providers-reference.md](reference/api/providers-reference.md) — leverantörs-ID:n, alias, miljövariabler för autentiseringsuppgifter
- [channels-reference.md](reference/api/channels-reference.md) — kanalkapaciteter och konfigurationsvägar
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — konfiguration av krypterade Matrix-rum (E2EE) och diagnostik vid uteblivet svar
- [config-reference.md](reference/api/config-reference.md) — konfigurationsnycklar med hög signalstyrka och säkra standardvärden
- [custom-providers.md](contributing/custom-providers.md) — integrationsmönster för anpassad leverantör/bas-URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM-konfiguration och endpointmatris
- [langgraph-integration.md](contributing/langgraph-integration.md) — reservintegration för modell-/verktygsanropsspecialfall
- [operations-runbook.md](ops/operations-runbook.md) — dag-2 runtime-operationer och rollback-flöden
- [troubleshooting.md](ops/troubleshooting.md) — vanliga felmönster och återställningssteg
### Bidragsgivare / Underhållare
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Säkerhet / Tillförlitlighet
> Observera: denna sektion innehåller förslags-/färdplansdokument. För aktuellt beteende, börja med [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) och [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Systemnavigering och Styrning
- Enhetlig innehållsförteckning: [SUMMARY.md](SUMMARY.md)
- Dokumentationsstrukturkarta (språk/del/funktion): [structure/README.md](maintainers/structure-README.md)
- Dokumentationsinventering/-klassificering: [docs-inventory.md](maintainers/docs-inventory.md)
- Projekttriageringsögonblicksbild: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Andra språk
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ศูนย์กลางเอกสาร ZeroClaw
หน้านี้เป็นจุดเริ่มต้นหลักของระบบเอกสาร
อัปเดตล่าสุด: **21 กุมภาพันธ์ 2026**
ศูนย์กลางภาษาต่าง ๆ: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## เริ่มต้นที่นี่
| ฉันต้องการ… | อ่านสิ่งนี้ |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| ติดตั้งและรัน ZeroClaw อย่างรวดเร็ว | [README.md (เริ่มต้นอย่างรวดเร็ว)](../README.md#quick-start) |
| ติดตั้งด้วยคำสั่งเดียว | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| ค้นหาคำสั่งตามงาน | [commands-reference.md](reference/cli/commands-reference.md) |
| ตรวจสอบคีย์และค่าเริ่มต้นของการตั้งค่าอย่างรวดเร็ว | [config-reference.md](reference/api/config-reference.md) |
| ตั้งค่าผู้ให้บริการ/endpoint แบบกำหนดเอง | [custom-providers.md](contributing/custom-providers.md) |
| ตั้งค่าผู้ให้บริการ Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| ใช้รูปแบบการรวม LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| ดำเนินงาน runtime (คู่มือปฏิบัติการวันที่ 2) | [operations-runbook.md](ops/operations-runbook.md) |
| แก้ไขปัญหาการติดตั้ง/runtime/ช่องทาง | [troubleshooting.md](ops/troubleshooting.md) |
| รันการตั้งค่าและวินิจฉัยห้อง Matrix แบบเข้ารหัส | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| เรียกดูเอกสารตามหมวดหมู่ | [SUMMARY.md](SUMMARY.md) |
| ดูสแนปช็อตเอกสาร PR/issue ของโปรเจกต์ | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## แผนผังการตัดสินใจอย่างรวดเร็ว (10 วินาที)
- ต้องการการตั้งค่าหรือการติดตั้งเบื้องต้น? → [setup-guides/README.md](setup-guides/README.md)
- ต้องการคีย์ CLI/config ที่แน่นอน? → [reference/README.md](reference/README.md)
- ต้องการการดำเนินงานระดับโปรดักชัน/เซอร์วิส? → [ops/README.md](ops/README.md)
- พบความล้มเหลวหรือการถดถอย? → [troubleshooting.md](ops/troubleshooting.md)
- ทำงานเกี่ยวกับการเสริมความปลอดภัยหรือแผนงาน? → [security/README.md](security/README.md)
- ทำงานกับบอร์ด/อุปกรณ์ต่อพ่วง? → [hardware/README.md](hardware/README.md)
- การมีส่วนร่วม/รีวิว/เวิร์กโฟลว์ CI? → [contributing/README.md](contributing/README.md)
- ต้องการแผนที่ทั้งหมด? → [SUMMARY.md](SUMMARY.md)
## คอลเลกชัน (แนะนำ)
- เริ่มต้น: [setup-guides/README.md](setup-guides/README.md)
- แคตตาล็อกอ้างอิง: [reference/README.md](reference/README.md)
- การดำเนินงานและการปรับใช้: [ops/README.md](ops/README.md)
- เอกสารความปลอดภัย: [security/README.md](security/README.md)
- ฮาร์ดแวร์/อุปกรณ์ต่อพ่วง: [hardware/README.md](hardware/README.md)
- การมีส่วนร่วม/CI: [contributing/README.md](contributing/README.md)
- สแนปช็อตโปรเจกต์: [maintainers/README.md](maintainers/README.md)
## ตามกลุ่มผู้ใช้
### ผู้ใช้ / ผู้ดำเนินงาน
- [commands-reference.md](reference/cli/commands-reference.md) — ค้นหาคำสั่งตามเวิร์กโฟลว์
- [providers-reference.md](reference/api/providers-reference.md) — ID ผู้ให้บริการ, นามแฝง, ตัวแปรสภาพแวดล้อมข้อมูลรับรอง
- [channels-reference.md](reference/api/channels-reference.md) — ความสามารถของช่องทางและเส้นทางการตั้งค่า
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — การตั้งค่าห้อง Matrix แบบเข้ารหัส (E2EE) และการวินิจฉัยการไม่ตอบสนอง
- [config-reference.md](reference/api/config-reference.md) — คีย์การตั้งค่าที่สำคัญและค่าเริ่มต้นที่ปลอดภัย
- [custom-providers.md](contributing/custom-providers.md) — รูปแบบการรวมผู้ให้บริการแบบกำหนดเอง/URL ฐาน
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — การตั้งค่า Z.AI/GLM และเมทริกซ์ endpoint
- [langgraph-integration.md](contributing/langgraph-integration.md) — การรวมแบบ fallback สำหรับกรณีพิเศษของโมเดล/การเรียกเครื่องมือ
- [operations-runbook.md](ops/operations-runbook.md) — การดำเนินงาน runtime วันที่ 2 และโฟลว์การย้อนกลับ
- [troubleshooting.md](ops/troubleshooting.md) — ลายเซ็นความล้มเหลวทั่วไปและขั้นตอนการกู้คืน
### ผู้มีส่วนร่วม / ผู้ดูแล
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### ความปลอดภัย / ความน่าเชื่อถือ
> หมายเหตุ: ส่วนนี้รวมเอกสารข้อเสนอ/แผนงาน สำหรับพฤติกรรมปัจจุบัน เริ่มต้นที่ [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) และ [troubleshooting.md](ops/troubleshooting.md)
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## การนำทางระบบและการกำกับดูแล
- สารบัญรวม: [SUMMARY.md](SUMMARY.md)
- แผนที่โครงสร้างเอกสาร (ภาษา/ส่วน/ฟังก์ชัน): [structure/README.md](maintainers/structure-README.md)
- รายการ/การจำแนกเอกสาร: [docs-inventory.md](maintainers/docs-inventory.md)
- สแนปช็อตการคัดกรองโปรเจกต์: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## ภาษาอื่น ๆ
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Sentro ng Dokumentasyon ng ZeroClaw
Ang pahinang ito ang pangunahing entry point ng sistema ng dokumentasyon.
Huling na-update: **Pebrero 21, 2026**.
Mga lokal na sentro: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Magsimula Dito
| Gusto ko… | Basahin ito |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| I-install at patakbuhin ang ZeroClaw nang mabilis | [README.md (Mabilis na Pagsisimula)](../README.md#quick-start) |
| Bootstrap sa isang utos | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Hanapin ang mga utos ayon sa gawain | [commands-reference.md](reference/cli/commands-reference.md) |
| Mabilisang suriin ang mga config key at default na halaga | [config-reference.md](reference/api/config-reference.md) |
| Mag-set up ng custom na provider/endpoint | [custom-providers.md](contributing/custom-providers.md) |
| I-set up ang Z.AI / GLM provider | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Gamitin ang mga pattern ng integrasyon ng LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Pamahalaan ang runtime (day-2 runbook) | [operations-runbook.md](ops/operations-runbook.md) |
| I-troubleshoot ang mga isyu sa pag-install/runtime/channel | [troubleshooting.md](ops/troubleshooting.md) |
| Patakbuhin ang setup at diagnostics ng encrypted Matrix room | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| I-browse ang mga dokumento ayon sa kategorya | [SUMMARY.md](SUMMARY.md) |
| Tingnan ang snapshot ng mga PR/issue ng proyekto | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Mabilisang Decision Tree (10 segundo)
- Kailangan ng setup o unang pag-install? → [setup-guides/README.md](setup-guides/README.md)
- Kailangan ng eksaktong CLI/config key? → [reference/README.md](reference/README.md)
- Kailangan ng production/service operations? → [ops/README.md](ops/README.md)
- May nakikitang pagkabigo o regression? → [troubleshooting.md](ops/troubleshooting.md)
- Nagtatrabaho sa security hardening o roadmap? → [security/README.md](security/README.md)
- Nagtatrabaho sa mga board/peripheral? → [hardware/README.md](hardware/README.md)
- Kontribusyon/review/CI workflow? → [contributing/README.md](contributing/README.md)
- Gusto mo ang buong mapa? → [SUMMARY.md](SUMMARY.md)
## Mga Koleksyon (Inirerekomenda)
- Pagsisimula: [setup-guides/README.md](setup-guides/README.md)
- Mga katalogo ng reference: [reference/README.md](reference/README.md)
- Operasyon at deployment: [ops/README.md](ops/README.md)
- Mga dokumento ng seguridad: [security/README.md](security/README.md)
- Hardware/peripheral: [hardware/README.md](hardware/README.md)
- Kontribusyon/CI: [contributing/README.md](contributing/README.md)
- Mga snapshot ng proyekto: [maintainers/README.md](maintainers/README.md)
## Ayon sa Audience
### Mga Gumagamit / Operator
- [commands-reference.md](reference/cli/commands-reference.md) — paghahanap ng utos ayon sa workflow
- [providers-reference.md](reference/api/providers-reference.md) — mga ID ng provider, alias, credential environment variable
- [channels-reference.md](reference/api/channels-reference.md) — mga kakayahan ng channel at landas ng configuration
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — setup ng encrypted Matrix room (E2EE) at diagnostics ng hindi pagtugon
- [config-reference.md](reference/api/config-reference.md) — mahahalagang config key at secure na default
- [custom-providers.md](contributing/custom-providers.md) — pattern ng integrasyon ng custom provider/base URL
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — setup ng Z.AI/GLM at endpoint matrix
- [langgraph-integration.md](contributing/langgraph-integration.md) — fallback na integrasyon para sa edge case ng model/tool call
- [operations-runbook.md](ops/operations-runbook.md) — day-2 runtime operations at rollback flow
- [troubleshooting.md](ops/troubleshooting.md) — karaniwang failure signature at mga hakbang sa pagbawi
### Mga Kontribyutor / Maintainer
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Seguridad / Pagiging Maaasahan
> Paalala: Kasama sa seksyong ito ang mga proposal/roadmap na dokumento. Para sa kasalukuyang gawi, magsimula sa [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md), at [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Nabigasyon ng Sistema at Pamamahala
- Pinag-isang talaan ng nilalaman: [SUMMARY.md](SUMMARY.md)
- Mapa ng istruktura ng docs (wika/bahagi/function): [structure/README.md](maintainers/structure-README.md)
- Imbentaryo/klasipikasyon ng dokumentasyon: [docs-inventory.md](maintainers/docs-inventory.md)
- Snapshot ng triage ng proyekto: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Iba Pang Wika
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# ZeroClaw Dokümantasyon Merkezi
Bu sayfa, dokümantasyon sisteminin ana giriş noktasıdır.
Son güncelleme: **21 Şubat 2026**.
Yerelleştirilmiş merkezler: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Buradan Başlayın
| Yapmak istediğim… | Bunu oku |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| ZeroClaw'ı hızlıca kurup çalıştırmak | [README.md (Hızlı Başlangıç)](../README.md#quick-start) |
| Tek komutla kurulum | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Göreve göre komut bulmak | [commands-reference.md](reference/cli/commands-reference.md) |
| Yapılandırma anahtarlarını ve varsayılan değerleri hızlıca kontrol | [config-reference.md](reference/api/config-reference.md) |
| Özel sağlayıcı/endpoint yapılandırmak | [custom-providers.md](contributing/custom-providers.md) |
| Z.AI / GLM sağlayıcısını yapılandırmak | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| LangGraph entegrasyon kalıplarını kullanmak | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Çalışma zamanını yönetmek (2. gün runbook) | [operations-runbook.md](ops/operations-runbook.md) |
| Kurulum/çalışma zamanı/kanal sorunlarını gidermek | [troubleshooting.md](ops/troubleshooting.md) |
| Şifreli Matrix odası kurulumu ve tanılama çalıştırmak | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Dokümantasyonu kategoriye göre göz atmak | [SUMMARY.md](SUMMARY.md) |
| Proje PR/sorun anlık görüntüsünü görmek | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Hızlı Karar Ağacı (10 saniye)
- Kurulum veya ilk yükleme mi gerekiyor? → [setup-guides/README.md](setup-guides/README.md)
- Tam CLI/yapılandırma anahtarları mı gerekiyor? → [reference/README.md](reference/README.md)
- Üretim/servis operasyonları mı gerekiyor? → [ops/README.md](ops/README.md)
- Hatalar veya gerilemeler mi görüyorsunuz? → [troubleshooting.md](ops/troubleshooting.md)
- Güvenlik sertleştirme veya yol haritası üzerinde mi çalışıyorsunuz? → [security/README.md](security/README.md)
- Kartlar/çevre birimleri ile mi çalışıyorsunuz? → [hardware/README.md](hardware/README.md)
- Katkı/inceleme/CI iş akışı mı? → [contributing/README.md](contributing/README.md)
- Tam haritayı mı istiyorsunuz? → [SUMMARY.md](SUMMARY.md)
## Koleksiyonlar (Önerilen)
- Başlangıç: [setup-guides/README.md](setup-guides/README.md)
- Referans katalogları: [reference/README.md](reference/README.md)
- Operasyonlar ve dağıtım: [ops/README.md](ops/README.md)
- Güvenlik belgeleri: [security/README.md](security/README.md)
- Donanım/çevre birimleri: [hardware/README.md](hardware/README.md)
- Katkı/CI: [contributing/README.md](contributing/README.md)
- Proje anlık görüntüleri: [maintainers/README.md](maintainers/README.md)
## Hedef Kitleye Göre
### Kullanıcılar / Operatörler
- [commands-reference.md](reference/cli/commands-reference.md) — iş akışına göre komut arama
- [providers-reference.md](reference/api/providers-reference.md) — sağlayıcı kimlikleri, takma adlar, kimlik bilgisi ortam değişkenleri
- [channels-reference.md](reference/api/channels-reference.md) — kanal yetenekleri ve yapılandırma yolları
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — şifreli Matrix odası (E2EE) kurulumu ve yanıt vermeme tanılaması
- [config-reference.md](reference/api/config-reference.md) — yüksek önemli yapılandırma anahtarları ve güvenli varsayılanlar
- [custom-providers.md](contributing/custom-providers.md) — özel sağlayıcı/temel URL entegrasyon kalıpları
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — Z.AI/GLM yapılandırması ve endpoint matrisi
- [langgraph-integration.md](contributing/langgraph-integration.md) — model/araç çağrısı uç durumları için yedek entegrasyon
- [operations-runbook.md](ops/operations-runbook.md) — 2. gün çalışma zamanı operasyonları ve geri alma akışı
- [troubleshooting.md](ops/troubleshooting.md) — yaygın hata imzaları ve kurtarma adımları
### Katkıda Bulunanlar / Bakımcılar
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Güvenlik / Güvenilirlik
> Not: Bu bölüm öneri/yol haritası belgelerini içerir. Mevcut davranış için [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) ve [troubleshooting.md](ops/troubleshooting.md) ile başlayın.
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Sistem Navigasyonu ve Yönetişim
- Birleşik içindekiler: [SUMMARY.md](SUMMARY.md)
- Dokümantasyon yapı haritası (dil/bölüm/işlev): [structure/README.md](maintainers/structure-README.md)
- Dokümantasyon envanteri/sınıflandırması: [docs-inventory.md](maintainers/docs-inventory.md)
- Proje triyaj anlık görüntüsü: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Diğer Diller
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)
+96
View File
@@ -0,0 +1,96 @@
# Центр документації ZeroClaw
Ця сторінка є основною точкою входу до системи документації.
Останнє оновлення: **21 лютого 2026**.
Локалізовані центри: [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [Русский](README.ru.md) · [Français](README.fr.md) · [Tiếng Việt](i18n/vi/README.md).
## Почніть тут
| Я хочу… | Читати це |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Швидко встановити та запустити ZeroClaw | [README.md (Швидкий старт)](../README.md#quick-start) |
| Налаштування однією командою | [one-click-bootstrap.md](setup-guides/one-click-bootstrap.md) |
| Знайти команди за завданням | [commands-reference.md](reference/cli/commands-reference.md) |
| Швидко перевірити ключі конфігурації та значення за замовчуванням | [config-reference.md](reference/api/config-reference.md) |
| Налаштувати власного провайдера/endpoint | [custom-providers.md](contributing/custom-providers.md) |
| Налаштувати провайдера Z.AI / GLM | [zai-glm-setup.md](setup-guides/zai-glm-setup.md) |
| Використовувати шаблони інтеграції LangGraph | [langgraph-integration.md](contributing/langgraph-integration.md) |
| Керувати середовищем виконання (runbook 2-го дня) | [operations-runbook.md](ops/operations-runbook.md) |
| Усунути проблеми встановлення/виконання/каналів | [troubleshooting.md](ops/troubleshooting.md) |
| Запустити налаштування та діагностику зашифрованих кімнат Matrix | [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) |
| Переглянути документацію за категоріями | [SUMMARY.md](SUMMARY.md) |
| Переглянути знімок PR/issues проекту | [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md) |
## Дерево швидких рішень (10 секунд)
- Потрібне налаштування або початкове встановлення? → [setup-guides/README.md](setup-guides/README.md)
- Потрібні точні ключі CLI/конфігурації? → [reference/README.md](reference/README.md)
- Потрібні операції виробництва/сервісу? → [ops/README.md](ops/README.md)
- Бачите збої або регресії? → [troubleshooting.md](ops/troubleshooting.md)
- Працюєте над зміцненням безпеки або дорожньою картою? → [security/README.md](security/README.md)
- Працюєте з платами/периферією? → [hardware/README.md](hardware/README.md)
- Внесок/рецензування/робочий процес CI? → [contributing/README.md](contributing/README.md)
- Хочете повну карту? → [SUMMARY.md](SUMMARY.md)
## Колекції (Рекомендовані)
- Початок роботи: [setup-guides/README.md](setup-guides/README.md)
- Довідкові каталоги: [reference/README.md](reference/README.md)
- Операції та розгортання: [ops/README.md](ops/README.md)
- Документація з безпеки: [security/README.md](security/README.md)
- Обладнання/периферія: [hardware/README.md](hardware/README.md)
- Внесок/CI: [contributing/README.md](contributing/README.md)
- Знімки проекту: [maintainers/README.md](maintainers/README.md)
## За аудиторією
### Користувачі / Оператори
- [commands-reference.md](reference/cli/commands-reference.md) — пошук команд за робочим процесом
- [providers-reference.md](reference/api/providers-reference.md) — ідентифікатори провайдерів, псевдоніми, змінні середовища облікових даних
- [channels-reference.md](reference/api/channels-reference.md) — можливості каналів та шляхи конфігурації
- [matrix-e2ee-guide.md](security/matrix-e2ee-guide.md) — налаштування зашифрованих кімнат Matrix (E2EE) та діагностика відсутності відповіді
- [config-reference.md](reference/api/config-reference.md) — ключові параметри конфігурації та безпечні значення за замовчуванням
- [custom-providers.md](contributing/custom-providers.md) — шаблони інтеграції власного провайдера/базової URL-адреси
- [zai-glm-setup.md](setup-guides/zai-glm-setup.md) — налаштування Z.AI/GLM та матриця endpoint
- [langgraph-integration.md](contributing/langgraph-integration.md) — резервна інтеграція для крайніх випадків моделі/виклику інструментів
- [operations-runbook.md](ops/operations-runbook.md) — операції середовища виконання 2-го дня та потік відкату
- [troubleshooting.md](ops/troubleshooting.md) — типові сигнатури збоїв та кроки відновлення
### Учасники / Супровідники
- [../CONTRIBUTING.md](../CONTRIBUTING.md)
- [pr-workflow.md](contributing/pr-workflow.md)
- [reviewer-playbook.md](contributing/reviewer-playbook.md)
- [ci-map.md](contributing/ci-map.md)
- [actions-source-policy.md](contributing/actions-source-policy.md)
### Безпека / Надійність
> Примітка: цей розділ містить документи пропозицій/дорожньої карти. Для поточної поведінки почніть з [config-reference.md](reference/api/config-reference.md), [operations-runbook.md](ops/operations-runbook.md) та [troubleshooting.md](ops/troubleshooting.md).
- [security/README.md](security/README.md)
- [agnostic-security.md](security/agnostic-security.md)
- [frictionless-security.md](security/frictionless-security.md)
- [sandboxing.md](security/sandboxing.md)
- [audit-logging.md](security/audit-logging.md)
- [resource-limits.md](ops/resource-limits.md)
- [security-roadmap.md](security/security-roadmap.md)
## Навігація системою та управління
- Єдиний зміст: [SUMMARY.md](SUMMARY.md)
- Карта структури документації (мова/розділ/функція): [structure/README.md](maintainers/structure-README.md)
- Інвентаризація/класифікація документації: [docs-inventory.md](maintainers/docs-inventory.md)
- Знімок тріажу проекту: [project-triage-snapshot-2026-02-18.md](maintainers/project-triage-snapshot-2026-02-18.md)
## Інші мови
- English: [README.md](README.md)
- 简体中文: [README.zh-CN.md](README.zh-CN.md)
- 日本語: [README.ja.md](README.ja.md)
- Русский: [README.ru.md](README.ru.md)
- Français: [README.fr.md](README.fr.md)
- Tiếng Việt: [i18n/vi/README.md](i18n/vi/README.md)

Some files were not shown because too many files have changed in this diff Show More