Core library for Sibyl - domain models, graph operations, and knowledge retrieval
Project description
sibyl-core
Core library for Sibyl — domain models, graph operations, retrieval algorithms, and tool implementations. Shared foundation for the API server and CLI.
Quick Reference
# Install
uv add sibyl-core
# Development
moon run core:lint # Ruff check
moon run core:typecheck # Pyright
moon run core:test # Pytest
What's Here
- models/ — Domain entities (Task, Project, Epic, Agent, Source, etc.)
- graph/ — FalkorDB/Graphiti client, entity management
- retrieval/ — Hybrid search (semantic + BM25), fusion, deduplication
- tools/ — MCP tool implementations (search, explore, add, manage)
- tasks/ — Workflow engine, dependency resolution
- auth/ — JWT primitives, password hashing
Structure
src/sibyl_core/
├── models/
│ ├── entities.py # Entity, EntityType, base classes
│ ├── tasks.py # Task, Project, Epic, Milestone
│ ├── agents.py # AgentRecord, WorktreeRecord, ApprovalRecord, Checkpoint
│ ├── sources.py # Source, Document
│ └── responses.py # API response models
├── graph/
│ ├── client.py # GraphClient (connection, write lock)
│ ├── entities.py # EntityManager (CRUD, search)
│ └── relationships.py # RelationshipManager
├── retrieval/
│ ├── hybrid.py # Hybrid search orchestration
│ └── fusion.py # Score fusion (RRF)
├── tools/
│ ├── search.py # Semantic search
│ ├── explore.py # Graph navigation
│ ├── add.py # Entity creation
│ └── manage.py # Task workflow, admin
└── tasks/
├── workflow.py # State machine, transitions
└── manager.py # Task operations
Usage
Models
from sibyl_core.models import (
Entity, EntityType, Task, TaskStatus, Project, Epic,
AgentRecord, AgentStatus, WorktreeRecord, ApprovalRecord,
)
task = Task(
name="Implement OAuth",
content="Add Google and GitHub OAuth",
project_id="proj_abc",
status=TaskStatus.TODO,
)
Agent Models
from sibyl_core.models import (
AgentRecord, AgentStatus, AgentType,
WorktreeRecord, WorktreeStatus,
ApprovalRecord, ApprovalType, ApprovalStatus,
AgentCheckpoint,
)
# Agent record (persistent state)
agent = AgentRecord(
name="OAuth Implementation Agent",
status=AgentStatus.WORKING,
agent_type=AgentType.IMPLEMENTER,
task_id="task_abc",
tokens_used=15000,
cost_usd=0.45,
)
# Git worktree for isolation
worktree = WorktreeRecord(
agent_id="agent_xyz",
path="/worktrees/agent-xyz",
branch="agent/oauth-impl",
status=WorktreeStatus.ACTIVE,
)
# Human-in-the-loop approval
approval = ApprovalRecord(
agent_id="agent_xyz",
approval_type=ApprovalType.FILE_WRITE,
summary="Write to config.py",
status=ApprovalStatus.PENDING,
)
# Session checkpoint for resume
checkpoint = AgentCheckpoint(
agent_id="agent_xyz",
session_id="sess_123",
conversation_summary="Implementing OAuth...",
current_step="Writing auth module",
)
Graph Client
from sibyl_core.graph import GraphClient, EntityManager
client = await GraphClient.create()
manager = EntityManager(client, group_id=str(org_id))
# CRUD
await manager.create(entity)
entity = await manager.get_by_id("entity_abc")
results = await manager.search("authentication patterns", limit=20)
Write Concurrency
All writes use the write lock to prevent FalkorDB corruption:
async with client.write_lock:
await client.execute_write_org(org_id, query, **params)
# Or use EntityManager (handles locking internally)
await manager.create(entity)
Task Workflow
from sibyl_core.tasks import TaskManager
manager = TaskManager(entity_manager)
await manager.start_task(task_id)
await manager.complete_task(task_id, learnings="Key insight...")
await manager.block_task(task_id, reason="Waiting on API")
Entity Types
| Type | Description |
|---|---|
pattern |
Reusable coding patterns |
episode |
Temporal learnings |
task |
Work items with workflow |
project |
Container for tasks |
epic |
Feature-level grouping |
source |
Documentation sources |
document |
Crawled content |
agent |
AI agent records |
worktree |
Git worktree isolation |
approval |
Human approval requests |
checkpoint |
Agent session state |
Relationship Types
from sibyl_core.models import RelationshipType
# Knowledge
RelationshipType.APPLIES_TO, REQUIRES, CONFLICTS_WITH, SUPERSEDES
# Task
RelationshipType.BELONGS_TO, DEPENDS_ON, BLOCKS, REFERENCES
# Agent
RelationshipType.WORKS_ON, USES_WORKTREE, CHECKPOINTED_AS, REQUESTED_BY
Configuration
SIBYL_OPENAI_API_KEY=sk-... # Required (embeddings)
SIBYL_FALKORDB_HOST=localhost
SIBYL_FALKORDB_PORT=6380
SIBYL_ANTHROPIC_API_KEY=... # Optional (agents)
Key Patterns
Multi-tenancy: Every operation requires org context
manager = EntityManager(client, group_id=str(org.id))
Node labels: Graphiti creates Episodic and Entity nodes
WHERE (n:Episodic OR n:Entity) AND n.entity_type = $type
Creation paths: LLM-powered (create) vs direct (create_direct)
await manager.create(entity) # Slower, richer extraction
await manager.create_direct(entity) # Faster, no LLM
Testing
# With mock LLM (fast, deterministic)
SIBYL_MOCK_LLM=true uv run pytest tests/
# Live model tests (costs money)
uv run pytest tests/live --live-models
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 sibyl_core-0.2.1.tar.gz.
File metadata
- Download URL: sibyl_core-0.2.1.tar.gz
- Upload date:
- Size: 222.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2364bda55836865282dced5683dfb53a584658da24a112a9a838f33c5136fefd
|
|
| MD5 |
f6874d077d3a71ebdde008582358b526
|
|
| BLAKE2b-256 |
ebf9de49c78f6bb73e039a9a51b630b495ba3d621a3a29ae9880b03c94021357
|
Provenance
The following attestation bundles were made for sibyl_core-0.2.1.tar.gz:
Publisher:
publish.yml on hyperb1iss/sibyl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sibyl_core-0.2.1.tar.gz -
Subject digest:
2364bda55836865282dced5683dfb53a584658da24a112a9a838f33c5136fefd - Sigstore transparency entry: 814740834
- Sigstore integration time:
-
Permalink:
hyperb1iss/sibyl@f80c65f3112c3d7b0142893a13962b39afd35071 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/hyperb1iss
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f80c65f3112c3d7b0142893a13962b39afd35071 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file sibyl_core-0.2.1-py3-none-any.whl.
File metadata
- Download URL: sibyl_core-0.2.1-py3-none-any.whl
- Upload date:
- Size: 171.9 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 |
2f6b4bb94670558dcd96e5ac9ebf73178fe6a819d96cda06a1ebf44e7e5baa35
|
|
| MD5 |
1c05525a0682b170d97dd23baa22d350
|
|
| BLAKE2b-256 |
a9d54a5b2a79fd269ddc2627713de339d08b8ac3571b89d0fb7dd3e6d86da4f4
|
Provenance
The following attestation bundles were made for sibyl_core-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on hyperb1iss/sibyl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sibyl_core-0.2.1-py3-none-any.whl -
Subject digest:
2f6b4bb94670558dcd96e5ac9ebf73178fe6a819d96cda06a1ebf44e7e5baa35 - Sigstore transparency entry: 814740836
- Sigstore integration time:
-
Permalink:
hyperb1iss/sibyl@f80c65f3112c3d7b0142893a13962b39afd35071 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/hyperb1iss
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f80c65f3112c3d7b0142893a13962b39afd35071 -
Trigger Event:
workflow_dispatch
-
Statement type: