Agent skill

Add Memory Kind

by EverMind-AI in EverMind-AI/EverOS

Walks through adding a new persisted memory kind to EverOS: choose storage among Markdown, SQLite and LanceDB, pick a Markdown strategy, then wire schemas, repos and writers.

Apache-2.0Auto-check passedDatabases

Install Add Memory Kind

skills CLI
$ npx skills add EverMind-AI/EverOS --skill add-memory-kind -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install EverMind-AI/EverOS add-memory-kind --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/EverMind-AI/EverOS.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-memory-kind .claude/skills/add-memory-kind && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
add-memory-kind
GitHub stars
13k
Token cost
~2.6k tokens
SKILL.md length
699 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
Apache-2.0

At a glance

Walks through adding a new persisted memory kind to EverOS: choose storage among Markdown, SQLite and LanceDB, pick a Markdown strategy, then wire schemas, repos and writers.

  • Works in 8 steps: Decide the storage combination → Pick the markdown storage strategy (if… → Markdown daily-log: 4 steps → …
  • Adding a new persisted entity type to the EverOS memory layer
  • SKILL.md covers When to invoke, 1. Decide the storage…, 2. Pick the markdown storage… and 3. Markdown daily-log: 4 steps, plus 6 more sections
  • Calls make

What it does

The skill is for adding a new persisted business entity such as an Episode, Case, Skill, AtomicFact, Foresight or Profile. It starts with the storage decision, since a memory kind need not use all three layers. Markdown is the human-readable source of truth, SQLite holds structured state with transactions and joins, and LanceDB handles vector, BM25 or hybrid retrieval, with SQLite and LanceDB treated as indexes that can be rebuilt from the Markdown. A table lists common combinations, from Markdown only to SQLite only.

Next comes the Markdown strategy from the EverOS Markdown First spec: daily-log append with dated filenames, skill-named files overwritten in place, or a single file rewritten, such as user.md or soul.md. Only the daily-log recipe is complete, in four steps beginning with a frontmatter schema under infra/persistence/markdown/mds. The other two are sketched and meant to be built as thin wrappers over MarkdownWriter until their base writers land.

When your agent uses it

  • Adding a new persisted entity type to the EverOS memory layer
  • Choosing between Markdown, SQLite and LanceDB for a new kind of record
  • Writing the frontmatter schema and writer for a daily-log memory kind

Example prompts

  • “Add a Preference memory kind to EverOS stored as a Markdown daily log with a LanceDB index.”
  • “Which storage combination fits an audit log kind in EverOS?”
  • “Wire up the schema, repo and writer for a new Reminder memory kind.”

Requirements

  • A checkout of the EverOS repository

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Decide the storage combination
  2. Pick the markdown storage strategy (if md is in your combo)
  3. Markdown daily-log: 4 steps
  4. (Optional) SQLite table — 4 steps
  5. (Optional) LanceDB index — 4 steps
  6. (Future) Skill-named & single-file markdown strategies
  7. Verification checklist
  8. Common pitfalls

What it can do on your machine

Read from SKILL.md and the folder at commit d2aa949. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • make

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Memory Kind loads about 2.6k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 699 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from EverMind-AI/EverOS at commit d2aa949, republished under its Apache-2.0 licence (© EverMind-AI). 699 words, ~2,619 tokens.

Download SKILL.mdSave it as .claude/skills/add-memory-kind/SKILL.md (or your agent's skills folder).
name
add-memory-kind
description
Add a new business memory kind end-to-end. Pick the storage combination (Markdown / SQLite / LanceDB), pick the markdown strategy (daily-log / skill-named / single-file), then wire up the schema(s), repo(s), and writer(s).

/add-memory-kind — Add a new business memory kind

When to invoke

Adding a new persisted business entity (Episode, Case, Skill, AtomicFact, Foresight, Profile, or something custom). Multiple storage layers may be involved; this skill walks the decision then the wiring.

1. Decide the storage combination

A memory kind does not have to use all three layers. Pick by what the kind actually needs:

NeedMarkdownSQLiteLanceDB
Human-readable / agent-editable source-of-truth text✅
Structured state, ACID transactions, joins, predicates✅
Vector / BM25 / hybrid retrieval✅

Common combinations seen in EverOS:

ComboExampleRationale
md onlyscratch notes / dump binstext-of-truth, no index needed
md + lancedbepisode / memcell / casetext-of-truth + semantic retrieval
md + sqliteprofile / playbook / soul.md statetext-of-truth + structured state to query
md + sqlite + lancedbfull-blown business recordswhen you need both transactional state AND retrieval
sqlite onlyaudit log / task queue / LSN watermarksystem state, never user-facing
lancedb onlyrare; usually you still want mdderived embeddings without text-of-truth

Rule of thumb: markdown is the truth; sqlite and lancedb are derived indexes that can be rebuilt from md. Drop md only when the kind has no human-readable form (pure system state).

2. Pick the markdown storage strategy (if md is in your combo)

Three strategies — declared in the EverOS Markdown First spec:

StrategyFilenameMutationExamples
Daily-log append<prefix>-YYYY-MM-DD.mdappend entriesmemcell / episode / case / atomic_fact / foresight
Skill-named in-placeskill_<name>.mdoverwrite the fileskills (procedural memory)
Single-file rewriteuser.md / agent.md / soul.md / behaviors.md / tools.mdoverwrite the fileprofiles / playbooks

This skill currently has a complete recipe for daily-log append. Skill-named and single-file recipes are sketched at the bottom — their base writers (BaseSkillWriter / BaseProfileWriter) land later in the project; until then build a thin wrapper over MarkdownWriter directly.


3. Markdown daily-log: 4 steps

3.1 Frontmatter schema — infra/persistence/markdown/mds/<name>.py
python
"""Episode daily-log frontmatter."""

from __future__ import annotations

import datetime as _dt
from typing import ClassVar, Literal

from everos.core.persistence.markdown import UserScopedFrontmatter


class UserEpisodeDailyFrontmatter(UserScopedFrontmatter):
    """``users/<u>/episodes/episode-<YYYY-MM-DD>.md``."""

    ENTRY_ID_PREFIX: ClassVar[str] = "ep"
    DIR_NAME: ClassVar[str] = "episodes"
    FILE_PREFIX: ClassVar[str] = "episode"

    type: Literal["user_episode_daily"] = "user_episode_daily"
    date: _dt.date
    entry_count: int = 0
    last_appended_at: _dt.datetime | None = None

For agent-track kinds subclass AgentScopedFrontmatter instead. If user-track and agent-track share a kind name (e.g. memcell), give each a distinct ENTRY_ID_PREFIX (e.g. umc vs amc) so reverse lookup is unambiguous.

3.2 Re-export — mds/__init__.py
python
from .episode import UserEpisodeDailyFrontmatter as UserEpisodeDailyFrontmatter
3.3 Business writer — infra/persistence/markdown/writers/<name>.py
python
"""Episode appender."""

from __future__ import annotations

from pathlib import Path

from everos.core.persistence import MarkdownReader

from ..mds import UserEpisodeDailyFrontmatter
from .base import BaseDailyWriter


class UserEpisodeAppender(BaseDailyWriter):
    schema = UserEpisodeDailyFrontmatter

    # OPTIONAL: override the count strategy. Default is len(entries);
    # override to trust the frontmatter field instead.
    def _current_count(self, path: Path) -> int:
        if not path.exists():
            return 0
        return MarkdownReader.read(path).frontmatter.get("entry_count", 0)
3.4 Re-export — writers/__init__.py
python
from .episode import UserEpisodeAppender as UserEpisodeAppender
Done — usage
python
from everos.infra.persistence.markdown.writers import UserEpisodeAppender

appender = UserEpisodeAppender(memory_root)
eid = appender.append("u_jason", "I went to the doctor today.")
# → users/u_jason/episodes/episode-<today>.md
# → entry markers carry an auto-generated EntryId (e.g. ep_20260507_001)

4. (Optional) SQLite table — 4 steps

Skip this section if the kind doesn't need structured state beyond markdown.

4.1 Schema — infra/persistence/sqlite/tables/<name>.py
python
from everos.core.persistence.sqlite import BaseTable, Field


class EpisodeState(BaseTable, table=True):
    __tablename__ = "episode_state"  # type: ignore[assignment]

    id: int | None = Field(default=None, primary_key=True)
    entry_id: str = Field(index=True, unique=True)
    cluster_id: str | None = Field(default=None, index=True)
    status: str = Field(default="active")

BaseTable already provides created_at / updated_at (auto-bumped).

4.2 Re-export — tables/__init__.py
python
from .episode import EpisodeState as EpisodeState
4.3 Repo — infra/persistence/sqlite/repos/<name>.py
python
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker

from everos.core.persistence.sqlite import RepoBase

from ..sqlite_manager import get_session_factory
from ..tables import EpisodeState


class _EpisodeStateRepo(RepoBase[EpisodeState]):
    model = EpisodeState

    def _factory_lookup(self) -> async_sessionmaker[AsyncSession]:
        return get_session_factory()


episode_state_repo = _EpisodeStateRepo()
4.4 Re-export — repos/__init__.py
python
from .episode import episode_state_repo as episode_state_repo

5. (Optional) LanceDB index — 4 steps

Skip this section if the kind doesn't need vector / BM25 / hybrid retrieval.

5.1 Schema — infra/persistence/lancedb/tables/<name>.py
python
from everos.core.persistence.lancedb import BaseLanceTable, Vector


class EpisodeIndex(BaseLanceTable):
    entry_id: str
    text: str
    tags: list[str]
    vector: Vector(384)  # type: ignore[valid-type]

Vector(N) must match your embedding dimension.

5.2 Re-export — tables/__init__.py
python
from .episode import EpisodeIndex as EpisodeIndex
5.3 Repo — infra/persistence/lancedb/repos/<name>.py
python
from lancedb import AsyncTable

from everos.core.persistence.lancedb import LanceRepoBase

from ..lancedb_manager import get_table
from ..tables import EpisodeIndex


class _EpisodeIndexRepo(LanceRepoBase[EpisodeIndex]):
    schema = EpisodeIndex
    table_name = "episode_index"

    async def _table_lookup(self) -> AsyncTable:
        return await get_table(self.table_name, self.schema)


episode_index_repo = _EpisodeIndexRepo()
5.4 Re-export — repos/__init__.py
python
from .episode import episode_index_repo as episode_index_repo

Show full SKILL.md (295 more words)Show less

6. (Future) Skill-named & single-file markdown strategies

When the new memory kind needs:

  • skill-named files (one file per named skill, in-place rewrite) — wait for BaseSkillWriter, or use MarkdownWriter.write_markdown directly with a thin wrapper.
  • single-file rewrite (one fixed file like user.md) — wait for BaseProfileWriter, same fallback.

These strategies do not use entry markers; their frontmatter schema does not need ENTRY_ID_PREFIX (only id / type / schema_version plus the scope mixin fields).


7. Verification checklist

  • make lint — ruff + import-linter clean
  • make test — existing manager / lifespan / writer tests still pass
  • When the kind crosses multiple layers:
    • markdown entry id is the join key for the sqlite / lancedb rows
    • business code reads only via the repo singleton (no raw engine access in service / memory)
    • cascade daemon (when it lands) can rebuild sqlite / lancedb from md alone — keep md as the truth

Tests by layer:

Tests forLocation
Markdown frontmatter schematests/unit/test_infra/test_markdown/test_mds/
Markdown business appendertests/unit/test_infra/test_markdown/test_writers/
SQLite RepoBase logictests/unit/test_core/test_persistence/test_sqlite/
SQLite manager / lifespantests/unit/test_infra/test_sqlite/
LanceDB LanceRepoBase logictests/unit/test_core/test_persistence/test_lancedb/
LanceDB manager / lifespantests/unit/test_infra/test_lancedb/

8. Common pitfalls

MistakeSymptomFix
Forgot ENTRY_ID_PREFIX / DIR_NAME / FILE_PREFIX on a daily-log schemaBaseDailyWriter.__init__ raises TypeErrorAdd all three ClassVars
Same ENTRY_ID_PREFIX on user + agent variantsMemoryLayout.locate_for_entry collision errorUse distinct prefixes (e.g. umc vs amc)
Imported RepoBase from infra.persistence.sqliteImportErrorLives in core.persistence.sqlite (moved earlier)
Skipped one of the four files (schema / writer / table / repo)One side silently absentRe-export both/all from each __init__.py
Vector(N) mismatched with embedding dimLanceDB raises on insertMake N exactly match the model output
Imported MemoryLayout from a writer (infra)import-linter fails (infra → memory reverse dep)Use MemoryRoot (in core) and let the schema's ClassVars drive paths
Hand-rolling datetime.now() instead of today_with_timezone()Day-boundary drift across timezonesAlways go through everos.component.utils.datetime

Background

© EverMind-AI, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/add-memory-kind of EverMind-AI/EverOS.

Open the folder on GitHubat commit d2aa949

Compare with similar skills

Add Memory Kind next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Add Memory Kind compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Memory Kind this skillEverMind-AI/EverOS13k—~2.6kAutomated safety check: PassApache-2.0
Cursor BYOK Database Schemaleookun/cursor-byok3.2k—~1.3kAutomated safety check: PassMIT
Golang Databaseunxed/f42412 repos~2.9kAutomated safety check: PassMIT
Database Expertcin12211/orca-q224—~2.8kAutomated safety check: PassMIT
Sqlite Schema Designfastrepl/anarlog9.5k—~1.9kAutomated safety check: PassMIT
SQLsendou-ink/sendou.ink297—~423Automated safety check: PassAGPL-3.0

Similar skills

  • Cursor BYOK Database Schema

    leookun/cursor-byok

    Guides SQLite schema changes in the Cursor BYOK server, keeping SQLx migrations, the Rust store, API contracts and fixtures aligned.

    3.2k GitHub stars~1.3k tokensUpdated today
    DatabasesAuto-check passed
  • Comprehensive guide for Go database access — parameterized queries, struct scanning, NULLable columns, transactions, isolation levels, SELECT FOR UPDATE, connection pool, batch processing, context…

    241 GitHub starsUsed in 2 repos~2.9k tokens
    DatabasesAuto-check passed
  • Database Expert

    cin12211/orca-q

    Database performance optimization, schema design, query analysis, and connection management across PostgreSQL, MySQL, MongoDB, and SQLite with ORM integration.

    224 GitHub stars~2.8k tokensUpdated 17 days ago
    DatabasesAuto-check passed
  • Sqlite Schema Design

    fastrepl/anarlog

    Design or review schemas for crates/cloudsync using SQLite Sync constraints, not generic SQLite advice.

    9.5k GitHub stars~1.9k tokensUpdated today
    DatabasesAuto-check passed
  • SQL

    sendou-ink/sendou.ink

    Help write, debug, and explore SQLite database queries using Kysely.

    297 GitHub stars~423 tokensUpdated yesterday
    DatabasesAuto-check passed
  • Memory Search with SQL

    XiaomiMiMo/MiMo-Code

    Queries MiMoCode's raw trajectory SQLite database for cross-session analysis such as repeated errors, tool-call patterns and verifying what was actually run.

    14k GitHub stars~1.8k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from EverMind-AI/EverOS

  • Conventional Commit Writer

    EverMind-AI/EverOS

    Reviews the working tree and creates a focused commit with a Conventional Commits message, staging selectively and never bypassing hooks.

    13k GitHub stars~443 tokensUpdated 2 days ago
    Auto-check passed
  • EverOS Release Workflow

    EverMind-AI/EverOS

    Walks through cutting a versioned everos release: bump the version, update the changelog, tag it, and review the drafted GitHub Release page before publishing.

    13k GitHub stars~1.3k tokensUpdated 2 days ago
    Auto-check passed
  • New Branch from Main

    EverMind-AI/EverOS

    Creates a Git branch from an up-to-date main using a type-prefixed, kebab-case name such as feat or fix, and keeps work off main.

    13k GitHub stars~273 tokensUpdated 2 days ago
    Auto-check passed
  • Opens a GitHub pull request against main with the gh CLI, after local checks pass and with the project's PR template filled in honestly.

    13k GitHub stars~350 tokensUpdated 2 days ago
    Auto-check passed

Works with

Questions about Add Memory Kind

What does Add Memory Kind do?

Walks through adding a new persisted memory kind to EverOS: choose storage among Markdown, SQLite and LanceDB, pick a Markdown strategy, then wire schemas, repos and writers. The skill is for adding a new persisted business entity such as an Episode, Case, Skill, AtomicFact, Foresight or Profile. It starts with the storage decision, since a memory kind need not use all three layers.

When should I use Add Memory Kind?

Add Memory Kind fits situations like: adding a new persisted entity type to the EverOS memory layer; choosing between Markdown, SQLite and LanceDB for a new kind of record; writing the frontmatter schema and writer for a daily-log memory kind.

How do I install Add Memory Kind in Claude Code?

Run `npx skills add EverMind-AI/EverOS --skill add-memory-kind -a claude-code`. Or copy the skill folder (.claude/skills/add-memory-kind in EverMind-AI/EverOS) into .claude/skills/add-memory-kind in your project. Claude Code loads it when a task matches its description.

How do I install Add Memory Kind in Codex?

Run `npx skills add EverMind-AI/EverOS --skill add-memory-kind -a codex`. Or copy the skill folder (.claude/skills/add-memory-kind in EverMind-AI/EverOS) into .agents/skills/add-memory-kind in your project. Codex loads it when a task matches its description.

Can I use Add Memory Kind in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add EverMind-AI/EverOS --skill add-memory-kind -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-memory-kind, .gemini/skills/add-memory-kind, .github/skills/add-memory-kind and .opencode/skills/add-memory-kind in your project.

What does Add Memory Kind need to run?

Going by SKILL.md and its folder, Add Memory Kind needs the command-line tools its instructions call (make). Our summary lists: A checkout of the EverOS repository.

Does Add Memory Kind access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Add Memory Kind safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Add Memory Kind use?

Add Memory Kind is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Memory Kind use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Memory Kind?

Skills that share tags, products or a category with Add Memory Kind: Cursor BYOK Database Schema (leookun/cursor-byok, 3.2k stars), Golang Database (unxed/f4, 241 stars), Database Expert (cin12211/orca-q, 224 stars) and Sqlite Schema Design (fastrepl/anarlog, 9.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add Memory Kind?

EverMind-AI (a GitHub organization) maintains it in EverMind-AI/EverOS, which has 13,371 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 6, 2026.

Source: EverMind-AI/EverOS on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.