AI agent knowledge management system using Wiki-based markdown storage
Project description
OutoWiki Documentation
OutoWiki is a wiki-based knowledge management system designed for AI agents. It provides a structured way to store, retrieve, and organize information that AI agents learn across interactions.
Overview
OutoWiki solves the problem of persistent memory for AI agents by organizing information in a familiar wiki structure. Instead of opaque databases, OutoWiki uses markdown documents organized in folders, making the knowledge human-readable and editable.
Wiki-Style Classification
OutoWiki follows Wikipedia/NamuWiki classification principles:
- is-a Relationship - Determine "What is this?" not "Is this similar?"
- Category Tree Navigation - Navigate hierarchical categories to find appropriate documents
- No Similarity Matching - Use topic understanding, not keyword matching
- Explicit Document Linking - Support
[[Document Name]]syntax for direct connection
Key Features
- LLM-Driven Processing - All analysis, exploration, and decision-making by LLM (no Python pre-processing)
- AgentLoop Architecture - Unified agent with tool-calling and conversation history
- Folder-Based Classification - Categories are folders, no preset categories forced
- Dynamic Category Creation - Create new categories as needed
- Required Title Validation - title is REQUIRED for all documents, auto-retry if missing
- Title-Filename Consistency - Document title must match filename (Wikipedia-style naming)
- Fast Title Search -
search_titlestool for quick document discovery by title - Search-Before-Create - Always search for existing documents before creating new ones
- Full Document Delivery - Entire document content delivered to LLM (no 500-character limit)
- Section-Based Editing - Wikipedia-style section editing (append, prepend, replace)
- Multi-Topic Support - Process multiple topics separately, create one document per topic
- Wikilink Support - Direct document connection via
[[Document Name]]syntax - Version Tracking - Automatic version saving for all document operations
- Relevance Scoring - Title/content/tag/category scoring for search results
Architecture
┌─────────────────────────────────────────────────────────┐
│ OutoWiki Facade │
│ (OutoWiki class - main entry point for all operations) │
└─────────────────────┬───────────────────────────────────┘
│
┌────────────┼────────────┐
│ │ │
┌────▼─────────┐ ┌────▼────┐ ┌────▼────┐
│ Recorder │ │Searcher │ │AgentLoop│
│ WithLoop │ │WithLoop │ │ │
└────┬─────────┘ └────┬────┘ └────┬────┘
│ │ │
└─────────────────┼────────────┘
│
┌──────────────────────▼──────────────────────┐
│ Tool Registry │
│ ┌─────────┐ ┌──────────┐ ┌─────────────┐ │
│ │Wiki I/O │ │Reasoning │ │ Specialized │ │
│ │ Tools │ │ Tools │ │ Tools │ │
│ └─────────┘ └──────────┘ └─────────────┘ │
└──────────────────────┬──────────────────────┘
│
┌──────────────────────▼──────────────────────┐
│ LLM Provider │
│ (OpenAI or Anthropic) │
└──────────────────────────────────────────────┘
The system has three main components:
- RecorderWithAgentLoop: Uses AgentLoop for all recording operations. LLM autonomously analyzes content, explores wiki structure, and decides whether to create/modify/merge/split/delete documents. No Python pre-processing - all decisions made by LLM.
- SearcherWithAgentLoop: Uses AgentLoop for all search operations. LLM autonomously explores the wiki using search tools, applies relevance scoring, and returns relevant documents.
- AgentLoop: Unified LLM agent with tool-calling and conversation history. Manages multi-turn tool chaining and maintains context across operations.
AgentLoop Architecture
OutoWiki uses a unified agent loop for LLM operations. All analysis, exploration, and decision-making is performed by the LLM using tools.
┌─────────────────────────────────────────────────────────┐
│ AgentLoop │
│ (Manages conversation history and tool execution) │
└─────────────────────┬───────────────────────────────────┘
│
┌────────────┼────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│Wiki I/O │ │Reasoning│ │Special- │
│ Tools │ │ Tools │ │ ized │
│ │ │ │ │ Tools │
└─────────┘ └─────────┘ └─────────┘
Key Benefits:
- LLM-Driven: All decisions made by LLM, not Python pre-processing
- Conversation History: LLM sees previous tool results when planning next steps
- Tool Chaining: LLM automatically chains tool calls based on what it finds
- No Duplication: Single source of truth - LLM handles everything
- Adaptive Strategy: LLM adjusts approach based on wiki state
Example Recording Flow:
result = recorder.record("User prefers Python for web development")
# LLM automatically:
# 1. Calls split_topics → identifies single topic
# 2. Calls search_titles → finds existing doc
# 3. Calls read_document → verifies content
# 4. Calls execute_modify_plan → appends new info
Example Search Flow:
results = searcher.search("Python web frameworks")
# LLM automatically:
# 1. Calls analyze_search_intent → determines strategy
# 2. Calls search_specific → checks exact paths
# 3. Calls search_folder_with_scoring → finds relevant docs
# 4. Returns paths with relevance ranking
Wiki Structure
OutoWiki organizes knowledge as markdown files in a folder hierarchy. No preset categories are forced - the wiki starts empty and categories are created dynamically as needed:
wiki/ # Initially empty
├── programming/ # Created when first programming document is recorded
│ └── mobile/
│ └── camera.md
├── users/ # Created when first user document is recorded
│ └── alice/
│ └── preferences/
│ └── theme.md
└── ... # Categories grow organically
Each folder represents a category. When a document is recorded, the system:
- Analyzes the content to determine its topic (is-a relationship)
- Explores the existing category tree
- Finds or creates the appropriate category folder
- Records the document in that category
Documents support backlinks using the [[Document Name]] syntax. When auto_backlinks is enabled, OutoWiki automatically updates related documents when new content references existing topics.
Quick Start
from outowiki import OutoWiki, WikiConfig
# Create configuration
config = WikiConfig(
provider="openai",
api_key="sk-...", # Your OpenAI API key
model="gpt-4",
wiki_path="./my_wiki" # Local wiki folder
)
# Initialize the wiki
wiki = OutoWiki(config)
# Record new information
result = wiki.record({
"type": "conversation",
"content": "User prefers Python for web development. Suggested Flask or Django."
})
print(f"Recorded: {result.success}")
print(f"Actions: {result.actions_taken}")
# Search for information
results = wiki.search("programming preferences")
print(f"Found: {results.paths}")
# Work with a specific document
doc = wiki.get_document("concepts/web-development.md")
print(f"Title: {doc.metadata.title}")
print(doc.content[:500])
Documentation
Getting Started
- Installation - How to install OutoWiki
- Configuration - Configuration options and settings
API Reference
- OutoWiki Facade - Main entry point for all operations
- Data Models - WikiDocument, SearchQuery, etc.
- Plan Models - CreatePlan, ModifyPlan, MergePlan, etc.
- Analysis Models - IntentAnalysis, AnalysisResult
- Modules - Recorder, Searcher, InternalAgent
- Providers - OpenAI, Anthropic providers
- Exceptions - Error handling
Guides
- Recording Workflow - How to record information
- Search Strategies - How to search effectively
- Document Management - CRUD operations
License
Apache License 2.0 - see LICENSE file for details.
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 outowiki-0.7.0.tar.gz.
File metadata
- Download URL: outowiki-0.7.0.tar.gz
- Upload date:
- Size: 108.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10b2338ab408a2445cf0cd962bab2d033a60a5b92fd054575f11b67f19787ad9
|
|
| MD5 |
f7a4227b9f9619ae34c7de03a2f15c2f
|
|
| BLAKE2b-256 |
7d6f0cd3248e39c8e43904b424b88d04eb83289bca00ba22adda6e52ce3b421c
|
Provenance
The following attestation bundles were made for outowiki-0.7.0.tar.gz:
Publisher:
publish.yml on llaa33219/outowiki
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
outowiki-0.7.0.tar.gz -
Subject digest:
10b2338ab408a2445cf0cd962bab2d033a60a5b92fd054575f11b67f19787ad9 - Sigstore transparency entry: 1390620275
- Sigstore integration time:
-
Permalink:
llaa33219/outowiki@43b0fb931d388ec0e29494d7ba24715232de68b1 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/llaa33219
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@43b0fb931d388ec0e29494d7ba24715232de68b1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file outowiki-0.7.0-py3-none-any.whl.
File metadata
- Download URL: outowiki-0.7.0-py3-none-any.whl
- Upload date:
- Size: 74.6 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 |
d6acde4bdad7005939b1c37f804c6fabcea5bcd84886774cc349401b55b50b3a
|
|
| MD5 |
8dfb679286c96fbf37b848ad1973ecf1
|
|
| BLAKE2b-256 |
274f143de0b5747e152bc768821f736e574de2408b4afa19ff163f4e789e5423
|
Provenance
The following attestation bundles were made for outowiki-0.7.0-py3-none-any.whl:
Publisher:
publish.yml on llaa33219/outowiki
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
outowiki-0.7.0-py3-none-any.whl -
Subject digest:
d6acde4bdad7005939b1c37f804c6fabcea5bcd84886774cc349401b55b50b3a - Sigstore transparency entry: 1390620311
- Sigstore integration time:
-
Permalink:
llaa33219/outowiki@43b0fb931d388ec0e29494d7ba24715232de68b1 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/llaa33219
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@43b0fb931d388ec0e29494d7ba24715232de68b1 -
Trigger Event:
push
-
Statement type: