A knowledge base that gets smarter the more you use it
Project description
Spikuit
A knowledge base that gets smarter the more you use it.
What is Spikuit?
Spikuit (spike + circuit, pronounced /spaɪ.kɪt/) is a personal knowledge system built around one idea: your knowledge base should learn from you, not just store things.
Every time you search, review, or ask a question, Spikuit quietly adapts — boosting what's useful, connecting related ideas, and surfacing what you're about to forget.
It works as:
- A self-improving knowledge base — search quality gets better through usage, not re-indexing
- A study partner — an AI tutor that teaches, quizzes, and coaches based on what you actually know
- An agent's brain — a knowledge graph that AI agents can read, write, and learn from
What makes it different?
| Anki | Obsidian + SRS | Spikuit | |
|---|---|---|---|
| Scheduling | Per-card | Per-note | Per-concept, connected |
| Knowledge structure | Flat deck | Manual links | Auto-growing graph |
| Search | Keyword | Keyword + tags | Semantic + graph-weighted |
| Retrieval quality | Static | Static | Improves with usage |
| AI integration | Limited | Plugins | Built-in (agent-native) |
Spikuit doesn't replace these tools — it explores what becomes possible when you combine a knowledge graph, spaced repetition, and AI agents into one system.
Use Cases
"I want to remember what I learn"
You: /tutor
Tutor: You have 5 concepts due. Let's start with Functor —
it's a prerequisite for Monad which is also due.
[teaches the concept, then quizzes you]
You: [answers]
Tutor: Good, but you mixed up the convergence condition.
Here's what actually happens: ...
[re-explains, then tries a different question angle]
Review concepts with an AI tutor that adapts to your understanding level. It doesn't just quiz you — it teaches weak areas, gives feedback on mistakes, and adjusts difficulty based on how well you know each concept.
"I want to build a knowledge base that's actually searchable"
# Add knowledge
spkt add "# Functor\n\nA mapping between categories." -t concept -d math
spkt add "# Monad\n\nA monoid in endofunctors." -t concept -d math
# Search — results ranked by relevance, how well you know each concept,
# and how central it is in your knowledge graph
spkt retrieve "category theory"
The more you use it, the better search gets. Concepts you review often rank higher. Related concepts surface together. Unhelpful results get pushed down automatically.
"I want an AI that knows what I know"
from spikuit_core import QABotSession
session = QABotSession(circuit, persist=True)
results = await session.ask("What is a functor?")
# Results get better over time:
# - Follow-up questions auto-penalize unhelpful prior results
# - Accepting results boosts them for future queries
# - The graph remembers what's useful across sessions
await session.accept([results[0].neuron_id])
Give an AI agent a Spikuit brain, and it can search your knowledge, add new concepts from conversations, and track what you've mastered vs. what needs review.
How It Works (in brief)
Spikuit organizes knowledge as a graph — concepts are nodes, relationships are edges. When you interact with the graph, three things happen automatically:
- Smart scheduling — each concept has its own review timing based on how well you know it (powered by FSRS)
- Activation spreading — reviewing one concept nudges related concepts closer to their review time. Connections that are used together get stronger.
- Search optimization — results are ranked by relevance × how well you know each concept × how central it is in your graph. Feedback from conversations continuously improves ranking.
For the technical details behind these mechanisms, see Appendix: Algorithms.
Quick Start
# Install
pip install spikuit
# Initialize a brain (interactive wizard)
# Configures embeddings and installs Agent CLI skills (/tutor, /learn, /qabot)
spkt init
# Add knowledge (with optional source for citation)
spkt add "# Functor\n\nA mapping between categories." -t concept -d math
spkt add "Content" --source-url "https://paper.com" --source-title "A Paper"
# Ingest from URL or file
spkt learn "https://example.com/article" -d cs --json
# Review what's due
spkt due
spkt quiz
# Search (community-boosted)
spkt retrieve "functor"
# Detect and view knowledge communities
spkt communities --detect
# Visualize your knowledge graph (community-colored)
spkt visualize
Agent CLI Skills
spkt init can install skills for your Agent CLI (Claude Code, Cursor, Codex).
You can also install them separately:
spkt skills install # Default: .claude/skills/
spkt skills install -t .cursor/skills # For Cursor
Once installed, use /tutor, /learn, or /qabot from your Agent CLI.
Documentation
- Getting Started — install, init, first commands
- How to Use — use cases, agent skills, Python API
- Concepts — brain, graph model, how things connect
- CLI Reference — all
spktcommands - Appendix: Algorithms — FSRS, graph propagation, technical details
- API Reference — Python API docs
Architecture
spikuit-core/ # Pure engine (no LLM dependency)
spikuit-cli/ # spkt command
spikuit-agents/ # Agent skills and adapters
The core engine is LLM-independent — spkt commands work standalone.
Agent skills (/tutor, /learn, /qabot) add LLM-powered interactions
on top, designed for tools like Claude Code.
Development
git clone https://github.com/takyone/spikuit.git
cd spikuit
uv sync --package spikuit-core --extra dev
uv run --package spikuit-core pytest spikuit-core/tests/ -v
License
Apache-2.0
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 spikuit-0.3.0.tar.gz.
File metadata
- Download URL: spikuit-0.3.0.tar.gz
- Upload date:
- Size: 292.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
798a26024ae696d228891398a4330ae57b14b3eba19088e798d248a9a2108d8f
|
|
| MD5 |
742fc102cbca5f76143633b262743e26
|
|
| BLAKE2b-256 |
271a2d628576950f6b3ebdc26483be99bab2ad641d5ca7b4d2de09f2cef97207
|
Provenance
The following attestation bundles were made for spikuit-0.3.0.tar.gz:
Publisher:
publish.yml on takyone/spikuit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spikuit-0.3.0.tar.gz -
Subject digest:
798a26024ae696d228891398a4330ae57b14b3eba19088e798d248a9a2108d8f - Sigstore transparency entry: 1277869742
- Sigstore integration time:
-
Permalink:
takyone/spikuit@a2f9c8a92608b49eff92e01ceb135a482cf6389c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/takyone
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a2f9c8a92608b49eff92e01ceb135a482cf6389c -
Trigger Event:
push
-
Statement type:
File details
Details for the file spikuit-0.3.0-py3-none-any.whl.
File metadata
- Download URL: spikuit-0.3.0-py3-none-any.whl
- Upload date:
- Size: 62.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9099c036718fb85b2dbaa2d150118053a9f048c9b782d5b8d02ec0000ee07cc
|
|
| MD5 |
2865e28bb361e2c7a68d7912ff123584
|
|
| BLAKE2b-256 |
bf86ccc28a90e847a718271231608c492119945ef3b78281e899c9ed19feefd0
|
Provenance
The following attestation bundles were made for spikuit-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on takyone/spikuit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spikuit-0.3.0-py3-none-any.whl -
Subject digest:
c9099c036718fb85b2dbaa2d150118053a9f048c9b782d5b8d02ec0000ee07cc - Sigstore transparency entry: 1277869872
- Sigstore integration time:
-
Permalink:
takyone/spikuit@a2f9c8a92608b49eff92e01ceb135a482cf6389c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/takyone
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a2f9c8a92608b49eff92e01ceb135a482cf6389c -
Trigger Event:
push
-
Statement type: