Skip to content
Gully Burns edited this page Mar 1, 2026 · 16 revisions

Skillful-Alhazen

A TypeDB-powered agentic knowledge notebook for developers — run interactively with Claude Code or deployed persistently via OpenClaw

"The duty of the man who investigates the writings of scientists, if learning the truth is his goal, is to make himself an enemy of all that he reads, and, applying his mind to the core and margins of its content, attack it from every side."

— Ibn al-Haytham (Alhazen), 965-1039 AD

What is Alhazen?

Alhazen is an agentic curation system with Notebook memory.

The system uses a TypeDB knowledge graph, runs Python scripts, and builds structured understanding from unstructured sources — job postings, disease databases, scientific literature. You never write queries against the database or call APIs directly. Claude handles all of it.

Why 'Skillful'?

Within modern production-level coding agents (Claude, Goose, OpenClaw, etc.) 'skills' are a lightweight way of providing capabilities to an agent by specifying how the agent should attempt certain tasks, maybe even providing some scripts that the agent could call. Here, we lean into this approach as a design choice. Alhazen is intended to mainly use skills to accomplish its goals.

We provide a repository of example skills to use: alhazen-skill-examples

System Organization

The system has three layers:

  • Agent — the agentic interface (either Claude or OpenClaw).
  • TypeDB — the knowledge graph backend, acting as the ontological memory.
  • Skills — domain-specific modules combining a TypeDB schema namespace, Python scripts, a SKILL.md file to help decide which skills should be used for a given task, a USAGE.md instruction file to describe how to perform the task itself. Finally, a dashboard component that displays the relevant data being captured.

Two Ways to Run Alhazen

A. Claude Code (Interactive / Development)

Open a Claude Code session in the project directory. Claude reads the skill files, calls Python scripts, and stores results in TypeDB. Best for exploration, sensemaking, and building new skills.

cd skillful-alhazen
make db-start    # start TypeDB
claude           # open Claude Code

B. OpenClaw (Persistent / Production)

OpenClaw deploys Alhazen as a persistent service — cron-scheduled foraging, Telegram notifications, always-on knowledge accumulation. No laptop required.

Telegram → OpenClaw → Claude Code → TypeDB
                    ↑
              cron forager (nightly)

See Deployment for the progression from local dev to OpenClaw on Mac Mini to OpenClaw on a VPS.

Demonstration Skills

These two skills are presented as examples for demonstration purposes:

Skill Description OpenClaw Use
Skills: Jobhunt Track job applications — automated forager, fit analysis, skill gap identification Nightly forager cron, Telegram triage notifications
Skills: Rare Disease Build 360° disease knowledge graphs from MONDO IDs — phenome, genome, therapeutome Batch ingestion from disease lists

Why TypeDB?

TypeDB is not just a document store — it's the ontological foundation of Alhazen. The schema defines the concepts Claude reasons with:

identifiable-entity (abstract root)
├── domain-thing              # Real-world objects: diseases, genes, companies, jobs
├── collection                # Typed sets: investigations, search campaigns, corpora
└── information-content-entity (abstract)
    ├── artifact              # Raw captured content (API responses, HTML, PDFs)
    ├── fragment              # Extracted pieces (requirements, phenotype associations)
    └── note                  # Claude's analysis (fit scores, mechanism notes, syntheses)

This hierarchy guides skill design: a gene or a job posting is not information content. Only artifacts, fragments, and notes carry content. Domain objects are what you reason about; ICEs are what you reason with.

TypeDB's pattern-matching queries let Claude reason across skill boundaries.

Quick Example: Overnight Forager for Job Announcements

With OpenClaw deployed on a Mac Mini:

10pm:  cron job triggers → job_forager.py heartbeat
       → searches Greenhouse, LinkedIn, Remotive
       → filters by your skill profile (min relevance 0.3)
       → stores 12 new candidates in TypeDB

10am:  you open Telegram
       → "12 new job candidates found overnight"
       → tap to triage: promote 3, dismiss 9

Later: Claude Code session
       → "Analyze the 3 promoted candidates"
       → Claude reads JD artifacts, runs sensemaking workflow
       → fit scores, skill gap notes, company research stored

Documentation

Document Description
Getting Started Installation and first steps
Deployment Local → Mac Mini → VPS progression
OpenClaw Configuration Gateway, cron jobs, Tailscale Serve
Skill Architecture How to build skills — the three-component pattern
Design Concepts Architecture and design principles
Schema Reference TypeDB schema docs — type hierarchy, ER diagrams, query examples
Dashboard Organization Next.js dashboard structure
History The story of Ibn al-Haytham and project origins

Links

Clone this wiki locally