The curiosity engine for AI agents. Curiosity never rests.
Project description
๐พ CurioClaw
The curiosity engine for AI agents.
Curiosity never rests. โโ February 2026, by Yiming ๐พ
From HEAL Lab, CUHK-Shenzhen
Ziwen Wang ยท Zhangtianyi Chen ยท Zijian Wang ยท Yuhao Shen ยท Juexiao Zhou
The Problem
AI agents are reactive. They wait for instructions, execute tasks, and stop. They never wonder "what else should I know?" or "what changed since yesterday?"
CurioClaw gives agents an intrinsic drive to explore. It's an independent curiosity engine that makes agents proactively discover knowledge gaps, search the web, and report findings โ all without being asked.
How It Works
CurioClaw runs a 7-step curiosity cycle:
โโโโโโโโโโโโ
โ PERCEIVE โ โ Extract curiosity signals from recent conversations
โโโโโโฌโโโโโโ
โผ
โโโโโโโโโโโโ
โ SCORE โ โ Rate novelty, relevance, learnability (hard + soft scoring)
โโโโโโฌโโโโโโ
โผ
โโโโโโโโโโโโ
โ GOVERN โ โ Check governance level (autonomous / guided / supervised)
โโโโโโฌโโโโโโ
โผ
โโโโโโโโโโโโ
โ EXPLORE โ โ Investigate top signals via web search
โโโโโโฌโโโโโโ
โผ
โโโโโโโโโโโโ
โ RECORD โ โ Save findings to JSONL memory
โโโโโโฌโโโโโโ
โผ
โโโโโโโโโโโโ
โ COMPRESS โ โ Periodically compress old memories
โโโโโโฌโโโโโโ
โผ
โโโโโโโโโโโโ
โ NOTIFY โ โ Proactively tell the user if something scored high
โโโโโโโโโโโโ
Key design principle: The Agent (LLM) handles all reasoning โ reflecting,
judging, searching, summarizing. The Python code (curiocore/) handles only
deterministic computation โ scoring math, deduplication, JSONL I/O, compression.
No LLM API calls in the Python code.
Three trigger modes:
- Heartbeat โ automatic, runs on a timer when the user is idle
- Post-conversation โ after a substantive dialogue ends
- Manual โ user says "curiosity check", "explore", or "what's new"
Quick Start (OpenClaw)
# 1. Install the curiocore package
pip install curiocore
# 2. Clone the repo for adapter files
git clone https://github.com/ziwenwang28/CurioClaw.git
cd CurioClaw
# 3. Copy skill files to your OpenClaw workspace
mkdir -p ~/.openclaw/workspace/skills/curiocore
cp adapters/openclaw/SKILL.md ~/.openclaw/workspace/skills/curiocore/SKILL.md
# 4. Add heartbeat config
cat adapters/openclaw/HEARTBEAT.md >> ~/.openclaw/workspace/HEARTBEAT.md
# 5. Configure heartbeat interval (30 minutes recommended)
openclaw config set agents.defaults.heartbeat.every "30m"
# 6. Restart and test
openclaw gateway restart
Then send your agent: "curiosity check" โ it should run the curiosity cycle and reply with a ๐ก message summarizing its discoveries.
For detailed setup instructions, see adapters/openclaw/install.md.
Features
- Zero LLM calls in Python โ all intelligence lives in the Agent following SKILL.md
- Dual scoring โ hard metrics (cosine similarity, Jaccard, heuristics) blended 50/50 with the Agent's soft judgment
- JSONL memory โ simple, inspectable, streamable storage
- Rolling compression โ memory stays lean over time (auto-compresses at 500 entries)
- Three-tier governance โ from full autonomy to human-supervised exploration
- Smart notifications โ only notifies the user when discoveries score above threshold (composite > 0.7)
- Idle-aware โ won't interrupt active conversations; waits for the user to go idle
Scoring System
Each curiosity signal is scored on three dimensions:
| Dimension | Weight | What it measures |
|---|---|---|
| Novelty | 40% | How new is this compared to past explorations? |
| Relevance | 35% | How aligned with the user's interests? |
| Learnability | 25% | Can we learn something actionable by searching? |
Each dimension gets two scores โ a hard score (computed by Python using cosine similarity, keyword matching, and structural heuristics) and a soft score (the Agent's own judgment). These are blended 50/50 into a composite score.
The Agent only notifies the user when composite > 0.7.
Governance Model
| Level | Who decides? | Use case |
|---|---|---|
autonomous |
Agent explores freely | Background research bots |
guided |
Human sets directions, agent picks topics | Personal learning assistant |
supervised |
Agent proposes, human approves | Production systems |
Architecture
curiocore/ โ Pure Python computation (no LLM calls)
โโโ scorer.py โ Hard metric computation (cosine sim, Jaccard, learnability)
โโโ signals.py โ Signal deduplication logic
โโโ memory.py โ JSONL read/write + compression
โโโ config.py โ Configuration dataclasses
โโโ types.py โ Data structures (Signal, CuriosityScore, etc.)
โโโ run_curiosity.py โ CLI tool (score, store, compress, status, dedup)
adapters/ โ Integration layers for agent frameworks
โโโ openclaw/ โ OpenClaw adapter
โ โโโ SKILL.md โ Agent instructions (the curiosity cycle)
โ โโโ HEARTBEAT.md โ Heartbeat trigger logic
โ โโโ install.md โ Installation guide
โ โโโ README.md โ Adapter overview
โโโ _template/ โ Template for new adapters
site/ โ Landing page
โโโ index.html
Adapters
CurioClaw is framework-agnostic. Adapters connect it to specific agent frameworks:
| Adapter | Framework | Status |
|---|---|---|
openclaw/ |
OpenClaw | โ Working |
_template/ |
Your framework here | Template |
Want to add an adapter? See adapters/README.md or open an adapter request.
Configuration Reference
| Setting | Where | Default | Description |
|---|---|---|---|
| Heartbeat interval | openclaw config |
30m |
How often the agent wakes up |
| Cycle cooldown | HEARTBEAT.md |
10 min | Minimum time between curiosity cycles |
| User idle check | HEARTBEAT.md |
10 min | Don't run if user was active recently |
| Notification threshold | SKILL.md Step 7 |
composite > 0.7 | Minimum score to send ๐ก notification |
| Compression threshold | SKILL.md Step 6 |
500 entries | When to compress old memories |
| Max explorations/cycle | SKILL.md Step 2d |
3 | Max signals to explore per cycle |
Status
๐ง Early Prototype (v0.1.0-alpha)
This is the very first public release of CurioClaw โ an early prototype to share our vision. Everything you see here represents our initial design and architecture; every component is in its earliest form.
We will ship significant updates within the next week, including improved scoring, better notification logic, more robust heartbeat integration, and documentation.
v1.0.0 target: March 14, 2026.
We welcome early feedback, ideas, and contributions โ but please expect breaking changes before v1.0.0. Star the repo to follow our progress.
Star History
If CurioClaw is useful, consider giving it a โญ โ it helps others find the project.
License
MIT โ use it anywhere, for anything.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file curiocore-0.1.0.tar.gz.
File metadata
- Download URL: curiocore-0.1.0.tar.gz
- Upload date:
- Size: 46.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09bf65ac25e8867cae6063947502d2771067d729e9fdcfdec5b137ed63b86bca
|
|
| MD5 |
04717937a196b8a4eab560c7d5e81bd6
|
|
| BLAKE2b-256 |
615c72494c519c12649b7759184f920a277b1567de953a250c0faa55e5947cde
|
File details
Details for the file curiocore-0.1.0-py3-none-any.whl.
File metadata
- Download URL: curiocore-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
341070d97c1d1c8f9254bb8b3bacff7c66c0b31fd546971dbdcbe4bcfbe6aa20
|
|
| MD5 |
0276d71fc6a4602592337807718315dc
|
|
| BLAKE2b-256 |
e76520ebf1d2bb357d10e4d3517f60e600759ab071ec942dcaeb2b0bd46b72c0
|