Skip to main content

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

License: MIT CI


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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

curiocore-0.1.0.tar.gz (46.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

curiocore-0.1.0-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

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

Hashes for curiocore-0.1.0.tar.gz
Algorithm Hash digest
SHA256 09bf65ac25e8867cae6063947502d2771067d729e9fdcfdec5b137ed63b86bca
MD5 04717937a196b8a4eab560c7d5e81bd6
BLAKE2b-256 615c72494c519c12649b7759184f920a277b1567de953a250c0faa55e5947cde

See more details on using hashes here.

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

Hashes for curiocore-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 341070d97c1d1c8f9254bb8b3bacff7c66c0b31fd546971dbdcbe4bcfbe6aa20
MD5 0276d71fc6a4602592337807718315dc
BLAKE2b-256 e76520ebf1d2bb357d10e4d3517f60e600759ab071ec942dcaeb2b0bd46b72c0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page