Agent skill

meridian

Meridian 项目集成助手。当用户提到 Meridian、导航面板、看板配置、分析模块时触发。帮助用户通过 Claude Code 为 Meridian 仪表盘生成左侧导航、自定义面板和可视化模块。

Stars 129
Forks 41

Install this agent skill to your Project

npx add-skill https://github.com/zephyrwang6/myskill/tree/main/meridian

SKILL.md

Meridian — Obsidian AI 驾驶舱集成技能

⚠️ 核心规则

一次只创建一个面板。 用户的每条指令只请求创建一个导航面板。绝对不要一次性为所有文件夹批量生成导航。每次只创建一个组件 + 注册到 page.tsx。

什么是 Meridian

Meridian 是一个基于 Next.js 的本地 Web 应用,作为 Obsidian 知识库的可视化驾驶舱。

安装与初始化(克隆项目)

如果用户的 Obsidian Vault 中还没有 Meridian 项目代码(即找不到 05 工具箱/vault-pilot/ 目录),你需要从 GitHub 获取官方代码为你完成初次安装部署:

bash
# 进入工具箱目录拉取代码
cd "05 工具箱"
git clone https://github.com/zephyrwang6/VaultPilot.git vault-pilot
cd vault-pilot
npm install

项目位置05 工具箱/vault-pilot/(目录名为 vault-pilot,产品名为 Meridian) 启动方式cd "05 工具箱/vault-pilot" && npm run dev -- --port 3001 访问地址:http://localhost:3001

项目结构

vault-pilot/
├── app/
│   ├── page.tsx                    # 主页面(侧边栏 + 内容区)
│   ├── layout.tsx                  # 布局 + Inter 字体
│   ├── globals.css                 # 暗/浅双主题 + 玻璃态
│   ├── components/
│   │   ├── AgentPanel.tsx          # Agent 面板(CLI + .claude.md + Skills)
│   │   ├── FoldersPanel.tsx        # 文件夹面板(文件夹树 + 快捷指令)
│   │   ├── FolderAnalysisModal.tsx # 文件夹分析弹窗(4种视图)
│   │   ├── UsagePanel.tsx          # Claude Code 用量统计
│   │   ├── DynamicPanel.tsx        # 动态面板渲染器
│   │   └── Onboarding.tsx          # 首次引导绑定
│   └── api/
│       ├── config/route.ts         # 配置读写 + .claude.md
│       ├── vault/route.ts          # 文件夹结构扫描
│       ├── skills/route.ts         # Skills 库扫描
│       ├── claude/route.ts         # 打开终端执行
│       ├── pick-folder/route.ts    # 原生文件夹选择器
│       ├── folder-analysis/route.ts # 文件夹深度分析
│       └── usage/route.ts          # Claude Code 用量数据
└── lib/types.ts                    # 核心类型定义

设计参考

面板设计参考 05 工具箱/obsidian-dashboard/my-app/app/components/desktop/ 下的组件:

面板 参考文件 功能
总览 OverviewPanel.tsx 数据概况、最近文档、日程、任务
创作 ContentPanel.tsx 独立文章列表、专栏章节列表
计划 GoalsPanel.tsx 年度目标、周计划进度
复盘 ReviewPanel.tsx 本周产出统计进度条、完成任务

注意: 参考的是设计风格和功能布局。Meridian 使用自己的 CSS 类(glass-card 等),不用 shadcn/ui。数据必须从本地文件系统动态读取,不要硬编码。

CSS 设计规范

类名 用途
glass-card 玻璃态卡片容器
rounded-2xl p-5 标准卡片内边距
stat-value 大号数字
text-violet-400 主色调图标
text-muted-foreground 次要文字
bg-secondary/30 悬停/背景
stagger-children 子元素交错动画
gradient-text 渐变文字

可用 API 端点

端点 方法 说明
/api/config GET 读取配置 + .claude.md
/api/vault GET 扫描 Vault 文件夹结构
/api/folder-analysis?path=... GET 深度分析指定文件夹
/api/skills GET 读取 Skills 列表
/api/usage GET Claude Code 用量统计

创建面板工作流程

每次创建一个面板,按以下步骤:

第 1 步:读取参考

bash
# 读取 obsidian-dashboard 对应面板的设计
cat "05 工具箱/obsidian-dashboard/my-app/app/components/desktop/OverviewPanel.tsx"

第 2 步:创建组件

05 工具箱/vault-pilot/app/components/ 下创建 XxxPanel.tsx

  • 数据通过 API(/api/folder-analysis)或读文件获取
  • 必须使用 glass-card、stat-value 等 Meridian CSS 类
  • 不要用 shadcn/ui 组件

组件模板

tsx
'use client';

import { useState, useEffect } from 'react';
import { Loader2, SomeIcon } from 'lucide-react';

interface PanelProps {
  vaultPath: string;
}

export function XxxPanel({ vaultPath }: PanelProps) {
  const [data, setData] = useState<any>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(`/api/folder-analysis?path=${encodeURIComponent(vaultPath + '/目标文件夹')}`)
      .then(r => r.json())
      .then(d => { setData(d); setLoading(false); })
      .catch(() => setLoading(false));
  }, [vaultPath]);

  if (loading) return <div className="flex justify-center py-16"><Loader2 className="h-6 w-6 animate-spin text-muted-foreground" /></div>;

  return (
    <div className="space-y-5 stagger-children">
      <div className="grid grid-cols-3 gap-3">
        <div className="glass-card rounded-xl p-4">
          <div className="stat-value text-2xl">数值</div>
          <div className="text-[10px] text-muted-foreground">标签</div>
        </div>
      </div>
      <div className="glass-card rounded-2xl p-5">
        <div className="text-sm font-medium mb-3">标题</div>
        <div className="space-y-1.5">{/* 列表项 */}</div>
      </div>
    </div>
  );
}

第 3 步:注册到 page.tsx

修改 05 工具箱/vault-pilot/app/page.tsx,需要改 3 处:

tsx
// 1. 导入(在文件顶部 import 区域)
import { XxxPanel } from './components/XxxPanel';

// 2. 在 defaultNavItems 数组添加(约第 22 行)
{ id: 'xxx', label: '面板名', icon: SomeIcon },

// 3. 在 renderPanel() 的 switch 中添加 case(约第 107 行)
case 'xxx':
  return <XxxPanel vaultPath={config.vaultPath} />;

第 4 步:告知用户

完成后告知用户:已创建「XXX」面板,请刷新 http://localhost:3001 查看。

Expand your agent's capabilities with these related and highly-rated skills.

zephyrwang6/myskill

start-work

每日工作启动助手。读取Obsidian收件箱、计划文件,提醒今日待办,询问内容创作计划,展示周计划进度,调用热点采集。触发词:"开始工作"、"开启新一天"、"今天做什么"。帮助用户快速进入高效工作状态。

129 41
Explore
zephyrwang6/myskill

doc-coauthoring

Guide users through a structured workflow for co-authoring documentation, articles, or long-form content. Use when user wants to write documentation, proposals, articles, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting articles, or using "co-authoring" workflow.

129 41
Explore
zephyrwang6/myskill

mem-query

AI个人记忆系统的记忆查询功能。检索各层级记忆文件,综合多层级信息回答用户问题。使用场景:(1) 用户问"我的记忆中关于XXX"时;(2) 用户询问自己的习惯/偏好/价值观时;(3) 需要基于用户历史提供建议时。该skill会自动检索L1-L4各层级,引用来源,给出基于记忆的个性化回答。

129 41
Explore
zephyrwang6/myskill

article-review

根据原文内容撰写深度文章评价/解读。当用户提供一篇文章、博客、公众号文章或任何长文内容,并要求生成评价、解读、读后感或二次创作内容时使用此技能。适用于:(1) 对技术文章、行业分析、年终总结等进行深度解读,(2) 提炼文章核心观点并用通俗语言重新表达,(3) 为社交媒体传播生成二次内容。

129 41
Explore
zephyrwang6/myskill

mem-record

AI个人记忆系统的记忆记录功能。自动从对话中提炼关键信息并记录到相应层级。使用场景:(1) 用户说"记录到记忆系统"、"记住这个"、"把这次对话记下来"时;(2) 检测到重要事件、决策、偏好表达时;(3) 用户完成重要任务或做出决策时。该skill会自动判断应该记录到L1情境层、L2行为层、L3认知层,还是建议更新L4核心层。

129 41
Explore
zephyrwang6/myskill

remotion-video

使用 Remotion 框架以编程方式创建视频。Remotion 让你用 React 组件定义视频内容,支持动画、字幕、音乐可视化、3D 视频、教程讲解视频等。适用于程序化视频、批量生成、数据驱动视频、音乐可视化、自动字幕等场景。

129 41
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results