
claude-history-ingest
Ingest Claude Code conversation/session history into Obsidian as distilled knowledge. Use for importing or mining past Claude sessions, .claude data, project/session history, or audit logs.
- Installs
- 3K
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/ar9av/obsidian-wiki --skill claude-history-ingest- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads claude-history-ingest automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Claude History Ingest — Conversation Mining
You are extracting knowledge from the user's past Claude Code conversations and distilling it into the Obsidian wiki. Conversations are rich but messy — your job is to find the signal and compile it.
This skill can be invoked directly or via the wiki-history-ingest router (/wiki-history-ingest claude).
Before You Start
Writing profile: Before drafting or rewriting natural-language Markdown, read and apply the Writing Profile Resolution section in llm-wiki/SKILL.md. Framework schema, provenance, safety, and operation-specific requirements take precedence.
WRITING.md preferences apply only to newly drafted or rewritten natural-language Markdown; preserve source content and structured records.
- Resolve config — follow the Config Resolution Protocol in
llm-wiki/SKILL.md(inline@nameoverride → walk up CWD for.env→ global config → prompt setup). This givesOBSIDIAN_VAULT_PATHandCLAUDE_HISTORY_PATH(defaults to~/.claude) - Read
.manifest.jsonat the vault root to check what's already been ingested - Read
index.mdat the vault root to know what the wiki already contains - Project Scoping — read
WIKI_SKIP_PROJECTSfrom config (comma-separated substrings). Exclude any project directory whose name contains one of them from every step below (scan, delta, sampling, manifest writes). If the user names extra projects to skip this run, add them. Apply the exclusion once, uniformly — don't hand-writegrep -vfilters into individual commands, which drifts between the scan and manifest steps.
Ingest Modes
Append Mode (default)
Check .manifest.json for each source file (conversation JSONL, memory file). Only process:
- Files not in the manifest (new conversations, new memory files, new projects)
- Files whose modification time is newer than their
ingested_atin the manifest
This is usually what you want — the user ran a few new sessions and wants to capture the delta.
Portable keys when comparing. Manifest keys follow the source key contract (v2) in
llm-wiki/SKILL.md→.manifest.json. A session under$HOMEis keyed~-relative (~/.claude/projects/.../abc.jsonl), never by the expanded machine path; vault-relative and pseudo-keys are the other two forms. Before deciding a file is "new", resolve the stored key the same way the tool does (expand~/env vars, resolve vault-relative against the vault root) — otherwise an already-tracked file looks new and gets re-ingested. Thescripts/manifest.pyhelper does this for you:# New/modified sources, honoring WIKI_SKIP_PROJECTS + --skip: python3 "$OBSIDIAN_WIKI_REPO/scripts/manifest.py" delta "$OBSIDIAN_VAULT_PATH" \ --scan "$CLAUDE_HISTORY_PATH/projects/*/memory/*.md" # One-time repair if the manifest still holds legacy absolute keys: python3 "$OBSIDIAN_WIKI_REPO/scripts/manifest.py" migrate "$OBSIDIAN_VAULT_PATH" --dry-runThe helper is optional — if it's unavailable, apply the same resolution inline before every manifest lookup and write.
Pre-extraction (recommended — run before ingest)
Raw JSONL files are 80-90% noise: tool_use blocks, thinking blocks, progress events, and
file-history-snapshot entries dominate by byte count. The scripts/extract-jsonl.py helper
strips all of that and writes compact signal-only JSON to ~/.claude/extracted/, achieving
50–200× file-size reduction (e.g. 12 MB JSONL → 64 KB extracted). This lets the skill read
5–10× more conversations per run within the same token budget.
Run it as a pre-step before invoking this skill:
# First run — extract everything (skip excluded projects)
python3 "$OBSIDIAN_WIKI_REPO/scripts/extract-jsonl.py" --skip tsg,autom8
# Incremental — only sessions modified in the last day
python3 "$OBSIDIAN_WIKI_REPO/scripts/extract-jsonl.py" \
--since "$(date -v-1d +%Y-%m-%d)" --skip tsg,autom8
Extracted files live at ~/.claude/extracted/<project-dir>/<session-id>.json and contain:
{
"session_id": "uuid",
"project": "-Users-name-myapp",
"cwd": "/Users/name/myapp",
"start_ts": "...",
"end_ts": "...",
"n_turns": 18,
"n_user_words": 620,
"turns": [
{"role": "user", "text": "..."},
{"role": "assistant", "text": "..."}
]
}
When Step 3 reads conversations, always prefer the extracted file over the raw JSONL. (See Step 3.)
If extract-jsonl.py was not run first, fall back to raw JSONL — but note the coverage will be
shallower because each raw file costs far more tokens to read.
Conversation Sampling Heuristic
A history path can hold hundreds of conversation JSONLs — do not try to read them all. Per project:
- If the project already has memory files (
memory/*.md), ingest those first (they are pre-distilled signal), then also process conversations not yet in the manifest — new conversations should still be captured even for memory-rich projects. - If the project has no memory files, read only the 3 most recent conversations (by mtime) to characterize it. Prefer pre-extracted files (see above) — they are cheap enough that you can read 5–10 in the same token budget as 1 raw JSONL.
- Always report what you sampled vs skipped (e.g. "agenttower: 7 memory files + 4 new conversations ingested, 14 unchanged conversations skipped"), so the coverage gap is visible rather than silent.
Full Mode
Process everything regardless of manifest. Use after a wiki-rebuild or if the user explicitly asks.
Claude Code Data Layout
Claude Code stores data in two locations. Scan both.
Source 1: ~/.claude/ (CLI sessions)
~/.claude/
├── projects/ # Per-project directories
│ ├── -Users-name-project-a/ # Path-derived name (slashes → dashes)
│ │ ├── <session-uuid>.jsonl # Conversation data (JSONL)
│ │ └── memory/ # Structured memories
│ │ ├── MEMORY.md # Memory index
│ │ ├── user_*.md # User profile memories
│ │ ├── feedback_*.md # Workflow feedback memories
│ │ └── project_*.md # Project context memories
│ ├── -Users-name-project-b/
│ │ └── ...
├── sessions/ # Session metadata (JSON)
│ └── <pid>.json # {pid, sessionId, cwd, startedAt, kind, entrypoint}
├── history.jsonl # Global session history
├── tasks/ # Subagent task data
├── plans/ # Saved plans
└── settings.json
Source 2: ~/Library/Application Support/Claude/local-agent-mode-sessions/ (Desktop app agent sessions)
Pre-check first. Many users are CLI-only and have no desktop sessions. Before walking the structure below, confirm it's non-empty:
DESKTOP_SESSIONS="$HOME/Library/Application Support/Claude/local-agent-mode-sessions" [ -d "$DESKTOP_SESSIONS" ] && find "$DESKTOP_SESSIONS" -name "audit.jsonl" | head -1If that prints nothing, skip this entire section (Source 2 + Step 3b) and don't narrate it.
The Claude desktop app stores local agent mode sessions here. The structure is deeply nested:
~/Library/Application Support/Claude/local-agent-mode-sessions/
└── <outer-uuid>/
└── <inner-uuid>/
├── local_<session-uuid>.json # Session metadata
└── local_<session-uuid>/
├── audit.jsonl # Audit log — tool calls, file reads, commands run
└── .claude/
└── projects/
└── <path-encoded-name>/ # Same path-encoding as ~/.claude/projects/
└── <uuid>.jsonl # Conversation transcript (same JSONL format as CLI)
How to find all local-agent-mode sessions:
# Find all session metadata files
find ~/Library/Application\ Support/Claude/local-agent-mode-sessions -name "local_*.json" -maxdepth 4
# Find all audit logs
find ~/Library/Application\ Support/Claude/local-agent-mode-sessions -name "audit.jsonl"
# Find all conversation transcripts
find ~/Library/Application\ Support/Claude/local-agent-mode-sessions -name "*.jsonl" -path "*/.claude/projects/*"
Session metadata (local_<uuid>.json) — JSON file with fields like sessionId, cwd, startedAt, model, title. Read this first to understand the session context before opening the transcript.
Audit log (audit.jsonl) — Each line is a JSON record of one agent action: tool calls (Read, Write, Bash, Edit), file accesses, shell commands executed, MCP calls. Useful for understanding what the agent actually did — often richer signal than the conversation text alone. Fields: type, toolName, input, output, timestamp, sessionId.
Conversation transcript (.claude/projects/.../<uuid>.jsonl) — Identical format to CLI conversation JSONL. Parse the same way as ~/.claude/projects/*/*.jsonl.
Key data sources ranked by value (both locations combined):
- Memory files (
~/.claude/projects/*/memory/*.md) — Pre-distilled, already wiki-friendly. Gold. - Conversation JSONL (both
~/.claude/projects/*/*.jsonland desktop app transcripts) — Full conversation transcripts. Rich but noisy. - Audit logs (
audit.jsonlin desktop sessions) — Tool-call level record of what was done. Useful for extracting concrete actions, file patterns, and command patterns even when the conversation is sparse. - Session metadata (
sessions/*.jsonandlocal_*.json) — Tells you which project, when, and what CWD.
Step 1: Survey and Compute Delta
Scan both data locations and compare against .manifest.json:
# --- Source 1: CLI sessions (~/.claude) ---
# Find all projects
Glob: ~/.claude/projects/*/
# Find memory files (highest value)
Glob: ~/.claude/projects/*/memory/*.md
# Find conversation JSONL files
Glob: ~/.claude/projects/*/*.jsonl
# --- Source 2: Desktop app local-agent-mode sessions ---
DESKTOP_SESSIONS="$HOME/Library/Application Support/Claude/local-agent-mode-sessions"
# Session metadata
find "$DESKTOP_SESSIONS" -name "local_*.json" -maxdepth 4
# Audit logs
find "$DESKTOP_SESSIONS" -name "audit.jsonl"
# Conversation transcripts
find "$DESKTOP_SESSIONS" -name "*.jsonl" -path "*/.claude/projects/*"
Build a unified inventory and classify each file:
- New — not in manifest → needs ingesting
- Modified — in manifest but file is newer → needs re-ingesting
- Unchanged — in manifest and not modified → skip in append mode
Report to the user: "Found X CLI projects, Y desktop sessions. Memory files: A. Conversations: B. Audit logs: C. Delta: D new, E modified."
Step 2: Ingest Memory Files First
Memory files are already structured with YAML frontmatter:
---
name: memory-name
description: one-line description
type: user|feedback|project|reference
---
Memory content here.
For each memory file:
- Read it and parse the frontmatter
usertype → feeds into an entity page about the user, or concept pages about their domainfeedbacktype → feeds into skills pages (workflow patterns, what works, what doesn't)projecttype → feeds into entity pages for the projectreferencetype → feeds into reference pages pointing to external resources
The MEMORY.md index file in each project is a quick summary — read it first to decide which individual memory files are worth reading in full.
Step 3: Parse Conversation JSONL
Always check for a pre-extracted file first (see Pre-extraction section above). For each
conversation ~/.claude/projects/<proj>/<uuid>.jsonl, look for its counterpart at
~/.claude/extracted/<proj>/<uuid>.json. If found, read that instead — it is already filtered to
user + assistant text turns and costs 50–200× fewer tokens than the raw JSONL.
# Resolution order for each session:
1. ~/.claude/extracted/<project>/<session-id>.json ← prefer (compact, signal-only)
2. ~/.claude/projects/<project>/<session-id>.jsonl ← fallback (raw, noisy)
Reading a pre-extracted file: it already contains only the turns you need. Iterate
turns[].{role, text} directly. The top-level fields (cwd, start_ts, n_user_words, etc.)
give you project context without any further parsing.
Reading raw JSONL (fallback): Each line is a JSON object:
{
"type": "user|assistant|progress|file-history-snapshot",
"message": {
"role": "user|assistant",
"content": "text string"
},
"uuid": "...",
"timestamp": "2026-03-15T10:30:00.000Z",
"sessionId": "...",
"cwd": "/path/to/project",
"version": "2.1.59"
}
For assistant messages, content may be an array of content blocks:
{
"content": [
{"type": "thinking", "text": "..."},
{"type": "text", "text": "The actual response..."},
{"type": "tool_use", "name": "Read", "input": {...}}
]
}
- Filter to
type: "user"andtype: "assistant"entries only - For assistant entries, extract
textblocks (skipthinkingandtool_use— those are noise) - The
cwdfield tells you which project this conversation belongs to - Skip
type: "progress"— internal agent progress updates - Skip
type: "file-history-snapshot"— file state tracking - Skip subagent conversations (under
subagents/subdirectories) — unless the user asks
Step 3b: Parse Audit Logs (desktop sessions only)
For each audit.jsonl found under local-agent-mode-sessions/, read it line by line. Each line is a JSON record of one agent action:
{
"type": "tool_call",
"toolName": "Bash",
"input": {"command": "npm test"},
"output": "...",
"timestamp": "2026-04-10T14:22:00Z",
"sessionId": "..."
}
What to extract from audit logs:
- File access patterns — which files does the agent repeatedly Read or Edit? These are the high-value files in the project. Note them as project references.
- Shell commands — recurring Bash commands reveal the project's build/test/deploy workflow. Distill these into a
skills/page (e.g. "how this project is built and tested"). - Tool call sequences — if the agent always does Read → Edit → Bash in a particular order, that's a workflow pattern worth capturing.
- Error patterns — failed tool calls (non-zero exit codes, error outputs) reveal pain points, known rough edges, or recurring bugs.
- MCP tool calls — calls to MCP tools reveal which external services and APIs the project integrates with.
Skip from audit logs:
- Routine file reads with no pattern (e.g. reading config files once)
- Tool outputs that are just noise (long stack traces, verbose logs) — summarize the error class, not the full output
- Anything that looks like secrets, tokens, or credentials in command arguments or outputs
Cross-reference with the conversation transcript: The audit log tells you what happened; the conversation tells you why. When both are available for the same session, use them together — the audit log grounds the conversation in concrete actions.
Read the paired local_<uuid>.json session metadata before processing the audit log — it gives you cwd, startedAt, and title to contextualize the actions.
Step 4: Cluster by Topic
Don't create one wiki page per conversation. Instead:
- Group extracted knowledge by topic across conversations
- A single conversation about "debugging auth + setting up CI" → two separate topics
- Three conversations across different days about "React performance" → one merged topic
- The project directory name gives you a natural first-level grouping
Step 5: Distill into Wiki Pages
Each Claude project maps to a project directory in the vault. The project directory name from ~/.claude/projects/ encodes the original path — decode it to get a clean project name:
-Users/Documents/projects/my-Project → myproject
-Users/Documents/projects/Another-app → anotherapp
Project-specific vs. global knowledge
| What you found | Where it goes | Example |
|---|---|---|
| Project architecture decisions | projects/<name>/concepts/ | projects/my-project/concepts/main-architecture.md |
| Project-specific debugging | projects/<name>/skills/ | projects/my-project/skills/api-rate-limiting.md |
| General concept the user learned | concepts/ (global) | concepts/react-server-components.md |
| Recurring problem across projects | skills/ (global) | skills/debugging-hydration-errors.md |
| A tool/service used | entities/ (global) | entities/vercel-functions.md |
| Patterns across many conversations | synthesis/ (global) | synthesis/common-debugging-patterns.md |
For each project with content, create or update the project overview page at projects/<name>/<name>.md — named after the project, not _project.md. Obsidian's graph view uses the filename as the node label, so _project.md makes every project show up as _project in the graph. Naming it <name>.md gives each project a distinct, readable node name.
Important: Distill the knowledge, not the conversation. Don't write "In a conversation on March 15, the user asked about X." Write the knowledge itself, with the conversation as a source attribution.
Write a summary: frontmatter field on every new/updated page — 1–2 sentences, ≤200 chars, answering "what is this page about?" for a reader who hasn't opened it. wiki-query's cheap retrieval path reads this field to avoid opening page bodies.
Add confidence and lifecycle fields to every new page's frontmatter:
base_confidence: 0.42
lifecycle: draft
lifecycle_changed: <obsidian-wiki memory now --date>
On update, leave lifecycle and lifecycle_changed unchanged — only a human editor transitions lifecycle state.
Mark provenance per the convention in llm-wiki (Provenance Markers section):
- Memory files are mostly extracted — the user wrote them by hand and they're already distilled. Treat memory-derived claims as extracted unless you're stitching together claims from multiple memory files.
- Conversation distillation is mostly inferred. You're synthesizing a coherent claim from many turns of dialogue, often filling in implicit reasoning. Apply
^[inferred]liberally to synthesized patterns, generalizations across sessions, and "what the user really meant" interpretations. - Use
^[ambiguous]when the user changed their mind across sessions or when assistant and user contradicted each other and the resolution is unclear. - Write a
provenance:frontmatter block on every new/updated page summarizing the rough mix.
Step 6: Update Manifest, Journal, and Special Files
Update .manifest.json
For each source file processed, add/update its entry with:
ingested_at,size_bytes,modified_atsource_type: one of"claude_conversation","claude_memory","claude_audit_log","claude_desktop_session"project: the decoded project namepages_createdandpages_updatedlists
Also update the projects section of the manifest:
{
"project-name": {
"source_path": "~/.claude/projects/-Users-...",
"vault_path": "projects/project-name",
"last_ingested": "TIMESTAMP",
"conversations_ingested": 5,
"conversations_total": 8,
"memory_files_ingested": 3,
"desktop_sessions_ingested": 2,
"audit_logs_ingested": 2
}
}
Create journal entry + update special files
Update index.md, log.md, and hot.md with one locked call:
obsidian-wiki memory sync CLAUDE_HISTORY_INGEST \
projects=<projects> conversations=<conversations> \
desktop_sessions=<desktop_sessions> audit_logs=<audit_logs> \
pages_updated=<pages_updated> pages_created=<pages_created> \
mode=<mode> \
--takeaways "Ingested 5 Claude conversations across 2 projects; surfaced patterns in API design and testing strategy."
Never hand-edit index.md, log.md, or hot.md — the command takes the lock that keeps a parallel writer from dropping your update. --takeaways is the one-line conceptual summary that used to go in Recent Activity;
omit it to leave the previous takeaways untouched.
If an ongoing project is now better understood, record the thread so the next
session picks it up: obsidian-wiki memory todo add "<thread>" --origin projects/<name>.md.
See .skills/llm-wiki/references/MEMORY.md for the full procedure.
Privacy
- Distill and synthesize — don't copy raw conversation text verbatim
- Skip anything that looks like secrets, API keys, passwords, tokens
- If you encounter personal/sensitive content, ask the user before including it
- The user's conversations may reference other people — be thoughtful about what goes in the wiki
Reference
See references/claude-data-format.md for more details on the data structures.
QMD Refresh After Vault Writes
QMD is a search index, not the source of truth. If $QMD_WIKI_COLLECTION is empty or unset, skip this step. Run it only after this skill has written or rewritten vault markdown. If QMD refresh fails, do not roll back the vault changes; report the QMD status separately.
Use $QMD_CLI if set; otherwise use qmd.
${QMD_CLI:-qmd} update
If the output says vectors are needed or embeddings may be stale, run:
${QMD_CLI:-qmd} embed
Verify the collection with either:
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"
or, when a specific page path is known:
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5
Record one of:
QMD refreshed: update + embed + verifiedQMD refreshed: update only + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>
FAQ
What does the claude-history-ingest skill do?
Ingest Claude Code conversation/session history into Obsidian as distilled knowledge. Use for importing or mining past Claude sessions, .claude data, project/session history, or audit logs.
How do I install claude-history-ingest?
Run npx skills add https://github.com/ar9av/obsidian-wiki --skill claude-history-ingest in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/claude-history-ingest/ (personal) or .claude/skills/claude-history-ingest/ (project).
Which AI agents can use claude-history-ingest?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is claude-history-ingest safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains claude-history-ingest?
It is published by ar9av in ar9av/obsidian-wiki. It has 2,978 recorded installs.
More from ar9av/obsidian-wiki
llm-wiki
ar9av/obsidian-wiki
Explain and apply the foundational LLM Wiki architecture and knowledge-management strategy. Use for setup, architecture, schema, or organization decisions; operational ingest/query/lint work uses dedicated skills.
wiki-ingest
ar9av/obsidian-wiki
Ingest new documents, raw text, folders, or URLs into the Obsidian wiki as distilled, linked knowledge. Use for general wiki ingestion when no more specific ingest skill applies, including processing raw/ staged content.
wiki-setup
ar9av/obsidian-wiki
Initialize or repair an Obsidian wiki vault's required structure and configuration. Use for new-vault setup, .env/config creation, reconfiguration, or broken setup recovery.
wiki-query
ar9av/obsidian-wiki
Search and synthesize answers from the compiled Obsidian wiki, including cited and multi-hop answers. Use for questions about existing wiki knowledge or fast index-only lookups, and for challenge requests ("challenge this", "argue against X", "poke holes in my plan") that look for the vault's own evidence against a plan. Supports named-vault routing such as wiki-query @work; not for ingesting new sources.
wiki-lint
ar9av/obsidian-wiki
Audit wiki health: broken links, orphans, contradictions, stale content, lifecycle and tag issues. Use for maintenance or health checks. Default is report-only; use wiki-dedup for page-identity merges.
wiki-status
ar9av/obsidian-wiki
Report wiki ingestion/completeness state, pending source delta, structural insights, or maintenance equilibrium. Use for remaining-work/status questions, hubs and bridges, or whether maintenance skills still have pending changes. wiki-digest summarizes learned knowledge instead.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。