lovcode

作者 MarkShawn2020已验证

A desktop companion app for AI coding tools. Browse Claude Code chat history, manage configurations, commands, skills, and more.

307
Stars
27
Forks
TypeScript
语言
2026/8/23
添加时间

⚠️ 第三方软件声明

本 Skill 为第三方开源软件,独立托管于 GitHub。SkillTip 仅为信息目录,不控制或维护底层仓库。所显示的安全检查为自动化且范围有限,安装前请自行审查源码。

阅读服务条款

安装

添加到你的 Claude Code skills 目录:

# Add to your Claude Code skills
git clone https://github.com/MarkShawn2020/lovcode

快速入门

使用 lovcode 等 Skills 的指南。

安全报告

已验证

上次扫描:—

{
  "status": "PASSED",
  "issues": []
}

README.md

Ataru cover

Ataru Ataru

高性能 AI 记忆检索:本地会话的检索内核,以及一个桌面 GUI。
High-performance AI memory retrieval — a local search core, plus a desktop app.
macOS · Windows · Linux

Tauri 2 Rust 2021 React 19 Apache 2.0

为什么是 Ataru · 产品路径 · 快速开始 · Agent Skill · 架构 · 开发 · 附录与 FAQ

Why Ataru

AI 编程过程中,真正有价值的答案经常已经出现过:一次故障排查、一条关键命令、一个架构取舍,或者一段几周前才讨论过的上下文。但这些内容分散在不同 Agent 的本地会话文件里,靠记忆、目录名和人工翻找很难重新定位。

Ataru 把这些已经发生过的对话变成本地可检索的记忆层:

  • 从 Claude、Codex 等本地会话来源建立统一索引。
  • 用关键词、字段、短语或自然语言描述找回相关上下文。
  • TurnRunSessionProject 四种粒度之间切换。
  • 从命中片段回到原始会话、消息和行号,而不是只展示一段截断摘要。
  • 默认离线运行;语义检索是可选增强,未配置或超时会清晰降级到关键词检索。

Ataru 的目标不是管理正在运行的 Agent,而是让过去的工作重新变得可用。

What it does

能力解决的问题
统一采集Claude CLI、Claude App/Web、Codex 等来源的会话格式不同,Ataru 在适配层归一化它们。
增量索引新消息写入后自动追赶索引,不需要每次从头扫描全部历史。
中文友好全文检索Tantivy + Jieba 同时覆盖中文、代码、域名、包名和错误串。
混合召回关键词适合精确匹配,自然语言问题可在语义索引可用时使用混合召回。
层级聚合同一命中可以按 Turn、Run、Session 或 Project 汇总,减少重复结果。
上下文回读保留稳定的 Project/Session/Run/Turn 标识、片段、角色、时间和行号。
Agent 接入GUI、CLI 和 Agent Skill 共用同一套搜索契约,不把检索逻辑复制到各个客户端。

Product path

Ataru 的主路径只有两步:把本地会话整理成可检索的记忆,再从命中结果回到原始上下文。

搜索召回

Ataru 搜索召回路径示意图

从一句自然语言问题,定位到 Turn、Run、Session 或 Project,再回读原始上下文。

本地索引

Ataru 本地索引路径示意图

Claude、Codex 等本地会话统一进入 Ataru 索引,并通过稳定 ID 回到具体来源。

Quick start

使用桌面应用

GitHub Releases 下载对应平台版本,启动后进入搜索页即可开始。

第一次使用时,Ataru 会先检查本地索引:

  1. 读取索引清单和 schema 版本。
  2. 如果索引不存在、过期或状态为 idle,启动一次索引构建。
  3. 通过 search-index:build 事件报告进度。
  4. 状态变为 ready 后,搜索输入才会执行查询。

索引是派生数据,不会改写原始会话;重建失败时保留上一个健康索引。

运行本地开发版本

git clone --recursive https://github.com/lovstudio/Ataru.git
cd Ataru
pnpm install
pnpm dev:app

前端热更新和不自动重启 Rust 的开发模式:

pnpm dev
pnpm dev:app:no-watch

Agent Skill

GUI 只是 Ataru 的一个客户端。面向 Agent 的正确抽象是 Skill:把“确认索引可用、发起搜索、读取上下文”变成稳定动作,而不是让每个 Agent 自己理解 Tantivy、文件路径或来源格式。这套抽象已经落地为两个可安装的 Agent Skill,见下方 已发布的 Skill

Skill 的最小工作流

ensure_index → search → inspect → return stable context
Skill 动作具体行为当前实现边界
ensure_index调用 get_search_index_status;索引未就绪时调用 start_search_index_build(false),等待状态变为 ready 或返回可复制错误。桌面搜索页已经自动执行;独立 Skill/无界面 Runner 必须显式执行这一步。
search调用版本化的 ataru_search,传入 querylevelmodelimitRust api 与 TypeScript SDK 已落地。
inspect使用结果中的稳定 projectIdsessionIdmessageIdlineNumber 回读原始会话。不从标题或展示路径重新猜测实体 ID。
return返回命中、实际检索模式、耗时、warnings 和可深链定位信息。语义不可用时保留 ATARU_*_FALLBACK 警告。

Skill 接入示例

面向 Tauri/桌面宿主时,Skill 只需要依赖以下公开命令:

const status = await invoke("get_search_index_status");

if (status.state !== "ready") {
  await invoke("start_search_index_build", { force: false });
  // 等待 search-index:build 事件,直到 state === "ready" 或 state === "error"
}

const response = await invoke("ataru_search", {
  request: {
    query: "上次是怎么解决索引没有更新的?",
    level: "turn",
    mode: "auto",
    limit: 20,
  },
});

无界面环境可以通过 JSON CLI 调用同一套搜索契约;首次查询前仍需完成 ensure_index

Skill 不拥有另一套索引,也不复制排序算法;它只是 api/sdk 契约的 Agent-facing adapter。独立 SKILL.md 包装层应复用这套 ensure_index → search → inspect 流程,避免 CLI、桌面端和不同 Agent 之间出现三套行为。

已发布的 Skill

Skill职责驱动脚本
lov-ataru-indexing检查索引状态、等待正在进行的构建、执行增量追赶或全量重建、预估语义索引成本scripts/ataru_index.py
lov-ataru-search召回历史会话上下文,返回可定位命中,并按稳定 ID 回读原文窗口scripts/ataru_recall.py
npx lovstudio skills add ataru-indexing
npx lovstudio skills add ataru-search

两个 Skill 都通过 JSON CLI 驱动,不复制排序算法,也不维护第二套索引:

  • 二进制解析后先做 --version 门控(要求 ≥ 0.41.3),避免旧版本把 CLI 参数 fall through 成一个桌面窗口。
  • lov-ataru-search 在索引未就绪时拒绝执行并返回 ATARU_INDEX_NOT_READY / ATARU_INDEX_BUILDING,绝不把“索引缺失”伪装成“零命中”。
  • CLI 只有关键词模式,因此 Skill 返回的 mode 恒为 keywordsemanticAvailable 恒为 false;需要语义或 hybrid 召回请用桌面端。
  • 在实测语料(2705 sessions / 847526 messages / 6.6GB 索引)上,turn 级查询约 48s,因此 Skill 默认超时为 180s(read 为 300s)。

Architecture

Ataru 是一个本地优先的模块化单体。GUI、CLI 和 Agent Skill 都是客户端,核心检索能力集中在 Rust 的 sdkapiai、来源适配器和索引管线中。

flowchart TB
    AGENT["Agent / Agent Skill"]
    AGENT_SKILL["Ataru Search Skill\nensure_index → search → inspect"]
    DESKTOP["Desktop UI\nReact 19"]
    CLI["JSON CLI / automation"]

    subgraph PUBLIC["Ataru public boundary"]
        API["api\nvalidation · orchestration · fallback"]
        SDK["sdk\nv2 request/response · stable IDs"]
        AGG["Turn / Run / Session / Project\naggregation"]
    end

    subgraph CORE["Local search core"]
        ADAPTERS["Source adapters\nClaude · Codex · legacy"]
        INGEST["Ingestion & indexing\nmanifest · incremental · reconcile"]
        AI["ai\nintent · semantic recall · RRF"]
    end

    SOURCES[("Local transcript files")]
    TEXT[("Tantivy + Jieba\nkeyword index")]
    VECTOR[("SQLite\noptional vector store")]
    EMBED["Optional embedding provider"]
    CONTEXT["Raw context reader\nmessage · line · deep link"]

    AGENT --> AGENT_SKILL
    AGENT_SKILL --> API
    DESKTOP --> API
    CLI --> API
    API --> SDK
    API --> AGG
    API --> AI
    AGG --> SDK
    SOURCES --> ADAPTERS
    ADAPTERS --> INGEST
    INGEST --> TEXT
    INGEST --> VECTOR
    AI --> TEXT
    AI --> VECTOR
    AI -. "explicit opt-in" .-> EMBED
    API --> CONTEXT
    CONTEXT --> SDK

Modules

1. Agent Skill adapter

职责: 为 Agent 提供单一的历史检索动作,处理索引初始化、查询参数、结果解释和上下文回读。

边界: Skill 不直接扫描 ~/.claude~/.codex,不解析 JSONL,不维护自己的缓存;所有事实都来自 api 返回的稳定契约。它可以运行在桌面宿主、CLI wrapper 或其他支持 Agent Skills 的环境中。

关键协议: ensure_indexsearchinspectreturn。其中 ensure_index 是首次使用的必要步骤,不能把“索引尚未构建”伪装成零结果。

2. sdk:稳定领域契约

代码: src-tauri/src/app/ataru/sdk.rssrc/modules/sdk/search.ts

负责:

  • SearchRequest / SearchResponse / SearchHit
  • SearchLevel = turn | run | session | project
  • SearchMode = auto | keyword | semantic | hybrid
  • 稳定实体 ID、排序信号、warnings 和错误边界。
  • Turn/Run/Session/Project 聚合规则。

不负责: Tauri 命令、文件系统、HTTP、具体索引实现或 UI 状态。sdk 是依赖图中最底层的公开语言层,不能反向引用 apiai

3. api:入口、编排与降级

代码: src-tauri/src/app/ataru/api.rssrc/modules/api/ataru.ts

负责:

  • 校验查询、限制 Top-K 和项目过滤。
  • 根据 auto 判断使用关键词或混合检索。
  • 并发关键词与语义召回,执行 deadline 和取消。
  • 汇总层级结果,返回真实执行模式、耗时和 ATARU_* warnings。
  • 通过 Tauri IPC 暴露 ataru_search、索引状态和索引构建入口。

不负责: 解析供应商文件、实现 tokenizer 或决定具体 Embedding 模型。

4. Source adapters:来源适配与规范化

代码: src-tauri/src/app/session_parsing.rssrc-tauri/src/app/session_listing.rssrc-tauri/src/app/search.rs

负责: 读取不同 Agent 产生的本地 transcript,将不一致的记录转成统一的 Project、Session、Turn 和 Message。来源 ID 能稳定复用时必须保持复用,避免深链和历史映射失效。

输入: Claude CLI/App/Web、Codex 活跃与归档会话文件。

输出: 带来源、项目、会话、回合、消息位置和时间戳的规范化记录。

原则: 不改写原始 transcript;坏记录隔离并报告 ATARU_PARTIAL_SOURCE,其余来源继续可用。

5. Ingestion & indexing:采集、增量与对账

代码: src-tauri/src/app/search.rssrc-tauri/src/app/core.rs

负责:

  • 首次全量建立 Tantivy schema 和索引清单。
  • Claude/Codex 文件变化后的增量追加或重建。
  • 使用 search-index-manifest.json 比较路径、大小、mtime、摘要和删除标记。
  • 以 single-flight 合并并发构建请求。
  • 先写临时目录,schema 校验和冒烟查询通过后原子切换。

索引状态: idle → building → ready;异常进入 error,并保留上一个健康索引。构建进度通过 search-index:build 事件发送给 UI 或 Skill 宿主。

6. ai:查询意图、语义召回与融合

代码: src-tauri/src/app/ataru/ai.rssrc-tauri/src/app/search.rs

负责:

  • 判断查询是否更适合精确关键词或自然语言召回。
  • 在语义索引健康时执行向量召回。
  • 使用 RRF 合并关键词与语义候选。
  • 在远程 Embedding 不可用、超时或未配置时退回关键词结果。

默认行为: 语义检索是 opt-in 增强,不会成为离线可用的前置条件;响应会保留实际 mode 和明确的 fallback warning。

7. Storage:本地事实与派生数据

事实来源: 用户本机的 Claude/Codex 会话文件。

派生数据: Tantivy 全文索引、search-index-manifest.json、由用户在高级设置中显式初始化的 SQLite 向量索引和会话缓存。

边界: Ataru 可以清除或重建派生索引,但不删除原始会话。远程语义提供方只有在用户显式配置后才参与,并且只接收完成召回所需的最小化文本。

8. Desktop UI:搜索、验证与阅读

代码: src/modules/ui/AtaruSearchPage.tsxsrc/modules/ui/ataru-search/*src/components/*

负责: 搜索输入、IME 候选提交、层级/模式切换、索引状态、命中高亮、原始上下文预览和复制/深链动作。

重要约束: UI 是契约消费者,不从展示标题重建实体 ID;搜索输入和结果绘制不能等待全量会话读取;索引构建状态必须可见并支持重试。

9. CLI:无界面 JSON 自动化

代码: src-tauri/src/app/cli.rssrc-tauri/src/app/run.rs

CLI 在 Tauri 初始化之前处理请求,适合 Agent wrapper、脚本和 CI。全部子命令都返回单个 JSON 对象:

# 版本门控:CLI 必须先确认二进制支持这些子命令
ataru --version --json

# 索引:读取状态 / 触发无界面构建
ataru index status --json
ataru index build --json            # 增量追赶
ataru index build --force --json    # 全量重建

# 语义索引预估(不写入)
ataru semantic preview --json

# 检索:可选层级与项目过滤
ataru search "索引没有更新" --json \
  --level turn --limit 20 \
  --project-id PROJECT_ID

# 按稳定身份读取完整会话
ataru session read \
  --project-id PROJECT_ID \
  --session-id SESSION_ID \
  --json

CLI 的真实边界(不要在包装层里承诺更多):

  • 未识别的参数会 fall through 去启动桌面 GUI,因此任何外部脚本都必须先用 --version 做版本门控。
  • --level 会强制 SearchMode::Keyword:CLI 只提供关键词检索,语义与 hybrid 仅在桌面端可用。
  • --limit 上限 200;带 --level 的聚合查询上限 100。
  • 项目 ID 是以 - 开头的路径 slug(如 -Users-me-code-app),传给 argparse 类解析器时必须写成 --project-id=VALUE
  • 索引构建锁只在进程内生效;CLI 与桌面端并发构建依靠「写临时目录再原子替换」兜底,构建前应先读 index status

session read 输出当前页面可见的消息 JSON,并按源文件顺序保留 uuidline_number、角色和正文。 档案阅读器的“复制给 Agent”还会复制 ataru-agent-context/v1,其中包含同一组稳定 ID、真实源文件路径、CLI 参数、Tauri command 和当前页面消息快照。

新的聚合查询使用 Ataru v2 response。无界面调用方应先完成 ensure_index,不要在索引缺失时重复提交相同查询。

10. Observability & compatibility

可观测性: 记录本地 request ID、阶段耗时、候选数、结果数、索引版本和 fallback code,不记录原始查询、会话正文、完整路径或密钥。

兼容性: 原始数据格式、既有 Tauri commands、JSON 字段和稳定映射 ID 通过 adapter 保留;v2 允许增加可选字段和 warning,不随意改变已有实体 ID。

Search and indexing lifecycle

写入链路

transcript write
  → source adapter
  → normalized Project / Session / Run / Turn
  → single-writer queue
  → Tantivy commit + manifest update
  → optional vector index catch-up
  → searchable

查询链路

Skill / CLI / UI
  → ensure_index
  → api validates request and deadline
  → keyword and/or semantic recall
  → RRF fusion
  → Turn / Run / Session / Project aggregation
  → stable hit + snippet + source location

查询粒度的语义:

粒度聚合键最适合
turnproject + session + message找到“当时具体哪条消息或工具记录”
runproject + session + run找到“当次完整执行如何完成”
sessionproject + session回看一次完整讨论
projectproject了解一个项目的历史决策与演进

Privacy and reliability

  • 默认本地运行,不要求账号或云端服务。
  • 原始 transcript 只读;索引和缓存都是可重建的派生数据。
  • 语义搜索可关闭;远程 Embedding 必须显式配置。
  • 查询失败、索引损坏、超时和部分来源错误都有稳定错误码或 warning,不把故障伪装成空结果。
  • 全量重建在临时目录中完成,成功后原子替换;磁盘不足、取消或崩溃不会覆盖健康索引。

Development

Commands

# Frontend development
pnpm dev

# Tauri desktop development
pnpm dev:app

# Frontend HMR without automatic Rust restart
pnpm dev:app:no-watch

# Build a distributable package
pnpm tauri build

Repository layout

src/                         React 19 frontend and shared client contracts
src/modules/sdk/             TypeScript search DTOs
src/modules/api/             Tauri-facing Ataru client
src/modules/ui/              Search, result and transcript surfaces
src-tauri/src/app/ataru/     Rust sdk/api/ai boundary
src-tauri/src/app/search.rs  Source parsing, indexing and legacy adapters
src-tauri/src/app/cli.rs     JSON CLI entry
docs/architecture/           Architecture decisions and detailed contracts
docs/images/                 README cover and current product path visuals

Tech stack

LayerTechnology
Desktop shellTauri 2
FrontendReact 19, TypeScript, Vite, Tailwind CSS, shadcn/ui
SearchTantivy + Jieba
Semantic recall用户显式启用的 OpenAI-compatible Embeddings + SQLite 索引
BackendRust 2021
StateReact Query, Jotai, Tauri events

Documentation

Star History

Star History Chart

Appendix / FAQ

Ataru 与 Yoda 是什么关系?

Ataru 负责“过去聊过什么、答案和上下文在哪里”;Yoda 负责“现在由哪个 Agent 继续执行以及如何交付”。Ataru 可以把已找回的项目、会话或回合交给 Yoda,但不拥有运行中 Agent、PTY 或任务编排状态。

为什么代码、CLI 或本地目录里仍然会出现 Lovcode?

Ataru 从 Lovcode 演进而来。新安装和新脚本使用 ataru;为避免旧安装、历史索引、更新通道和外部映射失效,当前阶段保留 lovcode 可执行文件与旧 CLI 命令作为兼容入口,同时保留 lovcode:* 存储键和 LOVCODE_* 环境变量。这些是兼容层,不是新的产品定位。

Ataru 的本地数据目录在哪里?

Ataru 的主数据目录是 ~/.lovstudio/ataru。会话缓存、历史索引、全文搜索索引以及其他派生数据都会写入这个目录(macOS 的全文索引位于 ~/Library/Application Support/ataru/search-index)。

旧安装留下的 ~/.lovstudio/lovcode 只作为迁移来源:Ataru 启动时会优先读取新目录,并把旧目录中缺少的文件复制到新目录;旧文件不会被删除。新用户不会创建 ~/.lovstudio/lovcode

如果你说的是 Skills 的全局 profile,它仍然是独立的 ~/.lovstudio/skills/profile.json,不属于 Ataru 的应用数据目录。

Lovstudio 是什么?

Lovstudio(中文:手工川工作室,英文:Lovstudio.AI)是 Ataru 的维护方。品牌、公司和生态信息不影响 Ataru 的本地搜索核心。

Ataru 会把我的对话上传到云端吗?

默认不会。关键词索引和查询都在本机完成。只有显式配置远程 Embedding 时,最小化的检索文本才会发送给指定提供方;配置入口、模型和数据范围应由用户自行确认。

索引可以删除吗?

可以。索引、manifest、向量库和缓存都是派生数据,删除后可以从原始 transcript 重新构建;删除索引不会删除原始对话。

如何从脚本调用 JSON CLI?

新安装的 CLI 主入口是 ataru

ataru search "索引没有更新" --json --limit 20
ataru search "索引没有更新" --json --level turn --limit 20

旧脚本仍可继续使用 lovcode search ...,它会进入同一套 Ataru 实现。

无界面调用方应在首次查询前完成索引初始化;桌面端会自动执行,独立 Skill Runner 需要显式调用 get_search_index_statusstart_search_index_build

License

Apache-2.0

常见问题

What is lovcode?

lovcode is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by MarkShawn2020. A desktop companion app for AI coding tools. Browse Claude Code chat history, manage configurations, commands, skills, and more. It has 307 GitHub stars.

Is lovcode safe to use?

Yes. lovcode passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.

How do I install lovcode?

Clone the repository with "git clone https://github.com/MarkShawn2020/lovcode" and add it to your Claude Code skills directory (see the Installation section above).

What programming language is lovcode written in?

lovcode is primarily written in TypeScript. It is open-source under MarkShawn2020 on GitHub, so you can review or fork the full source.

Are there alternatives to lovcode?

Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh lovcode against similar tools.

评论 (0)

暂无评论,成为第一个分享想法的人!

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI 智能体ai-agentsbrainstorming
查看详情

hermes-agent

by NousResearch

10

The agent that grows with you

234,43747,175Python
AI 智能体ai-agentsagent-orchestration
查看详情

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI 智能体claude-codeai-tools
查看详情

claude-code

by anthropics

Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.

120,03119,897Shell
AI 智能体
查看详情

开发者还喜欢

基于喜欢此 Skill 的开发者投票和收藏

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI 智能体ai-agentsbrainstorming
查看详情

hermes-agent

by NousResearch

10

The agent that grows with you

234,43747,175Python
AI 智能体ai-agentsagent-orchestration
查看详情

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP 服务器apisai-tools
查看详情

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI 智能体ai-agentsanthropicclaude-code
查看详情

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI 智能体claude-codeai-tools
查看详情