Each EverAlgo distribution has its own README with a quick-start, public API surface, prompt customisation guide, and testing patterns.
| Distribution | README | What it provides |
|---|---|---|
everalgo-core |
packages/everalgo-core/README.md |
ChatMessage, MemCell, Episode, RankInput/RankOutput, LLMClient, LLMConfig, FakeLLMClient |
everalgo-boundary |
packages/everalgo-boundary/README.md |
detect_boundaries, DetectionResult, BoundaryDecision |
everalgo-clustering |
packages/everalgo-clustering/README.md |
Cluster, cluster_by_geometry, cluster_by_llm |
everalgo-rank |
packages/everalgo-rank/README.md |
rank.episodic, rank.profile, rank.case, rank.skill, rank.fusion, rank.weight, rank.rerank |
everalgo-parser |
packages/everalgo-parser/README.md |
aparse, ParsedContent, image / audio / document / URL parsers (video deferred) |
everalgo-user-memory |
packages/everalgo-user-memory/README.md |
BoundaryDetector, EpisodeExtractor, ForesightExtractor, AtomicFactExtractor, ProfileExtractor |
everalgo-agent-memory |
packages/everalgo-agent-memory/README.md |
AgentBoundaryDetector, AgentCaseExtractor, AgentSkillExtractor, AgentProfileExtractor |
everalgo-knowledge |
packages/everalgo-knowledge/README.md |
KnowledgeExtractor, aclassify_category, KnowledgeMemory, CategorySpec |
All shared data contracts are in everalgo.types:
from everalgo.types import (
ChatMessage, # single conversation turn — kind="text"
ToolCallRequest, # assistant-emitted tool invocation — kind="tool_call"
ToolCallResult, # tool execution result — kind="tool_result"
ConversationItem, # ChatMessage | ToolCallRequest | ToolCallResult (discriminated union)
MemCell, # boundary-segmented conversation slice; items: list[ConversationItem]
Episode, # narrative memory — owner_id, episode, subject, timestamp
Foresight, # anticipated future event — owner_id, foresight, evidence, start_time, end_time, duration_days
AtomicFact, # single verifiable assertion — owner_id (str | None), fact, timestamp
Profile, # structured user profile — owner_id, summary, timestamp; extra fields via extra="allow"
AgentCase, # distilled agent trajectory — id, timestamp, task_intent, approach, quality_score, key_insight
AgentSkill, # aggregated skill — id, cluster_id (caller-stamped), name, description, content, confidence
AgentProfilePatch, # one section-level SOUL.md / AGENTS.md edit — file, action, section, old_text, new_text
AgentProfileUpdate, # AgentProfileExtractor result — patches, soul_diff / agents_diff, new_*_md, signals
AgentProfileSignal, # below-gate implicit signal — caller persists and feeds back as pending_signals
KnowledgeMemory, # extracted knowledge from a file (EXPERIMENTAL)
RankInput, # multi-route recall candidates + cross-memory linkage
RankOutput, # ranked memory list
ParsedContent, # multimodal file parsed into structured content (EXPERIMENTAL)
)The clustering value object lives in everalgo.clustering:
from everalgo.clustering import Cluster
# Cluster: id (caller-supplied), centroid, count, last_ts, preview, members (caller entity ids)LLM wire types live in everalgo.llm.types:
from everalgo.llm.types import ChatMessage, ChatResponse, Usageeveralgo.llm.types.ChatMessage is the LLM prompt wire type (sent to the model). everalgo.types.ChatMessage is the domain type (conversation message). They are distinct classes.