Universal research workflow kit connecting vibe coding tools with Obsidian
Project description
khanote
Your research was almost Khan-worthy. Now it is. You're welcome.
A universal research workflow kit bridging vibe coding tools and Obsidian.
What is khanote?
khanote connects your vibe coding tools (Claude Code / Cursor / Codex / Gemini CLI / OpenCode) with Obsidian, using a pluggable research layer in between. SOPs are codified as skills — you only touch config.
Install
# pip
pip install khanote
# or Homebrew
brew tap almost-khan/tap
brew install khanote
# or pipx (isolated)
pipx install khanote
Quick Start
khanote init --vault ~/your-obsidian-vault --tool claude-code --researcher perplexity
Then inside your vibe coding tool, run:
/khanote.research.start AI agents
Features
Research Workflow
- Session-driven: each research run = a date-prefixed folder in your vault
- Pipeline: start → ingest sources → analyze → save to Obsidian
- Built-in researchers: Perplexity, arXiv, NotebookLM
- Knowledge graph: automatic linking between sessions via shared topics
Custom Researchers (Zero Code)
Add any HTTP REST API as a researcher through config.yaml — no Python required:
researchers:
exa:
type: http
api_key: ${EXA_API_KEY}
capabilities: [search]
endpoints:
search:
url: "https://api.exa.ai/search"
method: POST
headers:
Authorization: "Bearer {api_key}"
body_template: '{"query": "{query}", "numResults": 10}'
response_mapping:
results: "$.results"
title: "$.title"
excerpt: "$.text"
Run /khanote.researcher.add for a guided setup — no flags, no code.
Feed Management
Set up recurring research feeds that automatically fetch and analyze content:
feeds:
llm-papers:
researcher: arxiv
query: "large language models"
keywords: [llm, transformer, agent]
frequency: daily
active: true
Manage feeds with guided commands:
/khanote.feed.add— create a new feed or clone from existing/khanote.feed.list— see all feeds with status/khanote.feed.pause/resume/remove
SOP Prompt Templates
Capabilities without a direct API endpoint use SOP prompt templates — structured prompts that your vibe coding tool processes:
- analyze: PRISMA-style thematic synthesis with chain-of-thought
- ingest: metadata extraction from sources
- search: relevance ranking and filtering
- generate: structured research report generation
Multi-Tool Support
Initialize once per tool, share the same config:
| Tool | Entry File | Skills Directory |
|---|---|---|
| Claude Code | CLAUDE.md |
.claude/commands/ |
| Cursor | .cursorrules |
.cursor/rules/ |
| Codex | AGENTS.md |
.codex/ |
| Gemini CLI | GEMINI.md |
.gemini/ |
| OpenCode | OPENCODE.md |
.opencode/ |
Design Principles
- Two ends fixed, middle swappable — vibe coding tool ↔ [researcher + feed] ↔ Obsidian
- SOP as skills — workflows live in SKILL.md, not in your head
- Zero-code for everyone — all operations via guided prompts, no CLI flags
- Session-driven — each research run = an independent date-prefixed folder
- Progressive disclosure — simple by default, powerful when you need it
Available Skills
| Skill | Description |
|---|---|
/khanote.research.start |
Start a new research session |
/khanote.research.ingest |
Add sources to a session |
/khanote.research.analyze |
Run analysis on ingested sources |
/khanote.research.save |
Save results to Obsidian |
/khanote.research.pipeline |
Full pipeline in one command |
/khanote.researcher.add |
Add a custom HTTP researcher |
/khanote.feed.add |
Create a recurring feed |
/khanote.feed.list |
List all feeds |
/khanote.update |
Update skills to latest version |
Name
Khan (from AlmostKhan) + note — Khan's notes / notes that conquer knowledge.
Status
Active development. Core research workflow and custom researcher/feed management are implemented. 222 tests passing.
License
TBD
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 khanote-0.1.0.tar.gz.
File metadata
- Download URL: khanote-0.1.0.tar.gz
- Upload date:
- Size: 34.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
852f0776c8c0820976b25ba7bf2ba6388228fbc85f64b3396658a2db56927ec4
|
|
| MD5 |
4ed1c1a18405e7d006afc8a0cabe1d45
|
|
| BLAKE2b-256 |
901ba668faf810420faa403d1d37e69a9ec186d52c612df9ffd16e7744a50a49
|
Provenance
The following attestation bundles were made for khanote-0.1.0.tar.gz:
Publisher:
publish.yml on almost-khan/khanote
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
khanote-0.1.0.tar.gz -
Subject digest:
852f0776c8c0820976b25ba7bf2ba6388228fbc85f64b3396658a2db56927ec4 - Sigstore transparency entry: 1172035576
- Sigstore integration time:
-
Permalink:
almost-khan/khanote@ba18589c13402e44a6285614581ca0358d51c23c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/almost-khan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ba18589c13402e44a6285614581ca0358d51c23c -
Trigger Event:
release
-
Statement type:
File details
Details for the file khanote-0.1.0-py3-none-any.whl.
File metadata
- Download URL: khanote-0.1.0-py3-none-any.whl
- Upload date:
- Size: 46.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
484f717812bb443eed2805e825af89a769ace3b614890b3da10e1c2aacbe6d80
|
|
| MD5 |
448fadf55ead43126c04863ea045cfc0
|
|
| BLAKE2b-256 |
b5c27115162e960b637d2c2f5c39bfbcc89323a8a32ddef64fb56d1aa476f3f3
|
Provenance
The following attestation bundles were made for khanote-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on almost-khan/khanote
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
khanote-0.1.0-py3-none-any.whl -
Subject digest:
484f717812bb443eed2805e825af89a769ace3b614890b3da10e1c2aacbe6d80 - Sigstore transparency entry: 1172035600
- Sigstore integration time:
-
Permalink:
almost-khan/khanote@ba18589c13402e44a6285614581ca0358d51c23c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/almost-khan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ba18589c13402e44a6285614581ca0358d51c23c -
Trigger Event:
release
-
Statement type: