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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion README.en.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# ClawScope

<p align="center">
<img src="public/images/covers/clawscope-cover-v4-animated-en.webp" alt="ClawScope cover" width="100%" />
<img src="public/images/covers/clawscope-cover-v5-animated-en.webp" alt="ClawScope cover" width="100%" />
</p>

**Memory Made Visible, Evolution Enabled** · [中文](README.zh.md)
Expand All @@ -17,6 +17,12 @@ An OpenClaw memory and evolution management tool — a cross-platform desktop ap
- **Configuration Management** — Centrally manage OpenClaw node configurations and state
- **Cross-Platform** — Native desktop app for Windows / macOS / Linux

## Architecture Overview

ClawScope is a local-first desktop control plane: React renders the memory, configuration, and evolution workspaces; Tauri IPC forwards UI actions into the Rust command layer; and Rust talks to OpenClaw Gateway over WebSocket to access agents, memory, configuration, and evolution targets. Local JSON storage only keeps connection identity, endpoints, audit history, and snapshots for reconnect, traceability, and rollback.

![ClawScope system architecture](public/images/diagrams/clawscope-system-architecture.svg)

## Quick Start

```bash
Expand Down
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# ClawScope

<p align="center">
<img src="public/images/covers/clawscope-cover-v4-animated-en.webp" alt="ClawScope cover" width="100%" />
<img src="public/images/covers/clawscope-cover-v5-animated-en.webp" alt="ClawScope cover" width="100%" />
</p>

**Memory Made Visible, Evolution Enabled** · [中文](README.zh.md)
Expand All @@ -17,6 +17,12 @@ An OpenClaw memory and evolution management tool — a cross-platform desktop ap
- **Configuration Management** — Centrally manage OpenClaw node configurations and state
- **Cross-Platform** — Native desktop app for Windows / macOS / Linux

## Architecture Overview

ClawScope is a local-first desktop control plane: React renders the memory, configuration, and evolution workspaces; Tauri IPC forwards UI actions into the Rust command layer; and Rust talks to OpenClaw Gateway over WebSocket to access agents, memory, configuration, and evolution targets. Local JSON storage only keeps connection identity, endpoints, audit history, and snapshots for reconnect, traceability, and rollback.

![ClawScope system architecture](public/images/diagrams/clawscope-system-architecture.svg)

## Quick Start

```bash
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions public/images/covers/clawscope-cover-v5-final-en.meta.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
ClawScope README cover post-processing
locale=en
background=D:\Dev\claw-scope\public\images\covers\clawscope-cover-bg-v3.png
icon=D:\Dev\claw-scope\icon-source.png
static=D:\Dev\claw-scope\public\images\covers\clawscope-cover-v5-final-en.png
animated_webp=D:\Dev\claw-scope\public\images\covers\clawscope-cover-v5-animated-en.webp
animated_gif=D:\Dev\claw-scope\public\images\covers\clawscope-cover-v5-animated-en.gif
canvas=3840x2160
icon_display=900x900
icon_center=(860, 1080)
icon_policy=uniform upscale from icon-source.png, preserve silhouette/proportions/colors/transparency; no redraw or recolor
motion_language=flowing memory currents, pulsing knowledge nodes, semantic search ripples, OpenClaw ecosystem paths, evolution diff streams
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added tmp/cover-restore/v5-en-frame0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 5 additions & 4 deletions tmp/imagegen/postprocess_clawscope_cover.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
OUT_DIR = ROOT / "public/images/covers"
LOCALE = os.environ.get("COVER_LOCALE", "zh").strip().lower()
IS_EN = LOCALE in {"en", "eng", "english"}
OUTPUT_VERSION = "v4"
OUTPUT_VERSION = os.environ.get("COVER_VERSION", "v4").strip() or "v4"
OUTPUT_SUFFIX = "-en" if IS_EN else ""
OUT_STATIC = OUT_DIR / f"clawscope-cover-{OUTPUT_VERSION}-final{OUTPUT_SUFFIX}.png"
OUT_WEBP = OUT_DIR / f"clawscope-cover-{OUTPUT_VERSION}-animated{OUTPUT_SUFFIX}.webp"
Expand Down Expand Up @@ -246,7 +246,7 @@ def draw_typography(base: Image.Image, scale: float) -> None:

draw = ImageDraw.Draw(base)
title_font = font(LATIN_FONT_BOLD, max(24, int(286 * scale)))
slogan_font = font(LATIN_FONT_BOLD if IS_EN else SC_FONT, max(20, int((98 if IS_EN else 116) * scale)))
slogan_font = font(LATIN_FONT if IS_EN else SC_FONT, max(20, int((98 if IS_EN else 116) * scale)))
sub_font = font(LATIN_FONT if IS_EN else SC_FONT, max(12, int((60 if IS_EN else 68) * scale)))
label_font = font(LATIN_FONT_BOLD, max(10, int(42 * scale)))

Expand Down Expand Up @@ -280,8 +280,9 @@ def draw_typography(base: Image.Image, scale: float) -> None:
slogan = "Memory Made Visible, Evolution Enabled" if IS_EN else "记忆可见,进化可期"
sy = y + 370 * scale
slogan_color = (4, 50, 76, 255)
# Same-color micro-offsets create weight without a visible shadow or outline.
for dx, dy in ((0, 0), (1 * scale, 0), (0, 1 * scale), (1 * scale, 1 * scale)):
slogan_offsets = ((0, 0),) if IS_EN else ((0, 0), (1 * scale, 0), (0, 1 * scale), (1 * scale, 1 * scale))
# Chinese glyphs need slight reinforcement at README scale; English stays lighter.
for dx, dy in slogan_offsets:
draw.text((x + dx, sy + dy), slogan, font=slogan_font, fill=slogan_color)

sub = (
Expand Down
Loading