Skip to main content

AI memory engine with identity preservation โ€” remember everything, forget nothing

Project description

๐Ÿ‘ Cortex by evaOS

Drop-in persistent memory engine for AI agents.

Version PyPI version Python 3.9+ License: MIT Tests

Your agent wakes up tomorrow and still knows who it is.


What is Cortex?

Cortex is a drop-in persistent memory engine for AI agents. It solves the three failure modes of naive AI memory: identity drift, junk accumulation, and no lifecycle.

Key differentiators:

  • ๐Ÿชจ Cornerstones โ€” always-on identity memories that inject at the start of every session, bypassing semantic retrieval. Your agent's core identity is guaranteed to be present.
  • ๐ŸŒ™ Dream Cycles โ€” async memory consolidation via a persistent CircadianEngine. Memories are scored, promoted, decayed, and synthesized while your agent sleeps.
  • ๐Ÿ‘ฅ Multi-tenant โ€” full owner_id isolation. One Cortex instance serves multiple users with complete memory separation.
  • ๐Ÿ”Œ Provider-agnostic โ€” pluggable LLM and embedding providers: Venice, Mistral, Google, Voyage. Switch without re-embedding.

Production-ready out of the box:

  • ๐Ÿš€ One-command Fly.io deploy via cortex-fly.toml
  • ๐Ÿ’พ Litestream continuous backup + GitHub Actions daily snapshot
  • ๐Ÿ“ก Sentry error tracking + performance spans

What's New in v1.4.0

v1.4.0 is the memory scoping + entity intelligence release.

  • ๐Ÿ”ญ Entity-scoped retrieval โ€” filter memories by entity_id and entity_type on retrieve, search, and browse endpoints. Your agent can now recall memories about specific people, projects, or concepts (#923, #931)
  • โณ Temporal claims โ€” memories have valid_from/valid_to lifecycle. Expired claims are excluded by default; include with include_expired=true. New GET /memories/timeline endpoint for subject history (#925, #931)
  • ๐Ÿ‘ฅ Entity visibility lifecycle โ€” entities progress through extracted โ†’ promoted โ†’ active states based on connection_count. Dashboard-ready entity intelligence (#933, #938)
  • ๐ŸŽญ Peer promotion โ€” peers promoted to canonical actor identities with peer_type, status, permissions_json, and connection_count. First-class support for multi-actor systems (#932, #941)
  • ๐Ÿงน Extraction quality โ€” predicate filter removes junk claims (code artifacts, bot names, ephemeral actions) + prompt tuning for better extraction (#929, #940)
  • ๐ŸŒ Cortex-proxy โ€” Supabase edge function for CORS-free dashboard access with path traversal protection (#928, #937)

Previous highlights (v1.3.x):

  • ๐Ÿฆ› Hippo LCM โ€” Lossless Context Management: compaction, summarization, retrieval (#869โ€“#871)
  • ๐Ÿชจ Cornerstone always-on injection โ€” identity cornerstones inject unconditionally every session (#733)
  • ๐Ÿ”‘ Static API key auth โ€” X-Cortex-API-Key header replaces JWT complexity (#737)
  • ๐ŸŒ™ Dream engine persistent scheduler โ€” CircadianEngine starts at server boot (#776)

See the full CHANGELOG for all fixes and changes.


Architecture

Cortex processes memory through a five-layer pipeline:

Capture โ†’ Extract โ†’ Reconcile โ†’ Retrieve โ†’ Dream
Layer What It Does
Capture Intercepts conversation turns and session events
Extract LLM-powered claim extraction with noise filtering
Reconcile Smart conflict resolution: ADD / UPDATE / SUPERSEDE / NOOP
Retrieve Hybrid BM25 + vector search with Reciprocal Rank Fusion
Dream Async consolidation, decay, synthesis, and contradiction resolution

Cornerstone Layer

Cornerstones are identity memories that inject first, every session. They bypass semantic retrieval entirely โ€” they are always present, always loaded, and protected from accidental deletion. This is the foundation of identity preservation.

Session Start
     โ”‚
     โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Cornerstone Load   โ”‚  โ† unconditional, always first
โ”‚  (identity anchors) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Semantic Retrieval โ”‚  โ† query-dependent context
โ”‚  (BM25 + vector)    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚
           โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Context Injection  โ”‚
โ”‚  (system prompt)    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Provider System

Cortex uses a pluggable provider system for both LLM and embedding operations:

Capability Default Provider Alternatives
LLM extraction Venice (mistral-small-3-2-24b-instruct) Google, OpenAI, Anthropic
Embeddings Venice BGE-M3 (1024-dim) Voyage, Google, OpenAI
Reranking Voyage โ€”

Switch providers at runtime via config or env vars โ€” no re-embedding required.

Full Pipeline

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ SESSION LIFECYCLE โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ”‚                                                           โ”‚
 โ”‚  WAKE                    MID-TURN                  SLEEP  โ”‚
 โ”‚  โ•โ•โ•โ•                    โ•โ•โ•โ•โ•โ•โ•โ•                  โ•โ•โ•โ•โ•  โ”‚
 โ”‚                                                           โ”‚
 โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
 โ”‚  โ”‚  Wake   โ”‚  โ”‚   Retrieve   โ”‚  โ”‚   Sleep Pipeline   โ”‚   โ”‚
 โ”‚  โ”‚ Pipelineโ”‚  โ”‚   Pipeline   โ”‚  โ”‚  S1 Consolidation  โ”‚   โ”‚
 โ”‚  โ”‚ W1โ†’W4   โ”‚  โ”‚  BM25+Vector โ”‚  โ”‚  S2 Promotion      โ”‚   โ”‚
 โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ”‚  +RRF+Rerank โ”‚  โ”‚  S3 Handoff        โ”‚   โ”‚
 โ”‚       โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚  S4 Carry-Forward   โ”‚   โ”‚
 โ”‚       โ–ผ               โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
 โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚                โ–ฒ                  โ”‚
 โ”‚  โ”‚  Boot   โ”‚          โ–ผ                โ”‚                  โ”‚
 โ”‚  โ”‚ Loader  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
 โ”‚  โ”‚(cornerstonesโ”‚ โ”‚Task-Mode   โ”‚  โ”‚ Circadian  โ”‚          โ”‚
 โ”‚  โ”‚  identityโ”‚  โ”‚Classifier   โ”‚  โ”‚ Engine     โ”‚          โ”‚
 โ”‚  โ”‚  prefs) โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚ (dream,   โ”‚          โ”‚
 โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜          โ”‚          โ”‚  deep dreamโ”‚          โ”‚
 โ”‚       โ”‚               โ–ผ          โ”‚  decay)    โ”‚          โ”‚
 โ”‚       โ”‚       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
 โ”‚       โ”‚       โ”‚Retrieval      โ”‚                           โ”‚
 โ”‚       โ”‚       โ”‚Policy Engine  โ”‚                           โ”‚
 โ”‚       โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                           โ”‚
 โ”‚       โ”‚               โ”‚                                   โ”‚
 โ”‚       โ”‚               โ–ผ                                   โ”‚
 โ”‚       โ”‚       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
 โ”‚       โ”‚       โ”‚   Context     โ”‚  โ”‚ Re-Retrieval  โ”‚       โ”‚
 โ”‚       โ”‚       โ”‚   Compiler    โ”‚โ—„โ”€โ”‚ (topic shift,  โ”‚       โ”‚
 โ”‚       โ”‚       โ”‚ (bundle +     โ”‚  โ”‚  new entities) โ”‚       โ”‚
 โ”‚       โ”‚       โ”‚  compress)    โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
 โ”‚       โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                           โ”‚
 โ”‚       โ”‚               โ”‚                                   โ”‚
 โ”‚       โ”‚               โ–ผ                                   โ”‚
 โ”‚       โ”‚       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                           โ”‚
 โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  Injection    โ”‚                           โ”‚
 โ”‚               โ”‚  Slot Manager โ”‚                           โ”‚
 โ”‚               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                           โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Install

pip install evaos

With vector search (recommended):

pip install "evaos[vec]"

All extras (LLM providers, HTTP API, MCP server):

pip install "evaos[all]"

Quick Start

Environment Variables

# Required
export CORTEX_API_KEY=your-secret-key

# Provider (Venice โ€” default)
export VENICE_API_KEY=your-venice-key
export CORTEX_EMBEDDING_MODEL=text-embedding-bge-m3
export CORTEX_PROVIDER_LLM_MODEL=mistral-small-3-2-24b-instruct

# Optional: Voyage reranking
export VOYAGE_API_KEY=your-voyage-key

CLI

# Initialize a new memory store
evaos init

# Teach it something
evaos remember "Andrew is the founder of 100Yen Org. He lives in Bangkok."

# Ask it later
evaos recall "Where does Andrew live?"
# โ†’ Andrew lives in Bangkok. He is the founder of 100Yen Org.

# Check config
evaos config show

# Validate provider config
evaos config validate

Python SDK

import asyncio
from evaos import Cortex

async def main():
    cortex = Cortex(db_path="my_memory.db")
    await cortex.initialize()

    # Start a session โ€” cornerstones inject automatically
    await cortex.wake(session_id="session_001")

    # Store information โ€” claim extraction happens automatically
    await cortex.remember("Andrew is the founder of 100Yen Org. He lives in Bangkok.")

    # Retrieve relevant memories for an LLM prompt
    context = await cortex.retrieve("Where does Andrew live?")
    print(context.context_block)
    # โ†’ "Andrew lives in Bangkok. He is the founder of 100Yen Org."

    # End the session โ€” dream cycle consolidates
    await cortex.sleep(session_id="session_001")

asyncio.run(main())

HTTP API

# Start the server
evaos serve --port 8420

# Store a memory
curl -X POST http://localhost:8420/api/v1/remember \
  -H "X-Cortex-API-Key: your-secret-key" \
  -H "Content-Type: application/json" \
  -d '{"content": "Andrew founded 100Yen Org in Bangkok."}'

# Retrieve memories
curl http://localhost:8420/api/v1/retrieve?query=Andrew \
  -H "X-Cortex-API-Key: your-secret-key"

Deploy to Fly.io

# Clone and deploy
git clone https://github.com/100yenadmin/electric-sheep.git
cd electric-sheep
fly launch --config cortex-fly.toml
fly secrets set CORTEX_API_KEY=your-secret-key VENICE_API_KEY=your-venice-key
fly deploy

Docker

git clone https://github.com/100yenadmin/electric-sheep.git
cd electric-sheep
export CORTEX_API_KEY=your-secret-key
export VENICE_API_KEY=your-venice-key
docker compose up -d
# HTTP API at http://localhost:8420

Features

๐Ÿง  Memory Pipeline

Layer What It Does
Extraction LLM-powered claim extraction with noise filtering (skips "changed line 47 of auth.py")
Entity Resolution Fuzzy deduplication โ€” "Andrew", "andrew", "@andrew" โ†’ same person
Reconciliation Smart conflict resolution: ADD / UPDATE / SUPERSEDE / NOOP
Cornerstones Always-on identity anchors โ€” inject first, every session, no keywords needed
Token Budget Assembles memory context within configurable token ceilings

๐ŸŒ™ Dream Cycles

A persistent CircadianEngine starts at server boot and runs async memory consolidation:

  • Standard Dream โ€” Ebbinghaus decay, contradiction resolution, cross-session synthesis
  • Deep Dream โ€” Generative memory synthesis; Gen1 Soul restoration (new in v1.3.0)
  • Extraction Failure Queue โ€” Failed extractions retried automatically in dream cycles

๐Ÿ”‘ Auth & Multi-Tenancy

  • Static API key โ€” X-Cortex-API-Key header. Simple, secure, no JWT complexity.
  • Multi-tenant โ€” owner_id resolved per-request from API key. Complete memory isolation between users.
  • Soft-delete โ€” Deleted memories retained for 90 days, restorable via API. Dream cycle purges after expiry.

๐Ÿ“‹ Commitments & Open Loops

First-class tracking of agent commitments and unresolved threads. Both inject into session boot context for continuity across sessions.

๐Ÿ’ฌ Dialectic Engine

Ask your memory natural-language questions. Fast path for simple lookups, agentic multi-step QueryPlanner for complex reasoning across your memory graph.

๐Ÿ” Hybrid Retrieval

BM25 full-text search + vector similarity with Reciprocal Rank Fusion. Optional Voyage reranking for high-stakes queries.

๐Ÿ“ก Observability

  • Sentry โ€” error tracking + performance spans in wake pipeline and retrieval
  • Health endpoint โ€” version, dream cycle timestamp, system status
  • Metrics โ€” pipeline counters, histograms, gauges, quality gates

๐Ÿ”Œ Five Interfaces

Interface Use Case
CLI evaos remember, evaos recall, evaos ask, evaos dream, evaos config
HTTP API FastAPI REST server โ€” evaos serve
MCP Server Model Context Protocol for agent frameworks โ€” evaos mcp
TypeScript SDK @evaos/client โ€” typed client for Node.js applications
OpenClaw Plugin cortex โ€” drop-in memory plugin for OpenClaw agents

OpenClaw Plugin

Cortex ships an OpenClaw plugin (cortex) that bridges your agent's memory to a running Cortex instance.

// openclaw.plugin.json (included in openclaw-plugin/)
{
  "id": "cortex",
  "kind": "memory"
  // configSchema: cortexUrl, apiKey, ownerId, autoRecall, autoCapture, ...
}

What it does:

  • before_agent_start โ€” loads cornerstones unconditionally, then retrieves semantic context
  • agent_end โ€” captures conversation as new memories (fire-and-forget)
  • session_start / session_end โ€” calls wake/sleep for session lifecycle

Tools exposed: cortex_search, cortex_remember, cortex_forget, cortex_update_commitment, cortex_resolve_open_loop

See openclaw-plugin/ for full source and configuration schema.


Configuration

# cortex.toml

[cortex]
storage_backend = "sqlite"

[cortex.storage]
db_path = "cortex.db"

[cortex.extraction]
model = "mistral-small-3-2-24b-instruct"
coding_noise_filter = true

[cortex.embedding]
model = "text-embedding-bge-m3"
provider = "venice"

[cortex.cornerstones]
max_count = 7
drift_threshold = 0.05

[cortex.circadian]
dream_cycle_enabled = true
dream_cycle_hour_utc = 8
deep_dream_enabled = true

[cortex.deprecation]
forgetting_curve = "ebbinghaus"
soft_delete_retention_days = 90

See docs/product/guides/configuration.md for the full reference.


Documentation

Document Path
Getting Started docs/product/guides/getting-started.md
HTTP API Reference docs/product/api/http-reference.md
Configuration Guide docs/product/guides/configuration.md
Fly.io Deployment docs/product/ops/fly-deployment-guide.md
Architecture Overview docs/product/architecture/overview.md
Changelog CHANGELOG.md

Python SDK Reference

from evaos import Cortex

# Default โ€” Venice provider, stores in cortex.db
cortex = Cortex()

# Customised
cortex = Cortex(
    db_path="~/my_app/memory.db",
    profile="companion",
    llm_provider="venice",
    extract_model="mistral-small-3-2-24b-instruct",
    embed_model="text-embedding-bge-m3",
)

Core Methods

Method Description
await cortex.initialize() Initialize storage + apply migrations
await cortex.wake(session_id) Start session, load cornerstones unconditionally
await cortex.remember(content) Store text; extraction is automatic
await cortex.retrieve(query) Hybrid BM25 + vector search, returns context block
await cortex.ask(query) Dialectic engine โ€” ask your memory questions
await cortex.sleep(session_id) End session, trigger consolidation
await cortex.dream() Run dream cycle manually
await cortex.seal_cornerstone(label, content) Pin an identity anchor
await cortex.check_drift() Drift scores for all cornerstones
await cortex.health() System health dict
await cortex.stats() Memory counts (claims, entities, cornerstones, sessions)
await cortex.export(format="json") Export all active memories

TypeScript SDK

npm install @evaos/client
import { CortexClient } from '@evaos/client';

const client = new CortexClient({
  baseUrl: 'http://localhost:8420',
  apiKey: 'your-api-key',
});

await client.remember('Andrew is the founder of 100Yen Org.');
const results = await client.recall('Who is Andrew?');

See sdks/typescript/ for full documentation.


CLI Reference

evaos init [--profile companion|coding|enterprise]
evaos remember "text"
evaos recall "query"
evaos ask "question"
evaos ask "question" --agentic
evaos cornerstones list
evaos cornerstones seal --label "name" --content "text"
evaos dream
evaos config show
evaos config set-provider
evaos config validate
evaos config export
evaos config apply-fly
evaos stats
evaos health
evaos export [--format json|sql]
evaos serve [--port 8000]
evaos mcp
evaos backup [--output path]

Project Structure

cortex/                 # Python modules (~52K lines)
โ”œโ”€โ”€ core/               # Extraction, entity resolution, reconciliation, retrieval,
โ”‚                       #   working memory, token budget, task-mode, boot loader
โ”œโ”€โ”€ storage/            # SQLite adapter with FTS5 + vector support, v3-v16 migrations
โ”œโ”€โ”€ brain_graph/        # Document memory graph with file watching
โ”œโ”€โ”€ circadian/          # Dream engine: CircadianEngine, Deep Dream, CuriosityEngine
โ”œโ”€โ”€ sleep/              # Staged sleep pipeline: S1โ†’S2โ†’S3โ†’S4
โ”œโ”€โ”€ capture/            # Wake pipeline: W1-W4 activation routing
โ”œโ”€โ”€ commitments/        # Commitment/open loop tracking
โ”œโ”€โ”€ deprecation/        # Ebbinghaus decay + soft-delete pipeline
โ”œโ”€โ”€ identity/           # Cornerstone guardian + drift calculator
โ”œโ”€โ”€ config/             # TOML config + `evaos config` CLI
โ”œโ”€โ”€ api/                # FastAPI HTTP server (85+ endpoints)
โ”œโ”€โ”€ integrations/       # MCP server + plugin interface
โ”œโ”€โ”€ dialectic/          # Dialectic engine (ask your memory)
โ”œโ”€โ”€ peers/              # Peer modeling (relationship tracking)
โ”œโ”€โ”€ events/             # Event emitter + webhook dispatcher
โ”œโ”€โ”€ llm/                # Multi-provider LLM abstraction (Venice, Google, OpenAI)
โ”œโ”€โ”€ cli.py              # Click-based CLI
โ”œโ”€โ”€ sdk.py              # High-level Cortex class
โ””โ”€โ”€ types.py            # Shared dataclasses and types

dashboard/              # 8-page web UI (SPA)
sdks/typescript/        # @evaos/client TypeScript SDK
openclaw-plugin/        # cortex OpenClaw plugin (TypeScript)
deploy/                 # cortex-fly.toml, Litestream config, startup scripts

Benchmarks

# Full suite
python -m benchmarks.run_benchmarks

# Skip slow 10K retrieval
python -m benchmarks.run_benchmarks --skip-retrieval

Results saved to benchmarks/results/latest.json. Nightly CI runs LoCoMo eval at 02:00 UTC.


Contributing

See CONTRIBUTING.md for dev setup, testing, and PR guidelines.


License

MIT โ€” 100Yen Org

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

evaos-1.6.6.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evaos-1.6.6-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file evaos-1.6.6.tar.gz.

File metadata

  • Download URL: evaos-1.6.6.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for evaos-1.6.6.tar.gz
Algorithm Hash digest
SHA256 d43cd490e270845a680eb488792ae6606ba55e83e1c1407e45467ebb2ace299a
MD5 c5830d562d52e3011a3646a4a2380264
BLAKE2b-256 f27145f613921eae058caf82b47f5a8a9a632ac46badcbea27d8bff45257ce6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for evaos-1.6.6.tar.gz:

Publisher: publish.yml on 100yenadmin/electric-sheep

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file evaos-1.6.6-py3-none-any.whl.

File metadata

  • Download URL: evaos-1.6.6-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for evaos-1.6.6-py3-none-any.whl
Algorithm Hash digest
SHA256 c610f330ff94c59712d59c8c110b7b654095fa1b5d782a4f028ebe29d468d579
MD5 5752aa9736eb278835bcaabfb82bac5d
BLAKE2b-256 62177d0e1b631acd41a45ecfc4f22fb3eb178d8e56caa1e50b229687c6bd0735

See more details on using hashes here.

Provenance

The following attestation bundles were made for evaos-1.6.6-py3-none-any.whl:

Publisher: publish.yml on 100yenadmin/electric-sheep

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page