Skip to main content

Local-first persona and context portability for cross-LLM collaboration

Project description

Sayane (紗綾音)

日本語版 README · Documentation · Roadmap

Sayane is a local-first toolkit for carrying persona, context, prompts, and audit trails across LLM workflows.

It keeps your canonical context on your own machine, compiles it for different LLM runtimes such as ChatGPT and Claude, and prevents captured changes from being merged blindly.

Your context should not disappear when you change models.

Why Sayane exists

AI work is increasingly spread across multiple tools: ChatGPT, Claude, Gemini, Cursor, local models, browser extensions, and knowledge bases. Each runtime has its own memory, prompt format, and assumptions. As a result, serious users often lose:

  • the context behind an answer,
  • the persona or working stance used to produce it,
  • the history of what changed,
  • the ability to review whether a captured insight should become part of the canonical profile.

Sayane separates your context from any single vendor memory or chat service. It treats persona and context as local, reviewable project assets.

What Sayane does

Need Sayane mechanism
Keep a canonical user profile locally Sayane Profile in ~/.sayane/
Generate prompts for different LLMs Profile → Prompt IR → target adapter
Avoid blind context merges capture → candidate → evaluate → approve/reject
Track accepted and rejected changes lineage records
Use local Markdown context context/, storage index, optional Obsidian/Git workflows
Connect tools and editors CLI, Local Bridge, MCP server, Chrome Extension

Current status

Community Edition in this repository is now v1.0.13 and supports the core local-first workflow.

Community Edition v1.0.13 is now published on PyPI.

Interface Status Primary use
CLI Available init / compile / candidate / storage
Local Bridge Available sayane serve + local HTTP API
MCP Server Available Cursor / Claude Desktop integration
Chrome Extension Frozen / deprecated legacy capture / context insert / candidate actions during migration
RDE/Candidate evaluation Available evaluate / approve / reject / lineage
Storage Available local Markdown / filesystem-first workflows, with Obsidian/Git kept as legacy compatibility paths

Try it in 5 minutes

Install the CLI first. See docs/install.md for detailed installation notes.

# PyPI (macOS / Linux / Windows with Python 3.11+)
pip install "sayane==1.0.13"
# macOS / Linux install script
curl -fsSL https://raw.githubusercontent.com/zyx-corporation/sayane/main/scripts/install.sh | bash
# Windows PowerShell install script
irm https://raw.githubusercontent.com/zyx-corporation/sayane/main/scripts/install.ps1 | iex

Verify the core flow:

sayane --version
sayane init
sayane compile --target chatgpt --profile examples/profiles/minimal.yaml

This verifies:

  • local profile store initialization,
  • target-specific prompt compilation from one profile,
  • the basic flow: Profile → Prompt IR → Adapter output.

Notes:

  • The Chrome Extension remains available for existing users, but it is frozen / deprecated and no longer the primary entry point.
  • The recommended stable integration surfaces are the CLI, Local Bridge, and MCP Server.

Core workflow

Sayane Profile (local canonical context)
        ↓
Prompt IR (runtime-independent intermediate representation)
        ↓
Adapter (ChatGPT / Claude / Gemini / local targets)
        ↓
Target-specific prompt output

captured context → Candidate → evaluation → approve/reject → lineage

The LLM is not the owner of your persona. It is a runtime that receives a compiled prompt from your local profile.

Core principles

1. Separate persona from runtime

Your canonical persona and context belong to the local Sayane Profile, not to vendor memory.

2. Compile through Prompt IR

Do not copy one giant prompt string across runtimes. Compile one canonical profile into target-specific outputs.

3. Review meaning changes before merge

Captured context should become a candidate first. It should be evaluated, accepted, rejected, and recorded.

capture → candidate → evaluate (RDE/UIB-inspired review) → approve/reject → lineage

4. Prefer local-first portability

Sayane is designed so that serious AI work can remain inspectable, portable, and independent from any single hosted LLM memory.

Documentation

Start here:

Development

git clone https://github.com/zyx-corporation/sayane.git
cd sayane
uv run --extra dev pytest -q
# or keep a local venv explicitly:
# python -m venv .venv
# source .venv/bin/activate
# pip install -e ".[dev]"
# pytest -q

Development references:

Positioning

Sayane is not a prompt snippet manager.

It is a small infrastructure layer for people who want AI collaboration to be:

  • portable across models,
  • local-first by default,
  • reviewable before merge,
  • inspectable after change,
  • grounded in explicit persona, context, and lineage.

License

Apache License 2.0
SPDX-License-Identifier: Apache-2.0

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

sayane-1.0.14.post1.tar.gz (2.2 MB view details)

Uploaded Source

Built Distribution

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

sayane-1.0.14.post1-py3-none-any.whl (359.3 kB view details)

Uploaded Python 3

File details

Details for the file sayane-1.0.14.post1.tar.gz.

File metadata

  • Download URL: sayane-1.0.14.post1.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sayane-1.0.14.post1.tar.gz
Algorithm Hash digest
SHA256 ff903e1218c77ea599bdb934b2ecd2420f7248f67d5b49b5889c589ed774f1b1
MD5 2f0868cad55e4dc6970bbfd578339042
BLAKE2b-256 2a5397d1219f446d9bde69859993a44c86404a782d9dcd549a7b5e1e6648a30d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sayane-1.0.14.post1.tar.gz:

Publisher: publish-pypi.yml on zyx-corporation/sayane

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

File details

Details for the file sayane-1.0.14.post1-py3-none-any.whl.

File metadata

  • Download URL: sayane-1.0.14.post1-py3-none-any.whl
  • Upload date:
  • Size: 359.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sayane-1.0.14.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 eb20a74543e0c452f7a86ecc756be5950feacb15f5e3569680e797ee063e4aa4
MD5 c8922d38f016c6571141887492ed4c3e
BLAKE2b-256 846e3f7e78fce9da2b0caf94f0845f183c73362e026072121db65f0dca7b4152

See more details on using hashes here.

Provenance

The following attestation bundles were made for sayane-1.0.14.post1-py3-none-any.whl:

Publisher: publish-pypi.yml on zyx-corporation/sayane

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