What's Changed
lazyclaw 4.3.0 adds Hermes-style self-improving skills and OpenClaw-style mobile control on top of the multi-provider CLI.
✨ Added
- Self-improving skills —
agent skill-synthdistils a finished task into a reusableSKILL.md(When to Use / Procedure / Pitfalls / Verification). A compact skills index is injected into agent prompts and the new read-onlyskill_viewtool loads a full skill on demand (progressive disclosure).skills curate/skills classifyage agent-authored skills active → stale (30d) → archived (90d). New per-agentskillWriteknob (defaultmanual). - Mobile control —
telegram listenandmatrix listeninbound bridges (long-poll, zero-install, no SDK), a channel-agnosticPOST /inboundrelay for any other platform, and an Ed25519 device gateway on the daemon (challenge → manual approve → rotated bearer token) over HTTP + SSE:nodes pending | approve | revoke | devices. - Remote exec-approval — sensitive tool calls (
bash/write) can be gated on a human decision pushed to a paired device over the gateway SSE stream (task tick --approve-url,POST /exec/request↔POST /gateway/exec/resolve). - Workspace
HEARTBEAT.mdfor proactive routines.
🔧 Changed
skill_viewjoins the default agent tool whitelist, so new agents recall skills out of the box.- Reflection and skill synthesis now share one provider-adapter resolver and a shared secret-redaction module; redaction was broadened to GitHub PATs, Google API keys, JWTs, case-insensitive
*key/token/secret/passwordassignments, and URL-embedded credentials.
🔒 Security
- Device tokens are stored owner-only (
0600), compared in constant time, and rotated on re-approval; challenge nonces are single-use with bounded, self-healing registries; pairing-request and SSE tables are capped; transcript role-label injection and prompt-injection-to-persistence vectors are closed; auto-synthesised skills never overwrite human-authored ones. Hardened across multiple adversarial-review passes.
📝 Notes
- The device gateway runs over HTTP + SSE (no
wsdependency). Expose the daemon remotely only behind a tunnel (Tailscale / Cloudflare) + TLS +--auth-token. - SDK-backed channels (Discord DMs, WhatsApp, Signal, Email) are not bundled — relay them through
/inbound, or add them later behind an explicit dependency review on thechannels/base.mjscontract.
Full Changelog: 5065304...v4.3.0