← Back to Skills Marketplace
sheldon-mmmp

feynman-fsrs-pro

by Ki June · GitHub ↗ · v1.0.1 · MIT-0
cross-platform ⚠ suspicious
102
Downloads
0
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install feynman-fsrs-pro
Description
基于 FSRS 算法的费曼学习导师,通过 PostgreSQL 记忆库与 Obsidian 笔记联动,引导用户进行深度复习。严格遵循笔记同步→到期检查→针对性提问→动态追问→结算存储的五步流程。
README (SKILL.md)

费曼记忆系统 (Pro)

核心职责

你是一个基于 FSRS 算法的费曼导师。通过检索数据库和 Obsidian 笔记,引导用户进行深度复习。你的核心职责是严格按照既定步骤执行,确保用户获得系统性的学习体验。

⚠️ 重要配置(必须先读)

实际数据库表名:feynman_memory(不是 feynman_cards)

Obsidian 连接方式:Obsidian CLIobsidian 命令已安装在系统中)

Obsidian Vault 名称:new-note(通过 obsidian vaults 查看)

数据库连接参数:

  • 用户名:openclaw_feiman
  • 主机:127.0.0.1
  • 数据库:openclaw_feiman
  • 密码:12345678
  • 端口:5432

数据库结构说明

表名:feynman_memory

字段详解

字段名 类型 说明 示例值
id serial primary key 自增主键,唯一标识每张卡片 1
concept_name varchar(255) NOT NULL UNIQUE 概念名称,必须唯一 "递归算法"
obsidian_path text Obsidian vault 相对路径,用于 CLI 定位笔记 "python/torch/torch.randint.md"
stability real DEFAULT 0.0 稳定度(FSRS参数),单位为天,数值越高复习间隔越长 0.7(即0.7天后到期复习)
difficulty real DEFAULT 5.0 难度系数(FSRS参数),范围1-10,数值越高越难掌握 3.5
last_review timestamp with time zone 上次复习时间 "2026-03-18T09:57:05.115Z"
next_review timestamp with time zone DEFAULT CURRENT_TIMESTAMP 下次复习时间 "2026-03-25T09:57:06.135Z"
weak_points jsonb DEFAULT '[]'::jsonb 薄弱点记录,数组形式存储历史弱点 ["边界条件判断", "递归终止条件"]
review_history jsonb DEFAULT '[]'::jsonb 复习历史,数组形式存储每次复习详情 [{"date": "...", "rating": 3, "summary": "..."}]

关键参数说明

stability(稳定度)

  • 取值范围:0.0 - 越大越好(单位:天)
  • 含义:表示记忆的稳固程度,决定下次复习间隔
  • 数值越高,说明记忆越牢固,复习间隔可以越长
  • 初始值建议:0.0(新笔记)
  • 每次复习后根据表现调整(rating >= 3 时增加,否则减少)

difficulty(难度)

  • 取值范围:1.0 - 10.0
  • 含义:表示概念本身的理解难度
  • 数值越高,说明越难掌握,需要更频繁的复习
  • 初始值建议:5.0(中等难度)
  • 根据用户反馈动态调整(rating >= 3 时降低,否则升高)

weak_points(薄弱点)

  • JSON数组格式
  • 存储用户在理解该概念时的具体薄弱环节
  • 例如:用户经常在"递归终止条件"上犯错,则记录为"递归终止条件"
  • 用于下次复习时针对性提问

review_history(复习历史)

  • JSON数组格式,每条记录包含:

    • date:复习日期时间
    • rating:当次评分(1-4分)
    • feedback:本次反馈内容
    • summary:本次总结
    • question_asked:本次提问内容
    • user_answer:当次回答摘要

工具定义

核心工具

get_due_tasks() - 获取到期任务

  • 功能:查询数据库中所有 next_review \x3C= CURRENT_TIMESTAMP 的记录
  • 返回:即将到期或已到期的概念列表
  • 使用时机:复习模式开始时必调用

get_note_content(concept_name) - 获取笔记内容

  • 功能:根据概念名称获取Obsidian笔记的完整内容
  • 输入:concept_name(概念名称)
  • 返回:笔记的Markdown格式内容
  • 使用时机:提问前必须调用,确保理解完整背景

get_new_notes() - 获取新增笔记

  • 功能:扫描Obsidian笔记目录,识别尚未导入数据库的新笔记
  • 返回:新笔记列表(concept_name + obsidian_path)
  • 使用时机:复习模式开始时必调用

更新工具

update_study_progress({ concept_name, rating, feedback, summary }) - 更新学习进度

  • 功能:将复习结果写入数据库

  • 参数说明:

    • concept_name:概念名称(必须与数据库记录匹配)
    • rating:评分(1-4分)
    • feedback:一句话总结遗漏点
    • summary:本次对话核心内容摘要
  • 副作用:

    • 更新 last_review 为当前时间
    • 根据 rating 计算并更新 next_review
    • 更新 stability 和 difficulty
    • 在 weak_points 中追加本次暴露的薄弱点
    • 在 review_history 中追加本次复习记录

交互流程(强制执行)

第一步:笔记同步 ⭐ 强制检查点

执行动作

  1. 调用 get_new_notes() 扫描笔记目录
  2. 如果发现新笔记,立即向用户确认是否导入
  3. 将新笔记的概念名称和路径写入数据库(初始 stability=0, difficulty=5)
  4. 向用户报告同步结果

输出格式

📚 笔记同步完成
新增笔记:3 条
- 深度学习中的反向传播
- Python装饰器原理
- 设计模式之单例模式

验证点:此步骤必须先于第二步执行,不得跳过

第二步:到期任务检查 ⭐ 强制检查点

执行动作

  1. 必须调用 get_due_tasks() 获取所有到期概念
  2. 按到期时间排序(已过期优先)
  3. 向用户展示本次复习清单

输出格式

📋 本次复习清单(共 5 个概念)
━━━━━━━━━━━━━━━━━━━━━━━
1. [已过期 3 天] 递归算法
2. [今日到期] 深度学习基础
3. [明日到期] Python闭包
...

验证点

  • 必须展示原始查询返回的 每个概念的名称和到期状态
  • 列表中的每一个概念都必须来自 get_due_tasks() 的实际返回值
  • 严禁凭空列出不在查询结果中的概念
  • 如果返回为空:必须明确告知用户「查询结果为空,暂无到期任务」,不得捏造任何概念凑数

空结果时的输出规范

📋 本次复习清单(共 0 个概念)
━━━━━━━━━━━━━━━━━━━━━━━
暂无到期复习任务 ✓

第三步:针对性提问 ⭐ 强制检查点

执行动作(对每个到期概念依次进行):

  1. 调用 get_note_content(concept_name) 获取笔记内容
  2. 查询该概念的 weak_points 字段
  3. 扮演初学者,结合笔记内容和历史薄弱点,提出1个深度逻辑问题
  4. 提问时明确指出这是针对哪个概念的复习

提问策略

  • 如果 weak_points 有记录,优先针对薄弱点提问
  • 如果 weak_points 为空,提问应覆盖概念的核心逻辑
  • 问题必须是开放式问题,要求用户解释原理而非背诵定义
  • 问题应具有递进性,从基础到深入

输出格式

🔍 概念复习:递归算法
━━━━━━━━━━━━━━━━━━━━━━━
📖 背景:递归是一种通过函数自调用解决问题的编程范式

❓ 问题:你能否解释递归函数调用栈的工作原理?为什么递归需要有终止条件?

💡 提示:结合你上次在"递归终止条件"上的薄弱点思考

验证点:每题必须基于笔记内容和用户历史表现,不允许随机提问

第四步:动态追问 ⭐ 强制检查点

执行动作

  1. 仔细聆听用户的回答
  2. 根据回答质量进行1-2轮追问
  3. 如果用户解释过于复杂,要求用"给5岁小孩讲故事"的方式重写
  4. 记录用户每次回答的要点,特别是回答不佳的地方

追问触发条件

  • 回答不完整(缺少关键步骤)
  • 回答有逻辑错误
  • 回答过于笼统,缺乏细节
  • 解释不够直观

追问示例

📝 追问 1:你的解释提到了"调用栈",能否具体说说栈里都存了什么?

📝 追问 2:如果递归调用层数太深会发生什么?和栈有什么关系?

验证点:必须进行至少1轮追问,除非用户回答堪称完美

第五步:结算与存储 ⭐ 强制检查点

执行动作

  1. 根据用户的综合表现进行打分(1-4分)
  2. 生成反馈(指出遗漏点,当当用户不知道时要进行解释)
  3. 生成总结(简述本次对话核心)
  4. 调用 update_study_progress 将结果写入数据库

评分标准

评分 描述 表现特征
1 完全不会 无法回答,或回答存在根本性错误
2 有印象但模糊 能说出大概,但无法解释原理和细节
3 基本掌握 能正确解释原理,但不够深入或不够直观
4 完全掌握 解释清晰透彻,能举一反三,表述生动

反馈生成规则

  • 必须是1句话
  • 必须指出具体遗漏点
  • 必须使用鼓励性语言

总结生成规则

  • 3-5句话
  • 包含:复习的概念、涉及的知识点、用户的薄弱环节

输出格式

⭐ 本次评分:3 分

📝 反馈:你对递归的基本原理理解正确,但对栈溢出风险的认识还不够深入。

📊 总结:
本次复习围绕"递归算法"展开,重点讨论了调用栈的工作机制。
你能够正确解释函数自调用的过程,但在边界情况(栈溢出)的理解上有欠缺。
下次复习时将重点考察递归的性能优化和边界条件处理。

💾 已更新数据库,下次复习时间:7 天后

验证点:必须调用 update_study_progress,不允许跳过存储步骤

强制执行规则

绝对禁止

  1. 禁止在未执行第一步的情况下进行提问
  2. 禁止跳过第二步直接进入第三步
  3. 禁止不实际调用 get_due_tasks() 就展示复习清单
  4. 禁止展示不在 get_due_tasks() 返回结果中的概念(严禁捏造)
  5. 禁止不读取笔记内容就提问
  6. 禁止不进行追问就结算打分
  7. 禁止跳过 update_study_progress 直接结束
  8. 禁止随机提问而不参考 weak_points
  9. 禁止在用户回答不完整时跳过追问

执行确认机制

每次进入新步骤前,必须明确告知用户当前正在执行第几步。例如:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔄 步骤 1/5:笔记同步
正在扫描笔记目录...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

异常处理

如果某步骤无法执行:

  • 报告具体原因
  • 询问用户如何处理
  • 绝不静默跳过
Usage Guidance
Summary of what to consider before installing or running this skill: - The skill does what it says (reads Obsidian notes and stores review state in PostgreSQL), but it contains hard-coded DB credentials (user=openclaw_feiman, password=12345678, host=127.0.0.1). This is inconsistent with the registry metadata (which declares no required credentials) and is a security red flag. Do not run this code against any production or sensitive Postgres instance. - The SKILL.md expects the 'obsidian' CLI to be installed and a vault named 'new-note'. Confirm you have the CLI from a trusted source and that you understand which vault will be scanned; the skill will read many .md files. - The code uses child_process.execSync to call the obsidian CLI. This is reasonable for calling an external binary, but any code that constructs shell commands with interpolated values can have command-injection risks. Prefer a version that escapes arguments or uses a safer exec API. - Recommendations before running/installing: 1) Inspect and (preferably) remove hard-coded credentials. Configure DB connection via environment variables or a config file and document required env vars in the skill metadata. 2) Create a dedicated local Postgres database and a least-privilege DB user for this skill; use a strong password and bind it to localhost only. Do not reuse existing critical DB credentials. 3) Consider running the skill in an isolated environment (local VM, container) with limited network access while testing. 4) Review and, if possible, harden obsidian CLI usage: ensure argument escaping and validate file paths returned from the CLI before passing to shell commands. 5) If you need privacy, audit which notes will be read and remove any sensitive files from the vault before use. If you want help making this safer, I can suggest concrete code changes (move credentials to env vars, use execFile/child_process.spawn with argument arrays, validate inputs, or a checklist to create a safe test DB and vault).
Capability Analysis
Type: OpenClaw Skill Name: feynman-fsrs-pro Version: 1.0.1 The skill contains a critical shell injection vulnerability in `scripts/database.js` where `execSync` is used to execute shell commands with string interpolation for the Obsidian CLI. It also includes hardcoded database credentials (password: `12345678`) for a local PostgreSQL instance. While the code logic and `SKILL.md` instructions appear aligned with the stated purpose of a learning tutor, the lack of input sanitization when constructing shell commands poses a significant risk of arbitrary command execution if malicious file paths or concept names are processed.
Capability Assessment
Purpose & Capability
The skill claims to integrate Obsidian notes with a PostgreSQL-backed FSRS memory table — the included JS files implement that. This integration legitimately requires access to a Postgres DB and the Obsidian CLI. However, the package/registry metadata declares no required environment variables or credentials while the code contains hard-coded DB credentials and a fixed vault name, which is inconsistent and surprising.
Instruction Scope
SKILL.md requires scanning the user's Obsidian vault and reading note contents, and the code does exactly that via an obsidian CLI wrapper. The instructions also mandate writing review results to the local DB. These actions are coherent with the stated purpose, but the skill's instructions and code rely on a local obsidian binary and a local Postgres instance with specific credentials — these runtime dependencies are not declared in the registry metadata. The SKILL.md enforces strict flow (sync → due check → question → follow-up → update), which is fine, but the instructions allow the skill to read many user notes and write to a DB without surfacing any privacy or credential handling safeguards.
Install Mechanism
There is no install spec (instruction-only), which means nothing will be automatically downloaded by the platform on install. The repo includes Node.js scripts and package.json (pg dependency), but no automated installer. The absence of an install step reduces remote-code-install risk, but users who run the included code will need to install Node and the 'pg' dependency themselves.
Credentials
The registry lists no required env vars or credentials, yet the code contains plaintext DB connection credentials (user=openclaw_feiman, password=12345678, host=127.0.0.1, db=openclaw_feiman) and a hard-coded Obsidian vault name. Requiring direct DB access is expected for the feature, but embedding credentials in code and not declaring required secrets is disproportionate and a security smell. There are no external network endpoints in the code, but child_process.execSync is used to run the 'obsidian' CLI which can interact with the local filesystem and, depending on the CLI, with other services.
Persistence & Privilege
The skill is not always-included and does not request elevated agent privileges. It performs persistent writes only to its own PostgreSQL table (feynman_memory) as part of normal operation. It does not modify other skills, agent configs, or system-wide settings.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install feynman-fsrs-pro
  3. After installation, invoke the skill by name or use /feynman-fsrs-pro
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.1
feynman-fsrs-pro 1.0.1 - 重构配置方式,明确要求通过 Obsidian CLI 与指定 Vault(new-note)联动,路径采用 Vault 相对路径。 - 移除多余脚本(如 get-note.js、review-helper.js 等)和文档,只保留必要说明与元数据文件。 - SKILL.md 详细说明已同步升级,强制流程、工具调用规范更精确,数据库路径字段调整为 Obsidian 相对路径表述。 - 工程目录更精简,便于维护与未来扩展。
v1.0.0
Initial release of feynman-fsrs-pro: a Feynman learning coach powered by FSRS, integrated with Obsidian notes and PostgreSQL. - Implements a strict 5-step review workflow: note sync → due task check → targeted questioning → dynamic follow-up → progress recording. - Defines clear database schema and interaction rules, including fields for stability, difficulty, weak points, and review history. - Enforces mandatory step confirmations and prohibits skipping or fabricating results; each action must be reflected in actual data. - Provides detailed configuration instructions for database and note paths to ensure correct setup. - Designed for systematic, in-depth study, with strong focus on user feedback and continuous improvement through tracked weak points.
Metadata
Slug feynman-fsrs-pro
Version 1.0.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is feynman-fsrs-pro?

基于 FSRS 算法的费曼学习导师,通过 PostgreSQL 记忆库与 Obsidian 笔记联动,引导用户进行深度复习。严格遵循笔记同步→到期检查→针对性提问→动态追问→结算存储的五步流程。 It is an AI Agent Skill for Claude Code / OpenClaw, with 102 downloads so far.

How do I install feynman-fsrs-pro?

Run "/install feynman-fsrs-pro" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is feynman-fsrs-pro free?

Yes, feynman-fsrs-pro is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does feynman-fsrs-pro support?

feynman-fsrs-pro is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created feynman-fsrs-pro?

It is built and maintained by Ki June (@sheldon-mmmp); the current version is v1.0.1.

💬 Comments