Token导航 LogoToken导航

Agent Skill · 研究检索

secondme-reference(第二我参考)

secondme-reference 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

secondme-reference 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证信息还不明确,第三方扫描有提醒项,按安装量在研究检索类的 73,675 个 Skill 里排第 31,031。

总安装 2,775周安装 118GitHub Stars 19下载 972核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:secondme-reference(第二我参考)
来源仓库:https://github.com/mindverse/second-me-skills
仓库路径:skills/secondme-reference
安装命令:
npx skills add https://github.com/mindverse/second-me-skills --skill secondme-reference
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/mindverse/second-me-skills --skill secondme-reference

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

secondme-reference 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。它可协助基于关键词或上下文生成检索策略,筛选相关资源或内容,支持研究类任务的信息组织。

通过 npx skills add 命令从指定仓库安装,具体用法请参考原始 README 和项目文档。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写操作。适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

来源仓库内路径:skills/secondme-reference

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/mindverse/second-me-skills --skill secondme-re…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

secondme-reference 怎么安装?

在终端执行 npx skills add https://github.com/mindverse/second-me-skills --skill secondme-reference。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

secondme-reference 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

secondme-reference 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

secondme-reference 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

secondme-reference 用的人多吗?

公开数据是累计安装 2,775 次,近一周安装 118 次,下载 972 次,GitHub 19 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

secondme-reference 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
secondme-reference

第二我参考 · 本页

2,77519接触敏感数据未明确有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

SecondMe API 技术参考

本文档包含 SecondMe API 的完整技术参考信息,供开发时查阅。


API 基础 URL

https://api.mindverse.com/gate/lab

OAuth2 授权 URL

https://go.second.me/oauth/

OAuth2 流程

1. 用户点击登录 → 跳转到 SecondMe 授权页面
2. 用户授权 → 重定向回你的应用(带 authorization_code)
3. 后端用 code 换取 access_token 和 refresh_token
4. 使用 access_token 调用 SecondMe API
5. Token 过期时使用 refresh_token 刷新

授权 URL 构造

重要:oauth_url 已包含完整路径,直接在后面拼接 ? 和查询参数即可,不要追加 /authorize 等路径。

const OAUTH_URL = 'https://go.second.me/oauth/';

const params = new URLSearchParams({
  client_id: process.env.SECONDME_CLIENT_ID,
  redirect_uri: process.env.SECONDME_REDIRECT_URI,
  response_type: 'code',
  state: generatedState,
});

// ✅ 正确:直接拼接 ? 和参数
const authUrl = `${OAUTH_URL}?${params.toString()}`;
// 结果: https://go.second.me/oauth/?client_id=...&redirect_uri=...

// ❌ 错误:不要追加 /authorize 等路径
// const authUrl = `${OAUTH_URL}/authorize?${params}`;
// 会变成: https://go.second.me/oauth//authorize?... ❌

Token 交换(用授权码换 Token)

端点

POST {base_url}/api/oauth/token/code

请求格式

Content-Type 必须是 application/x-www-form-urlencoded,不是 JSON。

const response = await fetch(`${API_BASE_URL}/api/oauth/token/code`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',  // 必须
  },
  body: new URLSearchParams({
    grant_type: 'authorization_code',
    code: authorizationCode,
    redirect_uri: process.env.SECONDME_REDIRECT_URI,
    client_id: process.env.SECONDME_CLIENT_ID,
    client_secret: process.env.SECONDME_CLIENT_SECRET,
  }),
});

响应格式

响应遵循统一包装格式,字段使用 camelCase(不是 OAuth2 标准的 snake_case):

{
  "code": 0,
  "data": {
    "accessToken": "lba_at_xxxxx...",
    "refreshToken": "lba_rt_xxxxx...",
    "tokenType": "Bearer",
    "expiresIn": 7200,
    "scope": ["user.info", "chat"]
  }
}

响应处理

const result = await response.json();

// 必须检查 code 字段
if (result.code !== 0 || !result.data) {
  throw new Error(`Token exchange failed: ${result.message}`);
}

// 从 data 中提取,使用 camelCase
const { accessToken, refreshToken, expiresIn } = result.data;

Token 刷新

端点

POST {base_url}/api/oauth/token/refresh

请求格式

const response = await fetch(`${API_BASE_URL}/api/oauth/token/refresh`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: new URLSearchParams({
    grant_type: 'refresh_token',
    refresh_token: storedRefreshToken,
    client_id: process.env.SECONDME_CLIENT_ID,
    client_secret: process.env.SECONDME_CLIENT_SECRET,
  }),
});

响应格式与 Token 交换一致。


Token 有效期

Token 类型前缀有效期
授权码lba_ac_5 分钟
Access Tokenlba_at_2 小时
Refresh Tokenlba_rt_30 天

MCP Bearer Token 与用户解析

如果 SecondMe 以用户态调用你的 MCP,平台会在 MCP 请求的 Authorization header 中传入当前用户的 access token:

Authorization: Bearer <accessToken>

这个 token 不是静态应用密钥,而是当前触发 MCP 的 SecondMe 用户身份。

推荐实现方式参考 SemeCompat:

  1. MCP 服务端或 API 路由读取 Authorization header
  2. 解析出 bearer token,缺失或格式错误时直接返回 401
  3. 用该 token 调用上游 user/info 接口识别当前 SecondMe 用户
  4. 用上游用户 id 映射到本地 users.oauth_id 或等价外部 id
  5. 查不到时自动 upsert 本地用户
  6. 用解析出的本地 user.id 执行业务逻辑

推荐分层

  • App API 层:负责 bearer token 鉴权、解析 SecondMe 用户、映射本地用户、校验资源归属
  • MCP server / transport 层:负责 MCP tool 暴露和把 Authorization header 原样透传到站内 API
  • 业务服务层:只接收已解析的本地用户 id,不直接处理 bearer token

Bearer Token 读取示例

function readBearerToken(request: Request): string | null {
  const header = request.headers.get('authorization');
  if (!header?.startsWith('Bearer ')) {
    return null;
  }
  return header.slice('Bearer '.length).trim() || null;
}

本地用户解析流程示例

export async function requireApiAuth(request: Request): Promise<AuthUser> {
  const accessToken = readBearerToken(request);
  if (!accessToken) {
    throw new Error('UNAUTHORIZED');
  }

  const userInfo = await getUserInfo(accessToken);
  const user = await upsertUserByOauthProfile({
    oauthId: userInfo.id,
    nickname: userInfo.nickname,
    avatar: userInfo.avatar || null,
    accessToken,
  });

  return toAuthUser(user);
}

MCP Server 透传示例

const authorization = request.headers.authorization || null;
await authStorage.run({ authorization }, async () => {
  await transport.handleRequest(request, response, parsedBody);
});

如果 MCP server 再去调用站内 HTTP API,继续透传这个 header:

await fetch(`${baseUrl}/api/mcp/compat/random`, {
  method: 'POST',
  headers: {
    Authorization: accessToken,
    Accept: 'application/json',
  },
});

常见实现错误

  • 把 bearer token 当成全局 API key 使用,没有解析当前用户
  • 直接在 MCP server 里访问数据库,绕过应用现有鉴权和资源归属检查
  • 没有把上游用户映射到本地用户,导致业务层拿不到稳定的本地 user id
  • token 无效时返回 500,而不是明确的 401
  • 查询他人资源时没有做用户归属校验

推荐错误码

场景推荐状态码
token 缺失或无效401
资源不属于当前用户403
目标资源不存在404
输入不合法400
其他未处理异常500

推荐测试项

  • bearer token 缺失时拒绝请求
  • bearer token 无效时映射为 401
  • 现有上游用户能够解析并同步最新 access token
  • 新上游用户能够自动 upsert 到本地用户表
  • MCP server 调用站内 API 时会原样透传 Authorization
  • 资源归属错误时返回 403

权限列表(Scopes)

权限说明
user.info用户基础信息
user.info.shades用户兴趣标签
user.info.softmemory用户软记忆
note.add添加笔记
chat聊天功能
chat结构化动作判断(Act)

API 响应格式与处理

重要:所有 SecondMe API 响应都遵循统一格式:

{
  "code": 0,
  "data": { ... }  // 实际数据在 data 字段内
}

前端代码必须正确提取数据:

// 注意:以下 /api/secondme/... 是 Next.js 本地路由(由 secondme-nextjs skill 生成),
// 本地路由会代理请求到上游 SecondMe API,并透传上游的响应格式。

// ❌ 错误写法 - 直接使用响应会导致 .map is not a function
const response = await fetch('/api/secondme/user/shades');  // Next.js 本地路由
const shades = await response.json();
shades.map(item => ...)  // 错误!

// ✅ 正确写法 - 提取 data 字段内的数据
const response = await fetch('/api/secondme/user/shades');  // Next.js 本地路由
const result = await response.json();
if (result.code === 0) {
  const shades = result.data.shades;  // 正确!
  shades.map(item => ...)
}

各 API 的数据路径

以下路径均为上游 SecondMe API 路径,完整 URL = {base_url}/api/secondme{path} 其中 base_url 来自 state.api.base_url(默认 https://api.mindverse.com/gate/lab)
上游 API 路径数据路径类型
/api/secondme/user/inforesult.dataobject(含 email, name, avatarUrl, route 等字段)
/api/secondme/user/shadesresult.data.shadesarray
/api/secondme/user/softmemoryresult.data.listarray
/api/secondme/chat/session/listresult.data.sessionsarray
/api/secondme/chat/session/messagesresult.data.messagesarray
/api/secondme/act/streamSSE 流式 JSON(需拼接 delta)SSE stream
/api/secondme/note/addresult.data.noteIdnumber
/api/secondme/agent_memory/ingestresult.data.eventId / result.data.isDuplicateobject

Act API(结构化动作判断)

Act API 是独立于 Chat API 的接口,约束模型仅输出合法 JSON 对象,适用于情感分析、意图分类等结构化决策场景。权限使用 chat scope。

端点(上游 API)

POST {base_url}/api/secondme/act/stream

请求参数

参数类型必需说明
messagestring是用户消息内容
actionControlstring是动作控制说明(20-8000 字符),定义 JSON 结构与判断规则
appIdstring否应用 ID
sessionIdstring否会话 ID,不提供则自动生成
systemPromptstring否系统提示词,仅新会话首次有效

actionControl 示例

仅输出合法 JSON 对象,不要解释。
输出结构:{"is_liked": boolean}。
当用户明确表达喜欢或支持时 is_liked=true,否则 is_liked=false。

响应格式(SSE)

event: session
data: {"sessionId": "labs_sess_xxx"}

data: {"choices": [{"delta": {"content": "{\"is_liked\": true}"}}]}

data: [DONE]

前端处理示例

// 调用 Act API 进行结构化判断(通过 Next.js 本地路由代理到上游)
const response = await fetch('/api/secondme/act/stream', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    message: userMessage,
    actionControl: '仅输出合法 JSON。结构:{"intent": "like"|"dislike"|"neutral"}。根据用户表达判断意图。信息不足时返回 {"intent": "neutral"}。'
  })
});

// 拼接 SSE 流中的 delta content,最终 JSON.parse 得到结果

Chat vs Act 使用场景

场景使用 API原因
自由对话/chat/stream返回自然语言文本
情感/意图判断/act/stream返回结构化 JSON
是/否决策/act/stream返回 {"result": boolean}
多分类判断/act/stream返回 {"category": "..."}
内容生成/chat/stream需要长文本输出

Agent Memory API(事件上报与查询)

Agent Memory API 用于将用户在外部平台的行为事件上报到 Agent Memory Ledger,丰富 AI 分身的记忆。认证方式与其他 SecondMe API 一致(OAuth2 Token),不需要特定 scope。

上报端点

POST {base_url}/api/secondme/agent_memory/ingest

请求参数

参数类型必需说明
channelChannelInfo是频道信息
actionstring是动作类型
refsRefItem[]是证据指针数组(至少 1 项)
actionLabelstring否动作展示文案
displayTextstring否用户可读摘要
eventDescstring否开发者描述
eventTimeinteger否事件时间戳(毫秒)
importancenumber否重要性 0.0~1.0
idempotencyKeystring否幂等键
payloadobject否扩展信息

嵌套类型

ChannelInfo: {kind: string, id?: string, url?: string, meta?: object}

platform 由服务端根据应用 Client ID 自动填充,前端无需传入。

RefItem: {objectType: string, objectId: string, type?: string, url?: string, contentPreview?: string, snapshot?: RefSnapshot}

RefSnapshot: {text: string, capturedAt?: number, hash?: string}

幂等键生成规则

前端应生成幂等键防止重复上报(参照 plaza 前端实现):

// 规则: sha256("external:" + objectType + ":" + objectId)
// 注意:platform 和 userId 由后端自动填充,前端无需关心
import { sha256 } from 'some-hash-lib';

function generateIdempotencyKey(objectType: string, objectId: string): string {
  return sha256(`external:${objectType}:${objectId}`);
}

常见 action 类型

action说明典型场景
post_created发帖用户在广场发布新帖子
reply回帖用户回复某个帖子
ai_replyAI 回帖AI 分身自动回复帖子
find_people找人用户搜索其他用户
replied被回帖用户的帖子被他人回复
post_viewed看帖用户浏览帖子
user_liked点赞用户点赞某内容
liked被赞用户的内容被他人点赞

响应格式

{
  "code": 0,
  "data": {
    "eventId": 123,
    "isDuplicate": false
  }
}

前端集成示例(TypeScript)

interface ChannelInfo {
  kind: string;
  id?: string;
  url?: string;
  meta?: Record<string, unknown>;
}

interface RefItem {
  objectType: string;
  objectId: string;
  type?: string;
  url?: string;
  contentPreview?: string;
  snapshot?: { text: string; capturedAt?: number; hash?: string };
}

interface IngestPayload {
  channel: ChannelInfo;
  action: string;
  refs: RefItem[];
  actionLabel?: string;
  displayText?: string;
  eventTime?: number;
  importance?: number;
  idempotencyKey?: string;
  payload?: Record<string, unknown>;
}

async function reportAgentMemory(token: string, event: IngestPayload) {
  const response = await fetch(`${API_BASE_URL}/api/secondme/agent_memory/ingest`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(event),
  });
  const result = await response.json();
  if (result.code !== 0) {
    throw new Error(`Ingest failed: ${result.message}`);
  }
  return result.data; // { eventId: number, isDuplicate: boolean }
}

错误码

错误码HTTP说明
agent_memory.write.disabled403用户的 Agent Memory 写入已禁用
agent_memory.ingest.failed502上报失败

开发注意事项

State 参数

直接忽略 state 参数验证。 在回调处理时不需要验证 state,直接处理授权码即可。

CSS @import 规则顺序

重要: 在 CSS 文件中,@import 语句必须放在文件的最开头(只能在 @charset 和 @layer 之后)。如果在其他 CSS 规则之后使用 @import,会导致解析错误。

/* 正确写法 - @import 放在最前面 */
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC&display=swap');

:root {
  --primary-color: #000;
}

/* 错误写法 - @import 不能放在其他规则之后 */
:root {
  --primary-color: #000;
}
@import url('...'); /* 这会报错! */

官方文档链接

平台分布

Codex

36.74%
按下载量换算357

Claude

32.22%
按下载量换算313

Cursor

16.75%
按下载量换算163

Gemini CLI

8.39%
按下载量换算82

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills