{"id":51230924,"url":"https://github.com/walker83/ontobuddy","last_synced_at":"2026-06-28T16:01:54.893Z","repository":{"id":367061266,"uuid":"1269336337","full_name":"walker83/ontobuddy","owner":"walker83","description":"ontology + buddy","archived":false,"fork":false,"pushed_at":"2026-06-24T10:45:16.000Z","size":212,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-24T12:21:23.974Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/walker83.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-14T15:33:57.000Z","updated_at":"2026-06-24T10:45:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/walker83/ontobuddy","commit_stats":null,"previous_names":["walker83/ontobuddy"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/walker83/ontobuddy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2Fontobuddy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2Fontobuddy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2Fontobuddy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2Fontobuddy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/walker83","download_url":"https://codeload.github.com/walker83/ontobuddy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2Fontobuddy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34894560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-28T16:01:51.446Z","updated_at":"2026-06-28T16:01:54.885Z","avatar_url":"https://github.com/walker83.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## 这是什么\n\nmyonto 是一个命令行工具，帮你把脑子里的知识结构化成一个**本体（ontology）**：\n- 定义**类**（Person、Project、Idea…）\n- 添加**实体**（isaac-newton、my-project-2024…）\n- 建立实体之间的**关系**（knows、partOf、inspired…）\n\n所有数据遵循 W3C RDF 标准，存为 `.ttl` 文件。你可以 git 跟踪它的变化、用文本编辑器直接修改、或导入到 Protégé / Apache Jena / rdflib 等标准工具。\n\n## 3 种使用模式\n\nmyonto 同时支持 3 种入口，**按使用场景选**：\n\n| 模式 | 入口 | 适合 |\n|---|---|---|\n| **TUI 模式** | `myonto tui` | 人类用户，菜单+表单式交互 |\n| **CLI 模式** | `myonto \u003c子命令\u003e [flags]` | 老手、脚本、远程登录 |\n| **Skills 模式** | 被 Claude Code / Codex 等 Agent 加载 | LLM 自然语言调用 |\n\n### 1. TUI 模式（人类友好）\n\n```bash\nmyonto tui          # 进入主菜单（list/search/add/link/reason/graph/ai/setup）\n```\n\n主菜单用 huh（charmbracelet）渲染，支持上下键选择 + 回车确认。无需背任何命令。\n\n### 2. CLI 模式（老手/脚本）\n\n```bash\nmyonto init\nmyonto entity add isaac-newton -t Person -d \"英国数学家、物理学家\"\nmyonto link isaac-newton knows leibniz\nmyonto list                          # 人类可读\nmyonto list --json                   # 程序可读\n```\n\n`--json` 是**全局 flag**，所有 read 类命令（`list`/`search`/`show`）都支持。\n\n### 3. Skills 模式（LLM 调用）\n\n```bash\nmake install-skills   # 把 skills/myonto/ 复制到 ~/.claude/skills/myonto/\n```\n\n之后 Claude Code / Codex / 其他 Agent 启动时会**自动加载** myonto 的 Skill。LLM 看到用户说\"记住 X 是个 Y\"、\"列出所有 Person\"、\"给 aristotle 总结一下\"等请求时，**自动调用 `myonto` 命令**。\n\nSKILL 描述（Anthropic 协议唯一触发入口）：\n\n\u003e \"CLI for managing a personal RDF/OWL ontology (entity-relationship knowledge graph stored as Turtle). Use when creating/editing/listing typed entities, linking them with predicates, querying or searching the graph, running RDFS/OWL inference, generating interactive visualizations, or invoking LLM-assisted ontology maintenance. Trigger on 'remember', 'what do I know about', 'add an entity', ...\"\n\n详细命令参考在 `skills/myonto/references/commands.md`，安装后 LLM 也会读。\n\n## 数据分析能力\n\n建好本体后，myonto 提供 4 类分析（详见 [`docs/analysis.md`](docs/analysis.md)）：\n\n| 能力 | 命令 | 典型用途 |\n|---|---|---|\n| **推理物化** | `myonto reason -a` | subClassOf/domain/range/传递属性自动补全隐含事实 |\n| **闭包查询** | `myonto closure \u003ce\u003e -p \u003cpred\u003e` | 影响面分析（\"改了 X，影响哪些？\"），支持反向 `-r` |\n| **最短路径** | `myonto path \u003ca\u003e \u003cb\u003e` | 关系解释（\"A 和 B 怎么关联上的？\"） |\n| **聚合查询** | `myonto query -w \"?s a ?o\" -g \"?o\" -c` | 按类型分组计数、Top-N、JOIN（SPARQL 子集，含推导知识） |\n| **一致性检查** | `myonto check` | 检测 `owl:disjointWith` 等约束违反，`--strict` 可做 CI 门禁 |\n\n所有分析命令支持 `--json` 全局 flag，便于脚本/LLM 消费。\n\n## 3 分钟上手（向导式）\n\n```bash\nmkdir my-knowledge \u0026\u0026 cd my-knowledge\nmyonto init   # 首次运行会自动启动 TUI 向导，问几个问题完成设置\n```\n\n向导会问你：\n1. 命名空间 IRI（用默认 `http://example.org/` 就好）\n2. 命名空间前缀（默认 `ex`）\n3. 是否现在配置 LLM（选「是」则继续选供应商、隐藏输入 API key）\n4. 是否复制示例本体（`philosophers.ttl`，方便试玩）\n\n不用背任何参数。已有配置想改？跑 `myonto config setup` 重新走一遍。\n\n在非 TTY 环境（CI、管道、远程 shell）自动回退到参数模式，`myonto init -i ... -p ...` 仍可用。\n\n---\n\n## 快速上手（3 分钟）\n\n### 第 1 步：安装\n\n```bash\ngit clone \u003c本项目\u003e MyOntopo \u0026\u0026 cd MyOntopo\nmake setup      # 配置 Go 国内镜像（首次必做）\nmake link       # 编译并创建全局符号链接\n```\n\n完成后，`myonto` 命令在任意目录都可用。验证：\n\n```bash\nmyonto version\n# 输出：myonto dev (P0+P1)\n```\n\n\u003e 如果提示找不到命令，把 `~/.local/bin` 加进 PATH：\n\u003e ```bash\n\u003e echo 'export PATH=\"$HOME/.local/bin:$PATH\"' \u003e\u003e ~/.zshrc \u0026\u0026 source ~/.zshrc\n\u003e ```\n\n### 第 2 步：创建你的第一个本体\n\n```bash\nmkdir my-knowledge \u0026\u0026 cd my-knowledge\nmyonto init\n```\n\n输出：\n```\n已初始化本体库：/Users/you/my-knowledge\n  配置文件：.myonto.toml\n  数据文件：ontology.ttl\n  命名空间：ex \u003chttp://example.org/\u003e\n```\n\n### 第 3 步：定义类、添加实体、建立关系\n\n```bash\n# 定义一个类\nmyonto entity add-class Person -d \"一个人类\"\nmyonto entity add-class Scientist -p Person -d \"科学家（Person 的子类）\"\n\n# 添加实体\nmyonto entity add isaac-newton -t Scientist -d \"英国数学家、物理学家\"\nmyonto entity add leibniz     -t Scientist -d \"德国数学家\"\n\n# 建立关系\nmyonto link isaac-newton knows leibniz\nmyonto link leibniz     knows isaac-newton\nmyonto link isaac-newton bornIn 1643 -l    # -l 表示宾语是字面量\n\n# 浏览\nmyonto list\nmyonto search newton\nmyonto entity show isaac-newton\n```\n\n---\n\n## 核心概念\n\n### 实体（Entity）vs 类（Class）\n\n- **类**是\"种类\"，如 `Person`、`Scientist`、`Project`。类之间可以继承（`Scientist` 是 `Person` 的子类）。\n- **实体**是具体的\"东西\"，如 `isaac-newton`、`leibniz`。每个实体可以属于一个或多个类。\n\n### 关系（Relation / Triple）\n\nmyonto 用 **RDF 三元组** 描述一切：\n\n```\n\u003c主语\u003e  \u003c谓词\u003e  \u003c宾语\u003e\nisaac-newton  knows  leibniz\nisaac-newton  bornIn  1643\n```\n\n`myonto link \u003c主语\u003e \u003c谓词\u003e \u003c宾语\u003e` 就是在添加一条三元组。谓词可以是任意你自定义的关系名（`knows`、`partOf`、`inspired`、`worksOn`…）。\n\n### 命名空间（Namespace）\n\n每个实体都有一个全局唯一的 IRI（类似 URL）。myonto 默认用 `http://example.org/` 作为基础，所以 `isaac-newton` 的完整 IRI 是 `http://example.org/isaac-newton`。\n\n写 Turtle 时用前缀缩写：`ex:isaac-newton`。你可以在 `myonto init -i \u003c你的IRI\u003e` 时换成自己的命名空间。\n\n---\n\n## 命令参考\n\n\u003e 任何命令加 `-h` 或 `--help` 看完整帮助，例如 `myonto entity add -h`。\n\n### `myonto init`\n在当前目录初始化本体库。\n```bash\nmyonto init [-i BASE_IRI] [-p PREFIX] [--data-file FILE] [-f]\n```\n- `-i`：命名空间基础 IRI，默认 `http://example.org/`\n- `-p`：命名空间前缀，默认 `ex`\n- `-f`：已存在时强制覆盖\n\n### `myonto entity` — 实体管理\n\n| 子命令 | 说明 | 示例 |\n|---|---|---|\n| `add` | 添加个体 | `myonto entity add 牛顿 -t Person -d \"物理学家\" -g 重要 -g 历史` |\n| `add-class` | 添加类 | `myonto entity add-class Scientist -p Person` |\n| `list` | 列出实体 | `myonto entity list -t Person` |\n| `show` | 查看详情 | `myonto entity show isaac-newton` |\n| `edit` | 修改 | `myonto entity edit isaac-newton -d \"新描述\"` |\n| `rm` | 删除 | `myonto entity rm leibniz -f` |\n\n**`entity add` 参数：**\n- `NAME`（必填）：实体名，会被 slug 化（`Isaac Newton` → `isaac-newton`）\n- `-t CLASS`：类型，可省略\n- `-d TEXT`：描述\n- `-g TAG`：标签，可重复（`-g 重要 -g 历史`）\n\n### `myonto link` — 建立关系\n```bash\nmyonto link \u003c主语\u003e \u003c谓词\u003e \u003c宾语\u003e [-l] [--label TEXT]\n```\n- `\u003c谓词\u003e`：任意关系名，如 `knows` / `partOf` / `inspired`\n- `-l`：宾语当字面量（字符串），而非实体 IRI\n- `--label`：给谓词附人类可读名\n\n示例：\n```bash\nmyonto link isaac-newton knows leibniz           # 实体 → 实体\nmyonto link isaac-newton bornIn 1643 -l          # 实体 → 字面量\nmyonto link newton calculus invented --label \"发明了\"\n```\n\n### `myonto unlink` — 删除关系\n```bash\nmyonto unlink \u003c主语\u003e \u003c谓词\u003e \u003c宾语\u003e [-l] [-a]\n```\n- `-a`：通配宾语，删除该 `\u003c主语\u003e \u003c谓词\u003e` 的所有三元组\n\n### `myonto search` — 全文搜索\n```bash\nmyonto search \u003c关键词\u003e [-t CLASS]\n```\n在 local name / `rdfs:label` / `rdfs:comment` 上做子串匹配。\n\n### `myonto list` — 列出全部\n`myonto entity list` 的快捷别名。\n\n---\n\n## 典型工作流\n\n### 场景 1：建立读书笔记本体\n\n```bash\nmkdir books \u0026\u0026 cd books\nmyonto init -i \"http://mybooks.org/\" -p book\n\nmyonto entity add-class Book -d \"一本书\"\nmyonto entity add-class Author -d \"作者\"\nmyonto entity add-class Topic -d \"主题\"\n\nmyonto entity add-Class Philosophy    # 主题类\nmyonto entity add-class Philosophy -t Topic\n\nmyonto entity add thinking-fast-slow -t Book -d \"《思考，快与慢》\"\nmyonto entity add daniel-kahneman -t Author -d \"丹尼尔·卡尼曼，诺贝尔经济学奖得主\"\n\nmyonto link thinking-fast-slow writtenBy daniel-kahneman\nmyonto link thinking-fast-slow about psychology\n\nmyonto search kahneman\nmyonto entity show thinking-fast-slow\n```\n\n### 场景 2：项目管理本体\n\n```bash\nmkdir projects \u0026\u0026 cd projects\nmyonto init -i \"http://myproj.org/\" -p proj\n\nmyonto entity add-class Project -d \"项目\"\nmyonto entity add-class Task -p Project -d \"任务（项目的子类）\"\nmyonto entity add-class Person\n\nmyonto entity add myonto-app -t Project -d \"个人本体管理工具\"\nmyonto entity add walker -t Person -d \"开发者\"\n\nmyonto link myonto-app hasOwner walker\nmyonto link myonto-app status \"进行中\" -l\nmyonto link myonto-app deadline \"2024-12-31\" -l\n```\n\n### 场景 3：导入示例本体\n\n本项目 `examples/` 目录提供了可运行的样例：\n\n```bash\ncp examples/philosophers.ttl .\nmyonto list\nmyonto search aristotle\n```\n\n---\n\n## 数据文件长什么样\n\n所有数据存在 `ontology.ttl`，是标准 Turtle 格式，例如：\n\n```turtle\n@prefix ex: \u003chttp://example.org/\u003e .\n@prefix rdfs: \u003chttp://www.w3.org/2000/01/rdf-schema#\u003e .\n@prefix rdf: \u003chttp://www.w3.org/1999/02/22-rdf-syntax-ns#\u003e .\n\nex:Person rdf:type rdfs:Class ;\n    rdfs:label \"Person\" ;\n    rdfs:comment \"一个人类\" .\n\nex:Scientist rdfs:subClassOf ex:Person ;\n    rdfs:comment \"科学家\" .\n\nex:isaac-newton rdfs:label \"isaac-newton\" ;\n    rdfs:comment \"英国数学家、物理学家\" ;\n    rdf:type ex:Scientist ;\n    ex:knows ex:leibniz .\n```\n\n可以直接用 `cat` 查看、用 git diff 跟踪变化、用编辑器手动修改。\n\n---\n\n## 配置文件 `.myonto.toml`\n\n```toml\nbase_iri  = \"http://example.org/\"   # 本地命名空间基础 IRI\ndata_file = \"ontology.ttl\"           # 数据文件名\nprefix    = \"ex\"                     # 命名空间前缀\n\n[llm]                                # AI 辅助功能（ai summarize/extract/suggest/qa）\nbase_url = \"https://api.deepseek.com/v1\"   # 任何 OpenAI 兼容端点\napi_key  = \"sk-...\"                         # 也可读 $MYONTO_LLM_API_KEY\nmodel    = \"deepseek-chat\"                 # 也可读 $MYONTO_LLM_MODEL\n```\n\n\u003e 没配置 `[llm]` 时 `ai` 命令会清晰报错，不影响其他命令使用。\n\n---\n\n## 开发\n\n```bash\nmake setup      # 配置 Go 镜像（首次）\nmake build      # 编译到 ./bin/myonto\nmake test       # 跑单测\nmake vet        # 静态检查\nmake fmt        # 格式化\nmake link       # 全局安装（符号链接，重编译后自动生效）\nmake unlink     # 卸载符号链接\nmake cross-compile   # 交叉编译多平台\n```\n\n深入文档见 [`docs/`](docs/)：\n- [数据模型与命名空间](docs/data-model.md)\n- [Turtle 格式速查](docs/turtle.md)\n- [与外部 RDF 工具互通](docs/interop.md)\n- [FAQ](docs/faq.md)\n\n---\n\n## 技术栈\n\n| 层 | 选型 |\n|---|---|\n| 语言 | Go 1.22+ |\n| CLI | [Kong](https://github.com/alecthomas/kong) |\n| RDF 读写 | 自实现轻量 Turtle 读写层（`internal/rdf`），覆盖 W3C Turtle 子集 |\n| 配置 | [go-toml/v2](https://github.com/pelletier/go-toml) |\n\n## 工具链地址\n\n\u003e 完整的 Agent 元信息（含上游 Go 生态、依赖包 URL、调用约定、安全模型）见本项目根目录的 **[`AGENTS.md`](AGENTS.md)**。\n\u003e 本节是给人类读的快速概览。\n\n### 本项目\n\n| 资源 | 地址 |\n|---|---|\n| Gitea 仓库 | https://github.com/walker83/ontobuddy |\n| Git 远程 | `https://github.com/walker83/ontobuddy.git` |\n| 二进制（全局） | `~/.local/bin/myonto`（`make link` 创建） |\n| 二进制（本地） | `./bin/myonto` |\n| Skills 安装路径 | `~/.claude/skills/myonto/` |\n\n### 上游 Go 生态\n\n| 资源 | 地址 |\n|---|---|\n| Go 工具链 | `https://mirrors.aliyun.com/golang/` |\n| Go 模块代理 | `https://goproxy.cn,direct` |\n| 备用模块代理 | `https://mirrors.aliyun.com/goproxy/` |\n| 校验和 | `sum.golang.google.cn` |\n\n### 直接依赖\n\n| 包 | 版本 | 用途 |\n|---|---|---|\n| `github.com/alecthomas/kong` | v1.15.0 | CLI 解析 |\n| `github.com/charmbracelet/huh` | v1.0.0 | TUI 向导 |\n| `github.com/pelletier/go-toml/v2` | v2.3.1 | TOML 解析 |\n| `golang.org/x/crypto` | latest | scrypt（KDF） |\n| `golang.org/x/term` | latest | 终端密码隐藏 |\n\n### 集成目标\n\n| 平台 | 接入点 |\n|---|---|\n| Claude Code | `make install-skills` → 复制到 `~/.claude/skills/myonto/` |\n| 其他 Agent | 按各平台规范放置 skills |\n\n---\n\n## 路线图\n\n- ✅ **P0** 骨架：init + Turtle 读写 + Store\n- ✅ **P1** CRUD：entity / link / unlink / search\n- ✅ **P2** 推理 + 可视化\n  - `reason`（RDFS/OWL 轻量规则推理：subClassOf 传递、类型继承、TransitiveProperty、SymmetricProperty、inverseOf）\n  - `graph`（vis-network 力导向图 HTML，自动打开浏览器，支持 `--include-pred` 过滤）\n- ✅ **P3** AI 辅助（需配置 `[llm]`，默认 dry-run）\n  - `ai summarize \u003centity\u003e`：LLM 归纳实体的所有三元组\n  - `ai extract \"\u003c文本\u003e\"`：从自然语言抽取实体与关系（生成 Turtle 草稿）\n  - `ai suggest-relations \u003centity\u003e`：基于上下文让 LLM 建议可能的新关系\n  - `ai qa \"\u003c问题\u003e\"`：基于本体的问答\n- ✅ **P4** 安全 + 兼容\n  - API key 加密（机器指纹 + scrypt + AES-256-GCM，加密 token 存盘）\n  - 4 个内置 LLM provider（alibaba-coding / openai / deepseek / ollama）\n  - Anthropic Messages 协议（阿里云 DashScope 兼容）\n  - `myonto config llm set-key/show/test/list-providers` 子命令\n- ✅ **P5** TUI 向导\n  - `myonto init` 首次启动 huh 向导（多步表单 + 隐藏 key + 动态跳过）\n  - `myonto config setup` 重走向导\n- ✅ **P6** 三种使用模式 + LLM 集成\n  - **CLI 模式**：老手 / 脚本使用\n  - **TUI 模式**：`myonto tui` 主菜单（list/search/add/link/reason/graph/ai/setup/quit）\n  - **Skills 模式**：Anthropic Skills 标准（`make install-skills` 安装到 `~/.claude/skills/myonto/`）\n  - **`--json` 全局 flag**：`list`/`search`/`show`/`reason`/`ai` 全部支持 LLM 可解析的结构化输出\n- ⬜ **P7** 跨平台 release（`make cross-compile` 已就位）\n\n## 推理示例\n\n```bash\n# 在 philosophers 示例上跑推理\nmyonto reason          # dry-run 展示 5 条新推论（5 位哲学家都属于 Person）\nmyonto reason -a       # 物化到本体\nmyonto reason          # 再跑 → \"已饱和\"\n```\n\n`reason` 内置 6 条规则：subClassOf 传递、类型继承、subPropertyOf 传递、属性继承、传递属性、对称属性、inverseOf。详见 `internal/reasoning/`。\n\n## 可视化示例\n\n```bash\nmyonto graph                        # 生成 ontology-graph.html，自动打开浏览器\nmyonto graph -o my-graph.html       # 自定义输出\nmyonto graph --include-pred knows   # 只画 knows 关系\n```\n\n生成的 HTML 是单文件，vis-network 9.x 从 CDN 加载（首次需联网），之后浏览器缓存可用。\n\n## AI 示例\n\n```bash\n# 1. 在 .myonto.toml 配置 [llm]，或用环境变量：\nexport MYONTO_LLM_BASE_URL=\"https://api.deepseek.com/v1\"\nexport MYONTO_LLM_API_KEY=\"sk-...\"\nexport MYONTO_LLM_MODEL=\"deepseek-chat\"\n\n# 2. 跑 AI 命令（默认 dry-run，审视输出后再 -a 写回）\nmyonto ai summarize isaac-newton\nmyonto ai extract \"苏格拉底是柏拉图的老师，柏拉图教了亚里士多德\"\nmyonto ai suggest-relations aristotle\nmyonto ai qa \"牛顿是哪个国家的人？\"\n```\n\n支持任何 OpenAI 兼容端点：OpenAI、DeepSeek、智谱、Ollama（本地）、LM Studio 等。\n\n## 许可\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalker83%2Fontobuddy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalker83%2Fontobuddy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalker83%2Fontobuddy/lists"}