mcpField
A
airsync

airsync

github.com/aircuryAgent workflows565 installsUpdated today
Repository

About airsync

airsync is a skill for managing shared memory workflows between AI agents and developers. Its INBOX, PUBLISHED, and ARCHIVED layers separate pending submissions from searchable, vetted knowledge.

Key features

  1. 01Layered memory lifecycle
  2. 02Search and retrieve memories
  3. 03Propose and promote entries
  4. 04Quality checks and deduplication

Use cases

  1. 01Retrieve vetted context before implementation
  2. 02Submit reusable findings for review
  3. 03Review pending entries for duplicates

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/aircury/ai-framework --skill airsync

After installing, type/airsyncin Claude Code to confirm it loaded.

Details

From the project README

Airsync Memory Workflow

Purpose

Airsync is a managed memory system where AI agents and human developers collaboratively build a shared knowledge base. Unlike traditional knowledge bases where everything is searchable immediately, Airsync uses a gated lifecycle to prevent low-quality content from contaminating team-wide search.

The Three Layers
LayerVisibilityTTLPurpose
INBOXExplicit only14 daysRaw captures awaiting review
PUBLISHEDDefault searchPermanentVetted, high-quality knowledge
ARCHIVEDExplicit onlyPermanentRetired or obsolete content

Key Principle: Writing to the knowledge base ≠ Making it searchable.


Required Workflow

1. Retrieve Context First

Before making architectural decisions or implementing changes:

memory_search(
    query="your search terms",
    memory_kind="best_practice",  # optional filter
    tags_any=["relevant", "tags"]   # optional filter
)
  • Default search only returns PUBLISHED memories
  • Use layers=["PUBLISHED", "ARCHIVED"] to include archived content
  • Use layers=["INBOX"] only when explicitly reviewing pending memories
2. Produce Output With Traceability
  • Cite memory IDs for major decisions: "Based on mem_01hz3kp8x2a5mv7b..."
  • If memories conflict, prefer higher quality scores and newer timestamps
  • Note when you're overriding documented best practices
3. Capture Learnings (INBOX)

When you discover something worth remembering:

memory_propose(
    entry={
        "memory_kind": "best_practice",  # or "learning", "observation", "note", "model"
        "scope": "team",                 # or "project", "agent"
        "author_agent_id": "your-agent-id",
        "title": "Clear outcome-focused title",
        "content": "Detailed explanation with context...",
        "tags": ["architecture", "patterns"],
    }
)

Important: All proposals go to INBOX, not directly to PUBLISHED. They won't appear in default searches until promoted.

4. Quality Self-Check Before Proposing

The quality score (0.0-1.0) is computed automatically:

CriterionPoints
Title > 10 chars+0.20
Content > 50 chars+0.20
Has memory_kind+0.15
Scope = project/team+0.15
≥2 tags+0.15
Content > 200 chars+0.15

Minimum 0.5 required for promotion. Improve your entry if quality is low.


Memory Kinds

KindUse ForExample
best_practiceValidated approaches that work"Keep framework modules aligned with the selected architecture boundaries"
learningInsights from experience"Discovered that batching reduces API calls by 80%"
observationNoted patterns without full validation"Seems like Qdrant queries are faster with pre-filtering"
noteGeneral documentation"API rate limits are 1000 req/min"
modelMental models or frameworks"The CAP tradeoff in distributed systems"

Tool Reference

Write Operations
memory_propose(entry, team_id?) → MemoryRecord
    Creates a new memory in INBOX. Performs exact deduplication check.
    Returns error if exact duplicate exists in team.

memory_promote(memory_id, team_id?) → PromoteResult
    Moves INBOX memory to PUBLISHED. Requirements:
    - Quality >= 0.5
    - No semantic duplicates (>0.95 similarity) in PUBLISHED
    Returns duplicate_of if similar memory exists.

memory_archive(memory_id, reason, team_id?) → MemoryRecord
    Archives a memory (from any layer). Reasons:
    - "superseded" - replaced by newer content
    - "obsolete" - no longer relevant
    - "incorrect" - contains errors
    - "consolidated" - merged into another memory
    - "expired" - TTL expired (usually automatic)
Read Operations
memory_search(query, top_k?, team_id?, layers?, memory_kind?, scope?, tags_any?) → [SearchResult]
    Semantic search with layer-aware filtering.
    Default: only searches PUBLISHED.
    Automatically excludes expired INBOX entries.

memory_get(memory_id, team_id?) → MemoryRecord
    Retrieves any memory by ID (any layer).

memory_list_inbox(team_id?) → [MemoryRecord]
    Lists pending INBOX memories for review.
    Sorted by created_at desc (newest first).

memory_find_duplicates(memory_id, team_id?, threshold?) → DuplicateCheckResult
    Finds exact and semantic duplicates.
    Useful before promotion.

Content Quality Guidelines

DO Capture
  • Root cause + fix patterns applicable beyond this task
  • Architectural decisions with clear rationale
  • Validated runbooks and operational commands
  • Repeated pitfalls and how to avoid them
  • Team-wide conventions and standards
  • Mental models that explain complex systems
DO NOT Capture
  • Project-specific implementation details other teams can't reuse
  • Debugging sessions without transferable lessons
  • Scratch notes or in-progress findings
  • Content already in codebase, docs, or prior memory
  • Transient observations without context
The Collaboration Test

Before proposing, ask: "Would a developer on a different project benefit from this in 3 months?"

If no → don't propose.


Deduplication

The system prevents duplication at two levels:

1. Exact Duplication (propose phase)
  • SHA-256 hash of normalised content
  • Rejects identical content within same team
  • Returns existing memory ID on conflict
2. Semantic Duplication (promote phase)
  • Vector similarity > 0.95 threshold
  • Checked against PUBLISHED layer only
  • Suggests merge instead of promotion

Best Practice: Search before proposing. If similar content exists, enhance it rather than creating a duplicate.


Example Workflows

Adding a New Best Practice
# 1. Check if it already exists
results = memory_search(
    query="selected architecture framework module boundaries",
    memory_kind="best_practice"
)

# 2. If not found, propose to INBOX
memory = memory_propose(entry={
    "memory_kind": "best_practice",
    "scope": "team",
    "author_agent_id": "claude-opus-4",
    "title": "Keep framework modules aligned with selected architecture boundaries",
    "content": "All framework modules must respect the project's selected architecture boundaries...",
    "tags": ["architecture", "boundaries", "framework"],
})

# 3. When confident, promote to PUBLISHED
memory_promote(memory_id=memory.id)
Reviewing Pending Memories
# List INBOX for review
inbox = memory_list_inbox(team_id="my-team")

for memory in inbox:
    if memory.quality >= 0.5:
        # Check for duplicates first
        dups = memory_find_duplicates(memory.id)
        if not dups.semantic_duplicates:
            memory_promote(memory.id)
        else:
            print(f"Merge candidate: similar to {dups.semantic_duplicates[0].memory.id}")
    else:
        print(f"Low quality ({memory.quality}), needs improvement")

Configuration

Environment variables:

VariableDefaultDescription
AIRSYNC_TEAM_ID"default"Default team for all operations
AIRSYNC_INBOX_TTL_DAYS14Days before INBOX expires
AIRSYNC_DEDUP_THRESHOLD0.95Semantic similarity threshold
AIRSYNC_MIN_QUALITY_FOR_PUBLISH0.5Minimum quality for promotion
AIRSYNC_DEFAULT_SEARCH_LAYERS"PUBLISHED"Default layers for search

Safety Rules

  1. Never store secrets - No credentials, tokens, or personal data
  2. Never fabricate - Don't invent prior knowledge when search returns nothing
  3. Cite your sources - Use source_refs for traceability
  4. Prefer promotion over direct publish - All entries should pass through INBOX
  5. Archive obsolete content - Don't let outdated knowledge pollute search

Comments

Markdown supported