This commit is contained in:
138
docs/analysis/cowagent-vs-waggle-2026-07-09.md
Normal file
138
docs/analysis/cowagent-vs-waggle-2026-07-09.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# CowAgent vs Waggle OS — Competitive Teardown & Steal List
|
||||
|
||||
**Date:** 2026-07-09 · **Method:** 4 parallel Opus deep-read agents over a fresh clone of
|
||||
[`zhayujie/CowAgent`](https://github.com/zhayujie/CowAgent) (commit 2026-07-08) + comparison against this repo.
|
||||
All CowAgent claims below are code-verified with file:line by the analysts.
|
||||
|
||||
---
|
||||
|
||||
## 0. What CowAgent is
|
||||
|
||||
**CowAgent = `chatgpt-on-wechat` rebranded in place.** Same repo (created Aug 2022), so its "super AI
|
||||
assistant" pivot launched with **45.9k stars / 10.3k forks** already attached; last push was yesterday,
|
||||
release cadence ~2-3 weeks (v2.0.0 Feb → v2.1.3 Jul 2026). Python monolith (~73k LOC / 292 files), MIT.
|
||||
Commercial parent: **LinkAI** (link-ai.tech) — the open-core-funnel structure is *identical* to
|
||||
Waggle→KVARK: OSS demand-gen → hosted cloud + enterprise (workspaces/RBAC/audit all cloud-only, none in OSS).
|
||||
|
||||
Feature surface is a near-mirror of Waggle: 3-tier memory + nightly distillation, hybrid keyword+vector
|
||||
retrieval, markdown knowledge wiki + graph, self-evolution, skill hub with one-click install, MCP,
|
||||
multi-model routing, Electron desktop + web console + CLI, 13 IM/chat channels.
|
||||
|
||||
---
|
||||
|
||||
## 1. Head-to-head verdict
|
||||
|
||||
| Axis | Winner | Evidence |
|
||||
|---|---|---|
|
||||
| **Memory substrate** | **Waggle, decisively** | CowAgent: brute-force O(N) vector scan (no ANN/sqlite-vec), no reranker, naive 0.7/0.3 linear fusion on mismatched score scales, LLM-prompt-only dedup/contradiction handling, nightly **lossy whole-file rewrite** of MEMORY.md with zero provenance, no GDPR erasure, no identity/awareness layers, no entity extraction (its "knowledge graph" is just markdown links), **zero benchmarks**. Waggle: sqlite-vec + cross-encoder reranker, FrameStore provenance, sticky erasure, LoCoMo 86.49% SOTA. |
|
||||
| **Security** | **Waggle, decisively** | CowAgent has **no prompt-injection defense at all**, no trust model, no permission tiers, no cost tracker; SSRF guard is opt-in and OFF by default; bash tool has only a minimal catastrophic-command blocklist; web console is single-user shared-password. Waggle: injection-scanner (mandated), trust-model, permissions, Tauri IPC allowlist, vault, cost-tracker. |
|
||||
| **Multi-agent / personas** | **Waggle** | CowAgent is explicitly single-agent, one AGENT.md, no persona layer, no orchestration. Waggle: 22 personas, subagent-orchestrator, coordinator, workflow-composer, WaggleDance. |
|
||||
| **Engineering rigor** | **Waggle** | CowAgent grade **C+/B−**: only 9 of 217 tests gated in CI, no lint/typecheck/coverage gates, ~41% typing, 5,028-line god file (`web_channel.py`), unpinned heavy deps. Waggle: ~8k gated Vitest tests, Playwright E2E, strict tsc, CI gates, production signoff. |
|
||||
| **Team / governance / billing** | **Waggle** | CowAgent OSS has none (all punted to LinkAI cloud). Waggle has tiers+Stripe+governance in-product. |
|
||||
| **Distribution & reach** | **CowAgent, decisively** | 13 channels incl. the entire WeChat/WeCom/QQ ecosystem + Telegram/Slack/Discord (Waggle: **0** IM channels). One-line `curl \| bash` installer with China-network resilience (Gitee/pip-mirror fallbacks) and zero-key boot. 45.9k-star inherited brand, trending, 4-language docs (246 .mdx — best-in-class). |
|
||||
| **Online self-evolution** | **CowAgent** | Runtime, conversation-driven evolution loop (see steal #1). Waggle's evolution is offline/eval-gated only. |
|
||||
| **Docs** | **CowAgent** | 246 .mdx, trilingual, per-channel guides. Genuinely excellent. |
|
||||
|
||||
**Net:** CowAgent out-distributes us (channels, installer, brand gravity, docs) but is a shallower,
|
||||
single-user, security-weak product with a hobbyist-grade memory engine and no proof. Waggle's moat
|
||||
(benchmarked substrate, security, teams, rigor) is real. The asymmetric move: **graft their funnel
|
||||
mechanics onto our core** — their moat (WeChat ecosystem + 45k stars) is the only thing we can't copy.
|
||||
|
||||
---
|
||||
|
||||
## 2. Steal list (consolidated, ranked by value/effort)
|
||||
|
||||
### Tier 1 — high value, low-to-medium effort
|
||||
|
||||
1. **"Dream Diary" — user-facing nightly consolidation narrative.** Their Deep Dream distillation
|
||||
(`agent/memory/summarizer.py:414`, prompt :55-141, diary write :585) emits a second `[DREAM]` section: a
|
||||
short narrative of what was merged/conflicted/cleaned, saved to `memory/dreams/YYYY-MM-DD.md` and surfaced
|
||||
in a Self-Evolution UI tab. Waggle already *does* the substance (reconcile, contradiction-detector,
|
||||
dedup) but shows the user nothing. One extra LLM output section + one UI surface = observability,
|
||||
delight, and a retention mechanic. **Cheapest high-impact steal.**
|
||||
2. **Anti-nag file-change gate + "fix the source, not the symptom."** Their evolution reviewer may only
|
||||
notify the user if a watched file *actually changed* (mtime/size snapshot diff, `evolution/executor.py:459`);
|
||||
the prompt forbids logging a symptom to memory when the root cause is an editable skill
|
||||
(`evolution/prompts.py:63-68`). Portable discipline for our evolution + memory writes.
|
||||
3. **Online idle-triggered self-evolution.** Daemon scans sessions every 60s; fires on idle ≥ N sec AND
|
||||
(enough turns OR context >80% of budget) (`evolution/trigger.py:38-53`). Spawns an isolated reviewer
|
||||
agent with a restricted toolset and workspace-confinement guards (`executor.py:117-228, 409-444`),
|
||||
default-`[SILENT]`, with backup_id + `evolution_undo`. It patches skills, **completes promised-but-unfinished
|
||||
deliverables**, and rarely writes memory. Waggle has all the pieces (subagent-orchestrator,
|
||||
evolution-orchestrator, cron-store) but no runtime conversation-driven loop. **Highest strategic value.**
|
||||
4. **IM channels as distribution surface.** Their `channel_factory.py` + `ChatChannel` base +
|
||||
per-platform `*_message.py` normalization is a clean ~2-file-per-platform adapter pattern. Waggle has
|
||||
zero IM reach; "your Waggle workspace agent, live in Slack/Telegram/Discord" is a reach multiplier and
|
||||
fits the Teams tier perfectly (Slack first — it's the Teams buyer's habitat). Port the pattern over the
|
||||
Fastify sidecar; skip the China stack.
|
||||
5. **One-line installer + interactive setup wizard.** `run.sh` (1,362 lines): dep detection → clone with
|
||||
mirror fallback → venv/pip with proxy handling → interactive model+channel wizard writing config →
|
||||
start → CLI handoff. Zero-key boot (config works before any API key; keys added in UI). Waggle has no
|
||||
`curl | bash` self-host story for the sidecar.
|
||||
|
||||
### Tier 2 — solid, medium effort
|
||||
|
||||
6. **Embedding-based on-demand MCP tool retrieval.** Above a threshold (20), tool descriptions are
|
||||
embedded and only top-k relevant tools are injected per turn, union-only within a run so schemas never
|
||||
vanish mid-run (`tool_manager.py:606-676`). Direct upgrade path for our MCP + tool-filter as catalogs grow.
|
||||
7. **MCP hot-reload.** `(mtime, sha256)` signature diff on mcp.json → add/remove/restart only changed
|
||||
servers, no process restart (`tool_manager.py:378-439`). Plus background async MCP boot so the agent
|
||||
serves traffic while `npx`/`uvx` servers start.
|
||||
8. **Hard-capped always-injected core digest.** `MEMORY.md` ≤50 items / 200 lines / 25KB, LLM-maintained
|
||||
dense, always in prompt, with "spillover → memory_search" pointer (`workspace.py:110,186`). A clean
|
||||
token-budget pattern to layer on top of recallMemory/IdentityLayer.
|
||||
9. **Tiered consecutive-failure loop breaker.** 5 identical-arg calls → stop; 3 identical-arg failures →
|
||||
stop; 6 same-tool diff-arg failures → stop; 8 same-tool failures → hard abort with user-facing give-up
|
||||
copy (`agent_stream.py:269-330`). More granular than our boolean loop-guard.
|
||||
10. **Per-capability model routing UI.** Chat/vision/image-gen/ASR/TTS/embedding each routed to a
|
||||
different vendor with one click in the web console. We have LiteLLM underneath; we lack the picker UX.
|
||||
11. **Multi-source skill install grammar + SKILL.md interop.** One resolver accepts Hub name,
|
||||
`owner/repo`, git URL/SSH, local path, direct SKILL.md URL, zip/tar URL, `clawhub:`/`github:` prefixes —
|
||||
with SHA-256 checksums and zip-slip guards (`cli/commands/skill.py`). They use Anthropic's SKILL.md
|
||||
frontmatter convention, making skills cross-tool with Claude Code/OpenClaw — a marketplace-liquidity
|
||||
play our marketplace should join.
|
||||
|
||||
### Tier 3 — nice-to-have / situational
|
||||
|
||||
12. **`context_summary_callback` dual-use** — one summarization LLM call both persists trimmed turns to
|
||||
daily memory and re-injects the summary into live context (`summarizer.py:352`). Saves a call in compaction.
|
||||
13. **Scheduler/cron-pair stripping before long-term memory flush** (`summarizer.py:770`) — keeps
|
||||
automated noise out of long-term memory; directly relevant to WaggleDance signals.
|
||||
14. **Retrieval-time temporal decay** — exp half-life 30d multiplier at fusion time (`manager.py:472`).
|
||||
~~Complementary to our write-time dating; trivial add.~~ **ALREADY SHIPPED (verified 2026-07-11
|
||||
Tier 3 recon): `packages/hive-mind-core/src/mind/scoring.ts:52-63` has exact 30d-half-life
|
||||
exponential decay, write-time anchored, default ON via 'balanced' profile. Do not re-recon.**
|
||||
15. **Skill auto-enable by requirement satisfaction** — skills gate on `requires.env/bins` presence and
|
||||
surface "setup needed" hints (`agent/skills/config.py`). Nice marketplace UX.
|
||||
16. **Trigram FTS5 cascade for CJK keyword search** (`storage.py:952`) — only if we target non-Latin markets.
|
||||
17. **Scheduler as agent tool with `ai_task` mode** — cron/interval/once tasks that re-invoke the agent
|
||||
and push results to the originating channel (`scheduler_tool.py`). We have cron-store; theirs is a
|
||||
cleaner agent-facing proactivity surface.
|
||||
|
||||
### Explicitly NOT worth stealing
|
||||
- Their retrieval engine (we're strictly better), their knowledge graph (link-parsing only), their
|
||||
security model (worse on every axis), Electron+PyInstaller packaging (Tauri is superior), voice-provider
|
||||
breadth (18 ASR/TTS vendors — off-positioning for us).
|
||||
|
||||
---
|
||||
|
||||
## 3. Strategic read
|
||||
|
||||
1. **They validated our exact business model** — MIT OSS assistant → cloud/enterprise funnel (LinkAI ≈ KVARK).
|
||||
They're running it with a 45.9k-star head start and daily commits. This raises urgency on our OSS
|
||||
launch (hive-mind sits at 0 stars) — the SOTA-gated launch strategy now has a fast-moving reference competitor.
|
||||
2. **Their moat is distribution, not tech.** WeChat-ecosystem channels + inherited brand + one-line
|
||||
install. Nothing in their core survives contact with our substrate on quality, but none of our quality
|
||||
is *visible* the way "works in your WeChat/Slack in 2 minutes" is.
|
||||
3. **Differentiation story writes itself:** benchmarked memory (86.49 LoCoMo vs their zero evidence),
|
||||
security (injection scanning vs none), teams/governance in-product (vs cloud-only), test rigor
|
||||
(8k gated tests vs 9). Useful ammunition for waggle-os.ai comparison copy.
|
||||
4. **Their one genuine capability lead** — runtime self-evolution that finishes unfinished tasks and
|
||||
patches its own skills from live conversations — is buildable on infrastructure we already have, and
|
||||
would neutralize their best demo.
|
||||
|
||||
## 4. Source reports
|
||||
|
||||
Full per-domain analyst reports (memory/knowledge, agent core, distribution, code quality) were produced
|
||||
2026-07-09; key findings are consolidated above. Clone analyzed at commit `2026-07-08 fix(desktop):
|
||||
support web_password auth`.
|
||||
Reference in New Issue
Block a user